function processSuggestions()

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;
}