@@ -135,6 +135,54 @@ export default class BashServer {
135
135
)
136
136
}
137
137
138
+ private getDocumentationForSymbol ( {
139
+ currentUri,
140
+ symbol,
141
+ } : {
142
+ symbol : LSP . SymbolInformation
143
+ currentUri : string
144
+ } ) : string {
145
+ const symbolUri = symbol . location . uri
146
+ const symbolStarLine = symbol . location . range . start . line
147
+
148
+ const commentAboveSymbol = this . analyzer . commentsAbove ( symbolUri , symbolStarLine )
149
+ const symbolDocumentation = commentAboveSymbol ? `\n\n${ commentAboveSymbol } ` : ''
150
+
151
+ return symbolUri !== currentUri
152
+ ? `${ symbolKindToDescription ( symbol . kind ) } defined in ${ path . relative (
153
+ currentUri ,
154
+ symbolUri ,
155
+ ) } ${ symbolDocumentation } `
156
+ : `${ symbolKindToDescription ( symbol . kind ) } defined on line ${ symbolStarLine +
157
+ 1 } ${ symbolDocumentation } `
158
+ }
159
+
160
+ private getCompletionItemsForSymbols ( {
161
+ symbols,
162
+ currentUri,
163
+ } : {
164
+ symbols : LSP . SymbolInformation [ ]
165
+ currentUri : string
166
+ } ) : BashCompletionItem [ ] {
167
+ return deduplicateSymbols ( { symbols, currentUri } ) . map (
168
+ ( symbol : LSP . SymbolInformation ) => ( {
169
+ label : symbol . name ,
170
+ kind : symbolKindToCompletionKind ( symbol . kind ) ,
171
+ data : {
172
+ name : symbol . name ,
173
+ type : CompletionItemDataType . Symbol ,
174
+ } ,
175
+ documentation :
176
+ symbol . location . uri !== currentUri
177
+ ? this . getDocumentationForSymbol ( {
178
+ currentUri,
179
+ symbol,
180
+ } )
181
+ : undefined ,
182
+ } ) ,
183
+ )
184
+ }
185
+
138
186
private async onHover (
139
187
params : LSP . TextDocumentPositionParams ,
140
188
) : Promise < LSP . Hover | null > {
@@ -180,11 +228,6 @@ export default class BashServer {
180
228
return { contents : getMarkdownContent ( shellDocumentation ) }
181
229
}
182
230
} else {
183
- const getCommentsAbove = ( uri : string , line : number ) : string => {
184
- const comment = this . analyzer . commentsAbove ( uri , line )
185
- return comment ? `\n\n${ comment } ` : ''
186
- }
187
-
188
231
const symbolDocumentation = deduplicateSymbols ( {
189
232
symbols : this . analyzer . findSymbolsMatchingWord ( {
190
233
exactMatch : true ,
@@ -195,19 +238,7 @@ export default class BashServer {
195
238
// do not return hover referencing for the current line
196
239
. filter ( symbol => symbol . location . range . start . line !== params . position . line )
197
240
. map ( ( symbol : LSP . SymbolInformation ) =>
198
- symbol . location . uri !== currentUri
199
- ? `${ symbolKindToDescription ( symbol . kind ) } defined in ${ path . relative (
200
- currentUri ,
201
- symbol . location . uri ,
202
- ) } ${ getCommentsAbove (
203
- symbol . location . uri ,
204
- symbol . location . range . start . line ,
205
- ) } `
206
- : `${ symbolKindToDescription ( symbol . kind ) } defined on line ${ symbol . location
207
- . range . start . line + 1 } ${ getCommentsAbove (
208
- params . textDocument . uri ,
209
- symbol . location . range . start . line ,
210
- ) } `,
241
+ this . getDocumentationForSymbol ( { currentUri, symbol } ) ,
211
242
)
212
243
213
244
if ( symbolDocumentation . length === 1 ) {
@@ -268,7 +299,7 @@ export default class BashServer {
268
299
const symbolCompletions =
269
300
word === null
270
301
? [ ]
271
- : getCompletionItemsForSymbols ( {
302
+ : this . getCompletionItemsForSymbols ( {
272
303
symbols : this . analyzer . findSymbolsMatchingWord ( {
273
304
exactMatch : false ,
274
305
word,
@@ -391,32 +422,6 @@ function deduplicateSymbols({
391
422
return uniqueBasedOnHash ( [ ...symbolsCurrentFile , ...symbolsOtherFiles ] , getSymbolId )
392
423
}
393
424
394
- function getCompletionItemsForSymbols ( {
395
- symbols,
396
- currentUri,
397
- } : {
398
- symbols : LSP . SymbolInformation [ ]
399
- currentUri : string
400
- } ) : BashCompletionItem [ ] {
401
- return deduplicateSymbols ( { symbols, currentUri } ) . map (
402
- ( symbol : LSP . SymbolInformation ) => ( {
403
- label : symbol . name ,
404
- kind : symbolKindToCompletionKind ( symbol . kind ) ,
405
- data : {
406
- name : symbol . name ,
407
- type : CompletionItemDataType . Symbol ,
408
- } ,
409
- documentation :
410
- symbol . location . uri !== currentUri
411
- ? `${ symbolKindToDescription ( symbol . kind ) } defined in ${ path . relative (
412
- currentUri ,
413
- symbol . location . uri ,
414
- ) } `
415
- : undefined ,
416
- } ) ,
417
- )
418
- }
419
-
420
425
function symbolKindToCompletionKind ( s : LSP . SymbolKind ) : LSP . CompletionItemKind {
421
426
switch ( s ) {
422
427
case LSP . SymbolKind . File :
0 commit comments