diff --git a/contentprovider-sample/out/contentProvider.js b/contentprovider-sample/out/contentProvider.js index b204e8ee..d6b32881 100644 --- a/contentprovider-sample/out/contentProvider.js +++ b/contentprovider-sample/out/contentProvider.js @@ -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; }()); diff --git a/contentprovider-sample/out/contentProvider.js.map b/contentprovider-sample/out/contentProvider.js.map index 8ad91686..d254eb5f 100644 --- a/contentprovider-sample/out/contentProvider.js.map +++ b/contentprovider-sample/out/contentProvider.js.map @@ -1 +1 @@ -{"version":3,"file":"contentProvider.js","sourceRoot":"","sources":["../src/contentProvider.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"contentProvider.js","sourceRoot":"","sources":["../src/contentProvider.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/contentprovider-sample/out/referencesDocument.js b/contentprovider-sample/out/referencesDocument.js index 85cf493d..204ba6c2 100644 --- a/contentprovider-sample/out/referencesDocument.js +++ b/contentprovider-sample/out/referencesDocument.js @@ -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; diff --git a/contentprovider-sample/out/referencesDocument.js.map b/contentprovider-sample/out/referencesDocument.js.map index c6801ba3..ecf2aed8 100644 --- a/contentprovider-sample/out/referencesDocument.js.map +++ b/contentprovider-sample/out/referencesDocument.js.map @@ -1 +1 @@ -{"version":3,"file":"referencesDocument.js","sourceRoot":"","sources":["../src/referencesDocument.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"referencesDocument.js","sourceRoot":"","sources":["../src/referencesDocument.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/contentprovider-sample/package.json b/contentprovider-sample/package.json index fea6b114..d4933baf 100644 --- a/contentprovider-sample/package.json +++ b/contentprovider-sample/package.json @@ -24,6 +24,9 @@ "languages": [ { "id": "locations", + "aliases": [ + "Locations" + ], "extensions": [ ".locations" ] diff --git a/contentprovider-sample/src/contentProvider.ts b/contentprovider-sample/src/contentProvider.ts index 96f28f0f..565e09ec 100644 --- a/contentprovider-sample/src/contentProvider.ts +++ b/contentprovider-sample/src/contentProvider.ts @@ -61,6 +61,11 @@ export default class ContentProvider implements vscode.TextDocumentContentProvid const [target, pos] = decodeLocation(uri); return vscode.commands.executeCommand('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; diff --git a/contentprovider-sample/src/referencesDocument.ts b/contentprovider-sample/src/referencesDocument.ts index 75da3540..02be644c 100644 --- a/contentprovider-sample/src/referencesDocument.ts +++ b/contentprovider-sample/src/referencesDocument.ts @@ -18,7 +18,7 @@ export default class ReferencesDocument { constructor(emitter: vscode.EventEmitter, 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(` ...`); } } } \ No newline at end of file