mirror of
https://github.com/microsoft/vscode-extension-samples.git
synced 2026-04-27 16:55:44 +08:00
smarter sorting of references, better merging of neighour references, fixes
This commit is contained in:
@ -50,6 +50,10 @@ var ContentProvider = (function () {
|
||||
// printing, and formatting references
|
||||
var _a = decodeLocation(uri), target = _a[0], pos = _a[1];
|
||||
return vscode.commands.executeCommand('vscode.executeReferenceProvider', target, pos).then(function (locations) {
|
||||
// sort by locations and shuffle to begin with target
|
||||
var idx = 0;
|
||||
locations.sort(ContentProvider._compareLocations).find(function (loc, i) { return loc.uri.toString() === target.toString() && (idx = i) && true; });
|
||||
locations.push.apply(locations, locations.splice(0, idx));
|
||||
var document = new referencesDocument_1.default(_this._onDidChange, uri, locations);
|
||||
_this._documents.set(uri.toString(), document);
|
||||
return document.value;
|
||||
@ -67,6 +71,17 @@ var ContentProvider = (function () {
|
||||
doc.join().then(function () { return editor.setDecorations(_this._editorDecoration, doc.ranges); });
|
||||
}
|
||||
};
|
||||
ContentProvider._compareLocations = function (a, b) {
|
||||
if (a.uri.toString() < b.uri.toString()) {
|
||||
return -1;
|
||||
}
|
||||
else if (a.uri.toString() > b.uri.toString()) {
|
||||
return 1;
|
||||
}
|
||||
else {
|
||||
return a.range.start.compareTo(b.range.start);
|
||||
}
|
||||
};
|
||||
ContentProvider.scheme = 'references';
|
||||
return ContentProvider;
|
||||
}());
|
||||
|
||||
@ -1 +1 @@
|
||||
{"version":3,"file":"contentProvider.js","sourceRoot":"","sources":["../src/contentProvider.ts"],"names":[],"mappings":"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"}
|
||||
{"version":3,"file":"contentProvider.js","sourceRoot":"","sources":["../src/contentProvider.ts"],"names":[],"mappings":"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"}
|
||||
@ -7,7 +7,7 @@ var ReferencesDocument = (function () {
|
||||
function ReferencesDocument(emitter, uri, locations) {
|
||||
this._emitter = emitter;
|
||||
this._uri = uri;
|
||||
this._locations = locations.sort(ReferencesDocument._compareLocations);
|
||||
this._locations = locations;
|
||||
// print header
|
||||
this._lines = [("Found " + this._locations.length + " references")];
|
||||
this._ranges = [];
|
||||
@ -70,48 +70,40 @@ var ReferencesDocument = (function () {
|
||||
return vscode.workspace.openTextDocument(uri).then(function (doc) {
|
||||
_this._lines.push('', uri.toString());
|
||||
for (var i = 0; i < ranges.length; i++) {
|
||||
var range = ranges[i];
|
||||
var line = range.start.line;
|
||||
var prev = ranges[i - 1];
|
||||
_this._appendContext(doc, line, prev ? Math.min(2, line - prev.start.line) : 2, false);
|
||||
_this._appendMatch(doc, range);
|
||||
var next = ranges[i + 1];
|
||||
_this._appendContext(doc, line + 1, next ? Math.min(2, next.start.line - line) : 2, true);
|
||||
if (next) {
|
||||
_this._lines.push(' ...');
|
||||
}
|
||||
var line = ranges[i].start.line;
|
||||
_this._appendLeading(doc, line, ranges[i - 1]);
|
||||
_this._appendMatch(doc, line, ranges[i]);
|
||||
_this._appendTrailing(doc, line, ranges[i + 1]);
|
||||
}
|
||||
}, function (err) {
|
||||
_this._lines.push('', "Failed to load '" + uri.toString() + "'\n\n" + String(err), '');
|
||||
});
|
||||
};
|
||||
ReferencesDocument.prototype._appendContext = function (doc, line, offset, down) {
|
||||
var from = down ? line : line - offset;
|
||||
var to = down ? line + offset : line;
|
||||
while (from < to) {
|
||||
if (from >= 0 && from < doc.lineCount) {
|
||||
var text = doc.lineAt(from).text;
|
||||
this._lines.push((" " + (from + 1)) + (text && " " + text));
|
||||
}
|
||||
from++;
|
||||
ReferencesDocument.prototype._appendLeading = function (doc, line, previous) {
|
||||
var from = Math.max(0, line - 3, previous && previous.end.line || 0);
|
||||
while (++from < line) {
|
||||
var text = doc.lineAt(from).text;
|
||||
this._lines.push((" " + (from + 1)) + (text && " " + text));
|
||||
}
|
||||
};
|
||||
ReferencesDocument.prototype._appendMatch = function (doc, range) {
|
||||
var line = range.start.line;
|
||||
ReferencesDocument.prototype._appendMatch = function (doc, line, match) {
|
||||
var text = doc.lineAt(line).text;
|
||||
var preamble = " " + (line + 1) + ": ";
|
||||
this._ranges.push(new vscode.Range(this._lines.length, preamble.length + range.start.character, this._lines.length, preamble.length + range.end.character));
|
||||
this._ranges.push(new vscode.Range(this._lines.length, preamble.length + match.start.character, this._lines.length, preamble.length + match.end.character));
|
||||
this._lines.push(preamble + text);
|
||||
};
|
||||
ReferencesDocument._compareLocations = function (a, b) {
|
||||
if (a.uri.toString() < b.uri.toString()) {
|
||||
return -1;
|
||||
ReferencesDocument.prototype._appendTrailing = function (doc, line, next) {
|
||||
var to = Math.min(doc.lineCount, line + 3);
|
||||
if (next && next.start.line - to <= 2) {
|
||||
// next is too close
|
||||
return;
|
||||
}
|
||||
else if (a.uri.toString() > b.uri.toString()) {
|
||||
return 1;
|
||||
while (++line < to) {
|
||||
var text = doc.lineAt(line).text;
|
||||
this._lines.push((" " + (line + 1)) + (text && " " + text));
|
||||
}
|
||||
else {
|
||||
return a.range.start.compareTo(b.range.start);
|
||||
if (next) {
|
||||
this._lines.push(" ...");
|
||||
}
|
||||
};
|
||||
return ReferencesDocument;
|
||||
|
||||
@ -1 +1 @@
|
||||
{"version":3,"file":"referencesDocument.js","sourceRoot":"","sources":["../src/referencesDocument.ts"],"names":[],"mappings":"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"}
|
||||
{"version":3,"file":"referencesDocument.js","sourceRoot":"","sources":["../src/referencesDocument.ts"],"names":[],"mappings":"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"}
|
||||
@ -24,6 +24,9 @@
|
||||
"languages": [
|
||||
{
|
||||
"id": "locations",
|
||||
"aliases": [
|
||||
"Locations"
|
||||
],
|
||||
"extensions": [
|
||||
".locations"
|
||||
]
|
||||
|
||||
@ -61,6 +61,11 @@ export default class ContentProvider implements vscode.TextDocumentContentProvid
|
||||
const [target, pos] = decodeLocation(uri);
|
||||
return vscode.commands.executeCommand<vscode.Location[]>('vscode.executeReferenceProvider', target, pos).then(locations => {
|
||||
|
||||
// sort by locations and shuffle to begin with target
|
||||
let idx = 0;
|
||||
locations.sort(ContentProvider._compareLocations).find((loc, i) => loc.uri.toString() === target.toString() && (idx = i) && true);
|
||||
locations.push(...locations.splice(0, idx));
|
||||
|
||||
let document = new ReferencesDocument(this._onDidChange, uri, locations);
|
||||
this._documents.set(uri.toString(), document);
|
||||
return document.value;
|
||||
@ -78,6 +83,16 @@ export default class ContentProvider implements vscode.TextDocumentContentProvid
|
||||
doc.join().then(() => editor.setDecorations(this._editorDecoration, doc.ranges));
|
||||
}
|
||||
}
|
||||
|
||||
private static _compareLocations(a: vscode.Location, b: vscode.Location): number {
|
||||
if (a.uri.toString() < b.uri.toString()) {
|
||||
return -1;
|
||||
} else if (a.uri.toString() > b.uri.toString()) {
|
||||
return 1;
|
||||
} else {
|
||||
return a.range.start.compareTo(b.range.start)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
let seq = 0;
|
||||
|
||||
@ -18,7 +18,7 @@ export default class ReferencesDocument {
|
||||
constructor(emitter: vscode.EventEmitter<vscode.Uri>, uri: vscode.Uri, locations: vscode.Location[]) {
|
||||
this._emitter = emitter;
|
||||
this._uri = uri;
|
||||
this._locations = locations.sort(ReferencesDocument._compareLocations);
|
||||
this._locations = locations;
|
||||
|
||||
// print header
|
||||
this._lines = [`Found ${this._locations.length} references`];
|
||||
@ -66,8 +66,8 @@ export default class ReferencesDocument {
|
||||
resolve(this);
|
||||
return;
|
||||
}
|
||||
let [uri, ranges] = entry.value;
|
||||
|
||||
let [uri, ranges] = entry.value;
|
||||
this._fetchAndFormatLocation(vscode.Uri.parse(uri), ranges).then(lines => {
|
||||
this._emitter.fire(this._uri);
|
||||
next();
|
||||
@ -82,21 +82,12 @@ export default class ReferencesDocument {
|
||||
return vscode.workspace.openTextDocument(uri).then(doc => {
|
||||
|
||||
this._lines.push('', uri.toString());
|
||||
|
||||
for (let i = 0; i < ranges.length; i++) {
|
||||
const range = ranges[i];
|
||||
const {start: {line}} = range;
|
||||
|
||||
let prev = ranges[i - 1];
|
||||
this._appendContext(doc, line, prev ? Math.min(2, line - prev.start.line) : 2, false);
|
||||
|
||||
this._appendMatch(doc, range);
|
||||
|
||||
let next = ranges[i + 1];
|
||||
this._appendContext(doc, line + 1, next ? Math.min(2, next.start.line - line) : 2, true);
|
||||
|
||||
if (next) {
|
||||
this._lines.push(' ...');
|
||||
}
|
||||
const {start: {line}} = ranges[i];
|
||||
this._appendLeading(doc, line, ranges[i - 1]);
|
||||
this._appendMatch(doc, line, ranges[i]);
|
||||
this._appendTrailing(doc, line, ranges[i + 1]);
|
||||
}
|
||||
|
||||
}, err => {
|
||||
@ -104,34 +95,36 @@ export default class ReferencesDocument {
|
||||
});
|
||||
}
|
||||
|
||||
private _appendContext(doc: vscode.TextDocument, line: number, offset: number, down: boolean) {
|
||||
let from = down ? line : line - offset;
|
||||
let to = down ? line + offset : line;
|
||||
while (from < to) {
|
||||
if (from >= 0 && from < doc.lineCount) {
|
||||
const text = doc.lineAt(from).text;
|
||||
this._lines.push(` ${from + 1}` + (text && ` ${text}`));
|
||||
}
|
||||
from++;
|
||||
private _appendLeading(doc: vscode.TextDocument, line: number, previous: vscode.Range): void {
|
||||
let from = Math.max(0, line - 3, previous && previous.end.line || 0);
|
||||
while (++from < line) {
|
||||
const text = doc.lineAt(from).text;
|
||||
this._lines.push(` ${from + 1}` + (text && ` ${text}`));
|
||||
}
|
||||
}
|
||||
|
||||
private _appendMatch(doc: vscode.TextDocument, range: vscode.Range) {
|
||||
let line = range.start.line;
|
||||
private _appendMatch(doc: vscode.TextDocument, line:number, match: vscode.Range) {
|
||||
let text = doc.lineAt(line).text;
|
||||
let preamble = ` ${line + 1}: `;
|
||||
|
||||
this._ranges.push(new vscode.Range(this._lines.length, preamble.length + range.start.character, this._lines.length, preamble.length + range.end.character));
|
||||
this._ranges.push(new vscode.Range(
|
||||
this._lines.length, preamble.length + match.start.character,
|
||||
this._lines.length, preamble.length + match.end.character)
|
||||
);
|
||||
this._lines.push(preamble + text);
|
||||
}
|
||||
|
||||
private static _compareLocations(a: vscode.Location, b: vscode.Location): number {
|
||||
if (a.uri.toString() < b.uri.toString()) {
|
||||
return -1;
|
||||
} else if (a.uri.toString() > b.uri.toString()) {
|
||||
return 1;
|
||||
} else {
|
||||
return a.range.start.compareTo(b.range.start)
|
||||
private _appendTrailing(doc: vscode.TextDocument, line: number, next: vscode.Range): void {
|
||||
let to = Math.min(doc.lineCount, line + 3);
|
||||
if (next && next.start.line - to <= 2) {
|
||||
// next is too close
|
||||
return;
|
||||
}
|
||||
while (++line < to) {
|
||||
const text = doc.lineAt(line).text;
|
||||
this._lines.push(` ${line + 1}` + (text && ` ${text}`));
|
||||
}
|
||||
if (next) {
|
||||
this._lines.push(` ...`);
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user