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