Tweak order of suggestions in autocomplete to be more useful

This commit is contained in:
David Evans 2017-11-22 18:38:36 +00:00
parent 7b8af40a24
commit da7b03d3ed
1 changed files with 24 additions and 16 deletions

View File

@ -4,6 +4,13 @@ define(['core/ArrayUtilities'], (array) => {
const CM_ERROR = {type: 'error line-error', then: {'': 0}}; const CM_ERROR = {type: 'error line-error', then: {'': 0}};
const makeCommands = ((() => { const makeCommands = ((() => {
// The order of commands inside "then" blocks directly influences the
// order they are displayed to the user in autocomplete menus.
// This relies on the fact that common JS engines maintain insertion
// order in objects, though this is not guaranteed. It could be switched
// to use Map objects instead for strict compliance, at the cost of
// extra syntax.
const end = {type: '', suggest: '\n', then: {}}; const end = {type: '', suggest: '\n', then: {}};
const hiddenEnd = {type: '', then: {}}; const hiddenEnd = {type: '', then: {}};
@ -14,6 +21,8 @@ define(['core/ArrayUtilities'], (array) => {
const textToEnd = textTo({'\n': end}); const textToEnd = textTo({'\n': end});
const aliasListToEnd = {type: 'variable', suggest: 'Agent', then: { const aliasListToEnd = {type: 'variable', suggest: 'Agent', then: {
'': 0, '': 0,
'\n': end,
',': {type: 'operator', suggest: true, then: {'': 1}},
'as': {type: 'keyword', suggest: true, then: { 'as': {type: 'keyword', suggest: true, then: {
'': {type: 'variable', suggest: 'Agent', then: { '': {type: 'variable', suggest: 'Agent', then: {
'': 0, '': 0,
@ -21,15 +30,16 @@ define(['core/ArrayUtilities'], (array) => {
'\n': end, '\n': end,
}}, }},
}}, }},
',': {type: 'operator', suggest: true, then: {'': 1}},
'\n': end,
}}; }};
function agentListTo(exit) { function agentListTo(exit) {
return {type: 'variable', suggest: 'Agent', then: Object.assign({ return {type: 'variable', suggest: 'Agent', then: Object.assign({},
exit,
{
'': 0, '': 0,
',': {type: 'operator', suggest: true, then: {'': 1}}, ',': {type: 'operator', suggest: true, then: {'': 1}},
}, exit)}; }
)};
} }
const agentListToText = agentListTo({ const agentListToText = agentListTo({
@ -135,16 +145,14 @@ define(['core/ArrayUtilities'], (array) => {
then: makeOpBlock(agentToOptText), then: makeOpBlock(agentToOptText),
}; };
const then = { const then = {'': 0};
':': { arrows.forEach((arrow) => (then[arrow] = connect));
then[':'] = {
type: 'operator', type: 'operator',
suggest: true, suggest: true,
override: 'Label', override: 'Label',
then: {}, then: {},
},
'': 0,
}; };
arrows.forEach((arrow) => (then[arrow] = connect));
return makeOpBlock({type: 'variable', suggest: 'Agent', then}); return makeOpBlock({type: 'variable', suggest: 'Agent', then});
} }
@ -253,7 +261,7 @@ define(['core/ArrayUtilities'], (array) => {
return (arrows) => { return (arrows) => {
return { return {
type: 'error line-error', type: 'error line-error',
then: Object.assign(BASE_THEN, makeCMConnect(arrows)), then: Object.assign({}, BASE_THEN, makeCMConnect(arrows)),
}; };
}; };
})()); })());