Skip to content

Commit

Permalink
feat: filter comment and strings completions option
Browse files Browse the repository at this point in the history
  • Loading branch information
mkslanc committed Jul 12, 2023
1 parent 30979cb commit c1cdbe0
Show file tree
Hide file tree
Showing 6 changed files with 53 additions and 20 deletions.
1 change: 1 addition & 0 deletions ace.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -234,6 +234,7 @@ export namespace Ace {
relativeLineNumbers: boolean;
enableMultiselect: boolean;
enableKeyboardAccessibility: boolean;
filterStringsCompletions: boolean;
}

export interface SearchOptions {
Expand Down
38 changes: 21 additions & 17 deletions src/autocomplete/text_completer.js
Original file line number Diff line number Diff line change
Expand Up @@ -37,20 +37,20 @@ function wordDistance(doc, pos) {
return wordScores;
}

function completionsFromMode(session, pos) {
var completerTokens = session.$mode.$completerTokens;
function filterStringsFromCompletions(session, pos) {
var filterRegExp = /string|comment|^comment\.doc.*/;
var lines = session.bgTokenizer.lines;
var exclude = lines[pos.row].find(el => el.start === pos.column - el.value.length);
var exclude = lines[pos.row] && lines[pos.row].find(el => el.start === pos.column - el.value.length);
var wordScores = Object.create(null);

lines = lines.flat();
var linesLength = lines.length;
var flatLines = lines.flat();
var linesLength = flatLines.length;
for (var i = 0; i < linesLength; i++) {
var token = lines[i];
var token = flatLines[i];
if (!token || exclude && token.value === exclude.value) {
continue;
}
if (completerTokens.includes(token.type) && identifierRe.test(token.value)) {
if (!filterRegExp.test(token.type) && identifierRe.test(token.value)) {
wordScores[token.value] = 0;
}
}
Expand All @@ -59,15 +59,19 @@ function completionsFromMode(session, pos) {
}

exports.getCompletions = function (editor, session, pos, prefix, callback) {
var wordScore = session.$mode.$completerTokens ? completionsFromMode(session, pos) : wordDistance(session, pos);
var wordList = Object.keys(wordScore);
var wordScore = editor.$filterStringsCompletions ? filterStringsFromCompletions(session, pos) : wordDistance(session, pos);
if (!wordScore) {
callback(null, null)
} else {
var wordList = Object.keys(wordScore);

callback(null, wordList.map(function (word) {
return {
caption: word,
value: word,
score: wordScore[word],
meta: "local"
};
}));
callback(null, wordList.map(function (word) {
return {
caption: word,
value: word,
score: wordScore[word],
meta: "local"
};
}));
}
};
27 changes: 25 additions & 2 deletions src/autocomplete_test.js
Original file line number Diff line number Diff line change
Expand Up @@ -12,9 +12,11 @@ var user = require("./test/user");
var Range = require("./range").Range;
require("./ext/language_tools");
var Autocomplete = require("./autocomplete").Autocomplete;
var textCompleter = require("./autocomplete/text_completer");
var JavaScriptMode = require("./mode/javascript").Mode;

var editor;
function initEditor(value) {
function initEditor(value, mode) {
if (editor) {
editor.destroy();
editor.container.remove();
Expand All @@ -24,7 +26,8 @@ function initEditor(value) {
value: value,
maxLines: 10,
enableBasicAutocompletion: true,
enableLiveAutocompletion: true
enableLiveAutocompletion: true,
mode: mode
});
document.body.appendChild(editor.container);
editor.focus();
Expand Down Expand Up @@ -162,6 +165,26 @@ module.exports = {
done();
});
},
"test: filter strings and comments from local completions list": function (done) {
var editor = initEditor("//comment here\n /**\n * doc comment\n**/'string'\nsomeIdentifier\n", new JavaScriptMode());
editor.completers = [textCompleter];
editor.moveCursorTo(3, 0);
editor.renderer.$loop._flush();

sendKey("o");
var popup = editor.completer.popup;
afterRenderCheck(popup, function () {
assert.equal(popup.data.length, 3);
editor.setOption("filterStringsCompletions", true);
editor.onCommandKey(null, 0, 13);
sendKey(" ");
sendKey("o");
afterRenderCheck(popup, function () {
assert.equal(popup.data.length, 1); //only identifier left
done();
});
});
},
"test: different completers tooltips": function (done) {
var editor = initEditor("");
var firstDoc = "<b>First</b>";
Expand Down
3 changes: 3 additions & 0 deletions src/ext/language_tools.js
Original file line number Diff line number Diff line change
Expand Up @@ -221,5 +221,8 @@ require("../config").defineOptions(Editor.prototype, "editor", {
}
},
value: false
},
filterStringsCompletions: {
initialValue: false
}
});
3 changes: 3 additions & 0 deletions src/ext/options.js
Original file line number Diff line number Diff line change
Expand Up @@ -192,6 +192,9 @@ var optionGroups = {
"Live Autocompletion": {
path: "enableLiveAutocompletion"
},
"Filter Comments and String Completions": {
path: "filterStringsCompletions"
},
"Custom scrollbar": {
path: "customScrollbar"
},
Expand Down
1 change: 0 additions & 1 deletion src/mode/javascript.js
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,6 @@ oop.inherits(Mode, TextMode);
this.$pairQuotesAfter = {
"`": /\w/
};
this.$completerTokens = ["identifier", "entity.name.function", "storage.type", "variable.parameter"];

this.getNextLineIndent = function(state, line, tab) {
var indent = this.$getIndent(line);
Expand Down

0 comments on commit c1cdbe0

Please sign in to comment.