mirror of
https://github.com/nix-community/nixvim.git
synced 2025-06-21 08:35:43 +02:00
410 lines
12 KiB
Nix
410 lines
12 KiB
Nix
|
{
|
||
|
lib,
|
||
|
config,
|
||
|
...
|
||
|
}:
|
||
|
with lib; let
|
||
|
helpers = import ../../helpers.nix {inherit lib;};
|
||
|
cfg = config.plugins.lsp.servers.pylsp;
|
||
|
in {
|
||
|
# All settings are documented here:
|
||
|
# https://github.com/python-lsp/python-lsp-server/blob/develop/CONFIGURATION.md
|
||
|
|
||
|
options.plugins.lsp.servers.pylsp.settings = {
|
||
|
configurationSources = mkOption {
|
||
|
type = lib.types.nullOr (types.enum ["pycodestyle" "flake8"]);
|
||
|
description = "List of configuration sources to use.";
|
||
|
default = null;
|
||
|
apply = (
|
||
|
value:
|
||
|
if (value != null)
|
||
|
then [value]
|
||
|
else null
|
||
|
);
|
||
|
};
|
||
|
|
||
|
plugins = {
|
||
|
autopep8 = {
|
||
|
enabled = mkOption {
|
||
|
type = types.bool;
|
||
|
description = ''
|
||
|
Enable or disable the plugin (disabling required to use `yapf`).
|
||
|
'';
|
||
|
default = true;
|
||
|
};
|
||
|
};
|
||
|
|
||
|
flake8 = {
|
||
|
config = helpers.mkNullOrOption types.str ''
|
||
|
Path to the config file that will be the authoritative config source.
|
||
|
'';
|
||
|
|
||
|
enabled = mkOption {
|
||
|
type = types.bool;
|
||
|
description = "Enable or disable the plugin.";
|
||
|
default = false;
|
||
|
};
|
||
|
|
||
|
exclude = helpers.defaultNullOpts.mkNullable (types.listOf types.str) "[]" ''
|
||
|
List of files or directories to exclude.
|
||
|
'';
|
||
|
|
||
|
executable = helpers.mkNullOrOption types.str ''
|
||
|
Path to the flake8 executable.
|
||
|
'';
|
||
|
|
||
|
filename = helpers.mkNullOrOption types.str ''
|
||
|
Only check for filenames matching the patterns in this list.
|
||
|
'';
|
||
|
|
||
|
hangClosing = helpers.mkNullOrOption types.bool ''
|
||
|
Hang closing bracket instead of matching indentation of opening bracket's line.
|
||
|
'';
|
||
|
|
||
|
ignore = helpers.defaultNullOpts.mkNullable (types.listOf types.str) "[]" ''
|
||
|
List of errors and warnings to ignore (or skip).
|
||
|
'';
|
||
|
|
||
|
maxComplexity = helpers.mkNullOrOption types.int ''
|
||
|
Maximum allowed complexity threshold.
|
||
|
'';
|
||
|
|
||
|
maxLineLength = helpers.mkNullOrOption types.int ''
|
||
|
Maximum allowed line length for the entirety of this run.
|
||
|
'';
|
||
|
|
||
|
indentSize = helpers.mkNullOrOption types.int ''
|
||
|
Set indentation spaces.
|
||
|
'';
|
||
|
|
||
|
perFileIgnores = helpers.defaultNullOpts.mkNullable (types.listOf types.str) "[]" ''
|
||
|
A pairing of filenames and violation codes that defines which violations to ignore in a
|
||
|
particular file.
|
||
|
|
||
|
For example: `["file_path.py:W305,W304"]`.
|
||
|
'';
|
||
|
|
||
|
select = helpers.mkNullOrOption (types.listOf types.str) ''
|
||
|
List of errors and warnings to enable.
|
||
|
'';
|
||
|
};
|
||
|
|
||
|
jedi = {
|
||
|
auto_import_modules =
|
||
|
helpers.defaultNullOpts.mkNullable
|
||
|
(types.listOf types.str)
|
||
|
"[ \"numpy\" ]"
|
||
|
"List of module names for `jedi.settings.auto_import_modules`.";
|
||
|
|
||
|
extra_paths = helpers.defaultNullOpts.mkNullable (types.listOf types.str) "[]" ''
|
||
|
Define extra paths for jedi.Script.
|
||
|
'';
|
||
|
|
||
|
environment = helpers.mkNullOrOption types.str ''
|
||
|
Define environment for jedi.Script and Jedi.names.
|
||
|
'';
|
||
|
};
|
||
|
|
||
|
jedi_completion = {
|
||
|
enabled = mkOption {
|
||
|
type = types.bool;
|
||
|
description = "Enable or disable the plugin.";
|
||
|
default = true;
|
||
|
};
|
||
|
|
||
|
include_params = helpers.defaultNullOpts.mkBool true ''
|
||
|
Auto-completes methods and classes with tabstops for each parameter.
|
||
|
'';
|
||
|
|
||
|
include_class_objects = helpers.defaultNullOpts.mkBool false ''
|
||
|
Adds class objects as a separate completion item.
|
||
|
'';
|
||
|
|
||
|
include_function_objects = helpers.defaultNullOpts.mkBool false ''
|
||
|
Adds function objects as a separate completion item.
|
||
|
'';
|
||
|
|
||
|
fuzzy = helpers.defaultNullOpts.mkBool false ''
|
||
|
Enable fuzzy when requesting autocomplete.
|
||
|
'';
|
||
|
|
||
|
eager = helpers.defaultNullOpts.mkBool false ''
|
||
|
Resolve documentation and detail eagerly.
|
||
|
'';
|
||
|
|
||
|
resolve_at_most = helpers.defaultNullOpts.mkInt 25 ''
|
||
|
How many labels and snippets (at most) should be resolved.
|
||
|
'';
|
||
|
|
||
|
cache_for =
|
||
|
helpers.defaultNullOpts.mkNullable
|
||
|
(types.listOf types.str)
|
||
|
"[ \"pandas\" \"numpy\" \"tensorflow\" \"matplotlib\" ]"
|
||
|
"Modules for which labels and snippets should be cached.";
|
||
|
};
|
||
|
|
||
|
jedi_definition = {
|
||
|
enabled = mkOption {
|
||
|
type = types.bool;
|
||
|
description = "Enable or disable the plugin.";
|
||
|
default = true;
|
||
|
};
|
||
|
|
||
|
follow_imports = helpers.defaultNullOpts.mkBool true ''
|
||
|
The goto call will follow imports.
|
||
|
'';
|
||
|
|
||
|
follow_builtin_imports = helpers.defaultNullOpts.mkBool true ''
|
||
|
If follow_imports is true will decide if it follow builtin imports.
|
||
|
'';
|
||
|
|
||
|
follow_builtin_definitions = helpers.defaultNullOpts.mkBool true ''
|
||
|
Follow builtin and extension definitions to stubs.
|
||
|
'';
|
||
|
};
|
||
|
|
||
|
jedi_hover = {
|
||
|
enabled = mkOption {
|
||
|
type = types.bool;
|
||
|
description = "Enable or disable the plugin.";
|
||
|
default = true;
|
||
|
};
|
||
|
};
|
||
|
|
||
|
jedi_references = {
|
||
|
enabled = mkOption {
|
||
|
type = types.bool;
|
||
|
description = "Enable or disable the plugin.";
|
||
|
default = true;
|
||
|
};
|
||
|
};
|
||
|
|
||
|
jedi_signature_help = {
|
||
|
enabled = mkOption {
|
||
|
type = types.bool;
|
||
|
description = "Enable or disable the plugin.";
|
||
|
default = true;
|
||
|
};
|
||
|
};
|
||
|
|
||
|
jedi_symbols = {
|
||
|
enabled = mkOption {
|
||
|
type = types.bool;
|
||
|
description = "Enable or disable the plugin.";
|
||
|
default = true;
|
||
|
};
|
||
|
|
||
|
all_scopes = helpers.defaultNullOpts.mkBool true ''
|
||
|
If true lists the names of all scopes instead of only the module namespace.
|
||
|
'';
|
||
|
|
||
|
include_import_symbols = helpers.defaultNullOpts.mkBool true ''
|
||
|
If true includes symbols imported from other libraries.
|
||
|
'';
|
||
|
};
|
||
|
|
||
|
mccabe = {
|
||
|
enabled = mkOption {
|
||
|
type = types.bool;
|
||
|
description = "Enable or disable the plugin.";
|
||
|
default = true;
|
||
|
};
|
||
|
|
||
|
threshold = helpers.defaultNullOpts.mkInt 15 ''
|
||
|
The minimum threshold that triggers warnings about cyclomatic complexity.
|
||
|
'';
|
||
|
};
|
||
|
|
||
|
preload = {
|
||
|
enabled = mkOption {
|
||
|
type = types.bool;
|
||
|
description = "Enable or disable the plugin.";
|
||
|
default = true;
|
||
|
};
|
||
|
|
||
|
modules = helpers.defaultNullOpts.mkNullable (types.listOf types.str) "[]" ''
|
||
|
List of modules to import on startup.
|
||
|
'';
|
||
|
};
|
||
|
|
||
|
pycodestyle = {
|
||
|
enabled = mkOption {
|
||
|
type = types.bool;
|
||
|
description = "Enable or disable the plugin.";
|
||
|
default = true;
|
||
|
};
|
||
|
|
||
|
exclude = helpers.defaultNullOpts.mkNullable (types.listOf types.str) "[]" ''
|
||
|
Exclude files or directories which match these patterns.
|
||
|
'';
|
||
|
|
||
|
filename = helpers.defaultNullOpts.mkNullable (types.listOf types.str) "[]" ''
|
||
|
When parsing directories, only check filenames matching these patterns.
|
||
|
'';
|
||
|
|
||
|
ropeFolder = helpers.mkNullOrOption (types.listOf types.str) ''
|
||
|
Select errors and warnings.
|
||
|
'';
|
||
|
|
||
|
ignore = helpers.defaultNullOpts.mkNullable (types.listOf types.str) "[]" ''
|
||
|
Ignore errors and warnings.
|
||
|
'';
|
||
|
|
||
|
hangClosing = helpers.mkNullOrOption types.bool ''
|
||
|
Hang closing bracket instead of matching indentation of opening bracket's line.
|
||
|
'';
|
||
|
|
||
|
maxLineLength = helpers.mkNullOrOption types.int ''
|
||
|
Set maximum allowed line length.
|
||
|
'';
|
||
|
|
||
|
indentSize = helpers.mkNullOrOption types.int ''
|
||
|
Set indentation spaces.
|
||
|
'';
|
||
|
};
|
||
|
|
||
|
pydocstyle = {
|
||
|
enabled = mkOption {
|
||
|
type = types.bool;
|
||
|
description = "Enable or disable the plugin.";
|
||
|
default = false;
|
||
|
};
|
||
|
|
||
|
convention =
|
||
|
helpers.mkNullOrOption
|
||
|
(types.enum [
|
||
|
"pep257"
|
||
|
"numpy"
|
||
|
"google"
|
||
|
"None"
|
||
|
])
|
||
|
"Choose the basic list of checked errors by specifying an existing convention.";
|
||
|
|
||
|
addIgnore = helpers.defaultNullOpts.mkNullable (types.listOf types.str) "[]" ''
|
||
|
Ignore errors and warnings in addition to the specified convention.
|
||
|
'';
|
||
|
|
||
|
addSelect = helpers.defaultNullOpts.mkNullable (types.listOf types.str) "[]" ''
|
||
|
Select errors and warnings in addition to the specified convention.
|
||
|
'';
|
||
|
|
||
|
ignore = helpers.defaultNullOpts.mkNullable (types.listOf types.str) "[]" ''
|
||
|
Ignore errors and warnings.
|
||
|
'';
|
||
|
|
||
|
select = helpers.mkNullOrOption (types.listOf types.str) ''
|
||
|
Select errors and warnings.
|
||
|
'';
|
||
|
|
||
|
match = helpers.defaultNullOpts.mkStr "(?!test_).*\\.py" ''
|
||
|
Check only files that exactly match the given regular expression;
|
||
|
default is to match files that don't start with 'test_' but end with '.py'.
|
||
|
'';
|
||
|
|
||
|
matchDir = helpers.defaultNullOpts.mkStr "[^\\.].*" ''
|
||
|
Search only dirs that exactly match the given regular expression;
|
||
|
default is to match dirs which do not begin with a dot.
|
||
|
'';
|
||
|
};
|
||
|
|
||
|
pyflakes = {
|
||
|
enabled = mkOption {
|
||
|
type = types.bool;
|
||
|
description = "Enable or disable the plugin.";
|
||
|
default = true;
|
||
|
};
|
||
|
};
|
||
|
|
||
|
pylint = {
|
||
|
enabled = mkOption {
|
||
|
type = types.bool;
|
||
|
description = "Enable or disable the plugin.";
|
||
|
default = false;
|
||
|
};
|
||
|
|
||
|
args = helpers.defaultNullOpts.mkNullable (types.listOf types.str) "[]" ''
|
||
|
Arguments to pass to pylint.
|
||
|
'';
|
||
|
|
||
|
executable = helpers.mkNullOrOption types.str ''
|
||
|
Executable to run pylint with.
|
||
|
Enabling this will run pylint on unsaved files via stdin.
|
||
|
Can slow down workflow. Only works with python3.
|
||
|
'';
|
||
|
};
|
||
|
|
||
|
rope_autoimport = {
|
||
|
enabled = mkOption {
|
||
|
type = types.bool;
|
||
|
description = "Enable or disable autoimport.";
|
||
|
default = false;
|
||
|
};
|
||
|
|
||
|
memory = helpers.defaultNullOpts.mkBool false ''
|
||
|
Make the autoimport database memory only.
|
||
|
Drastically increases startup time.
|
||
|
'';
|
||
|
};
|
||
|
|
||
|
rope_completion = {
|
||
|
enabled = mkOption {
|
||
|
type = types.bool;
|
||
|
description = "Enable or disable the plugin.";
|
||
|
default = false;
|
||
|
};
|
||
|
|
||
|
eager = helpers.defaultNullOpts.mkBool false ''
|
||
|
Resolve documentation and detail eagerly.
|
||
|
'';
|
||
|
};
|
||
|
|
||
|
yapf = {
|
||
|
enabled = mkOption {
|
||
|
type = types.bool;
|
||
|
description = "Enable or disable the plugin.";
|
||
|
default = true;
|
||
|
};
|
||
|
};
|
||
|
};
|
||
|
|
||
|
rope = {
|
||
|
extensionModules = helpers.mkNullOrOption types.str ''
|
||
|
Builtin and c-extension modules that are allowed to be imported and inspected by rope.
|
||
|
'';
|
||
|
|
||
|
ropeFolder = helpers.mkNullOrOption (types.listOf types.str) ''
|
||
|
The name of the folder in which rope stores project configurations and data.
|
||
|
Pass null for not using such a folder at all.
|
||
|
'';
|
||
|
};
|
||
|
};
|
||
|
|
||
|
config =
|
||
|
mkIf cfg.enable
|
||
|
{
|
||
|
extraPackages = with cfg.settings;
|
||
|
lists.flatten (map
|
||
|
(
|
||
|
pluginName: (
|
||
|
optionals plugins.${pluginName}.enabled
|
||
|
cfg.package.optional-dependencies.${pluginName}
|
||
|
)
|
||
|
)
|
||
|
[
|
||
|
"autopep8"
|
||
|
"flake8"
|
||
|
"mccabe"
|
||
|
"pycodestyle"
|
||
|
"pydocstyle"
|
||
|
"pyflakes"
|
||
|
"pylint"
|
||
|
"yapf"
|
||
|
])
|
||
|
++ (
|
||
|
optionals
|
||
|
(plugins.rope_autoimport.enabled || plugins.rope_completion.enabled)
|
||
|
cfg.package.optional-dependencies.rope
|
||
|
);
|
||
|
};
|
||
|
}
|