3.8.0 -- 2020-05-11
-------------------

You can view the `3.8.0 milestone`_ on GitLab for more details.

Bugs Fixed
~~~~~~~~~~

- Fix logical checks which report positions out of bounds (See also
  `GitLab!422`_, `GitLab#635`_)

- Fix ``--exclude=.*`` accidentally matching ``.`` and ``..`` (See also
  `GitLab!424`_, `GitLab#632`_)

Deprecations
~~~~~~~~~~~~

- Add deprecation message for vcs hooks (See also `GitLab!420`_,
  `GitLab#568`_)


3.8.0a2 -- 2020-04-24
---------------------

You can view the `3.8.0 milestone`_ on GitLab for more details.

Bugs Fixed
~~~~~~~~~~

- Fix ``type="str"`` optparse options (See also `GitLab!419`_)


3.8.0a1 -- 2020-04-24
---------------------

You can view the `3.8.0 milestone`_ on GitLab for more details.

New Dependency Information
~~~~~~~~~~~~~~~~~~~~~~~~~~

- Remove dependency on ``entrypoints`` and add dependency on
  ``importlib-metadata`` (only for ``python<3.8``) (See also `GitLab!388`_,
  `GitLab#569`_)

- Pyflakes has been updated to >= 2.2.0, < 2.3.0 (See also `GitLab!417`_)

- pycodestyle has been updated to >= 2.6.0a1, < 2.7.0 (See also `GitLab!418`_)

Features
~~~~~~~~

- Add ``--extend-exclude`` option to add to ``--exclude`` without overwriting
  (See also `GitLab!315`_, `GitLab#535`_)

- Move argument parsing from ``optparse`` to ``argparse`` (See also
  `GitLab!341`_

- Group plugin options in ``--help`` (See also `GitLab!342`_, `GitLab#565`_)

- Remove parsing of ``verbose`` from configuration files as it was not
  consistently applied (See also `GitLab!360`_, `GitLab#439`_)

- Remove parsing of ``output_file`` from configuration files as it was not
  consistently applied (See also `GitLab!361`_)

- Resolve configuration files relative to ``cwd`` instead of common prefix of
  passed filenames.  You may need to change ``flake8 subproject`` to
  ``cd subproject && flake8 .`` (See also `GitLab!363`_)

- Officially support python3.8 (See also `GitLab!377`_)

- ``--disable-noqa`` now also disables ``# flake8: noqa`` (See also
  `GitLab!380`_, `GitLab#590`_)

- Ensure that a missing file produces a ``E902`` error (See also `GitLab!404`_,
  `GitLab#600`_)

- ``# noqa`` comments now apply to all of the lines in an explicit ``\``
  continuation or in a line continued by a multi-line string (See also
  `GitLab!413`_, `GitLab#375`_)

Bugs Fixed
~~~~~~~~~~

- Fix ``--exclude=./t.py`` to only match ``t.py`` at the top level (See also
  `GitLab!311`_, `GitLab#382`_)

- Fix ``--show-source`` when a file is indented with tabs (See also
  `GitLab!339`_, `GitLab#563`_)

- Fix crash when ``--max-line-length`` is given a non-integer (See also
  `GitLab!341`_, `GitLab#541`_)

- Prevent flip-flopping of ``indent_char`` causing extra ``E101`` errors (See
  also `GitLab!357`_, `pycodestyle#886`_)

- Only enable multiprocessing when the method is ``fork`` fixing issues
  on macos with python3.8+ (See also `GitLab!366`_, `GitLab#587`_) (note: this
  fix also landed in 3.7.9)

- ``noqa`` is now only handled by flake8 fixing specific-noqa.  Plugins
  requesting this parameter will always receive ``False`` (See also
  `GitLab!331`_, `GitLab#552`_)

- Fix duplicate loading of plugins when invoked via ``python -m flake8`` (See
  also `GitLab!388`_)

- Fix early exit when ``--exit-zero`` and ``--diff`` are provided and the diff
  is empty (See also `GitLab!391`_)

- Consistently split lines when ``\f`` is present when reading from stdin (See
  also `GitLab!406`_, `GitLab#270`_)

Deprecations
~~~~~~~~~~~~

- ``python setup.py flake8`` (setuptools integration) is now deprecated and
  will be removed in a future version (See also `GitLab!330`_, `GitLab#544`_)

- ``type='string'`` (optparse) types are deprecated, use
  ``type=callable`` (argparse) instead.  Support for ``type='string'`` will
  be removed in a future version (See also `GitLab!341`_)

- ``%default`` in plugin option help text is deprecated, use ``%(default)s``
  instead.  Support for ``%default`` will be removed in a future version (See
  also `GitLab!341`_)

- optparse-style ``action='callback'`` setting for options is deprecated, use
  argparse action classes instead.  This will be removed in a future version
  (See also `GitLab!341`_)


.. all links
.. _3.8.0 milestone:
    https://gitlab.com/pycqa/flake8/-/milestones/32

.. merge request links
.. _GitLab#270:
   https://gitlab.com/pycqa/flake8/-/issues/270
.. _GitLab#375:
   https://gitlab.com/pycqa/flake8/-/issues/375
.. _GitLab#382:
   https://gitlab.com/pycqa/flake8/-/issues/382
.. _GitLab#439:
   https://gitlab.com/pycqa/flake8/-/issues/439
.. _GitLab#535:
   https://gitlab.com/pycqa/flake8/-/issues/535
.. _GitLab#541:
   https://gitlab.com/pycqa/flake8/-/issues/541
.. _GitLab#544:
   https://gitlab.com/pycqa/flake8/-/issues/544
.. _GitLab#552:
   https://gitlab.com/pycqa/flake8/-/issues/552
.. _GitLab#563:
   https://gitlab.com/pycqa/flake8/-/issues/563
.. _GitLab#565:
   https://gitlab.com/pycqa/flake8/-/issues/565
.. _GitLab#568:
   https://gitlab.com/pycqa/flake8/-/issues/568
.. _GitLab#569:
   https://gitlab.com/pycqa/flake8/-/issues/569
.. _GitLab#587:
   https://gitlab.com/pycqa/flake8/-/issues/587
.. _GitLab#590:
   https://gitlab.com/pycqa/flake8/-/issues/590
.. _GitLab#600:
   https://gitlab.com/pycqa/flake8/-/issues/600
.. _GitLab#632:
   https://gitlab.com/pycqa/flake8/-/issues/632
.. _GitLab#635:
   https://gitlab.com/pycqa/flake8/-/issues/635
.. _pycodestyle#886:
   https://github.com/PyCQA/pycodestyle/issues/886

.. issue links
.. _GitLab!311:
   https://gitlab.com/pycqa/flake8/-/merge_requests/311
.. _GitLab!315:
   https://gitlab.com/pycqa/flake8/-/merge_requests/315
.. _GitLab!330:
   https://gitlab.com/pycqa/flake8/-/merge_requests/330
.. _GitLab!331:
   https://gitlab.com/pycqa/flake8/-/merge_requests/331
.. _GitLab!339:
   https://gitlab.com/pycqa/flake8/-/merge_requests/339
.. _GitLab!341:
   https://gitlab.com/pycqa/flake8/-/merge_requests/341
.. _GitLab!342:
   https://gitlab.com/pycqa/flake8/-/merge_requests/342
.. _GitLab!357:
   https://gitlab.com/pycqa/flake8/-/merge_requests/357
.. _GitLab!360:
   https://gitlab.com/pycqa/flake8/-/merge_requests/360
.. _GitLab!361:
   https://gitlab.com/pycqa/flake8/-/merge_requests/361
.. _GitLab!363:
   https://gitlab.com/pycqa/flake8/-/merge_requests/363
.. _GitLab!366:
   https://gitlab.com/pycqa/flake8/-/merge_requests/366
.. _GitLab!377:
   https://gitlab.com/pycqa/flake8/-/merge_requests/377
.. _GitLab!380:
   https://gitlab.com/pycqa/flake8/-/merge_requests/380
.. _GitLab!388:
   https://gitlab.com/pycqa/flake8/-/merge_requests/388
.. _GitLab!391:
   https://gitlab.com/pycqa/flake8/-/merge_requests/391
.. _GitLab!404:
   https://gitlab.com/pycqa/flake8/-/merge_requests/404
.. _GitLab!406:
   https://gitlab.com/pycqa/flake8/-/merge_requests/406
.. _GitLab!413:
   https://gitlab.com/pycqa/flake8/-/merge_requests/413
.. _GitLab!417:
   https://gitlab.com/pycqa/flake8/-/merge_requests/417
.. _GitLab!418:
   https://gitlab.com/pycqa/flake8/-/merge_requests/418
.. _GitLab!419:
   https://gitlab.com/pycqa/flake8/-/merge_requests/419
.. _GitLab!420:
   https://gitlab.com/pycqa/flake8/-/merge_requests/420
.. _GitLab!422:
   https://gitlab.com/pycqa/flake8/-/merge_requests/422
.. _GitLab!424:
   https://gitlab.com/pycqa/flake8/-/merge_requests/424
