コード例 #1
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);
        }
コード例 #2
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);
        }
コード例 #3
0
        void RefreshMarkers()
        {
            TypeReferencesResult res = null;

            try
            {
                var ParseCache = DCodeCompletionSupport.EnumAvailableModules(Document);

                res = TypeReferenceFinder.Scan(SyntaxTree, ParseCache);

                RemoveMarkers(false);

                var txtDoc = Document.Editor.Document;

                DocumentLine curLine = null;
                int          ln      = -1;
                int          len     = 0;
                foreach (var id in res.TypeMatches)
                {
                    var loc = DeepASTVisitor.ExtractIdLocation(id, out len);
                    if (ln != loc.Line)
                    {
                        curLine = Document.Editor.GetLine(ln = loc.Line);
                    }

                    var m = new HighlightMarker(txtDoc, curLine, "keyword.semantic.type", loc.Column, TypeReferenceFinder.ExtractId(id));
                    txtDoc.AddMarker(curLine, m);
                    markers.Add(m);
                }
            }
            catch
            {
            }
        }
コード例 #4
0
        static void BuildTreeChildren(TreeStore Tree, TreeIter ParentTreeNode, IBlockNode ParentAstNode)
        {
            if (ParentAstNode == null)
            {
                return;
            }

            foreach (var n in ParentAstNode)
            {
                if (!DCodeCompletionSupport.CanItemBeShownGenerally(n as DNode))
                {
                    continue;
                }

                TreeIter childIter;
                if (!ParentTreeNode.Equals(TreeIter.Zero))
                {
                    childIter = Tree.AppendValues(ParentTreeNode, n);
                }
                else
                {
                    childIter = Tree.AppendValues(n);
                }

                BuildTreeChildren(Tree, childIter, n as IBlockNode);
            }
        }
コード例 #5
0
ファイル: DToolTipProvider.cs プロジェクト: nazriel/Mono-D
        public TooltipItem GetItem(TextEditor editor, int offset)
        {
            // Note: Normally, the document already should be open
            var doc = IdeApp.Workbench.OpenDocument(editor.Document.FileName);

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

            // Due the first note, the AST already should exist
            var ast = doc.ParsedDocument.LanguageAST as IAbstractSyntaxTree;

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

            // Get code cache
            var codeCache = DCodeCompletionSupport.EnumAvailableModules(doc);

            // Create editor context
            var line = editor.GetLineByOffset(offset);

            var EditorContext = new EditorData {
                CaretOffset   = offset,
                CaretLocation = new CodeLocation(offset - line.Offset, editor.OffsetToLineNumber(offset)),
                ModuleCode    = editor.Text,
                ParseCache    = codeCache,
                SyntaxTree    = ast as DModule,
                ImportCache   = DResolver.ResolveImports(ast as DModule, codeCache)
            };

            // Let the engine build all contents
            var ttContents = DCodeCompletionSupport.BuildToolTip(EditorContext);

            // Create tool tip item
            if (ttContents != null)
            {
                return(new TooltipItem(ttContents, offset, 1));
            }
            return(null);
        }
コード例 #6
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);
        }
コード例 #7
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);
        }