diff --git a/src/gitCodeLensProvider.ts b/src/gitCodeLensProvider.ts index be1b0a0..54f86ae 100644 --- a/src/gitCodeLensProvider.ts +++ b/src/gitCodeLensProvider.ts @@ -1,6 +1,6 @@ 'use strict'; import { Functions, Iterables } from './system'; -import { CancellationToken, CodeLens, CodeLensProvider, Command, commands, DocumentSelector, Event, EventEmitter, ExtensionContext, Position, Range, SymbolInformation, SymbolKind, TextDocument, Uri } from 'vscode'; +import { CancellationToken, CodeLens, CodeLensProvider, Command, commands, DocumentSelector, Event, EventEmitter, ExtensionContext, Location, Position, Range, SymbolInformation, SymbolKind, TextDocument, Uri } from 'vscode'; import { Commands, DiffWithPreviousCommandArgs, ShowQuickCommitDetailsCommandArgs, ShowQuickCommitFileDetailsCommandArgs, ShowQuickFileHistoryCommandArgs } from './commands'; import { CodeLensCommand, CodeLensLanguageScope, CodeLensScopes, configuration, ICodeLensConfig } from './configuration'; import { BuiltInCommands, DocumentSchemes } from './constants'; @@ -12,7 +12,7 @@ import { Logger } from './logger'; export class GitRecentChangeCodeLens extends CodeLens { constructor( - public readonly symbolKind: SymbolKind, + public readonly symbol: SymbolInformation, public readonly uri: GitUri | undefined, private readonly blame: (() => GitBlameLines | undefined) | undefined, public readonly blameRange: Range, @@ -32,7 +32,7 @@ export class GitRecentChangeCodeLens extends CodeLens { export class GitAuthorsCodeLens extends CodeLens { constructor( - public readonly symbolKind: SymbolKind, + public readonly symbol: SymbolInformation, public readonly uri: GitUri | undefined, private readonly blame: () => GitBlameLines | undefined, public readonly blameRange: Range, @@ -161,13 +161,15 @@ export class GitCodeLensProvider implements CodeLensProvider { if (!dirty) { blameForRangeFn = Functions.once(() => this._git.getBlameForRangeSync(blame!, gitUri!, blameRange)); } + + const fileSymbol = new SymbolInformation(gitUri.getFilename(), SymbolKind.File, '', new Location(gitUri.fileUri(), new Range(0, 0, 0, blameRange.start.character))); lenses.push(new GitRecentChangeCodeLens( - SymbolKind.File, + fileSymbol, gitUri, blameForRangeFn, blameRange, true, - new Range(0, 0, 0, blameRange.start.character), + fileSymbol.location.range, cfg.recentChange.command, dirtyCommand )); @@ -176,13 +178,15 @@ export class GitCodeLensProvider implements CodeLensProvider { if (blameForRangeFn === undefined) { blameForRangeFn = Functions.once(() => this._git.getBlameForRangeSync(blame!, gitUri!, blameRange)); } + + const fileSymbol = new SymbolInformation(gitUri.getFilename(), SymbolKind.File, '', new Location(gitUri.fileUri(), new Range(0, 1, 0, blameRange.start.character))); lenses.push(new GitAuthorsCodeLens( - SymbolKind.File, + fileSymbol, gitUri, blameForRangeFn, blameRange, true, - new Range(0, 1, 0, blameRange.start.character), + fileSymbol.location.range, cfg.authors.command )); } @@ -267,7 +271,7 @@ export class GitCodeLensProvider implements CodeLensProvider { if (!dirty) { blameForRangeFn = Functions.once(() => this._git.getBlameForRangeSync(blame!, gitUri!, blameRange)); } - lenses.push(new GitRecentChangeCodeLens(symbol.kind, gitUri, blameForRangeFn, blameRange, false, line.range.with(new Position(line.range.start.line, startChar)), cfg.recentChange.command, dirtyCommand)); + lenses.push(new GitRecentChangeCodeLens(symbol, gitUri, blameForRangeFn, blameRange, false, line.range.with(new Position(line.range.start.line, startChar)), cfg.recentChange.command, dirtyCommand)); startChar++; } @@ -296,7 +300,7 @@ export class GitCodeLensProvider implements CodeLensProvider { if (blameForRangeFn === undefined) { blameForRangeFn = Functions.once(() => this._git.getBlameForRangeSync(blame!, gitUri!, blameRange)); } - lenses.push(new GitAuthorsCodeLens(symbol.kind, gitUri, blameForRangeFn, blameRange, false, line.range.with(new Position(line.range.start.line, startChar)), cfg.authors.command)); + lenses.push(new GitAuthorsCodeLens(symbol, gitUri, blameForRangeFn, blameRange, false, line.range.with(new Position(line.range.start.line, startChar)), cfg.authors.command)); } } } @@ -314,7 +318,7 @@ export class GitCodeLensProvider implements CodeLensProvider { const recentCommit = Iterables.first(blame.commits.values()); let title = `${recentCommit.author}, ${recentCommit.formattedDate}`; if (Container.config.debug) { - title += ` [${SymbolKind[lens.symbolKind]}(${lens.range.start.character}-${lens.range.end.character}), Lines (${lens.blameRange.start.line + 1}-${lens.blameRange.end.line + 1}), Commit (${recentCommit.shortSha})]`; + title += ` [${SymbolKind[lens.symbol.kind]}(${lens.range.start.character}-${lens.range.end.character}${lens.symbol.containerName ? `|${lens.symbol.containerName}` : ''}), Lines (${lens.blameRange.start.line + 1}-${lens.blameRange.end.line + 1}), Commit (${recentCommit.shortSha})]`; } switch (lens.desiredCommand) { @@ -335,7 +339,7 @@ export class GitCodeLensProvider implements CodeLensProvider { const count = blame.authors.size; let title = `${count} ${count > 1 ? 'authors' : 'author'} (${Iterables.first(blame.authors.values()).name}${count > 1 ? ' and others' : ''})`; if (Container.config.debug) { - title += ` [${SymbolKind[lens.symbolKind]}(${lens.range.start.character}-${lens.range.end.character}), Lines (${lens.blameRange.start.line + 1}-${lens.blameRange.end.line + 1}), Authors (${Iterables.join(Iterables.map(blame.authors.values(), a => a.name), ', ')})]`; + title += ` [${SymbolKind[lens.symbol.kind]}(${lens.range.start.character}-${lens.range.end.character}${lens.symbol.containerName ? `|${lens.symbol.containerName}` : ''}), Lines (${lens.blameRange.start.line + 1}-${lens.blameRange.end.line + 1}), Authors (${Iterables.join(Iterables.map(blame.authors.values(), a => a.name), ', ')})]`; } switch (lens.desiredCommand) {