diff options
author | Anthony Sottile <asottile@umich.edu> | 2021-11-14 08:17:04 -0800 |
---|---|---|
committer | Anthony Sottile <asottile@umich.edu> | 2021-11-14 08:17:04 -0800 |
commit | 7e5d6501c12aae8ba1126c4c39337ca27c92dd74 (patch) | |
tree | f4f19d3d1cb9efba72a36361ffafce5a66f01c62 | |
parent | 382cc91040d2aa7523d808c03c678ae9f6b68482 (diff) | |
download | flake8-7e5d6501c12aae8ba1126c4c39337ca27c92dd74.tar.gz |
remove mentions of flake8-polyfill
-rw-r--r-- | docs/source/plugin-development/cross-compatibility.rst | 187 | ||||
-rw-r--r-- | docs/source/plugin-development/index.rst | 1 | ||||
-rw-r--r-- | docs/source/requirements.txt | 1 |
3 files changed, 0 insertions, 189 deletions
diff --git a/docs/source/plugin-development/cross-compatibility.rst b/docs/source/plugin-development/cross-compatibility.rst deleted file mode 100644 index 07c84e3..0000000 --- a/docs/source/plugin-development/cross-compatibility.rst +++ /dev/null @@ -1,187 +0,0 @@ -==================================== - Writing Plugins For Flake8 2 and 3 -==================================== - -Plugins have existed for |Flake8| 2.x for a few years. There are a number of -these on PyPI already. While it did not seem reasonable for |Flake8| to attempt -to provide a backwards compatible shim for them, we did decide to try to -document the easiest way to write a plugin that's compatible across both -versions. - -.. note:: - - If your plugin does not register options, it *should* Just Work. - -The **only two** breaking changes in |Flake8| 3.0 is the fact that we no -longer check the option parser for a list of strings to parse from a config -file and we no longer patch pep8 or pycodestyle's ``stdin_get_value`` -functions. On |Flake8| 2.x, to have an option parsed from the configuration -files that |Flake8| finds and parses you would have to do something like: - -.. code-block:: python - - parser.add_option('-X', '--example-flag', type='string', - help='...') - parser.config_options.append('example-flag') - -For |Flake8| 3.0, we have added *three* arguments to the -:meth:`~flake8.options.manager.OptionManager.add_option` method you will call -on the parser you receive: - -- ``parse_from_config`` which expects ``True`` or ``False`` - - When ``True``, |Flake8| will parse the option from the config files |Flake8| - finds. - -- ``comma_separated_list`` which expects ``True`` or ``False`` - - When ``True``, |Flake8| will split the string intelligently and handle - extra whitespace. The parsed value will be a list. - -- ``normalize_paths`` which expects ``True`` or ``False`` - - When ``True``, |Flake8| will: - - * remove trailing path separators (i.e., ``os.path.sep``) - - * return the absolute path for values that have the separator in them - -All three of these options can be combined or used separately. - - -Parsing Options from Configuration Files -======================================== - -The example from |Flake8| 2.x now looks like: - -.. code-block:: python - - parser.add_option('-X', '--example-flag', type='string', - parse_from_config=True, - help='...') - - -Parsing Comma-Separated Lists -============================= - -Now let's imagine that the option we want to add is expecting a comma-separatd -list of values from the user (e.g., ``--select E123,W503,F405``). |Flake8| 2.x -often forced users to parse these lists themselves since pep8 special-cased -certain flags and left others on their own. |Flake8| 3.0 adds -``comma_separated_list`` so that the parsed option is already a list for -plugin authors. When combined with ``parse_from_config`` this means that users -can also do something like: - -.. code-block:: ini - - example-flag = - first, - second, - third, - fourth, - fifth - -And |Flake8| will just return the list: - -.. code-block:: python - - ["first", "second", "third", "fourth", "fifth"] - - -Normalizing Values that Are Paths -================================= - -Finally, let's imagine that our new option wants a path or list of paths. To -ensure that these paths are semi-normalized (the way |Flake8| 2.x used to -work) we need only pass ``normalize_paths=True``. If you have specified -``comma_separated_list=True`` then this will parse the value as a list of -paths that have been normalized. Otherwise, this will parse the value -as a single path. - - -Option Handling on Flake8 2 and 3 -================================= - -To ease the transition, the |Flake8| maintainers have released -`flake8-polyfill`_. |polyfill| provides a convenience function to help users -transition between Flake8 2 and 3 without issue. For example, if your plugin -has to work on Flake8 2.x and 3.x but you want to take advantage of some of -the new options to ``add_option``, you can do - -.. code-block:: python - - from flake8_polyfill import options - - - class MyPlugin(object): - @classmethod - def add_options(cls, parser): - options.register( - parser, - '--application-names', default='', type='string', - help='Names of the applications to be checked.', - parse_from_config=True, - comma_separated_list=True, - ) - options.register( - parser, - '--style-name', default='', type='string', - help='The name of the style convention you want to use', - parse_from_config=True, - ) - options.register( - parser, - '--application-paths', default='', type='string', - help='Locations of the application code', - parse_from_config=True, - comma_separated_list=True, - normalize_paths=True, - ) - - @classmethod - def parse_options(cls, parsed_options): - cls.application_names = parsed_options.application_names - cls.style_name = parsed_options.style_name - cls.application_paths = parsed_options.application_paths - -|polyfill| will handle these extra options using *callbacks* to the option -parser. The project has direct replications of the functions that |Flake8| -uses to provide the same functionality. This means that the values you receive -should be identically parsed whether you're using Flake8 2.x or 3.x. - -.. autofunction:: flake8_polyfill.options.register - - -Standard In Handling on Flake8 2.5, 2.6, and 3 -============================================== - -After releasing |Flake8| 2.6, handling standard-in became a bit trickier for -some plugins. |Flake8| 2.5 and earlier had started monkey-patching pep8's -``stdin_get_value`` function. 2.6 switched to pycodestyle and only -monkey-patched that. 3.0 has its own internal implementation and uses that but -does not directly provide anything for plugins using pep8 and pycodestyle's -``stdin_get_value`` function. |polyfill| provides this functionality for -plugin developers via its :mod:`flake8_polyfill.stdin` module. - -If a plugin needs to read the content from stdin, it can do the following: - -.. code-block:: python - - from flake8_polyfill import stdin - - stdin.monkey_patch('pep8') # To monkey-patch only pep8 - stdin.monkey_patch('pycodestyle') # To monkey-patch only pycodestyle - stdin.monkey_patch('all') # To monkey-patch both pep8 and pycodestyle - - -Further, when using ``all``, |polyfill| does not require both packages to be -installed but will attempt to monkey-patch both and will silently ignore the -fact that pep8 or pycodestyle is not installed. - -.. autofunction:: flake8_polyfill.stdin.monkey_patch - - -.. links -.. _flake8-polyfill: https://pypi.org/project/flake8-polyfill/ - -.. |polyfill| replace:: ``flake8-polyfill`` diff --git a/docs/source/plugin-development/index.rst b/docs/source/plugin-development/index.rst index 241e49f..c89e5f0 100644 --- a/docs/source/plugin-development/index.rst +++ b/docs/source/plugin-development/index.rst @@ -62,7 +62,6 @@ Here's a tutorial which goes over building an ast checking plugin from scratch: registering-plugins plugin-parameters formatters - cross-compatibility .. _entry points: diff --git a/docs/source/requirements.txt b/docs/source/requirements.txt index aa123b8..cfcfbdf 100644 --- a/docs/source/requirements.txt +++ b/docs/source/requirements.txt @@ -1,5 +1,4 @@ sphinx>=1.3.0,!=3.1.0 sphinx_rtd_theme sphinx-prompt -flake8-polyfill docutils!=0.18 |