in experimental/adaptive-tool/server/lu/src/providers/keyBinding.ts [31:154]
function onEnterKey(args: any[], documents: TextDocuments<TextDocument>, connection: Connection) {
const document = documents.get(args[0]);
const cursorPos: Position = args[1];
const textBeforeCursor = document?.getText({
start: {
line: cursorPos.line,
character: 0
},
end: cursorPos
});
const lineBreakPos = cursorPos;
let matches: RegExpExecArray | { replace: (arg0: string, arg1: string) => void; }[];
const match = textBeforeCursor?.match(/^\s*@\s*(\w+)\s*=\s*$/);
if (match !== null) {
const fullContent = document?.getText();
const luContent = extractLUISContent(fullContent!);
luContent.then(luisJson => {
if (luisJson != null) {
const entities : string[] = [];
console.log(luisJson["entities"]);
luisJson['entities'].forEach((entity : any) => {
entities.push(entity.name);
});
if (entities.includes(match![1])) {
// it's a ml entity, add \n\t- @
const replacedStr = `\n\t- @ `;
connection.workspace.applyEdit({
documentChanges: [
TextDocumentEdit.create({ uri: document!.uri, version: document!.version }, [
TextEdit.insert(lineBreakPos, replacedStr)
])
]
});
} else {
// it's not a ml entity, the parser will fail, just add \n
connection.workspace.applyEdit({
documentChanges: [
TextDocumentEdit.create({ uri: document!.uri, version: document!.version }, [
TextEdit.insert(lineBreakPos, '\n')
])
]
});
}
} else {
// it's not a ml entity, the parser will fail, just add \n
connection.workspace.applyEdit({
documentChanges: [
TextDocumentEdit.create({ uri: document!.uri, version: document!.version }, [
TextEdit.insert(lineBreakPos, '\n')
])
]
});
}
});
} else if ((matches = /^(\s*)@\s*list\s*\S+\s*=\s*/.exec(textBeforeCursor!)!) !== null) {
// in '@ list' line
const replacedStr = `\n${matches[1]}\t- `;
connection.workspace.applyEdit({
documentChanges: [
TextDocumentEdit.create({ uri: document!.uri, version: document!.version }, [
TextEdit.insert(lineBreakPos, replacedStr)
])
]
});
} else if ((matches = /^(\s*-\s*@).*\S+.*/.exec(textBeforeCursor!)!) !== null) {
// in '- @' line
const replacedStr = `\n${matches[1]} `;
connection.workspace.applyEdit({
documentChanges: [
TextDocumentEdit.create({ uri: document!.uri, version: document!.version }, [
TextEdit.insert(lineBreakPos, replacedStr)
])
]
});
} else if ((matches = /^(\s*-\s*@)\s*$/.exec(textBeforeCursor!)!) !== null) {
// in '- @' empty line, enter would delete the head dash
const range = {start: {line: lineBreakPos.line, character: 0}, end: {line: lineBreakPos.line, character: lineBreakPos.character}};
connection.workspace.applyEdit({
documentChanges: [
TextDocumentEdit.create({ uri: document!.uri, version: document!.version }, [
TextEdit.del(range)
])
]
});
} else if ((matches = /^(\s*[-#]).*\S+.*/.exec(textBeforeCursor!)!) !== null && /^\s*-\s*@\s*$/.exec(textBeforeCursor!) == null) {
// in '- ' line
let replacedStr;
if (/:\s*$/.exec(textBeforeCursor!) !== null) {
replacedStr = `\n\t${matches[1].replace('#', '-')} `;
} else {
replacedStr = `\n${matches[1].replace('#', '-')} `;
}
connection.workspace.applyEdit({
documentChanges: [
TextDocumentEdit.create({ uri: document!.uri, version: document!.version }, [
TextEdit.insert(lineBreakPos, replacedStr)
])
]
});
} else if ((matches = /^(\s*-)\s*$/.exec(textBeforeCursor!)!) !== null) {
// in '-' empty line, enter would delete the head dash
const range = {start: {line: lineBreakPos.line, character: 0}, end: {line: lineBreakPos.line, character: lineBreakPos.character}};
connection.workspace.applyEdit({
documentChanges: [
TextDocumentEdit.create({ uri: document!.uri, version: document!.version }, [
TextEdit.del(range)
])
]
});
} else {
connection.workspace.applyEdit({
documentChanges: [
TextDocumentEdit.create({ uri: document!.uri, version: document!.version }, [
TextEdit.insert(lineBreakPos, '\n')
])
]
});
}
}