IList <SuggestItem> SuggestionsUno(SuggestionDependentData suggestionData)
        {
            var suggestions = ResolveSuggestions(suggestionData);

            suggestions = suggestions as IList <SuggestItem> ?? suggestions.ToList();
            return(suggestions.OrderBy(s => s.Text).OrderByDescending(s => s.Priority).ToList());
        }
        IList <SuggestItem> SuggestionsUX(SuggestionDependentData suggestionData)
        {
            var suggestions = CreateUXSuggestions.Do(suggestionData.Compiler,
                                                     suggestionData.FilePath,
                                                     suggestionData.SrcCode,
                                                     suggestionData.CaretOffset);

            var suggestionsList = suggestions.GroupBy(s => s.Text).Select(g => g.First()).OrderByDescending(s => s.Priority).ToList();

            return(suggestionsList);
        }
        IEnumerable <SuggestItem> ResolveSuggestions(SuggestionDependentData suggestionData)
        {
            if (suggestionData.Compiler == null)
            {
                return(Enumerable.Empty <SuggestItem>());
            }

            var codeCompleter = new CodeCompleter(suggestionData.Compiler,
                                                  new Source(suggestionData.MainPackage, suggestionData.FilePath.NativePath),
                                                  new CodeReader(suggestionData.SrcCode, suggestionData.CaretOffset),
                                                  suggestionData.CaretOffset,
                                                  Parser.Parse(suggestionData.SrcCode));

            ConfidenceLevel level;
            var             suggestions = codeCompleter.SuggestCompletion("", out level);

            return(suggestions);
        }
        public bool SuggestionsBasedOnSyntax(SyntaxLanguageType type, SuggestionDependentData suggestionData, out IList <SuggestItem> suggestItems)
        {
            suggestItems = null;
            var invalidType = false;

            switch (type)
            {
            case SyntaxLanguageType.Uno:
                suggestItems = SuggestionsUno(suggestionData);
                break;

            case SyntaxLanguageType.UX:
                suggestItems = SuggestionsUX(suggestionData);
                break;

            default:
                invalidType = true;
                break;
            }

            return(!invalidType);
        }