From 6b507536df691803f76eca245673ee9ee66a95a5 Mon Sep 17 00:00:00 2001 From: dean Date: Wed, 15 Feb 2017 17:09:11 -0500 Subject: [PATCH 1/2] add return-to-declaration functionality --- dist/main/atom/commands/goToDeclaration.js | 25 ++++++++++++---- keymaps/atom-typescript.cson | 1 + lib/main/atom/commands/goToDeclaration.ts | 34 +++++++++++++++++----- menus/atomts-menus.cson | 1 + 4 files changed, 48 insertions(+), 13 deletions(-) diff --git a/dist/main/atom/commands/goToDeclaration.js b/dist/main/atom/commands/goToDeclaration.js index d757995fc..da6a70d2f 100644 --- a/dist/main/atom/commands/goToDeclaration.js +++ b/dist/main/atom/commands/goToDeclaration.js @@ -3,6 +3,13 @@ const tslib_1 = require("tslib"); const registry_1 = require("./registry"); const utils_1 = require("../utils"); const simpleSelectionView_1 = require("../views/simpleSelectionView"); +const prevCursorPositions = []; +function open(item) { + atom.workspace.open(item.file, { + initialLine: item.start.line - 1, + initialColumn: item.start.offset - 1 + }); +} registry_1.commands.set("typescript:go-to-declaration", deps => { return (e) => tslib_1.__awaiter(this, void 0, void 0, function* () { if (!utils_1.commandForTypeScript(e)) { @@ -11,6 +18,7 @@ registry_1.commands.set("typescript:go-to-declaration", deps => { const location = utils_1.getFilePathPosition(); const client = yield deps.getClient(location.file); const result = yield client.executeDefinition(location); + prevCursorPositions.push(location); if (result.body.length > 1) { simpleSelectionView_1.simpleSelectionView({ items: result.body, @@ -27,11 +35,18 @@ registry_1.commands.set("typescript:go-to-declaration", deps => { else { open(result.body[0]); } - function open(item) { - atom.workspace.open(item.file, { - initialLine: item.start.line - 1, - initialColumn: item.start.offset - 1 - }); + }); +}); +registry_1.commands.set("typescript:return-from-declaration", deps => { + return (e) => tslib_1.__awaiter(this, void 0, void 0, function* () { + const position = prevCursorPositions.pop(); + if (!position) { + atom.notifications.addInfo('AtomTS: Previous position not found.'); + return; } + open({ + file: position.file, + start: { line: position.line, offset: position.offset } + }); }); }); diff --git a/keymaps/atom-typescript.cson b/keymaps/atom-typescript.cson index 14fe2b473..8ba14fdfc 100644 --- a/keymaps/atom-typescript.cson +++ b/keymaps/atom-typescript.cson @@ -12,6 +12,7 @@ # Stronger bindings 'atom-workspace': 'f6': 'typescript:build' + 'f10': 'typescript:return-from-declaration' 'f12': 'typescript:go-to-declaration' 'ctrl-\'': 'typescript:sync' 'cmd-\'': 'typescript:sync' diff --git a/lib/main/atom/commands/goToDeclaration.ts b/lib/main/atom/commands/goToDeclaration.ts index 7bd8cca9c..d06334b86 100644 --- a/lib/main/atom/commands/goToDeclaration.ts +++ b/lib/main/atom/commands/goToDeclaration.ts @@ -2,6 +2,15 @@ import {commands} from "./registry" import {commandForTypeScript, getFilePathPosition} from "../utils" import {simpleSelectionView} from "../views/simpleSelectionView" +const prevCursorPositions:any[] = []; + +function open(item: {file: string, start: {line: number, offset: number}}) { + atom.workspace.open(item.file, { + initialLine: item.start.line - 1, + initialColumn: item.start.offset - 1 + }) +} + commands.set("typescript:go-to-declaration", deps => { return async e => { if (!commandForTypeScript(e)) { @@ -12,6 +21,8 @@ commands.set("typescript:go-to-declaration", deps => { const client = await deps.getClient(location.file) const result = await client.executeDefinition(location) + prevCursorPositions.push(location); + if (result.body!.length > 1) { simpleSelectionView({ items: result.body!, @@ -27,12 +38,19 @@ commands.set("typescript:go-to-declaration", deps => { } else { open(result.body![0]) } - - function open(item: {file: string, start: {line: number, offset: number}}) { - atom.workspace.open(item.file, { - initialLine: item.start.line - 1, - initialColumn: item.start.offset - 1 - }) - } } -}) +}); + +commands.set("typescript:return-from-declaration", deps => { + return async e => { + const position = prevCursorPositions.pop(); + if (!position) { + atom.notifications.addInfo('AtomTS: Previous position not found.'); + return; + } + open({ + file: position.file, + start: { line: position.line, offset: position.offset } + }); + } +}); diff --git a/menus/atomts-menus.cson b/menus/atomts-menus.cson index 1149331d2..efda39830 100644 --- a/menus/atomts-menus.cson +++ b/menus/atomts-menus.cson @@ -7,6 +7,7 @@ 'submenu': [ { 'label': 'Build', 'command': 'typescript:build' } { 'label': 'Go To Declaration', 'command': 'typescript:go-to-declaration' } + { 'label': 'Return From Declaration', 'command': 'typescript:return-from-declaration' } ] ] } From 805414d58180f8792e6027d0f3b2ceec027df094 Mon Sep 17 00:00:00 2001 From: dean Date: Mon, 20 Feb 2017 11:26:37 -0500 Subject: [PATCH 2/2] add type annotation. don't add prev cursor position if multi select isn't picked --- dist/main/atom/commands/goToDeclaration.js | 7 +++++-- lib/main/atom/commands/goToDeclaration.ts | 12 +++++++----- 2 files changed, 12 insertions(+), 7 deletions(-) diff --git a/dist/main/atom/commands/goToDeclaration.js b/dist/main/atom/commands/goToDeclaration.js index da6a70d2f..44c3d64f7 100644 --- a/dist/main/atom/commands/goToDeclaration.js +++ b/dist/main/atom/commands/goToDeclaration.js @@ -18,7 +18,6 @@ registry_1.commands.set("typescript:go-to-declaration", deps => { const location = utils_1.getFilePathPosition(); const client = yield deps.getClient(location.file); const result = yield client.executeDefinition(location); - prevCursorPositions.push(location); if (result.body.length > 1) { simpleSelectionView_1.simpleSelectionView({ items: result.body, @@ -29,10 +28,14 @@ registry_1.commands.set("typescript:go-to-declaration", deps => { `; }, filterKey: 'filePath', - confirmed: item => open(item) + confirmed: item => { + prevCursorPositions.push(location); + open(item); + } }); } else { + prevCursorPositions.push(location); open(result.body[0]); } }); diff --git a/lib/main/atom/commands/goToDeclaration.ts b/lib/main/atom/commands/goToDeclaration.ts index d06334b86..18892466f 100644 --- a/lib/main/atom/commands/goToDeclaration.ts +++ b/lib/main/atom/commands/goToDeclaration.ts @@ -1,8 +1,8 @@ import {commands} from "./registry" -import {commandForTypeScript, getFilePathPosition} from "../utils" +import {commandForTypeScript, getFilePathPosition, FileLocationQuery} from "../utils" import {simpleSelectionView} from "../views/simpleSelectionView" -const prevCursorPositions:any[] = []; +const prevCursorPositions:FileLocationQuery[] = []; function open(item: {file: string, start: {line: number, offset: number}}) { atom.workspace.open(item.file, { @@ -21,8 +21,6 @@ commands.set("typescript:go-to-declaration", deps => { const client = await deps.getClient(location.file) const result = await client.executeDefinition(location) - prevCursorPositions.push(location); - if (result.body!.length > 1) { simpleSelectionView({ items: result.body!, @@ -33,9 +31,13 @@ commands.set("typescript:go-to-declaration", deps => { ` }, filterKey: 'filePath', - confirmed: item => open(item) + confirmed: item => { + prevCursorPositions.push(location); + open(item) + } }) } else { + prevCursorPositions.push(location); open(result.body![0]) } }