mirror of
https://github.com/PyCQA/flake8.git
synced 2026-03-30 10:46:54 +00:00
70 lines
2.8 KiB
ReStructuredText
70 lines
2.8 KiB
ReStructuredText
====================================
|
|
Receiving Information For A Plugin
|
|
====================================
|
|
|
|
Plugins to Flake8 have a great deal of information that they can request from
|
|
a :class:`~flake8.processor.FileProcessor` instance. Historically, Flake8 has
|
|
supported two types of plugins:
|
|
|
|
#. classes that accept parsed abstract syntax trees (ASTs)
|
|
|
|
#. functions that accept a range of arguments
|
|
|
|
Flake8 now does not distinguish between the two types of plugins. Any plugin
|
|
can accept either an AST or a range of arguments. Further, any plugin that has
|
|
certain callable attributes can also register options and receive parsed
|
|
options.
|
|
|
|
|
|
Indicating Desired Data
|
|
=======================
|
|
|
|
Flake8 inspects the plugin's signature to determine what parameters it expects
|
|
using :func:`flake8.utils.parameters_for`.
|
|
:attr:`flake8.plugins.manager.Plugin.parameters` caches the values so that
|
|
each plugin makes that fairly expensive call once per plugin. When processing
|
|
a file, a plugin can ask for any of the following:
|
|
|
|
- :attr:`~flake8.processor.FileProcessor.blank_before`
|
|
- :attr:`~flake8.processor.FileProcessor.blank_lines`
|
|
- :attr:`~flake8.processor.FileProcessor.checker_state`
|
|
- :attr:`~flake8.processor.FileProcessor.indect_char`
|
|
- :attr:`~flake8.processor.FileProcessor.indent_level`
|
|
- :attr:`~flake8.processor.FileProcessor.line_number`
|
|
- :attr:`~flake8.processor.FileProcessor.logical_line`
|
|
- :attr:`~flake8.processor.FileProcessor.max_line_length`
|
|
- :attr:`~flake8.processor.FileProcessor.multiline`
|
|
- :attr:`~flake8.processor.FileProcessor.noqa`
|
|
- :attr:`~flake8.processor.FileProcessor.previous_indent_level`
|
|
- :attr:`~flake8.processor.FileProcessor.previous_logical`
|
|
- :attr:`~flake8.processor.FileProcessor.tokens`
|
|
- :attr:`~flake8.processor.FileProcessor.total_lines`
|
|
- :attr:`~flake8.processor.FileProcessor.verbose`
|
|
|
|
Alternatively, a plugin can accept ``tree`` and ``filename``.
|
|
``tree`` will be a parsed abstract syntax tree that will be used by plugins
|
|
like PyFlakes and McCabe.
|
|
|
|
|
|
Registering and Parsing Options
|
|
===============================
|
|
|
|
Any plugin that has callable attributes ``provide_options`` and
|
|
``register_options`` can parse option information and register new options.
|
|
|
|
Your ``register_options`` function should expect to receive an instance of
|
|
|OptionManager|. An |OptionManager| instance behaves very similarly to
|
|
:class:`optparse.OptionParser`. It, however, uses the layer that Flake8 has
|
|
developed on top of :mod:`optparse` to also handle configuration file parsing.
|
|
:meth:`~flake8.options.manager.OptionManager.add_option` creates an |Option|
|
|
which accepts the same parameters as :mod:`optparse` as well as three extra
|
|
boolean parameters:
|
|
|
|
- ``parse_from_config``
|
|
- ``comma_separated_list``
|
|
- ``normalize_paths``
|
|
|
|
|
|
.. substitutions
|
|
.. |OptionManager| replace:: :class:`~flake8.options.manager.OptionManager`
|
|
.. |Option| replace:: :class:`~flake8.options.manager.Option`
|