diff --git a/extensions/typescript-language-features/src/features/updatePathsOnRename.ts b/extensions/typescript-language-features/src/features/updatePathsOnRename.ts index 35fbd6ce92b..a8f495b38f4 100644 --- a/extensions/typescript-language-features/src/features/updatePathsOnRename.ts +++ b/extensions/typescript-language-features/src/features/updatePathsOnRename.ts @@ -9,13 +9,14 @@ import * as nls from 'vscode-nls'; import * as Proto from '../protocol'; import { ITypeScriptServiceClient } from '../typescriptService'; import API from '../utils/api'; +import { Delayer } from '../utils/async'; import { nulToken } from '../utils/cancellation'; import { VersionDependentRegistration } from '../utils/dependentRegistration'; import { Disposable } from '../utils/dispose'; import * as fileSchemes from '../utils/fileSchemes'; +import { doesResourceLookLikeATypeScriptFile } from '../utils/languageDescription'; import * as typeConverters from '../utils/typeConverters'; import FileConfigurationManager from './fileConfigurationManager'; -import { Delayer } from '../utils/async'; const localize = nls.loadMessageBundle(); @@ -43,10 +44,6 @@ interface RenameAction { readonly jsTsFileThatIsBeingMoved: vscode.Uri; } -function doesResourceLookLikeATypeScriptFile(resource: vscode.Uri): boolean { - return /\.tsx?$/i.test(resource.fsPath); -} - class UpdateImportsOnFileRenameHandler extends Disposable { public static readonly minVersion = API.v300; diff --git a/extensions/typescript-language-features/src/features/workspaceSymbols.ts b/extensions/typescript-language-features/src/features/workspaceSymbols.ts index 73f3df64552..857969be008 100644 --- a/extensions/typescript-language-features/src/features/workspaceSymbols.ts +++ b/extensions/typescript-language-features/src/features/workspaceSymbols.ts @@ -6,6 +6,8 @@ import * as vscode from 'vscode'; import * as Proto from '../protocol'; import { ITypeScriptServiceClient } from '../typescriptService'; +import * as fileSchemes from '../utils/fileSchemes'; +import { doesResourceLookLikeAJavaScriptFile, doesResourceLookLikeATypeScriptFile } from '../utils/languageDescription'; import * as typeConverters from '../utils/typeConverters'; function getSymbolKind(item: Proto.NavtoItem): vscode.SymbolKind { @@ -35,7 +37,7 @@ class TypeScriptWorkspaceSymbolProvider implements vscode.WorkspaceSymbolProvide return []; } - const filepath = this.client.toOpenedFilePath(document); + const filepath = await this.toOpenedFiledPath(document); if (!filepath) { return []; } @@ -62,10 +64,25 @@ class TypeScriptWorkspaceSymbolProvider implements vscode.WorkspaceSymbolProvide return result; } + private async toOpenedFiledPath(document: vscode.TextDocument) { + if (document.uri.scheme === fileSchemes.git) { + try { + const path = vscode.Uri.file(JSON.parse(document.uri.query)?.path); + if (doesResourceLookLikeATypeScriptFile(path) || doesResourceLookLikeAJavaScriptFile(path)) { + const document = await vscode.workspace.openTextDocument(path); + return this.client.toOpenedFilePath(document); + } + } catch { + // noop + } + } + return this.client.toOpenedFilePath(document); + } + private static getLabel(item: Proto.NavtoItem) { - let label = item.name; + const label = item.name; if (item.kind === 'method' || item.kind === 'function') { - label += '()'; + return label + '()'; } return label; } @@ -97,4 +114,4 @@ export function register( modeIds: string[], ) { return vscode.languages.registerWorkspaceSymbolProvider(new TypeScriptWorkspaceSymbolProvider(client, modeIds)); -} \ No newline at end of file +} diff --git a/extensions/typescript-language-features/src/utils/fileSchemes.ts b/extensions/typescript-language-features/src/utils/fileSchemes.ts index 285ea43f331..6efcfab4d3b 100644 --- a/extensions/typescript-language-features/src/utils/fileSchemes.ts +++ b/extensions/typescript-language-features/src/utils/fileSchemes.ts @@ -4,9 +4,8 @@ *--------------------------------------------------------------------------------------------*/ export const file = 'file'; - export const untitled = 'untitled'; - +export const git = 'git'; export const walkThroughSnippet = 'walkThroughSnippet'; export const supportedSchemes = [ @@ -17,4 +16,4 @@ export const supportedSchemes = [ export function isSupportedScheme(scheme: string): boolean { return supportedSchemes.indexOf(scheme) >= 0; -} \ No newline at end of file +} diff --git a/extensions/typescript-language-features/src/utils/languageDescription.ts b/extensions/typescript-language-features/src/utils/languageDescription.ts index f6b066bd400..686590091e5 100644 --- a/extensions/typescript-language-features/src/utils/languageDescription.ts +++ b/extensions/typescript-language-features/src/utils/languageDescription.ts @@ -4,6 +4,7 @@ *--------------------------------------------------------------------------------------------*/ import { basename } from 'path'; +import * as vscode from 'vscode'; import * as languageModeIds from './languageModeIds'; export const enum DiagnosticLanguage { @@ -48,3 +49,11 @@ export function isTsConfigFileName(fileName: string): boolean { export function isJsConfigOrTsConfigFileName(fileName: string): boolean { return /^[jt]sconfig\.(.+\.)?json$/i.test(basename(fileName)); } + +export function doesResourceLookLikeATypeScriptFile(resource: vscode.Uri): boolean { + return /\.tsx?$/i.test(resource.fsPath); +} + +export function doesResourceLookLikeAJavaScriptFile(resource: vscode.Uri): boolean { + return /\.jsx?$/i.test(resource.fsPath); +}