Exemplo n.º 1
0
        public override ICompletionDataList HandleCodeCompletion(CodeCompletionContext completionContext, char triggerChar, ref int triggerWordLength)
        {
            var l = new CompletionDataList();

            if (!(triggerChar == ' ' ||
                  char.IsLetter(triggerChar) ||
                  triggerChar == '@' ||
                  triggerChar == '(' ||
                  triggerChar == '_' ||
                  triggerChar == '.' ||
                  triggerChar == '\0'))
            {
                return(l);
            }

            triggerWordLength = (char.IsLetter(triggerChar) || triggerChar == '_' || triggerChar == '@') ? 1 : 0;

            // Require a parsed D source

            var dom = base.Document.ParsedDocument as ParsedDModule;

            if (dom != null && dom.DDom != null)
            {
                lock (dom.DDom)
                    DCodeCompletionSupport.BuildCompletionData(
                        Document,
                        dom.DDom,
                        completionContext,
                        l,
                        triggerChar);
            }

            return(l);
        }
Exemplo n.º 2
0
        public override ICompletionDataList HandleCodeCompletion(CodeCompletionContext completionContext, char triggerChar, ref int triggerWordLength)
        {
            if (!(triggerChar == ' ' || char.IsLetter(triggerChar) || triggerChar == '_' || triggerChar == '.' || triggerChar == '\0'))
            {
                return(null);
            }
            else if ((char.IsLetter(triggerChar) && !DResolver.IsTypeIdentifier(Document.Editor.Text, Document.Editor.Caret.Offset)))
            {
                return(null);
            }

            triggerWordLength = DCodeCompletionSupport.IsIdentifierChar(triggerChar) ? 1 : 0;

            // Require a parsed D source
            var dom = base.Document.ParsedDocument as ParsedDModule;

            if (dom == null)
            {
                return(null);
            }

            // Check if in comment or string literal
            if (DResolver.CommentSearching.IsInCommentAreaOrString(Document.Editor.Text, completionContext.TriggerOffset))
            {
                return(null);
            }

            var l = new CompletionDataList();

            DCodeCompletionSupport.BuildCompletionData(Document, dom.DDom, completionContext, l, triggerChar == '\0'?"":triggerChar.ToString());

            return(l);
        }
Exemplo n.º 3
0
        public override ICompletionDataList HandleCodeCompletion(CodeCompletionContext completionContext, char triggerChar, ref int triggerWordLength)
        {
            updater.FinishUpdate();

            if (!EnableAutoCodeCompletion && char.IsLetter(triggerChar))
            {
                return(null);
            }

            if (char.IsLetterOrDigit(triggerChar) || triggerChar == '_')
            {
                if (completionContext.TriggerOffset > 1)
                {
                    var prevChar = document.Editor.GetCharAt(completionContext.TriggerOffset - 2);
                    if (char.IsLetterOrDigit(prevChar) || prevChar == '"' || prevChar == '#')                    // Don't trigger if we're already typing an identifier or if we're typing a string suffix (kinda hacky though)
                    {
                        return(null);
                    }
                }
            }
            else if (!(triggerChar == ' ' ||
                       triggerChar == '@' ||
                       triggerChar == '(' ||
                       triggerChar == '.' ||
                       triggerChar == '\0'))
            {
                return(null);
            }

            triggerWordLength = (char.IsLetter(triggerChar) || triggerChar == '_' || triggerChar == '@') ? 1 : 0;

            // Require a parsed D source

            var dom = base.Document.ParsedDocument as ParsedDModule;

            if (dom == null || dom.DDom == null)
            {
                return(null);
            }

            var l = new CompletionDataList();

            if (D_Parser.Misc.CompletionOptions.Instance.EnableSuggestionMode)
            {
                l.AddKeyHandler(new SuggestionKeyHandler());
                l.AutoCompleteUniqueMatch = false;
                l.AutoCompleteEmptyMatch  = false;
                l.AutoSelect = true;
            }
            else
            {
                l.AddKeyHandler(new DoubleUnderScoreWorkaroundHandler(this));
            }

            lock (dom.DDom)
                DCodeCompletionSupport.BuildCompletionData(
                    Document,
                    dom.DDom,
                    completionContext,
                    l,
                    triggerChar);

            return(l.Count != 0 ? l : null);
        }
Exemplo n.º 4
0
        public override ICompletionDataList HandleCodeCompletion(CodeCompletionContext completionContext, char triggerChar, ref int triggerWordLength)
        {
            if (!currentWrapperNullfied && workaround_currentWrapper != null)
            {
                workaround_currentWrapper.SetValue(document, null);
                currentWrapperNullfied = true;
            }

            var isLetter = char.IsLetter(triggerChar) || triggerChar == '_';

            if (char.IsDigit(triggerChar) || !EnableAutoCodeCompletion && isLetter)
            {
                return(null);
            }

            if (isLetter)
            {
                if (completionContext.TriggerOffset > 1)
                {
                    var prevChar = document.Editor.GetCharAt(completionContext.TriggerOffset - 2);
                    if (char.IsLetterOrDigit(prevChar) || prevChar == '_' || prevChar == '"' || prevChar == '#')                   // Don't trigger if we're already typing an identifier or if we're typing a string suffix (kinda hacky though)
                    {
                        return(null);
                    }
                }
            }
            else if (!(triggerChar == ' ' ||
                       triggerChar == '@' ||
                       triggerChar == '(' ||
                       triggerChar == '.' ||
                       triggerChar == '\0'))
            {
                return(null);
            }

            triggerWordLength = isLetter ? 1 : 0;

            // Require a parsed D source

            var ast = Document.GetDAst();

            if (ast == null)
            {
                return(null);
            }

            updater.FinishUpdate();
            lastTriggerOffset = completionContext.TriggerOffset;
            var l = new CompletionDataList();

            if (D_Parser.Misc.CompletionOptions.Instance.EnableSuggestionMode)
            {
                l.AddKeyHandler(new SuggestionKeyHandler());
                l.AutoCompleteUniqueMatch = false;
                l.AutoCompleteEmptyMatch  = false;
                l.AutoSelect = true;
            }
            else
            {
                l.AddKeyHandler(new DoubleUnderScoreWorkaroundHandler(this));
            }

            try{
                lock (ast)
                    DCodeCompletionSupport.BuildCompletionData(
                        Document,
                        ast,
                        completionContext,
                        l,
                        triggerChar);
            }catch (System.Exception ex) {
                LoggingService.LogWarning("Error during completion", ex);
            }

            return(l.Count != 0 ? l : null);
        }