From c57a071cbe9ab2e555dc719ada64c20ccb19eacd Mon Sep 17 00:00:00 2001 From: Franco Pariani <franco19ps@gmail.com> Date: Wed, 20 Feb 2019 23:38:53 -0300 Subject: [PATCH] Jump to definition feature --- .../codemirror/functions_definition.js | 38 +++++++++++++++++++ .../app/layout/matefun/matefun.component.html | 1 + .../app/layout/matefun/matefun.component.ts | 5 +-- Frontend Angular 4/src/assets/i18n/en.json | 3 +- Frontend Angular 4/src/assets/i18n/es.json | 3 +- 5 files changed, 45 insertions(+), 5 deletions(-) diff --git a/Frontend Angular 4/src/app/layout/matefun/codemirror/functions_definition.js b/Frontend Angular 4/src/app/layout/matefun/codemirror/functions_definition.js index eea736df..a42e1e72 100644 --- a/Frontend Angular 4/src/app/layout/matefun/codemirror/functions_definition.js +++ b/Frontend Angular 4/src/app/layout/matefun/codemirror/functions_definition.js @@ -484,4 +484,42 @@ var mac = /Mac/.test(navigator.platform); return {list: list, from: CodeMirror.Pos(cur.line, start), to: CodeMirror.Pos(cur.line, end)}; } }; + + CodeMirror.defineExtension("jumpToDefinition", function(editor, options) { + var word = options && options.word || WORD; + var range = options && options.range || RANGE; + var cur = editor.getCursor(), curLine = editor.getLine(cur.line); + var end = cur.ch, start = end; + while (start && word.test(curLine.charAt(start - 1))) --start; + while (end && word.test(curLine.charAt(end + 1))) ++end; + var curWord = start != end && curLine.slice(start, end + 1); + + if (curWord.length > 0){ + var list = [], seen = {}; + var re_digits = new RegExp(/^\d+$/, "g"); + + var found = false; + + var re_funs = new RegExp(COMPLETE_FUNS.source, "g"); + for (var dir = -1; dir <= 1; dir += 2) { + var line = cur.line, endLine = Math.min(Math.max(line + dir * range, editor.firstLine()), editor.lastLine()) + dir; + for (; line != endLine && !found; line += dir) { + var text = editor.getLine(line), m; + while (m = re_funs.exec(text)) { + if (!re_digits.exec(m[1]) && (!curWord || m[1] == curWord) && !Object.prototype.hasOwnProperty.call(seen, m[1])) { + seen[m[1]] = true; + found = true; + + var newCursor = editor.getCursor(); + newCursor.line = line; + newCursor.ch = text.indexOf(m[1]); + editor.setCursor(newCursor); + + editor.cm.closeFunctionDefinition(); + } + } + } + } + } + }); }); diff --git a/Frontend Angular 4/src/app/layout/matefun/matefun.component.html b/Frontend Angular 4/src/app/layout/matefun/matefun.component.html index 08f1d823..d23c8e87 100755 --- a/Frontend Angular 4/src/app/layout/matefun/matefun.component.html +++ b/Frontend Angular 4/src/app/layout/matefun/matefun.component.html @@ -135,6 +135,7 @@ <label><b>Ctrl+G</b> {{ "i18n.shortcuts.saveFile" | translate }}</label> <label><b>Ctrl+{{ "i18n.shortcuts.space" | translate }}</b> {{ "i18n.shortcuts.autocomplete" | translate }}</label> <label><b>Ctrl+Shift+K</b> {{ "i18n.shortcuts.comment" | translate }}</label> + <label><b>Alt+.</b> {{ "i18n.shortcuts.functionNavigation" | translate }}</label> </div> </div> </ng-template> diff --git a/Frontend Angular 4/src/app/layout/matefun/matefun.component.ts b/Frontend Angular 4/src/app/layout/matefun/matefun.component.ts index 33af3cec..da9f407b 100755 --- a/Frontend Angular 4/src/app/layout/matefun/matefun.component.ts +++ b/Frontend Angular 4/src/app/layout/matefun/matefun.component.ts @@ -453,9 +453,8 @@ export class MateFunComponent { }else{ this.modificado = false; } - } - if (event.ctrlKey && event.shiftKey && event.key == 'K') - this.codemirror.instance.toggleComment(); + }else if (event.ctrlKey && event.shiftKey && event.key == 'K') this.codemirror.instance.toggleComment(); + else if (event.altKey && event.key == '.') this.codemirror.instance.jumpToDefinition(this.codemirror.instance.doc, event); } clickEnEditor(event){ diff --git a/Frontend Angular 4/src/assets/i18n/en.json b/Frontend Angular 4/src/assets/i18n/en.json index e9902a07..f8d6d324 100644 --- a/Frontend Angular 4/src/assets/i18n/en.json +++ b/Frontend Angular 4/src/assets/i18n/en.json @@ -129,7 +129,8 @@ "saveFile" : "Save File", "autocomplete" : "Autocomplete", "space" : "Space", - "comment" : "Comment/Uncomment" + "comment" : "Comment/Uncomment", + "functionNavigation" : "Jump to the definition" } } } diff --git a/Frontend Angular 4/src/assets/i18n/es.json b/Frontend Angular 4/src/assets/i18n/es.json index 323268ae..f13b7b15 100644 --- a/Frontend Angular 4/src/assets/i18n/es.json +++ b/Frontend Angular 4/src/assets/i18n/es.json @@ -129,7 +129,8 @@ "saveFile" : "Guardar archivo", "autocomplete" : "Autocompletar", "space" : "Espacio", - "comment" : "Comentar/Descomentar" + "comment" : "Comentar/Descomentar", + "functionNavigation" : "Saltar a la definición" } } } -- GitLab