提交 277f25d0 编写于 作者: M Matt Bierner

Fix a few undefined ref accesses while ts is loading

上级 bfffabef
......@@ -12,18 +12,14 @@ import { ITypescriptServiceClient } from '../typescriptService';
export default class TypeScriptHoverProvider implements HoverProvider {
private client: ITypescriptServiceClient;
public constructor(client: ITypescriptServiceClient) {
this.client = client;
}
public constructor(private client: ITypescriptServiceClient) { }
public provideHover(document: TextDocument, position: Position, token: CancellationToken): Promise<Hover | undefined | null> {
const filepath = this.client.normalizePath(document.uri);
if (!filepath) {
return Promise.resolve(null);
}
let args: Proto.FileLocationRequestArgs = {
const args: Proto.FileLocationRequestArgs = {
file: filepath,
line: position.line + 1,
offset: position.character + 1
......@@ -32,8 +28,8 @@ export default class TypeScriptHoverProvider implements HoverProvider {
return Promise.resolve(null);
}
return this.client.execute('quickinfo', args, token).then((response): Hover | undefined => {
let data = response.body;
if (data) {
if (response && response.body) {
const data = response.body;
return new Hover(
[{ language: 'typescript', value: data.displayString }, data.documentation],
new Range(data.start.line - 1, data.start.offset - 1, data.end.line - 1, data.end.offset - 1));
......
......@@ -12,17 +12,16 @@ import * as PConst from '../protocol.const';
import { ITypescriptServiceClient } from '../typescriptService';
import * as nls from 'vscode-nls';
let localize = nls.loadMessageBundle();
const localize = nls.loadMessageBundle();
class ReferencesCodeLens extends CodeLens {
public document: Uri;
public file: string;
constructor(document: Uri, file: string, range: Range) {
constructor(
public tsDocument: Uri,
public tsFile: string,
range: Range
) {
super(range);
this.document = document;
this.file = file;
}
}
......@@ -31,14 +30,14 @@ export default class TypeScriptReferencesCodeLensProvider implements CodeLensPro
private onDidChangeCodeLensesEmitter = new EventEmitter<CodeLensProvider>();
public constructor(private client: ITypescriptServiceClient) { }
public get onDidChangeCodeLenses(): Event<CodeLensProvider> {
return this.onDidChangeCodeLensesEmitter.event;
}
constructor(private client: ITypescriptServiceClient) { }
public updateConfiguration(config: WorkspaceConfiguration): void {
let typeScriptConfig = workspace.getConfiguration('typescript');
const typeScriptConfig = workspace.getConfiguration('typescript');
const wasEnabled = this.enabled;
this.enabled = typeScriptConfig.get('referencesCodeLens.enabled', false);
if (wasEnabled !== this.enabled) {
......@@ -56,22 +55,25 @@ export default class TypeScriptReferencesCodeLensProvider implements CodeLensPro
return Promise.resolve([]);
}
return this.client.execute('navtree', { file: filepath }, token).then(response => {
if (!response) {
return [];
}
const tree = response.body;
const referenceableSpans: Range[] = [];
if (tree && tree.childItems) {
tree.childItems.forEach(item => this.extractReferenceableSymbols(document, item, referenceableSpans));
}
return Promise.resolve(referenceableSpans.map(span => new ReferencesCodeLens(document.uri, filepath, span)));
return referenceableSpans.map(span => new ReferencesCodeLens(document.uri, filepath, span));
});
}
resolveCodeLens(inputCodeLens: CodeLens, token: CancellationToken): Promise<CodeLens> {
const codeLens = inputCodeLens as ReferencesCodeLens;
if (!codeLens.document) {
if (!codeLens.tsDocument) {
return Promise.reject<CodeLens>(codeLens);
}
const args: Proto.FileLocationRequestArgs = {
file: codeLens.file,
file: codeLens.tsFile,
line: codeLens.range.start.line + 1,
offset: codeLens.range.start.character + 1
};
......@@ -90,7 +92,7 @@ export default class TypeScriptReferencesCodeLensProvider implements CodeLensPro
codeLens.command = {
title: locations.length + ' ' + (locations.length === 1 ? localize('oneReferenceLabel', 'reference') : localize('manyReferenceLabel', 'references')),
command: 'editor.action.showReferences',
arguments: [codeLens.document, codeLens.range.start, locations]
arguments: [codeLens.tsDocument, codeLens.range.start, locations]
};
return Promise.resolve(codeLens);
}
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册