[flake8]

builtins = _

# Print the total number of errors:
count = true

# Don't even try to analyze these:
extend-exclude =
  # No need to traverse egg info dir
  *.egg-info,
  # tool cache dirs
  *_cache
  # project env vars
  .env,
  # GitHub configs
  .github,
  # Cache files of MyPy
  .mypy_cache,
  # Cache files of pytest
  .pytest_cache,
  # Temp dir of pytest-testmon
  .tmontmp,
  # Occasional virtualenv dir
  .venv
  # VS Code
  .vscode,
  # Temporary build dir
  build,
  # This contains sdists and wheels of ansible-navigator that we don't want to check
  dist,
  # Metadata of `pip wheel` cmd is autogenerated
  pip-wheel-metadata,
  # adjacent venv
  venv

# IMPORTANT: avoid using ignore option, always use extend-ignore instead
# Completely and unconditionally ignore the following errors:
extend-ignore =
  E203,  # annoy black by allowing white space before : https://github.com/psf/black/issues/315
  F401,  # duplicate of pylint W0611 (unused-import)
  F821,  # duplicate of pylint E0602 (undefined-variable)
  F841,  # duplicate of pylint W0612 (unused-variable)

# Accessibility/large fonts and PEP8 unfriendly:
max-line-length = 100

# Allow certain violations in certain files:
# Please keep both sections of this list sorted, as it will be easier for others to find and add entries in the future
per-file-ignores =
  # The following ignores have been researched and should be considered permanent
  # each should be preceeded with an explanation of each of the error codes
  # If other ignores are added for a specific file in the section following this,
  # these will need to be added to that line as well.

  # Q000: Allow single-quotes in _version.py because setuptools_scm will create it with them.
  src/ansible_navigator/_version.py: Q000
  # S101: Allow the use of assert within the tests directory, since tests require it.
  tests/**.py: S101

  # The following were present during the initial implementation.
  # They are expected to be fixed and unignored over time.
  src/ansible_navigator/app_public.py: D204, D205, D211, D400
  src/ansible_navigator/tm_tokenize/__init__.py: D104
  src/ansible_navigator/tm_tokenize/compiler.py: D100, D101, D102
  src/ansible_navigator/tm_tokenize/fchainmap.py: D100, D101, D105
  src/ansible_navigator/tm_tokenize/grammars.py: D100, D101, D102
  src/ansible_navigator/tm_tokenize/reg.py: D100, D103
  src/ansible_navigator/tm_tokenize/region.py: D100, D101
  src/ansible_navigator/tm_tokenize/rules.py: D100, D101, D102, D400
  src/ansible_navigator/tm_tokenize/state.py: D100, D101, D102
  src/ansible_navigator/tm_tokenize/tokenize.py: D100, D201, D400, D403, DAR101, DAR201
  src/ansible_navigator/tm_tokenize/utils.py: D100, D400, D403, DAR101, DAR201
  src/ansible_navigator/ui_framework/curses_window.py: D200, D202, D205, D209, D400, D401, D403, DAR101, DAR201
  src/ansible_navigator/ui_framework/field_button.py: D200, D205, D400, D403, DAR101, DAR201
  src/ansible_navigator/ui_framework/field_checks.py: D200, D204, D205, D400, D403, DAR101, DAR201
  src/ansible_navigator/ui_framework/field_information.py: D200, D204, D205, D400, D403, DAR101, DAR201
  src/ansible_navigator/ui_framework/field_option.py: D200, D205, D400, D403, DAR101, DAR201, DAR401
  src/ansible_navigator/ui_framework/field_radio.py: D200, D204, D205, D400, D403, DAR101, DAR201
  src/ansible_navigator/ui_framework/field_text.py: D200, D204, D205, D400, D401, D403, DAR101, DAR201
  src/ansible_navigator/ui_framework/field_working.py: D200, D204, D205, D400, D403, DAR101, DAR201
  src/ansible_navigator/ui_framework/form_defs.py: D200, D400
  src/ansible_navigator/ui_framework/form_handler_button.py: D200, D400, D403, DAR101, DAR201
  src/ansible_navigator/ui_framework/form_handler_information.py: D200, D400, D403, DAR101, DAR201
  src/ansible_navigator/ui_framework/form_handler_options.py: D200, D201, D400, D403, DAR101, DAR201
  src/ansible_navigator/ui_framework/form_handler_text.py: D200, D205, D300, D400, D403, DAR101, DAR201
  src/ansible_navigator/ui_framework/form_handler_working.py: D205, D400, D403, DAR101, DAR201
  src/ansible_navigator/ui_framework/form_utils.py: D200, D205, D400, D403, DAR101, DAR201
  src/ansible_navigator/ui_framework/form.py: D200, D205, D400, D403, DAR101, DAR201
  src/ansible_navigator/ui_framework/menu_builder.py: D200, D400, D401, D403, DAR101, DAR201
  src/ansible_navigator/ui_framework/sentinels.py: D102, D105, D205, D400
  src/ansible_navigator/ui_framework/ui.py: D200, D202, D205, D211, D400, D403, DAR101, DAR201, DAR401
  src/ansible_navigator/ui_framework/utils.py: D200, D205, D400, D403, DAR101, DAR201
  src/ansible_navigator/ui_framework/validators.py: D200, D400, D401, D403, DAR101, DAR201, DAR401
  src/ansible_navigator/utils/functions.py: D105, D200, D202, D205, D400, D401, D403, DAR101, DAR201, DAR401
  tests/__init__.py: D104
  tests/conftest.py: D210, D400, D401, D403, DAR101, DAR201, DAR301, DAR401
  tests/defaults.py: D200
  tests/integration/__init__.py: D104
  tests/integration/_action_run_test.py: D205, D400, D401, D403, DAR101, DAR201, DAR401
  tests/integration/_cli2runner.py: D200, D400, D401, D403, DAR101, DAR401
  tests/integration/_common.py: D103, D200, D400, D401, D403, DAR101, DAR201, DAR401
  tests/integration/_interactions.py: D200, D204, D400, D403, DAR101, DAR201
  tests/integration/_tmux_session.py: D105, D205, D400, D403, DAR101, DAR201, DAR401
  tests/integration/actions/__init__.py: D104
  tests/integration/actions/collections/__init__.py: D104
  tests/integration/actions/collections/base.py: D200, D202, D400, D403, DAR101, DAR301, DAR401
  tests/integration/actions/collections/test_direct_interactive_ee.py: D200, D400
  tests/integration/actions/collections/test_direct_interactive_noee.py: D200, D400
  tests/integration/actions/collections/test_welcome_interactive_ee.py: D200, D400
  tests/integration/actions/collections/test_welcome_interactive_noee.py: D200, D400
  tests/integration/actions/config/__init__.py: D104
  tests/integration/actions/config/base.py: D200, D202, D400, D403, DAR101, DAR301, DAR401
  tests/integration/actions/config/test_direct_interactive_ee.py: D200, D400
  tests/integration/actions/config/test_direct_interactive_noee.py: D200, D400
  tests/integration/actions/config/test_stdout_tmux.py: D210, D400, D403, DAR101, DAR201
  tests/integration/actions/config/test_welcome_interactive_ee.py: D200, D400
  tests/integration/actions/config/test_welcome_interactive_noee.py: D200, D400
  tests/integration/actions/config/test_welcome_interactive_param_use.py: D200, D400
  tests/integration/actions/config/test_welcome_interactive_specified_config.py: D200, D400
  tests/integration/actions/doc/__init__.py: D104
  tests/integration/actions/doc/base.py: D200, D400, D403, DAR101, DAR301, DAR401
  tests/integration/actions/doc/test_direct_interactive_ee.py: D200, D400
  tests/integration/actions/doc/test_direct_interactive_noee.py: D200, D400
  tests/integration/actions/doc/test_stdout.py: D200, D400
  tests/integration/actions/doc/test_welcome_interactive_ee.py: D200, D400
  tests/integration/actions/doc/test_welcome_interactive_noee.py: D200, D400
  tests/integration/actions/images/__init__.py: D104
  tests/integration/actions/images/base.py: D200, D202, D400, D403, DAR101, DAR301, DAR401
  tests/integration/actions/images/test_direct_interactive_ee.py: D200, D400
  tests/integration/actions/images/test_direct_interactive_noee.py: D200, D400
  tests/integration/actions/images/test_welcome_interactive_ee.py: D200, D400
  tests/integration/actions/images/test_welcome_interactive_noee.py: D200, D400
  tests/integration/actions/inventory/__init__.py: D104
  tests/integration/actions/inventory/base.py: D200, D201, D400, D403, DAR101, DAR301, DAR401
  tests/integration/actions/inventory/test_direct_interactive_ee.py: D200, D400
  tests/integration/actions/inventory/test_direct_interactive_noee.py: D200, D400
  tests/integration/actions/inventory/test_stdout_tmux.py: D400, D403, DAR101, DAR201
  tests/integration/actions/inventory/test_welcome_interactive_ee.py: D200, D400
  tests/integration/actions/inventory/test_welcome_interactive_noee.py: D200, D400
  tests/integration/actions/replay/__init__.py: D104
  tests/integration/actions/replay/base.py: D200, D201, D400, D403, DAR101, DAR301
  tests/integration/actions/replay/test_direct_interactive_ee.py: D200, D400
  tests/integration/actions/replay/test_direct_interactive_noee.py: D200, D400
  tests/integration/actions/replay/test_welcome_interactive_ee.py: D200, D400
  tests/integration/actions/replay/test_welcome_interactive_noee.py: D200, D400
  tests/integration/actions/run/__init__.py: D104
  tests/integration/actions/run/base.py: D200, D202, D400, D403, DAR101, DAR301
  tests/integration/actions/run/test_direct_interactive_ee.py: D200, D400
  tests/integration/actions/run/test_direct_interactive_noee.py: D200, D400
  tests/integration/actions/run/test_stdout_tmux.py: D210, D400, D403, DAR101, DAR201
  tests/integration/actions/run/test_welcome_interactive_ee.py: D200, D400
  tests/integration/actions/run/test_welcome_interactive_noee.py: D200, D400
  tests/integration/actions/stdout/__init__.py: D104
  tests/integration/actions/stdout/base.py: D200, D201, D400, D403, DAR101, DAR301
  tests/integration/actions/stdout/test_direct_interactive_ee.py: D200, D400
  tests/integration/actions/stdout/test_direct_interactive_noee.py: D200, D400
  tests/integration/actions/stdout/test_welcome_interactive_ee.py: D200, D400
  tests/integration/actions/stdout/test_welcome_interactive_noee.py: D200, D400
  tests/integration/actions/templar/__init__.py: D104
  tests/integration/actions/templar/base.py: D200, D202, D400, D403, DAR101, DAR301
  tests/integration/actions/templar/test_direct_interactive_ee.py: D200, D400
  tests/integration/actions/templar/test_direct_interactive_noee.py: D200, D400
  tests/integration/actions/templar/test_welcome_interactive_ee.py: D200, D400
  tests/integration/actions/templar/test_welcome_interactive_noee.py: D200, D400
  tests/integration/conftest.py: D205, D400, D401, D403, DAR101, DAR201, DAR301
  tests/integration/test_stdout_exit_codes.py: D200, D400, D403, DAR101, DAR201
  tests/unit/__init__.py: D104
  tests/unit/actions/__init__.py: D104
  tests/unit/actions/collections/test_collection_doc_cache_path.py: D400, DAR101, DAR102, DAR201
  tests/unit/actions/test_config.py: D200, D400, D403
  tests/unit/actions/test_inventory.py: D200, D400, D403
  tests/unit/actions/test_run.py: D200, D400, DAR101, DAR201
  tests/unit/configuration_subsystem/__init__.py: D104
  tests/unit/configuration_subsystem/conftest.py: D200, D400, D403, DAR101, DAR201
  tests/unit/configuration_subsystem/data.py: D205, D400, D403, DAR101, DAR201
  tests/unit/configuration_subsystem/defaults.py: D200, D400
  tests/unit/configuration_subsystem/test_broken_settings.py: D200, D400, DAR101
  tests/unit/configuration_subsystem/test_configurator.py: D200, D205, D209, D400, DAR101
  tests/unit/configuration_subsystem/test_container_engine_auto.py: D200, DAR101
  tests/unit/configuration_subsystem/test_entries_sanity.py: D200, D400, DAR101
  tests/unit/configuration_subsystem/test_fixture_sanity.py: D205, D400
  tests/unit/configuration_subsystem/test_invalid_params.py: D200, D202, D400, DAR101
  tests/unit/configuration_subsystem/test_mode_subcommand_action.py: D205, D400
  tests/unit/configuration_subsystem/test_precedence.py: D205, D400, DAR101
  tests/unit/configuration_subsystem/test_previous_cli.py: D202, D205, D400
  tests/unit/configuration_subsystem/test_sample_configurations.py: D205, D400
  tests/unit/configuration_subsystem/utils.py: D200, D400, DAR101, DAR201
  tests/unit/image_manager/__init__.py: D104
  tests/unit/image_manager/test_image_puller.py: D400, D403, DAR101, DAR201
  tests/unit/runner/test_api.py: D200, D202, D400, D403, DAR101
  tests/unit/test_cli.py: D200, D202, D205, D400, D403, DAR101, DAR201
  tests/unit/test_image_introspection.py: D200, D400, D403, DAR101, DAR201
  tests/unit/test_log_append.py: D200, D400, D403, DAR101
  tests/unit/ui_framework/test_colorize.py: D200, D205, D209, D400, DAR101
  tests/unit/utils/test_functions.py: D200, D202, D400, D403, DAR101

# Count the number of occurrences of each error/warning code and print a report:
statistics = true

# flake8-quotes
# https://github.com/zheller/flake8-quotes
# keep at bottom of configuration because some IDEs
# may see the single double quote in the inline-quotes
# entry as an unterminated string and not properly
# highlight the remainder of the file
inline-quotes = "
