All patches and comments are welcome. Please squash your changes to logical
commits before using git-format-patch and git-send-email to
patches@git.madduck.net.
If you'd read over the Git project's submission guidelines and adhered to them,
I'd be especially grateful.
3 Save g:ale_linter_aliases
5 let g:testlinter1 = {'name': 'testlinter1', 'executable': 'testlinter1', 'command': 'testlinter1', 'callback': 'testCB1', 'output_stream': 'stdout', 'read_buffer': 1, 'lint_file': 0, 'aliases': [], 'lsp': ''}
6 let g:testlinter2 = {'name': 'testlinter2', 'executable': 'testlinter2', 'command': 'testlinter2', 'callback': 'testCB2', 'output_stream': 'stdout', 'read_buffer': 0, 'lint_file': 1, 'aliases': [], 'lsp': ''}
7 call ale#linter#Reset()
8 call ale#linter#PreventLoading('testft')
9 call ale#linter#PreventLoading('javascript')
10 call ale#linter#PreventLoading('typescript')
18 unlet! b:ale_linter_aliases
19 call ale#linter#Reset()
21 Execute (You should be able to get a defined linter):
22 call ale#linter#Define('testft', g:testlinter1)
23 AssertEqual [g:testlinter1], ale#linter#Get('testft')
25 Execute (You should be able get select a single linter):
26 call ale#linter#Define('testft', g:testlinter1)
27 call ale#linter#Define('testft', g:testlinter2)
28 let g:ale_linters = {'testft': ['testlinter1']}
30 AssertEqual [g:testlinter1], ale#linter#Get('testft')
32 Execute (You should be able to select a linter by an alias):
33 let g:testlinter1.aliases = ['foo', 'linter1alias']
35 call ale#linter#Define('testft', g:testlinter1)
36 call ale#linter#Define('testft', g:testlinter2)
37 let g:ale_linters = {'testft': ['linter1alias']}
39 AssertEqual [g:testlinter1], ale#linter#Get('testft')
41 Execute (You should be able to select linters with a buffer option):
42 call ale#linter#Define('testft', g:testlinter1)
43 call ale#linter#Define('testft', g:testlinter2)
44 let g:ale_linters = {'testft': ['testlinter1', 'testlinter2']}
45 let b:ale_linters = {'testft': ['testlinter1']}
47 AssertEqual [g:testlinter1], ale#linter#Get('testft')
49 Execute (b:ale_linters should work when set to a List):
50 call ale#linter#Define('testft', g:testlinter1)
51 call ale#linter#Define('testft', g:testlinter2)
52 let g:ale_linters = {'testft': ['testlinter1', 'testlinter2']}
53 let b:ale_linters = ['testlinter1']
55 AssertEqual [g:testlinter1], ale#linter#Get('testft')
57 Execute (b:ale_linters should disable all linters when set to an empty List):
58 call ale#linter#Define('testft', g:testlinter1)
59 call ale#linter#Define('testft', g:testlinter2)
60 let g:ale_linters = {'testft': ['testlinter1', 'testlinter2']}
61 let b:ale_linters = []
63 AssertEqual [], ale#linter#Get('testft')
65 Execute (b:ale_linters should enable all available linters when set to 'all'):
66 call ale#linter#Define('testft', g:testlinter1)
67 call ale#linter#Define('testft', g:testlinter2)
68 let g:ale_linters = {'testft': ['testlinter1']}
69 let b:ale_linters = 'all'
71 AssertEqual [g:testlinter1, g:testlinter2], ale#linter#Get('testft')
73 Execute (Buffer settings shouldn't completely replace global settings):
74 call ale#linter#Define('testft', g:testlinter1)
75 call ale#linter#Define('testft', g:testlinter2)
76 let g:ale_linters = {'testft': ['testlinter1']}
77 let b:ale_linters = {'testft2': ['testlinter1', 'testlinter2']}
79 AssertEqual [g:testlinter1], ale#linter#Get('testft')
81 Execute (You should be able to alias linters from one filetype to another):
82 call ale#linter#Define('testft1', g:testlinter1)
83 let g:ale_linter_aliases = {'testft2': 'testft1'}
85 AssertEqual [g:testlinter1], ale#linter#Get('testft2')
87 Execute (You should be able to filter aliased linters):
88 call ale#linter#Define('testft1', g:testlinter1)
89 call ale#linter#Define('testft1', g:testlinter2)
90 let g:ale_linters = {'testft1': ['testlinter1'], 'testft2': ['testlinter2']}
91 let g:ale_linter_aliases = {'testft2': 'testft1'}
93 AssertEqual [g:testlinter1], ale#linter#Get('testft1')
94 AssertEqual [g:testlinter2], ale#linter#Get('testft2')
96 Execute (Dot-separated filetypes should be handled correctly):
97 call ale#linter#Define('testft1', g:testlinter1)
98 call ale#linter#Define('testft2', g:testlinter2)
100 AssertEqual [g:testlinter1, g:testlinter2], ale#linter#Get('testft1.testft2')
102 Execute (Linters for multiple aliases should be loaded):
103 call ale#linter#Define('testft1', g:testlinter1)
104 call ale#linter#Define('testft2', g:testlinter2)
105 let ale_linter_aliases = {'testft3': ['testft1', 'testft2']}
107 AssertEqual [g:testlinter1, g:testlinter2], ale#linter#Get('testft3')
109 Execute (You should be able to alias filetypes to themselves and another):
110 call ale#linter#Define('testft1', g:testlinter1)
111 call ale#linter#Define('testft2', g:testlinter2)
112 let ale_linter_aliases = {'testft1': ['testft1', 'testft2']}
114 AssertEqual [g:testlinter1, g:testlinter2], ale#linter#Get('testft1')
116 Execute (Buffer-local overrides for aliases should be used):
117 call ale#linter#Define('testft1', g:testlinter1)
118 call ale#linter#Define('testft2', g:testlinter2)
119 let g:ale_linter_aliases = {'testft1': ['testft2']}
120 let b:ale_linter_aliases = {'testft1': ['testft1', 'testft2']}
122 AssertEqual [g:testlinter1, g:testlinter2], ale#linter#Get('testft1')
124 Execute (The local alias option shouldn't completely replace the global one):
125 call ale#linter#Define('testft1', g:testlinter1)
126 call ale#linter#Define('testft2', g:testlinter2)
127 let g:ale_linter_aliases = {'testft1': ['testft1', 'testft2']}
128 " This is a key set for a different filetype.
129 " We should look for a key in this Dictionary first, and then check the
131 let b:ale_linter_aliases = {'testft3': ['testft1']}
133 AssertEqual [g:testlinter1, g:testlinter2], ale#linter#Get('testft1')
135 Execute (Lists should be accepted for local aliases):
136 call ale#linter#Define('testft1', g:testlinter1)
137 call ale#linter#Define('testft2', g:testlinter2)
138 let g:ale_linter_aliases = {'testft1': ['testft1', 'testft2']}
139 " We should load the testft2 linters for this buffer, with no duplicates.
140 let b:ale_linter_aliases = ['testft2']
142 AssertEqual [g:testlinter2], ale#linter#Get('anything.else')
144 Execute (Strings should be accepted for local aliases):
145 call ale#linter#Define('testft1', g:testlinter1)
146 call ale#linter#Define('testft2', g:testlinter2)
147 let g:ale_linter_aliases = {'testft1': ['testft1', 'testft2']}
148 " We should load the testft2 linters for this buffer, with no duplicates.
149 let b:ale_linter_aliases = 'testft2'
151 AssertEqual [g:testlinter2], ale#linter#Get('anything.else')
153 Execute (Buffer-local overrides for aliases should be used):
154 call ale#linter#Define('testft1', g:testlinter1)
155 call ale#linter#Define('testft2', g:testlinter2)
156 let g:ale_linter_aliases = {'testft1': ['testft2']}
157 let b:ale_linter_aliases = {'testft1': ['testft1', 'testft2']}
159 AssertEqual [g:testlinter1, g:testlinter2], ale#linter#Get('testft1')
161 Execute (Linters new linters with the same name should replace old ones):
162 let g:testlinter1.name = g:testlinter2.name
164 call ale#linter#Define('testft1', g:testlinter1)
165 call ale#linter#Define('testft1', g:testlinter2)
167 AssertEqual [g:testlinter2], ale#linter#GetAll(['testft1'])
169 Execute (Linters should be loaded from disk appropriately):
170 call ale#linter#Reset()
171 AssertEqual [{'name': 'testlinter', 'output_stream': 'stdout', 'executable': 'testlinter', 'command': 'testlinter', 'callback': 'testCB', 'read_buffer': 1, 'lint_file': 0, 'aliases': [], 'lsp': ''}], ale#linter#Get('testft')
174 Execute (Linters for later filetypes should replace the former ones):
175 call ale#linter#Define('javascript', {
181 call ale#linter#Define('typescript', {
189 \ {'output_stream': 'stdout', 'lint_file': 0, 'read_buffer': 1, 'name': 'eslint', 'executable': 'x', 'lsp': '', 'aliases': [], 'command': 'x', 'callback': 'x'}
190 \], ale#linter#Get('javascript.typescript')