File tree Expand file tree Collapse file tree 3 files changed +68
-1
lines changed
tests/test-sources/modules Expand file tree Collapse file tree 3 files changed +68
-1
lines changed Original file line number Diff line number Diff line change 138138 ( builtins . catAttrs "warnings" )
139139 builtins . concatLists
140140 ] ;
141+
142+ packages = lib . pipe enabledServers [
143+ ( builtins . filter ( server : server ? package ) )
144+ ( builtins . groupBy ( server : if server . packageFallback then "suffix" else "prefix" ) )
145+ ( builtins . mapAttrs ( _ : builtins . catAttrs "package" ) )
146+ ] ;
141147 in
142148 {
143- extraPackages = builtins . catAttrs "package" enabledServers ;
149+ extraPackages = lib . mkIf ( packages . prefix or [ ] != [ ] ) packages . prefix ;
150+ extraPackagesAfter = lib . mkIf ( packages . suffix or [ ] != [ ] ) packages . suffix ;
144151
145152 lsp . luaConfig . content =
146153 let
Original file line number Diff line number Diff line change 5454 '' ;
5555 } ;
5656
57+ packageFallback = lib . mkOption {
58+ type = types . bool ;
59+ default = false ;
60+ description = ''
61+ When enabled, the language server package will be added to the end of the `PATH` _(suffix)_ instead of the beginning _(prefix)_.
62+
63+ This can be useful if you want local versions of the language server (e.g. from a devshell) to override the nixvim version.
64+ '' ;
65+ } ;
66+
5767 settings = lib . mkOption {
5868 type = with types ; attrsOf anything ;
5969 description = ''
Original file line number Diff line number Diff line change 2828 } ;
2929 } ;
3030 } ;
31+
32+ package-fallback =
33+ { lib , config , ... } :
34+ {
35+ test . buildNixvim = false ;
36+
37+ lsp = {
38+ servers = {
39+ nil_ls . enable = true ;
40+ rust_analyzer = {
41+ enable = true ;
42+ packageFallback = true ;
43+ } ;
44+ hls = {
45+ enable = true ;
46+ packageFallback = true ;
47+ } ;
48+ } ;
49+ } ;
50+
51+ assertions =
52+ let
53+ assertPrefix = name : pkg : [
54+ {
55+ assertion = lib . all ( x : x == pkg ) config . extraPackages ;
56+ message = "Expected `${ name } ` to be in extraPackages" ;
57+ }
58+ {
59+ assertion = lib . any ( x : x != pkg ) config . extraPackagesAfter ;
60+ message = "Expected `${ name } ` not to be in extraPackagesAfter" ;
61+ }
62+ ] ;
63+ assertSuffix = name : pkg : [
64+ {
65+ assertion = lib . all ( x : x != pkg ) config . extraPackages ;
66+ message = "Expected `${ name } ` not to be in extraPackages" ;
67+ }
68+ {
69+ assertion = lib . any ( x : x == pkg ) config . extraPackagesAfter ;
70+ message = "Expected `${ name } ` to be in extraPackagesAfter" ;
71+ }
72+ ] ;
73+ in
74+ with config . lsp . servers ;
75+ (
76+ assertPrefix "nil" nil_ls . package
77+ ++ assertSuffix "rust-analyzer" rust_analyzer . package
78+ ++ assertSuffix "haskell-language-server" hls . package
79+ ) ;
80+ } ;
3181}
You can’t perform that action at this time.
0 commit comments