@@ -135,6 +135,54 @@ export default class BashServer {
135135 )
136136 }
137137
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+
138186 private async onHover (
139187 params : LSP . TextDocumentPositionParams ,
140188 ) : Promise < LSP . Hover | null > {
@@ -180,11 +228,6 @@ export default class BashServer {
180228 return { contents : getMarkdownContent ( shellDocumentation ) }
181229 }
182230 } 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-
188231 const symbolDocumentation = deduplicateSymbols ( {
189232 symbols : this . analyzer . findSymbolsMatchingWord ( {
190233 exactMatch : true ,
@@ -195,19 +238,7 @@ export default class BashServer {
195238 // do not return hover referencing for the current line
196239 . filter ( symbol => symbol . location . range . start . line !== params . position . line )
197240 . 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 } ) ,
211242 )
212243
213244 if ( symbolDocumentation . length === 1 ) {
@@ -268,7 +299,7 @@ export default class BashServer {
268299 const symbolCompletions =
269300 word === null
270301 ? [ ]
271- : getCompletionItemsForSymbols ( {
302+ : this . getCompletionItemsForSymbols ( {
272303 symbols : this . analyzer . findSymbolsMatchingWord ( {
273304 exactMatch : false ,
274305 word,
@@ -391,32 +422,6 @@ function deduplicateSymbols({
391422 return uniqueBasedOnHash ( [ ...symbolsCurrentFile , ...symbolsOtherFiles ] , getSymbolId )
392423}
393424
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-
420425function symbolKindToCompletionKind ( s : LSP . SymbolKind ) : LSP . CompletionItemKind {
421426 switch ( s ) {
422427 case LSP . SymbolKind . File :
0 commit comments