From 650775ec527c10d546c472a657b3e044ecf87156 Mon Sep 17 00:00:00 2001 From: isaacST08 Date: Thu, 30 Jan 2025 14:37:30 -0700 Subject: [PATCH] Cleanup: Sorted sections alphabetically, utilized inherrits where appropriate --- modules/plugins/languages/tex/lsp/texlab.nix | 508 +++++++++---------- 1 file changed, 254 insertions(+), 254 deletions(-) diff --git a/modules/plugins/languages/tex/lsp/texlab.nix b/modules/plugins/languages/tex/lsp/texlab.nix index bf7d61dc..fca7c759 100644 --- a/modules/plugins/languages/tex/lsp/texlab.nix +++ b/modules/plugins/languages/tex/lsp/texlab.nix @@ -23,51 +23,44 @@ in { description = "texlab package"; }; - forwardSearch = { - enable = mkBool false '' - Whether to enable forward search. - - Enable this option if you want to have the compiled document appear in your chosen PDF viewer. - - For some options see [here](https://github.com/latex-lsp/texlab/wiki/Previewing). - Note this is not all the options, but can act as a guide to help you allong with custom configs. - ''; + chktex = { + enable = mkBool false "Whether to enable linting via chktex"; package = mkOption { type = package; - default = pkgs.okular; + default = pkgs.texlive.withPackages (ps: [ps.chktex]); description = '' - The package to use as your PDF viewer. - This viewer needs to support Synctex. + The chktex package to use. + Must have the `chktex` executable. ''; }; - executable = mkOption { - type = str; - default = "okular"; - description = '' - Defines the executable of the PDF previewer. The previewer needs to support SyncTeX. - ''; - }; + onOpenAndSave = mkBool false "Lint using chktex after opening and saving a file."; - args = mkOption { + onEdit = mkBool false "Lint using chktex after editing a file."; + + additionalArgs = mkOption { type = listOf str; - default = [ - "--unique" - "file:%p#src:%l%f" - ]; + default = []; description = '' - Defines additional arguments that are passed to the configured previewer to perform the forward search. - The placeholders %f, %p, %l will be replaced by the server. - - Placeholders: - - %f: The path of the current TeX file. - - %p: The path of the current PDF file. - - %l: The current line number. + Additional command line arguments that are passed to chktex after editing a file. + Don't redefine the `-I` and `-f` flags as they are set by the server. ''; }; }; + completion.matcher = mkOption { + type = enum ["fuzzy" "fuzzy-ignore-case" "prefix" "prefix-ignore-case"]; + default = "fuzzy-ignore-case"; + description = '' + Modifies the algorithm used to filter the completion items returned to the client. Possibles values are: + - fuzzy: Fuzzy string matching (case sensitive) + - fuzzy-ignore-case: Fuzzy string matching (case insensitive) + - prefix: Filter out items that do not start with the search text (case sensitive) + - prefix-ignore-case: Filter out items that do not start with the search text (case insensitive) + ''; + }; + diagnostics = { delay = mkOption { type = ints.positive; @@ -101,166 +94,6 @@ in { }; }; - chktex = { - enable = mkBool false "Whether to enable linting via chktex"; - - package = mkOption { - type = package; - default = pkgs.texlive.withPackages (ps: [ps.chktex]); - description = '' - The chktex package to use. - Must have the `chktex` executable. - ''; - }; - - onOpenAndSave = mkBool false "Lint using chktex after opening and saving a file."; - - onEdit = mkBool false "Lint using chktex after editing a file."; - - additionalArgs = mkOption { - type = listOf str; - default = []; - description = '' - Additional command line arguments that are passed to chktex after editing a file. - Don't redefine the `-I` and `-f` flags as they are set by the server. - ''; - }; - }; - - symbols = { - enable = mkBool false "Whether to enable setting symbols config."; - - allowedPatterns = mkOption { - type = listOf str; - default = []; - description = '' - A list of regular expressions used to filter the list of reported document symbols. - If specified, only symbols that match at least one of the specified patterns are sent to the client. - Symbols are filtered recursively so nested symbols can still be sent to the client even though the - parent node is removed from the results. - - See also `texlab.symbols.ignoredPatterns`. - - Hint: If both allowedPatterns and ignoredPatterns are set, then allowed patterns are applied first. - Afterwards, the results are filtered with the ignored patterns. - ''; - }; - - ignoredPatterns = mkOption { - type = listOf str; - default = []; - description = '' - A list of regular expressions used to filter the list of reported document symbols. - If specified, only symbols that match none of the specified patterns are sent to the client. - - See also `texlab.symbols.allowedPatterns`. - ''; - }; - - customEnvironments = mkOption { - type = listOf (submodule { - options = { - name = mkOption { - type = str; - description = "The name of the environment."; - }; - displayName = mkOption { - type = nullOr str; - default = null; - description = "The name shown in the document symbols. Defaults to the value of `name`."; - }; - label = mkBool false '' - If set, the server will try to match a label to environment and append its number. - ''; - }; - }); - default = []; - example = [ - { - name = "foo"; - displayName = "bar"; - label = false; - } - ]; - description = '' - A list of objects that allows extending the list of environments that are part of the document symbols. - - See also texlab.symbols.allowedPatterns. - - Type: listOf submodule: - - name: - - type: str - - description: The name of the environment. - - required - - displayName: - - type: nullOr str - - description: The name shown in the document symbols. - - default: - - label: - - type: boolean - - description: If set, the server will try to match a label to environment and append its number. - - default: false - - Note: This functionallity may not be working, please follow https://github.com/latex-lsp/texlab/pull/1311 - for status updates. - ''; - }; - }; - - latexindent = { - local = mkOption { - type = nullOr (either str path); - default = null; - description = '' - Defines the path of a file containing the latexindent configuration. - This corresponds to the --local=file.yaml flag of latexindent. - By default the configuration inside the project root directory is used. - ''; - }; - - modifyLineBreaks = mkBool false '' - Modifies linebreaks before, during, and at the end of code blocks when formatting with latexindent. - This corresponds to the --modifylinebreaks flag of latexindent. - ''; - - replacement = mkOption { - type = nullOr (enum ["-r" "-rv" "-rr"]); - default = null; - description = '' - Defines an additional replacement flag that is added when calling latexindent. This can be one of the following: - - "-r" - - "-rv" - - "-rr" - - null - By default no replacement flag is passed. - ''; - }; - }; - - completion.matcher = mkOption { - type = enum ["fuzzy" "fuzzy-ignore-case" "prefix" "prefix-ignore-case"]; - default = "fuzzy-ignore-case"; - description = '' - Modifies the algorithm used to filter the completion items returned to the client. Possibles values are: - - fuzzy: Fuzzy string matching (case sensitive) - - fuzzy-ignore-case: Fuzzy string matching (case insensitive) - - prefix: Filter out items that do not start with the search text (case sensitive) - - prefix-ignore-case: Filter out items that do not start with the search text (case insensitive) - ''; - }; - - inlayHints = { - labelDefinitions = mkBool true "When enabled, the server will return inlay hints for `\\label-like` commands."; - - labelReferences = mkBool true "When enabled, the server will return inlay hints for `\\ref``-like commands."; - - maxLength = mkOption { - type = nullOr ints.positive; - default = null; - description = "When set, the server will truncate the text of the inlay hints to the specified length."; - }; - }; - experimental = { followPackageLinks = mkBool false "If set to true, dependencies of custom packages are resolved and included in the dependency graph."; @@ -348,31 +181,6 @@ in { }; }; - formatterLineLength = mkOption { - type = ints.positive; - default = 80; - description = "Defines the maximum amount of characters per line (0 = disable) when formatting BibTeX files."; - }; - - bibtexFormatter = mkOption { - type = enum ["texlab" "latexindent"]; - default = "texlab"; - description = '' - Defines the formatter to use for BibTeX formatting. - Possible values are either texlab or latexindent. - ''; - }; - - latexFormatter = mkOption { - type = enum ["texlab" "latexindent"]; - default = "latexindent"; - description = '' - Defines the formatter to use for LaTeX formatting. - Possible values are either texlab or latexindent. - Note that texlab is not implemented yet. - ''; - }; - extraLuaSettings = mkOption { type = attrs; default = {}; @@ -399,6 +207,200 @@ in { ``` ''; }; + + forwardSearch = { + enable = mkBool false '' + Whether to enable forward search. + + Enable this option if you want to have the compiled document appear in your chosen PDF viewer. + + For some options see [here](https://github.com/latex-lsp/texlab/wiki/Previewing). + Note this is not all the options, but can act as a guide to help you allong with custom configs. + ''; + + package = mkOption { + type = package; + default = pkgs.okular; + description = '' + The package to use as your PDF viewer. + This viewer needs to support Synctex. + ''; + }; + + executable = mkOption { + type = str; + default = "okular"; + description = '' + Defines the executable of the PDF previewer. The previewer needs to support SyncTeX. + ''; + }; + + args = mkOption { + type = listOf str; + default = [ + "--unique" + "file:%p#src:%l%f" + ]; + description = '' + Defines additional arguments that are passed to the configured previewer to perform the forward search. + The placeholders %f, %p, %l will be replaced by the server. + + Placeholders: + - %f: The path of the current TeX file. + - %p: The path of the current PDF file. + - %l: The current line number. + ''; + }; + }; + + formatter = { + formatterLineLength = mkOption { + type = ints.positive; + default = 80; + description = "Defines the maximum amount of characters per line (0 = disable) when formatting BibTeX files."; + }; + + bibtexFormatter = mkOption { + type = enum ["texlab" "latexindent"]; + default = "texlab"; + description = '' + Defines the formatter to use for BibTeX formatting. + Possible values are either texlab or latexindent. + ''; + }; + + latexFormatter = mkOption { + type = enum ["texlab" "latexindent"]; + default = "latexindent"; + description = '' + Defines the formatter to use for LaTeX formatting. + Possible values are either texlab or latexindent. + Note that texlab is not implemented yet. + ''; + }; + }; + + inlayHints = { + labelDefinitions = mkBool true "When enabled, the server will return inlay hints for `\\label-like` commands."; + + labelReferences = mkBool true "When enabled, the server will return inlay hints for `\\ref``-like commands."; + + maxLength = mkOption { + type = nullOr ints.positive; + default = null; + description = "When set, the server will truncate the text of the inlay hints to the specified length."; + }; + }; + + latexindent = { + local = mkOption { + type = nullOr (either str path); + default = null; + description = '' + Defines the path of a file containing the latexindent configuration. + This corresponds to the --local=file.yaml flag of latexindent. + By default the configuration inside the project root directory is used. + ''; + }; + + modifyLineBreaks = mkBool false '' + Modifies linebreaks before, during, and at the end of code blocks when formatting with latexindent. + This corresponds to the --modifylinebreaks flag of latexindent. + ''; + + replacement = mkOption { + type = nullOr (enum ["-r" "-rv" "-rr"]); + default = null; + description = '' + Defines an additional replacement flag that is added when calling latexindent. This can be one of the following: + - "-r" + - "-rv" + - "-rr" + - null + By default no replacement flag is passed. + ''; + }; + }; + + symbols = { + enable = mkBool false "Whether to enable setting symbols config."; + + allowedPatterns = mkOption { + type = listOf str; + default = []; + description = '' + A list of regular expressions used to filter the list of reported document symbols. + If specified, only symbols that match at least one of the specified patterns are sent to the client. + Symbols are filtered recursively so nested symbols can still be sent to the client even though the + parent node is removed from the results. + + See also `texlab.symbols.ignoredPatterns`. + + Hint: If both allowedPatterns and ignoredPatterns are set, then allowed patterns are applied first. + Afterwards, the results are filtered with the ignored patterns. + ''; + }; + + ignoredPatterns = mkOption { + type = listOf str; + default = []; + description = '' + A list of regular expressions used to filter the list of reported document symbols. + If specified, only symbols that match none of the specified patterns are sent to the client. + + See also `texlab.symbols.allowedPatterns`. + ''; + }; + + customEnvironments = mkOption { + type = listOf (submodule { + options = { + name = mkOption { + type = str; + description = "The name of the environment."; + }; + displayName = mkOption { + type = nullOr str; + default = null; + description = "The name shown in the document symbols. Defaults to the value of `name`."; + }; + label = mkBool false '' + If set, the server will try to match a label to environment and append its number. + ''; + }; + }); + default = []; + example = [ + { + name = "foo"; + displayName = "bar"; + label = false; + } + ]; + description = '' + A list of objects that allows extending the list of environments that are part of the document symbols. + + See also texlab.symbols.allowedPatterns. + + Type: listOf submodule: + - name: + - type: str + - description: The name of the environment. + - required + - displayName: + - type: nullOr str + - description: The name shown in the document symbols. + - default: + - label: + - type: boolean + - description: If set, the server will try to match a label to environment and append its number. + - default: false + + Note: This functionallity may not be working, please follow https://github.com/latex-lsp/texlab/pull/1311 + for status updates. + ''; + }; + }; }; config = mkIf cfg.enable ( @@ -410,40 +412,45 @@ in { # Create texlab settings section setupConfig.settings.texlab = ( { - # -- General Settings -- - formatterLineLength = texlabCfg.formatterLineLength; - - # -- Formatters -- - bibtexFormatter = texlabCfg.bibtexFormatter; - latexFormatter = texlabCfg.latexFormatter; + # -- Completion -- + completion.matcher = texlabCfg.completion.matcher; # -- Diagnostics -- diagnosticsDelay = texlabCfg.diagnostics.delay; diagnostics = { - allowedPatterns = texlabCfg.diagnostics.allowedPatterns; - ignoredPatterns = texlabCfg.diagnostics.ignoredPatterns; + inherit (texlabCfg.diagnostics) allowedPatterns ignoredPatterns; }; - # -- Latex Indent -- - latexindent = texlabCfg.latexindent; + # -- Experimental -- + experimental = texlabCfg.experimental; - # -- Completion -- - completion.matcher = texlabCfg.completion.matcher; + # -- Formatters -- + inherit (texlabCfg.formatter) formatterLineLength bibtexFormatter latexFormatter; # -- Inlay Hints -- inlayHints = texlabCfg.inlayHints; - # -- Experimental -- - experimental = texlabCfg.experimental; + # -- Latex Indent -- + latexindent = texlabCfg.latexindent; } # - # -- Forward Search -- + # -- Build -- // ( - if texlabCfg.forwardSearch.enable + if cfg.build.enable then { - forwardSearch = { - executable = "${texlabCfg.forwardSearch.package}/bin/${texlabCfg.forwardSearch.executable}"; - args = texlabCfg.forwardSearch.args; + build = { + inherit + (cfg.build) + onSave + useFileList + auxDirectory + logDirectory + pdfDirectory + filename + forwardSearchAfter + ; + inherit (builderCfg) args; + executable = "${builderCfg.package}/bin/${builderCfg.executable}"; }; } else {} @@ -460,6 +467,18 @@ in { else {} ) # + # -- Forward Search -- + // ( + if texlabCfg.forwardSearch.enable + then { + forwardSearch = { + executable = "${texlabCfg.forwardSearch.package}/bin/${texlabCfg.forwardSearch.executable}"; + args = texlabCfg.forwardSearch.args; + }; + } + else {} + ) + # # -- Symbols -- // ( if texlabCfg.symbols.enable @@ -481,25 +500,6 @@ in { else {} ) # - # -- Build -- - // ( - if cfg.build.enable - then { - build = { - executable = "${builderCfg.package}/bin/${builderCfg.executable}"; - args = builderCfg.args; - forwardSearchAfter = cfg.build.forwardSearchAfter; - onSave = cfg.build.onSave; - useFileList = cfg.build.useFileList; - auxDirectory = cfg.build.auxDirectory; - logDirectory = cfg.build.logDirectory; - pdfDirectory = cfg.build.pdfDirectory; - filename = cfg.build.filename; - }; - } - else {} - ) - # # -- Extra Settings -- // texlabCfg.extraLuaSettings );