diff --git a/src/handler/hover.ts b/src/handler/hover.ts index 3a71af1a0af..d4a9a7170ab 100644 --- a/src/handler/hover.ts +++ b/src/handler/hover.ts @@ -121,6 +121,8 @@ export default class HoverHandler { const defs = await this.handler.withRequestToken('definitionHover', token => { return languages.getDefinitionLinks(doc.textDocument, position, token) }, false) + // could be cancelled + if (defs == null) return false await addDefinitions(hovers, defs, doc.filetype) let hover = hovers.find(o => Hover.is(o) && Range.is(o.range)) as Hover | undefined if (hover?.range) { diff --git a/src/handler/locations.ts b/src/handler/locations.ts index 3d29c72c6c6..43bbc9d95b0 100644 --- a/src/handler/locations.ts +++ b/src/handler/locations.ts @@ -10,6 +10,7 @@ import { hasOwnProperty } from '../util/object' import { CancellationToken, CancellationTokenSource } from '../util/protocol' import workspace from '../workspace' import { HandlerDelegate } from './types' +import { isFalsyOrEmpty } from '../util/array' export interface TagDefinition { name: string @@ -77,7 +78,7 @@ export default class LocationsHandler { return languages.getDefinition(doc, position, token) }) await this.handleLocations(definition, openCommand) - return definition ? definition.length > 0 : false + return !isFalsyOrEmpty(definition) } public async gotoDeclaration(openCommand?: string | false): Promise { @@ -85,7 +86,7 @@ export default class LocationsHandler { return languages.getDeclaration(doc, position, token) }) await this.handleLocations(definition, openCommand) - return definition ? definition.length > 0 : false + return !isFalsyOrEmpty(definition) } public async gotoTypeDefinition(openCommand?: string | false): Promise { @@ -93,7 +94,7 @@ export default class LocationsHandler { return languages.getTypeDefinition(doc, position, token) }) await this.handleLocations(definition, openCommand) - return definition ? definition.length > 0 : false + return !isFalsyOrEmpty(definition) } public async gotoImplementation(openCommand?: string | false): Promise { @@ -101,7 +102,7 @@ export default class LocationsHandler { return languages.getImplementation(doc, position, token) }) await this.handleLocations(definition, openCommand) - return definition ? definition.length > 0 : false + return !isFalsyOrEmpty(definition) } public async gotoReferences(openCommand?: string | false, includeDeclaration = true): Promise { @@ -109,7 +110,7 @@ export default class LocationsHandler { return languages.getReferences(doc, { includeDeclaration }, position, token) }) await this.handleLocations(definition, openCommand) - return definition ? definition.length > 0 : false + return !isFalsyOrEmpty(definition) } public async getTagList(): Promise { diff --git a/src/handler/selectionRange.ts b/src/handler/selectionRange.ts index 9f06acbd728..58ef28d87ed 100644 --- a/src/handler/selectionRange.ts +++ b/src/handler/selectionRange.ts @@ -17,10 +17,9 @@ export default class SelectionRangeHandler { let { doc, position } = await this.handler.getCurrentState() this.handler.checkProvider(ProviderName.SelectionRange, doc.textDocument) await doc.synchronize() - let selectionRanges: SelectionRange[] = await this.handler.withRequestToken('selection ranges', token => { + return await this.handler.withRequestToken('selection ranges', token => { return languages.getSelectionRanges(doc.textDocument, [position], token) }) - return selectionRanges } public async selectRange(visualmode: string, forward: boolean): Promise { diff --git a/src/handler/typeHierarchy.ts b/src/handler/typeHierarchy.ts index e523f7bd2c2..897d3803edb 100644 --- a/src/handler/typeHierarchy.ts +++ b/src/handler/typeHierarchy.ts @@ -114,7 +114,7 @@ export default class TypeHierarchyHandler { return res } - private async prepare(doc: TextDocument, position: Position): Promise { + private async prepare(doc: TextDocument, position: Position): Promise { this.handler.checkProvider(ProviderName.TypeHierarchy, doc) return await this.handler.withRequestToken('typeHierarchy', async token => { return await languages.prepareTypeHierarchy(doc, position, token)