nix-community.nixvim/plugins/nvim-lsp/language-servers/pylsp.nix

410 lines
12 KiB
Nix
Raw Normal View History

{
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
);
};
}