protected override void BuildCompletionDataInternal(IEditorData Editor, char enteredChar) { if (Editor.ParseCache == null) { return; } var module = Editor.ParseCache.LookupModuleName(import.ModuleIdentifier.ToString(true)).FirstOrDefault(); if (module == null) { return; } var ctxt = ResolutionContext.Create(Editor, true); /* * Show all members of the imported module * + public imports * + items of anonymous enums */ MemberCompletionEnumeration.EnumChildren(CompletionDataGenerator, ctxt, module, true, MemberFilter.All, true); return; }
void VisitTemplateIntermediateType(TemplateIntermediateType tr) { // Cases: // myVar. (located in basetype definition) <-- Show everything // this. <-- Show everything // myVar. (not located in basetype definition) <-- Show public and public static members // super. <-- Show all base type members // myClass. (not located in myClass) <-- Show all static members // myClass. (located in myClass) <-- Show all static members MemberCompletionEnumeration.EnumChildren(CompletionDataGenerator, ctxt, tr, MemberFilter); GenUfcsAndStaticProperties(tr); }
void VisitTemplateIntermediateType(TemplateIntermediateType tr) { if (tr.DeclarationOrExpressionBase is TokenExpression) { var token = ((TokenExpression)tr.DeclarationOrExpressionBase).Token; isVariableInstance = token == DTokens.This || token == DTokens.Super; } // Cases: // myVar. (located in basetype definition) <-- Show everything // this. <-- Show everything // myVar. (not located in basetype definition) <-- Show public and public static members // super. <-- Show all base type members // myClass. (not located in myClass) <-- Show all static members // myClass. (located in myClass) <-- Show all static members MemberCompletionEnumeration.EnumChildren(CompletionDataGenerator, ctxt, tr, isVariableInstance, MemberFilter); GenUfcsAndStaticProperties(tr); }
protected override void BuildCompletionDataInternal(IEditorData Editor, char enteredChar) { MemberCompletionEnumeration.EnumAllAvailableMembers( CompletionDataGenerator, curBlock, Editor.CaretLocation, Editor.ParseCache, visibleMembers, new ConditionalCompilationFlags(Editor)); var bits = new BitArray(DTokens.MaxToken, false); CompletionDataGenerator.Add(DTokens.__EOF__); // Insert typable keywords if ((visibleMembers & MemberFilter.BlockKeywords) != 0) { for (byte tk = DTokens.MaxToken - 1; tk > 0; tk--) { if (!bits [tk] && IsBlockKw(tk)) { CompletionDataGenerator.Add(tk); bits [tk] = true; } } } if ((visibleMembers & MemberFilter.StatementBlockKeywords) != 0) { foreach (var kv in statementKeywords) { if (!bits [kv]) { CompletionDataGenerator.Add(kv); bits [kv] = true; } } } if ((visibleMembers & MemberFilter.ExpressionKeywords) != 0) { foreach (var kv in expressionKeywords) { if (!bits [kv]) { CompletionDataGenerator.Add(kv); bits [kv] = true; } } } if ((visibleMembers & MemberFilter.Labels) != 0) { var stmt = DResolver.SearchStatementDeeplyAt(curBlock, Editor.CaretLocation); bool addedSwitchKWs = false; while (stmt != null && stmt.Parent != null) { stmt = stmt.Parent; if (!addedSwitchKWs && stmt is SwitchStatement) { addedSwitchKWs = true; CompletionDataGenerator.Add(DTokens.Case); CompletionDataGenerator.Add(DTokens.Default); } } if (stmt != null) { stmt.Accept(new LabelVisitor(CompletionDataGenerator)); } } if ((visibleMembers & MemberFilter.x86Registers) != 0) { foreach (var kv in AsmRegisterExpression.x86RegisterTable) { CompletionDataGenerator.AddTextItem(kv.Key, kv.Value); } } if ((visibleMembers & MemberFilter.x64Registers) != 0) { foreach (var kv in AsmRegisterExpression.x64RegisterTable) { CompletionDataGenerator.AddTextItem(kv.Key, kv.Value); } } if ((visibleMembers & (MemberFilter.x86Registers | MemberFilter.x64Registers)) != 0) { CompletionDataGenerator.Add(DTokens.__LOCAL_SIZE); CompletionDataGenerator.AddTextItem("offsetof", ""); CompletionDataGenerator.AddTextItem("seg", "The seg means load the segment number that the symbol is in. This is not relevant for flat model code. Instead, do a move from the relevant segment register."); // Provide AsmTypePrefixes CompletionDataGenerator.AddTextItem("near", ""); CompletionDataGenerator.AddTextItem("far", ""); CompletionDataGenerator.AddTextItem("word", ""); CompletionDataGenerator.AddTextItem("dword", ""); CompletionDataGenerator.AddTextItem("qword", ""); CompletionDataGenerator.AddTextItem("ptr", ""); } if ((visibleMembers & MemberFilter.BuiltInPropertyAttributes) != 0) { foreach (var propAttr in PropertyAttributeCompletionItems) { CompletionDataGenerator.AddPropertyAttribute(propAttr); } } }
protected override void BuildCompletionDataInternal(IEditorData Editor, char enteredChar) { MemberCompletionEnumeration.EnumAllAvailableMembers( CompletionDataGenerator, curBlock, curStmt, Editor.CaretLocation, Editor.ParseCache, visibleMembers, new ConditionalCompilationFlags(Editor)); //TODO: Split the keywords into such that are allowed within block statements and non-block statements // Insert typable keywords if ((visibleMembers & MemberFilter.Keywords) != 0) { foreach (var kv in DTokens.Keywords) { CompletionDataGenerator.Add(kv.Key); } } else if ((visibleMembers & MemberFilter.StructsAndUnions) != 0) { foreach (var kv in DTokens.BasicTypes_Array) { CompletionDataGenerator.Add(kv); } } if ((visibleMembers & MemberFilter.Labels) != 0) { IStatement stmt = curStmt; do { stmt = stmt.Parent; if (stmt is SwitchStatement) { CompletionDataGenerator.Add(DTokens.Case); CompletionDataGenerator.Add(DTokens.Default); break; } } while(stmt != null && stmt.Parent != null); if (stmt != null) { stmt.Accept(new LabelVisitor(CompletionDataGenerator)); } } if ((visibleMembers & MemberFilter.x86Registers) != 0) { foreach (var kv in AsmRegisterExpression.x86RegisterTable) { CompletionDataGenerator.AddTextItem(kv.Key, kv.Value); } } if ((visibleMembers & MemberFilter.x64Registers) != 0) { foreach (var kv in AsmRegisterExpression.x64RegisterTable) { CompletionDataGenerator.AddTextItem(kv.Key, kv.Value); } } if ((visibleMembers & (MemberFilter.x86Registers | MemberFilter.x64Registers)) != 0) { CompletionDataGenerator.Add(DTokens.__LOCAL_SIZE); CompletionDataGenerator.AddTextItem("offsetof", ""); CompletionDataGenerator.AddTextItem("seg", "The seg means load the segment number that the symbol is in. This is not relevant for flat model code. Instead, do a move from the relevant segment register."); // Provide AsmTypePrefixes CompletionDataGenerator.AddTextItem("near", ""); CompletionDataGenerator.AddTextItem("far", ""); CompletionDataGenerator.AddTextItem("word", ""); CompletionDataGenerator.AddTextItem("dword", ""); CompletionDataGenerator.AddTextItem("qword", ""); CompletionDataGenerator.AddTextItem("ptr", ""); } if ((visibleMembers & MemberFilter.BuiltInPropertyAttributes) != 0) { foreach (var propAttr in PropertyAttributeCompletionItems) { CompletionDataGenerator.AddPropertyAttribute(propAttr); } } }
protected override void BuildCompletionDataInternal(IEditorData Editor, char enteredChar) { if (Editor.ParseCache == null) { return; } if (impBind != null) { DModule mod = null; var modName = imp.ModuleIdentifier.ToString(true); foreach (var pc in Editor.ParseCache) { if ((mod = pc.GetModule(modName)) != null) { break; } } if (mod == null) { return; } var ctxt = ResolutionContext.Create(Editor); /* * Show all members of the imported module * + public imports * + items of anonymous enums */ MemberCompletionEnumeration.EnumChildren(CompletionDataGenerator, ctxt, mod, true, MemberFilter.All); return; } string pack = null; if (imp.ModuleIdentifier != null && imp.ModuleIdentifier.InnerDeclaration != null) { pack = imp.ModuleIdentifier.InnerDeclaration.ToString(); // Will occur after an initial dot if (string.IsNullOrEmpty(pack)) { return; } } foreach (var p in Editor.ParseCache.LookupPackage(pack)) { if (p == null) { continue; } foreach (var kv_pack in p.Packages) { CompletionDataGenerator.AddPackage(kv_pack.Value.Name); } foreach (var kv_mod in p.Modules) { CompletionDataGenerator.AddModule(kv_mod.Value); } } }