Наблюдатели за файлами не работают в Intellij для комбинации isort и autoflake - PullRequest
2 голосов
/ 29 мая 2020

У меня есть файл Python с многострочным оператором импорта:

from itertools import (
    accumulate,
    chain,
    combinations,
    combinations_with_replacement,
    compress,
    count,
    islice,
    product
)

, из которого я пытаюсь удалить неиспользуемые операции импорта, сначала изменив оператор многострочного импорта на однострочный импорт:

isort -sl totest.py
autoflake --remove-all-unused-imports --remove-unused-variables -i totest.py

Он отлично работает в командной строке, но при использовании File Watchers в Intellij он не запускает autoflake при сохранении файла в первый раз. В основном, чтобы обойти это, мне нужно:

  1. Сделать некоторые изменения, например, добавить пробел
  2. Сохранить файл
  3. Он форматируется так:

    from itertools import accumulate
    from itertools import chain
    from itertools import combinations
    from itertools import combinations_with_replacement
    from itertools import compress
    from itertools import count
    from itertools import islice
    from itertools import product
    
  4. А затем сделайте еще одно изменение

  5. Сохранить файл
  6. И лишний импорт будет удален

Шаги 4 и 5 являются избыточными.

Интересно, в чем может быть причина и где мне сообщить об этом? Команде IDEA Intellij, в isort или куда?

Вот мой watchers.xml для импорта в Intellij.

<TaskOptions>
  <TaskOptions>
    <option name="arguments" value="--remove-all-unused-imports --remove-unused-variables -i $FilePath$" />
    <option name="checkSyntaxErrors" value="true" />
    <option name="description" />
    <option name="exitCodeBehavior" value="ERROR" />
    <option name="fileExtension" value="py" />
    <option name="immediateSync" value="false" />
    <option name="name" value="Remove unused variables and imports" />
    <option name="output" value="$FilePath$" />
    <option name="outputFilters">
      <array />
    </option>
    <option name="outputFromStdout" value="false" />
    <option name="program" value="autoflake" />
    <option name="runOnExternalChanges" value="true" />
    <option name="scopeName" value="Project Files" />
    <option name="trackOnlyRoot" value="false" />
    <option name="workingDir" value="" />
    <envs />
  </TaskOptions>
  <TaskOptions>
    <option name="arguments" value="-sp $$ProjectFileDir$/.isort.cfg $FilePath$" />
    <option name="checkSyntaxErrors" value="true" />
    <option name="description" />
    <option name="exitCodeBehavior" value="ERROR" />
    <option name="fileExtension" value="py" />
    <option name="immediateSync" value="false" />
    <option name="name" value="Organize imports" />
    <option name="output" value="$FilePath$" />
    <option name="outputFilters">
      <array />
    </option>
    <option name="outputFromStdout" value="false" />
    <option name="program" value="isort" />
    <option name="runOnExternalChanges" value="true" />
    <option name="scopeName" value="Project Files" />
    <option name="trackOnlyRoot" value="false" />
    <option name="workingDir" value="" />
    <envs />
  </TaskOptions>
  <TaskOptions>
    <option name="arguments" value="--config=&quot;$ProjectFileDir$&quot;/pyproject.toml $FilePath$" />
    <option name="checkSyntaxErrors" value="true" />
    <option name="description" />
    <option name="exitCodeBehavior" value="ERROR" />
    <option name="fileExtension" value="py" />
    <option name="immediateSync" value="false" />
    <option name="name" value="Format code (with Black)" />
    <option name="output" value="$FilePath$" />
    <option name="outputFilters">
      <array />
    </option>
    <option name="outputFromStdout" value="false" />
    <option name="program" value="black" />
    <option name="runOnExternalChanges" value="true" />
    <option name="scopeName" value="Project Files" />
    <option name="trackOnlyRoot" value="false" />
    <option name="workingDir" value="" />
    <envs />
  </TaskOptions>
</TaskOptions>
...