接收檢查插件的信息?

插件到 Flake8 他們可以從 FileProcessor 實例。歷史上, Flake8 支持兩種類型的插件:

  1. 接受解析的抽象語法樹(AST)的類

  2. 接受一系列參數的函數

Flake8 現在不區分這兩種類型的插件。任何插件都可以接受AST或一系列參數。此外,任何具有特定可調用屬性的插件也可以注冊選項并接收解析的選項。

指示所需數據?

Flake8 使用插件參數來確定它期望什么 flake8.utils.parameters_for() . flake8.plugins.manager.Plugin.parameters 緩存這些值,以便每個插件對每個插件進行一次相當昂貴的調用。在處理文件時,插件可以請求以下任何一項:

有些屬性是為插件在數據上迭代而不是在每一條物理或邏輯行上被調用的每個文件設置一次。

這些參數也可以分別提供給在每一行上工作的插件。

依賴于 physical_linelogical_line 在每個物理或邏輯行上運行一次。這些參數應該是參數列表中的第一個參數(除了 self ). 需要AST的插件(例如PyFlakes和McCabe)應該依賴于 tree . 這些插件將每個文件運行一次。上面列出的參數可以與 physical_line , logical_linetree .

注冊選項?

任何具有可調用屬性的插件 add_optionsparse_options 可以解析選項信息并注冊新選項。

你的 add_options 函數應預期接收 OptionManager . 安 OptionManager 實例的行為與 optparse.OptionParser . 但是,它使用的層 Flake8 已經在 argparse 同時處理配置文件解析。 add_option() 創建一個 Option 它接受與相同的參數 optparse 以及三個額外的布爾參數:

  • parse_from_config

    命令行選項也應該從 Flake8 .

    注解

    它代替了將字符串附加到 optparse.OptionParser .

  • comma_separated_list

    提供給此選項的值是逗號分隔的列表。在分析了該值之后,應該將其進一步分解為一個列表。這也允許我們處理如下值:

    E123,E124,
    E125,
      E126
    
  • normalize_paths

    提供給此選項的值是路徑。它應該規范化為絕對路徑。這可以與 comma_separated_list 允許以逗號分隔的路徑列表。

每個選項都可以單獨工作,也可以組合使用。讓我們看看 Flake8 . 在每個例子中,我們都有 option_manager 這是 OptionManager .

option_manager.add_option(
    '--max-line-length', type='int', metavar='n',
    default=defaults.MAX_LINE_LENGTH, parse_from_config=True,
    help='Maximum allowed line length for the entirety of this run. '
         '(Default: %(default)s)',
)

我們在這里添加 --max-line-length 命令行選項,它始終是一個整數,將從配置文件中解析。既然我們提供了違約,我們就利用 argparse 愿意在幫助文本中顯示 %(default)s .

option_manager.add_option(
    '--select', metavar='errors', default='',
    parse_from_config=True, comma_separated_list=True,
    help='Comma-separated list of errors and warnings to enable.'
         ' For example, ``--select=E4,E51,W234``. (Default: %(default)s)',
)

在添加 --select 命令行選項,我們還向 OptionManager 我們希望從配置文件中解析該值,并將其解析為逗號分隔的列表。

option_manager.add_option(
    '--exclude', metavar='patterns', default=defaults.EXCLUDE,
    comma_separated_list=True, parse_from_config=True,
    normalize_paths=True,
    help='Comma-separated list of files or directories to exclude.'
         '(Default: %(default)s)',
)

最后,我們展示了一個使用所有三個額外標志的選項。值來自 --exclude 將從配置解析,從逗號分隔的列表轉換,然后每個項都將被規范化。

有關其他參數的信息 add_option() 請參閱 argparse .

訪問解析的選項?

當一個插件有一個可調用的 parse_options 屬性, Flake8 將調用它并嘗試提供 OptionManager 實例,解析的選項將是 argparse.Namespace ,以及 OptionManager . 如果失敗了,我們就通過考試 argparse.Namespace . 換句話說,你的 parse_options callable將具有以下簽名之一:

def parse_options(option_manager, options, args):
    pass
# or
def parse_options(options):
    pass