diff --git a/dist/main/atom/commands/goToDeclaration.js b/dist/main/atom/commands/goToDeclaration.js index d757995fc..44c3d64f7 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)) { @@ -21,17 +28,28 @@ 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]); } - 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..18892466f 100644 --- a/lib/main/atom/commands/goToDeclaration.ts +++ b/lib/main/atom/commands/goToDeclaration.ts @@ -1,7 +1,16 @@ import {commands} from "./registry" -import {commandForTypeScript, getFilePathPosition} from "../utils" +import {commandForTypeScript, getFilePathPosition, FileLocationQuery} from "../utils" import {simpleSelectionView} from "../views/simpleSelectionView" +const prevCursorPositions:FileLocationQuery[] = []; + +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)) { @@ -22,17 +31,28 @@ 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]) } - - 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' } ] ] }