Skip to content

Multi-root workspace makes Ruff use wrong settings #925

@OXINARF

Description

@OXINARF

When using a multi-root workspace, Ruff is showing None for config_path, although it does find the correct configuration file. The Ruff cache folder, the file resolver root, the linter root and src, all have wrong values.

I'm not sure if it makes a difference, but:

  • I'm in a devcontainer, inside WSL
  • my workspace has two folders, with one being a sub-folder of the other

I'm pasting below, the "Debug information" with workspace and without (some data has been anonymized).

Let me know if I can help with any more information.

Single folder workspace (good)
Global:
executable = /home/vscode/.vscode-server/extensions/charliermarsh.ruff-2025.32.0-alpine-x64/bundled/libs/bin/ruff
version = 0.14.8
position_encoding = UTF16
workspace_root_folders = [
    "/X",
]
indexed_configuration_files = [
    "/X/systemtests/pyproject.toml",
]
open_documents_len = 4
client_capabilities = ResolvedClientCapabilities {
    code_action_deferred_edit_resolution: true,
    apply_edit: true,
    document_changes: true,
    workspace_refresh: true,
    pull_diagnostics: true,
}

Open document:
uri = file:///X/systemtests/tests/common/fakes/wus.py
kind = Text
version = 1129
client_settings = ClientSettings {
    fix_all: true,
    organize_imports: true,
    lint_enable: true,
    disable_rule_comment_enable: true,
    fix_violation_enable: true,
    show_syntax_errors: true,
    editor_settings: EditorSettings {
        configuration: None,
        lint_preview: None,
        format_preview: None,
        format_backend: Some(
            Internal,
        ),
        select: None,
        extend_select: None,
        ignore: None,
        exclude: None,
        line_length: None,
        configuration_preference: EditorFirst,
    },
}
config_path = Some("/X/systemtests/pyproject.toml")

# General Settings
cache_dir = "/X/systemtests/.ruff_cache"
fix = false
fix_only = false
output_format = full
show_fixes = false
unsafe_fixes = hint

# File Resolver Settings
file_resolver.exclude = [
	".bzr",
	".direnv",
	".eggs",
	".git",
	".git-rewrite",
	".hg",
	".ipynb_checkpoints",
	".mypy_cache",
	".nox",
	".pants.d",
	".pyenv",
	".pytest_cache",
	".pytype",
	".ruff_cache",
	".svn",
	".tox",
	".venv",
	".vscode",
	"__pypackages__",
	"_build",
	"buck-out",
	"dist",
	"node_modules",
	"site-packages",
	"venv",
]
file_resolver.extend_exclude = [
	"tests/common/protobuf/Z",
]
file_resolver.force_exclude = false
file_resolver.include = [
	"*.py",
	"*.pyi",
	"*.ipynb",
	"**/pyproject.toml",
]
file_resolver.extend_include = []
file_resolver.respect_gitignore = true
file_resolver.project_root = "/X/systemtests"

# Linter Settings
linter.exclude = []
linter.project_root = "/X/systemtests"
linter.rules.enabled = [
	unsorted-imports (I001),
	missing-required-import (I002),
	multiple-imports-on-one-line (E401),
	module-import-not-at-top-of-file (E402),
	multiple-statements-on-one-line-colon (E701),
	multiple-statements-on-one-line-semicolon (E702),
	useless-semicolon (E703),
	none-comparison (E711),
	true-false-comparison (E712),
	not-in-test (E713),
	not-is-test (E714),
	type-comparison (E721),
	bare-except (E722),
	lambda-assignment (E731),
	ambiguous-variable-name (E741),
	ambiguous-class-name (E742),
	ambiguous-function-name (E743),
	io-error (E902),
	unused-import (F401),
	import-shadowed-by-loop-var (F402),
	undefined-local-with-import-star (F403),
	late-future-import (F404),
	undefined-local-with-import-star-usage (F405),
	undefined-local-with-nested-import-star-usage (F406),
	future-feature-not-defined (F407),
	percent-format-invalid-format (F501),
	percent-format-expected-mapping (F502),
	percent-format-expected-sequence (F503),
	percent-format-extra-named-arguments (F504),
	percent-format-missing-argument (F505),
	percent-format-mixed-positional-and-named (F506),
	percent-format-positional-count-mismatch (F507),
	percent-format-star-requires-sequence (F508),
	percent-format-unsupported-format-character (F509),
	string-dot-format-invalid-format (F521),
	string-dot-format-extra-named-arguments (F522),
	string-dot-format-extra-positional-arguments (F523),
	string-dot-format-missing-arguments (F524),
	string-dot-format-mixing-automatic (F525),
	f-string-missing-placeholders (F541),
	multi-value-repeated-key-literal (F601),
	multi-value-repeated-key-variable (F602),
	expressions-in-star-assignment (F621),
	multiple-starred-expressions (F622),
	assert-tuple (F631),
	is-literal (F632),
	invalid-print-syntax (F633),
	if-tuple (F634),
	break-outside-loop (F701),
	continue-outside-loop (F702),
	yield-outside-function (F704),
	return-outside-function (F706),
	default-except-not-last (F707),
	forward-annotation-syntax-error (F722),
	redefined-while-unused (F811),
	undefined-name (F821),
	undefined-export (F822),
	undefined-local (F823),
	unused-variable (F841),
	unused-annotation (F842),
	raise-not-implemented (F901),
]
linter.rules.should_fix = [
	unsorted-imports (I001),
	missing-required-import (I002),
	multiple-imports-on-one-line (E401),
	module-import-not-at-top-of-file (E402),
	multiple-statements-on-one-line-colon (E701),
	multiple-statements-on-one-line-semicolon (E702),
	useless-semicolon (E703),
	none-comparison (E711),
	true-false-comparison (E712),
	not-in-test (E713),
	not-is-test (E714),
	type-comparison (E721),
	bare-except (E722),
	lambda-assignment (E731),
	ambiguous-variable-name (E741),
	ambiguous-class-name (E742),
	ambiguous-function-name (E743),
	io-error (E902),
	unused-import (F401),
	import-shadowed-by-loop-var (F402),
	undefined-local-with-import-star (F403),
	late-future-import (F404),
	undefined-local-with-import-star-usage (F405),
	undefined-local-with-nested-import-star-usage (F406),
	future-feature-not-defined (F407),
	percent-format-invalid-format (F501),
	percent-format-expected-mapping (F502),
	percent-format-expected-sequence (F503),
	percent-format-extra-named-arguments (F504),
	percent-format-missing-argument (F505),
	percent-format-mixed-positional-and-named (F506),
	percent-format-positional-count-mismatch (F507),
	percent-format-star-requires-sequence (F508),
	percent-format-unsupported-format-character (F509),
	string-dot-format-invalid-format (F521),
	string-dot-format-extra-named-arguments (F522),
	string-dot-format-extra-positional-arguments (F523),
	string-dot-format-missing-arguments (F524),
	string-dot-format-mixing-automatic (F525),
	f-string-missing-placeholders (F541),
	multi-value-repeated-key-literal (F601),
	multi-value-repeated-key-variable (F602),
	expressions-in-star-assignment (F621),
	multiple-starred-expressions (F622),
	assert-tuple (F631),
	is-literal (F632),
	invalid-print-syntax (F633),
	if-tuple (F634),
	break-outside-loop (F701),
	continue-outside-loop (F702),
	yield-outside-function (F704),
	return-outside-function (F706),
	default-except-not-last (F707),
	forward-annotation-syntax-error (F722),
	redefined-while-unused (F811),
	undefined-name (F821),
	undefined-export (F822),
	undefined-local (F823),
	unused-variable (F841),
	unused-annotation (F842),
	raise-not-implemented (F901),
]
linter.per_file_ignores = {}
linter.safety_table.forced_safe = []
linter.safety_table.forced_unsafe = []
linter.unresolved_target_version = none
linter.per_file_target_version = {}
linter.preview = disabled
linter.explicit_preview_rules = false
linter.extension = ExtensionMapping({})
linter.allowed_confusables = []
linter.builtins = []
linter.dummy_variable_rgx = ^(_+|(_+[a-zA-Z0-9_]*[a-zA-Z0-9]+?))$
linter.external = []
linter.ignore_init_module_imports = true
linter.logger_objects = []
linter.namespace_packages = []
linter.src = [
	"/X/systemtests",
	"/X/systemtests/src",
]
linter.tab_size = 4
linter.line_length = 120
linter.task_tags = [
	TODO,
	FIXME,
	XXX,
]
linter.typing_modules = []
linter.typing_extensions = true

# Linter Plugins
linter.flake8_annotations.mypy_init_return = false
linter.flake8_annotations.suppress_dummy_args = false
linter.flake8_annotations.suppress_none_returning = false
linter.flake8_annotations.allow_star_arg_any = false
linter.flake8_annotations.ignore_fully_untyped = false
linter.flake8_bandit.hardcoded_tmp_directory = [
	/tmp,
	/var/tmp,
	/dev/shm,
]
linter.flake8_bandit.check_typed_exception = false
linter.flake8_bandit.extend_markup_names = []
linter.flake8_bandit.allowed_markup_calls = []
linter.flake8_bugbear.extend_immutable_calls = []
linter.flake8_builtins.allowed_modules = []
linter.flake8_builtins.ignorelist = []
linter.flake8_builtins.strict_checking = false
linter.flake8_comprehensions.allow_dict_calls_with_keyword_arguments = false
linter.flake8_copyright.notice_rgx = (?i)Copyright\s+((?:\(C\)|©)\s+)?\d{4}((-|,\s)\d{4})*
linter.flake8_copyright.author = none
linter.flake8_copyright.min_file_size = 0
linter.flake8_errmsg.max_string_length = 0
linter.flake8_gettext.functions_names = [
	_,
	gettext,
	ngettext,
]
linter.flake8_implicit_str_concat.allow_multiline = true
linter.flake8_import_conventions.aliases = {
	altair = alt,
	holoviews = hv,
	matplotlib = mpl,
	matplotlib.pyplot = plt,
	networkx = nx,
	numpy = np,
	numpy.typing = npt,
	pandas = pd,
	panel = pn,
	plotly.express = px,
	polars = pl,
	pyarrow = pa,
	seaborn = sns,
	tensorflow = tf,
	tkinter = tk,
	xml.etree.ElementTree = ET,
}
linter.flake8_import_conventions.banned_aliases = {}
linter.flake8_import_conventions.banned_from = []
linter.flake8_pytest_style.fixture_parentheses = false
linter.flake8_pytest_style.parametrize_names_type = tuple
linter.flake8_pytest_style.parametrize_values_type = list
linter.flake8_pytest_style.parametrize_values_row_type = tuple
linter.flake8_pytest_style.raises_require_match_for = [
	BaseException,
	Exception,
	ValueError,
	OSError,
	IOError,
	EnvironmentError,
	socket.error,
]
linter.flake8_pytest_style.raises_extend_require_match_for = []
linter.flake8_pytest_style.mark_parentheses = false
linter.flake8_quotes.inline_quotes = double
linter.flake8_quotes.multiline_quotes = double
linter.flake8_quotes.docstring_quotes = double
linter.flake8_quotes.avoid_escape = true
linter.flake8_self.ignore_names = [
	_make,
	_asdict,
	_replace,
	_fields,
	_field_defaults,
	_name_,
	_value_,
]
linter.flake8_tidy_imports.ban_relative_imports = "parents"
linter.flake8_tidy_imports.banned_api = {}
linter.flake8_tidy_imports.banned_module_level_imports = []
linter.flake8_type_checking.strict = false
linter.flake8_type_checking.exempt_modules = [
	typing,
	typing_extensions,
]
linter.flake8_type_checking.runtime_required_base_classes = []
linter.flake8_type_checking.runtime_required_decorators = []
linter.flake8_type_checking.quote_annotations = false
linter.flake8_unused_arguments.ignore_variadic_names = false
linter.isort.required_imports = []
linter.isort.combine_as_imports = false
linter.isort.force_single_line = false
linter.isort.force_sort_within_sections = false
linter.isort.detect_same_package = true
linter.isort.case_sensitive = false
linter.isort.force_wrap_aliases = false
linter.isort.force_to_top = []
linter.isort.known_modules = {}
linter.isort.order_by_type = true
linter.isort.relative_imports_order = furthest_to_closest
linter.isort.single_line_exclusions = []
linter.isort.split_on_trailing_comma = false
linter.isort.classes = []
linter.isort.constants = []
linter.isort.variables = []
linter.isort.no_lines_before = []
linter.isort.lines_after_imports = -1
linter.isort.lines_between_types = 0
linter.isort.forced_separate = []
linter.isort.section_order = [
	known { type = future },
	known { type = standard_library },
	known { type = third_party },
	known { type = first_party },
	known { type = local_folder },
]
linter.isort.default_section = known { type = third_party }
linter.isort.no_sections = false
linter.isort.from_first = false
linter.isort.length_sort = false
linter.isort.length_sort_straight = false
linter.mccabe.max_complexity = 10
linter.pep8_naming.ignore_names = [
	setUp,
	tearDown,
	setUpClass,
	tearDownClass,
	setUpModule,
	tearDownModule,
	asyncSetUp,
	asyncTearDown,
	setUpTestData,
	failureException,
	longMessage,
	maxDiff,
]
linter.pep8_naming.classmethod_decorators = []
linter.pep8_naming.staticmethod_decorators = []
linter.pycodestyle.max_line_length = 120
linter.pycodestyle.max_doc_length = none
linter.pycodestyle.ignore_overlong_task_comments = false
linter.pyflakes.extend_generics = []
linter.pyflakes.allowed_unused_imports = []
linter.pylint.allow_magic_value_types = [
	str,
	bytes,
]
linter.pylint.allow_dunder_method_names = []
linter.pylint.max_args = 5
linter.pylint.max_positional_args = 5
linter.pylint.max_returns = 6
linter.pylint.max_bool_expr = 5
linter.pylint.max_branches = 12
linter.pylint.max_statements = 50
linter.pylint.max_public_methods = 20
linter.pylint.max_locals = 15
linter.pylint.max_nested_blocks = 5
linter.pyupgrade.keep_runtime_typing = false
linter.ruff.parenthesize_tuple_in_subscript = false

# Formatter Settings
formatter.exclude = []
formatter.unresolved_target_version = 3.10
formatter.per_file_target_version = {}
formatter.preview = disabled
formatter.line_width = 120
formatter.line_ending = auto
formatter.indent_style = space
formatter.indent_width = 4
formatter.quote_style = double
formatter.magic_trailing_comma = ignore
formatter.docstring_code_format = disabled
formatter.docstring_code_line_width = dynamic

# Analyze Settings
analyze.exclude = []
analyze.preview = disabled
analyze.target_version = 3.10
analyze.string_imports = disabled
analyze.extension = ExtensionMapping({})
analyze.include_dependencies = {}
analyze.type_checking_imports = true
Two folder workspace (bad)
Global:
executable = /home/vscode/.vscode-server/extensions/charliermarsh.ruff-2025.32.0-alpine-x64/bundled/libs/bin/ruff
version = 0.14.8
position_encoding = UTF16
workspace_root_folders = [
    "/X",
    "/X/external/Y",
]
indexed_configuration_files = [
    "/X/systemtests/pyproject.toml",
]
open_documents_len = 4
client_capabilities = ResolvedClientCapabilities {
    code_action_deferred_edit_resolution: true,
    apply_edit: true,
    document_changes: true,
    workspace_refresh: true,
    pull_diagnostics: true,
}

Open document:
uri = file:///X/systemtests/tests/common/fakes/wus.py
kind = Text
version = 1129
client_settings = ClientSettings {
    fix_all: true,
    organize_imports: true,
    lint_enable: true,
    disable_rule_comment_enable: true,
    fix_violation_enable: true,
    show_syntax_errors: true,
    editor_settings: EditorSettings {
        configuration: None,
        lint_preview: None,
        format_preview: None,
        format_backend: Some(
            Internal,
        ),
        select: None,
        extend_select: None,
        ignore: None,
        exclude: None,
        line_length: None,
        configuration_preference: EditorFirst,
    },
}
config_path = None

# General Settings
cache_dir = "/X/external/Y/.ruff_cache"
fix = false
fix_only = false
output_format = full
show_fixes = false
unsafe_fixes = hint

# File Resolver Settings
file_resolver.exclude = [
	".bzr",
	".direnv",
	".eggs",
	".git",
	".git-rewrite",
	".hg",
	".ipynb_checkpoints",
	".mypy_cache",
	".nox",
	".pants.d",
	".pyenv",
	".pytest_cache",
	".pytype",
	".ruff_cache",
	".svn",
	".tox",
	".venv",
	".vscode",
	"__pypackages__",
	"_build",
	"buck-out",
	"dist",
	"node_modules",
	"site-packages",
	"venv",
]
file_resolver.extend_exclude = []
file_resolver.force_exclude = false
file_resolver.include = [
	"*.py",
	"*.pyi",
	"*.ipynb",
	"**/pyproject.toml",
]
file_resolver.extend_include = []
file_resolver.respect_gitignore = true
file_resolver.project_root = "/X/external/Y"

# Linter Settings
linter.exclude = []
linter.project_root = "/X/external/Y"
linter.rules.enabled = [
	multiple-imports-on-one-line (E401),
	module-import-not-at-top-of-file (E402),
	multiple-statements-on-one-line-colon (E701),
	multiple-statements-on-one-line-semicolon (E702),
	useless-semicolon (E703),
	none-comparison (E711),
	true-false-comparison (E712),
	not-in-test (E713),
	not-is-test (E714),
	type-comparison (E721),
	bare-except (E722),
	lambda-assignment (E731),
	ambiguous-variable-name (E741),
	ambiguous-class-name (E742),
	ambiguous-function-name (E743),
	io-error (E902),
	unused-import (F401),
	import-shadowed-by-loop-var (F402),
	undefined-local-with-import-star (F403),
	late-future-import (F404),
	undefined-local-with-import-star-usage (F405),
	undefined-local-with-nested-import-star-usage (F406),
	future-feature-not-defined (F407),
	percent-format-invalid-format (F501),
	percent-format-expected-mapping (F502),
	percent-format-expected-sequence (F503),
	percent-format-extra-named-arguments (F504),
	percent-format-missing-argument (F505),
	percent-format-mixed-positional-and-named (F506),
	percent-format-positional-count-mismatch (F507),
	percent-format-star-requires-sequence (F508),
	percent-format-unsupported-format-character (F509),
	string-dot-format-invalid-format (F521),
	string-dot-format-extra-named-arguments (F522),
	string-dot-format-extra-positional-arguments (F523),
	string-dot-format-missing-arguments (F524),
	string-dot-format-mixing-automatic (F525),
	f-string-missing-placeholders (F541),
	multi-value-repeated-key-literal (F601),
	multi-value-repeated-key-variable (F602),
	expressions-in-star-assignment (F621),
	multiple-starred-expressions (F622),
	assert-tuple (F631),
	is-literal (F632),
	invalid-print-syntax (F633),
	if-tuple (F634),
	break-outside-loop (F701),
	continue-outside-loop (F702),
	yield-outside-function (F704),
	return-outside-function (F706),
	default-except-not-last (F707),
	forward-annotation-syntax-error (F722),
	redefined-while-unused (F811),
	undefined-name (F821),
	undefined-export (F822),
	undefined-local (F823),
	unused-variable (F841),
	unused-annotation (F842),
	raise-not-implemented (F901),
]
linter.rules.should_fix = [
	multiple-imports-on-one-line (E401),
	module-import-not-at-top-of-file (E402),
	multiple-statements-on-one-line-colon (E701),
	multiple-statements-on-one-line-semicolon (E702),
	useless-semicolon (E703),
	none-comparison (E711),
	true-false-comparison (E712),
	not-in-test (E713),
	not-is-test (E714),
	type-comparison (E721),
	bare-except (E722),
	lambda-assignment (E731),
	ambiguous-variable-name (E741),
	ambiguous-class-name (E742),
	ambiguous-function-name (E743),
	io-error (E902),
	unused-import (F401),
	import-shadowed-by-loop-var (F402),
	undefined-local-with-import-star (F403),
	late-future-import (F404),
	undefined-local-with-import-star-usage (F405),
	undefined-local-with-nested-import-star-usage (F406),
	future-feature-not-defined (F407),
	percent-format-invalid-format (F501),
	percent-format-expected-mapping (F502),
	percent-format-expected-sequence (F503),
	percent-format-extra-named-arguments (F504),
	percent-format-missing-argument (F505),
	percent-format-mixed-positional-and-named (F506),
	percent-format-positional-count-mismatch (F507),
	percent-format-star-requires-sequence (F508),
	percent-format-unsupported-format-character (F509),
	string-dot-format-invalid-format (F521),
	string-dot-format-extra-named-arguments (F522),
	string-dot-format-extra-positional-arguments (F523),
	string-dot-format-missing-arguments (F524),
	string-dot-format-mixing-automatic (F525),
	f-string-missing-placeholders (F541),
	multi-value-repeated-key-literal (F601),
	multi-value-repeated-key-variable (F602),
	expressions-in-star-assignment (F621),
	multiple-starred-expressions (F622),
	assert-tuple (F631),
	is-literal (F632),
	invalid-print-syntax (F633),
	if-tuple (F634),
	break-outside-loop (F701),
	continue-outside-loop (F702),
	yield-outside-function (F704),
	return-outside-function (F706),
	default-except-not-last (F707),
	forward-annotation-syntax-error (F722),
	redefined-while-unused (F811),
	undefined-name (F821),
	undefined-export (F822),
	undefined-local (F823),
	unused-variable (F841),
	unused-annotation (F842),
	raise-not-implemented (F901),
]
linter.per_file_ignores = {}
linter.safety_table.forced_safe = []
linter.safety_table.forced_unsafe = []
linter.unresolved_target_version = none
linter.per_file_target_version = {}
linter.preview = disabled
linter.explicit_preview_rules = false
linter.extension = ExtensionMapping({})
linter.allowed_confusables = []
linter.builtins = []
linter.dummy_variable_rgx = ^(_+|(_+[a-zA-Z0-9_]*[a-zA-Z0-9]+?))$
linter.external = []
linter.ignore_init_module_imports = true
linter.logger_objects = []
linter.namespace_packages = []
linter.src = [
	"/X/external/Y",
	"/X/external/Y/src",
]
linter.tab_size = 4
linter.line_length = 88
linter.task_tags = [
	TODO,
	FIXME,
	XXX,
]
linter.typing_modules = []
linter.typing_extensions = true

# Linter Plugins
linter.flake8_annotations.mypy_init_return = false
linter.flake8_annotations.suppress_dummy_args = false
linter.flake8_annotations.suppress_none_returning = false
linter.flake8_annotations.allow_star_arg_any = false
linter.flake8_annotations.ignore_fully_untyped = false
linter.flake8_bandit.hardcoded_tmp_directory = [
	/tmp,
	/var/tmp,
	/dev/shm,
]
linter.flake8_bandit.check_typed_exception = false
linter.flake8_bandit.extend_markup_names = []
linter.flake8_bandit.allowed_markup_calls = []
linter.flake8_bugbear.extend_immutable_calls = []
linter.flake8_builtins.allowed_modules = []
linter.flake8_builtins.ignorelist = []
linter.flake8_builtins.strict_checking = false
linter.flake8_comprehensions.allow_dict_calls_with_keyword_arguments = false
linter.flake8_copyright.notice_rgx = (?i)Copyright\s+((?:\(C\)|©)\s+)?\d{4}((-|,\s)\d{4})*
linter.flake8_copyright.author = none
linter.flake8_copyright.min_file_size = 0
linter.flake8_errmsg.max_string_length = 0
linter.flake8_gettext.functions_names = [
	_,
	gettext,
	ngettext,
]
linter.flake8_implicit_str_concat.allow_multiline = true
linter.flake8_import_conventions.aliases = {
	altair = alt,
	holoviews = hv,
	matplotlib = mpl,
	matplotlib.pyplot = plt,
	networkx = nx,
	numpy = np,
	numpy.typing = npt,
	pandas = pd,
	panel = pn,
	plotly.express = px,
	polars = pl,
	pyarrow = pa,
	seaborn = sns,
	tensorflow = tf,
	tkinter = tk,
	xml.etree.ElementTree = ET,
}
linter.flake8_import_conventions.banned_aliases = {}
linter.flake8_import_conventions.banned_from = []
linter.flake8_pytest_style.fixture_parentheses = false
linter.flake8_pytest_style.parametrize_names_type = tuple
linter.flake8_pytest_style.parametrize_values_type = list
linter.flake8_pytest_style.parametrize_values_row_type = tuple
linter.flake8_pytest_style.raises_require_match_for = [
	BaseException,
	Exception,
	ValueError,
	OSError,
	IOError,
	EnvironmentError,
	socket.error,
]
linter.flake8_pytest_style.raises_extend_require_match_for = []
linter.flake8_pytest_style.mark_parentheses = false
linter.flake8_quotes.inline_quotes = double
linter.flake8_quotes.multiline_quotes = double
linter.flake8_quotes.docstring_quotes = double
linter.flake8_quotes.avoid_escape = true
linter.flake8_self.ignore_names = [
	_make,
	_asdict,
	_replace,
	_fields,
	_field_defaults,
	_name_,
	_value_,
]
linter.flake8_tidy_imports.ban_relative_imports = "parents"
linter.flake8_tidy_imports.banned_api = {}
linter.flake8_tidy_imports.banned_module_level_imports = []
linter.flake8_type_checking.strict = false
linter.flake8_type_checking.exempt_modules = [
	typing,
	typing_extensions,
]
linter.flake8_type_checking.runtime_required_base_classes = []
linter.flake8_type_checking.runtime_required_decorators = []
linter.flake8_type_checking.quote_annotations = false
linter.flake8_unused_arguments.ignore_variadic_names = false
linter.isort.required_imports = []
linter.isort.combine_as_imports = false
linter.isort.force_single_line = false
linter.isort.force_sort_within_sections = false
linter.isort.detect_same_package = true
linter.isort.case_sensitive = false
linter.isort.force_wrap_aliases = false
linter.isort.force_to_top = []
linter.isort.known_modules = {}
linter.isort.order_by_type = true
linter.isort.relative_imports_order = furthest_to_closest
linter.isort.single_line_exclusions = []
linter.isort.split_on_trailing_comma = true
linter.isort.classes = []
linter.isort.constants = []
linter.isort.variables = []
linter.isort.no_lines_before = []
linter.isort.lines_after_imports = -1
linter.isort.lines_between_types = 0
linter.isort.forced_separate = []
linter.isort.section_order = [
	known { type = future },
	known { type = standard_library },
	known { type = third_party },
	known { type = first_party },
	known { type = local_folder },
]
linter.isort.default_section = known { type = third_party }
linter.isort.no_sections = false
linter.isort.from_first = false
linter.isort.length_sort = false
linter.isort.length_sort_straight = false
linter.mccabe.max_complexity = 10
linter.pep8_naming.ignore_names = [
	setUp,
	tearDown,
	setUpClass,
	tearDownClass,
	setUpModule,
	tearDownModule,
	asyncSetUp,
	asyncTearDown,
	setUpTestData,
	failureException,
	longMessage,
	maxDiff,
]
linter.pep8_naming.classmethod_decorators = []
linter.pep8_naming.staticmethod_decorators = []
linter.pycodestyle.max_line_length = 88
linter.pycodestyle.max_doc_length = none
linter.pycodestyle.ignore_overlong_task_comments = false
linter.pyflakes.extend_generics = []
linter.pyflakes.allowed_unused_imports = []
linter.pylint.allow_magic_value_types = [
	str,
	bytes,
]
linter.pylint.allow_dunder_method_names = []
linter.pylint.max_args = 5
linter.pylint.max_positional_args = 5
linter.pylint.max_returns = 6
linter.pylint.max_bool_expr = 5
linter.pylint.max_branches = 12
linter.pylint.max_statements = 50
linter.pylint.max_public_methods = 20
linter.pylint.max_locals = 15
linter.pylint.max_nested_blocks = 5
linter.pyupgrade.keep_runtime_typing = false
linter.ruff.parenthesize_tuple_in_subscript = false

# Formatter Settings
formatter.exclude = []
formatter.unresolved_target_version = 3.10
formatter.per_file_target_version = {}
formatter.preview = disabled
formatter.line_width = 88
formatter.line_ending = auto
formatter.indent_style = space
formatter.indent_width = 4
formatter.quote_style = double
formatter.magic_trailing_comma = respect
formatter.docstring_code_format = disabled
formatter.docstring_code_line_width = dynamic

# Analyze Settings
analyze.exclude = []
analyze.preview = disabled
analyze.target_version = 3.10
analyze.string_imports = disabled
analyze.extension = ExtensionMapping({})
analyze.include_dependencies = {}
analyze.type_checking_imports = true

Metadata

Metadata

Assignees

No one assigned

    Labels

    multi-root-workspacesRelated to https://code.visualstudio.com/docs/editor/workspaces/multi-root-workspaces

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions