in experimental/adaptive-tool/server/lu/src/providers/completion.ts [181:311]
function processSuggestions(luisJson: any, curLineContent: string, fullContent: string) {
const suggestionEntityList = matchingPattern.getSuggestionEntities(luisJson, matchingPattern.suggestionAllEntityTypes);
const regexEntityList = matchingPattern.getRegexEntities(luisJson);
const completionList: CompletionItem[] = []
//suggest a regex pattern for seperated line definition
if (matchingPattern.isSeperatedEntityDef(curLineContent)) {
const seperatedEntityDef = /^\s*@\s*([\w._]+|"[\w._\s]+")+\s*=\s*$/;
let entityName = '';
const matchGroup = curLineContent.match(seperatedEntityDef);
if (matchGroup && matchGroup.length >= 2) {
entityName = matchGroup[1].trim();
}
if (regexEntityList.includes(entityName)) {
const item = {
label: 'RegExp Entity',
kind: CompletionItemKind.Keyword,
insertText: `//`,
documentation: `regex enitity`,
};
completionList.push(item);
}
}
// auto suggest pattern
if (matchingPattern.matchedEnterPattern(curLineContent)) {
suggestionEntityList.forEach(name => {
const item = {
label: `Entity: ${name}`,
kind: CompletionItemKind.Property,
insertText: `${name}`,
documentation: `pattern suggestion for entity: ${name}`,
};
completionList.push(item);
});
}
// suggestions for entities in a seperated line
if (matchingPattern.isEntityType(curLineContent)) {
suggestionEntityList.forEach(entity => {
const item = {
label: entity,
kind: CompletionItemKind.Property,
insertText: `${entity}`,
documentation: `Enitity type: ${entity}`,
};
completionList.push(item);
});
}
if (matchingPattern.isCompositeEntity(curLineContent)) {
matchingPattern.getSuggestionEntities(luisJson, matchingPattern.suggestionNoCompositeEntityTypes).forEach(entity => {
const item = {
label: entity,
kind: CompletionItemKind.Property,
insertText: `${entity}`,
documentation: `Enitity type: ${entity}`,
};
completionList.push(item);
});
}
const suggestionRolesList = matchingPattern.getSuggestionRoles(luisJson, matchingPattern.suggestionAllEntityTypes);
// auto suggest roles
if (matchingPattern.matchedRolesPattern(curLineContent) || matchingPattern.matchedEntityPattern(curLineContent)) {
// {@ } or {entity: }
suggestionRolesList.forEach(name => {
const item = {
label: `Role: ${name}`,
kind: CompletionItemKind.Property,
insertText: `${name}`,
documentation: `roles suggestion for entity name: ${name}`,
};
completionList.push(item);
});
}
if (matchingPattern.matchedEntityPattern(curLineContent)) {
suggestionEntityList.forEach(name => {
const item = {
label: `Entity: ${name}`,
kind: CompletionItemKind.Property,
insertText: ` ${name}`,
documentation: `pattern suggestion for entity: ${name}`,
};
completionList.push(item);
});
}
if (matchingPattern.matchedEntityCanUsesFeature(curLineContent, fullContent, luisJson)) {
const enitityName = matchingPattern.extractEntityNameInUseFeature(curLineContent);
const suggestionFeatureList = matchingPattern.getSuggestionEntities(luisJson, matchingPattern.suggestionNoPatternAnyEntityTypes);
suggestionFeatureList.forEach(name => {
if (name !== enitityName) {
const item = {
label: `Entity: ${name}`,
kind: CompletionItemKind.Method,
insertText: `${name}`,
documentation: `Feature suggestion for current entity: ${name}`,
};
completionList.push(item);
}
});
}
if (matchingPattern.matchIntentInEntityDef(curLineContent)) {
const item = {
label: 'usesFeature?',
kind: CompletionItemKind.Keyword,
insertText: `usesFeature`,
documentation: `Does this intent usesFeature?`,
};
completionList.push(item);
}
if (matchingPattern.matchIntentUsesFeatures(curLineContent)) {
const suggestionFeatureList = matchingPattern.getSuggestionEntities(luisJson, matchingPattern.suggestionNoPatternAnyEntityTypes);
suggestionFeatureList.forEach(name => {
const item = {
label: `Entity: ${name}`,
kind: CompletionItemKind.Method,
insertText: `${name}`,
documentation: `Feature suggestion for current entity: ${name}`,
};
completionList.push(item);
});
}
return completionList;
}