Skip to content

Commit

Permalink
fix(handler): check definitions is null
Browse files Browse the repository at this point in the history
  • Loading branch information
chemzqm committed Feb 27, 2025
1 parent 1f0431d commit b30a45c
Show file tree
Hide file tree
Showing 4 changed files with 10 additions and 8 deletions.
2 changes: 2 additions & 0 deletions src/handler/hover.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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) {
Expand Down
11 changes: 6 additions & 5 deletions src/handler/locations.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -77,39 +78,39 @@ 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<boolean> {
let definition = await this.request(ProviderName.Declaration, (doc, position, token) => {
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<boolean> {
let definition = await this.request(ProviderName.TypeDefinition, (doc, position, token) => {
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<boolean> {
let definition = await this.request(ProviderName.Implementation, (doc, position, token) => {
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<boolean> {
let definition = await this.request(ProviderName.Reference, (doc, position, token) => {
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<TagDefinition[] | null> {
Expand Down
3 changes: 1 addition & 2 deletions src/handler/selectionRange.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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<boolean> {
Expand Down
2 changes: 1 addition & 1 deletion src/handler/typeHierarchy.ts
Original file line number Diff line number Diff line change
Expand Up @@ -114,7 +114,7 @@ export default class TypeHierarchyHandler {
return res
}

private async prepare(doc: TextDocument, position: Position): Promise<TypeHierarchyItem[] | undefined> {
private async prepare(doc: TextDocument, position: Position): Promise<TypeHierarchyItem[] | undefined | null> {
this.handler.checkProvider(ProviderName.TypeHierarchy, doc)
return await this.handler.withRequestToken('typeHierarchy', async token => {
return await languages.prepareTypeHierarchy(doc, position, token)
Expand Down

0 comments on commit b30a45c

Please sign in to comment.