public static void AddDescribeToComplete(SymInfo si, Type t, string ns) { string s = ns; if (!doc_namespace_list.ContainsKey(t.Namespace)) { namespace_elem_cache.Add(t); doc_namespace_list[ns] = si; } }
public void VisitNode(Nodes.QualName node) //make signatures for Qualified Name, Literal, FIeldAccess, MethodCall, Number { SymInfo sym = this.symTable.lookup(node.q_name.Last()); if (sym != null) // if null, lookup prints an error { node.symInfo = sym; } else { //not implementing for now Console.WriteLine("****Long Qualified Names currently not handled, or symbol not defined: " + String.Join(".", node.q_name)); } }
public void populateTypeSpec(Nodes.TypeSpec ts, ref SymInfo sim) { if (ts.isArray) { sim.isArray = true; } if (ts.Child.GetType() == typeof(Nodes.Primitive)) { sim.pType = ((Nodes.Primitive)ts.Child).pType; } else if (ts.Child.GetType() == typeof(Nodes.QualName)) { // e.g. compilers.symtable.Table -- i.e., reference to a named class sim.pType = Nodes.primType.CLASS; // suck name into sim.customTypeName = String.Join(".", ((Nodes.QualName)ts.Child).q_name); } }
public ICompletionData[] GetCompletionData(int off, string Text, int line, int col, char charTyped, PascalABCCompiler.Parsers.KeywordKind keyw) { List <ICompletionData> resultList = new List <ICompletionData>(); try { string pattern = null; string expr = null; bool ctrl_space = charTyped == '\0' || charTyped == '_'; bool shift_space = charTyped == '\0'; bool inside_dot_pattern = false; bool new_space = keyw == PascalABCCompiler.Parsers.KeywordKind.New; if (ctrl_space) { bool is_pattern = false; pattern = CodeCompletion.CodeCompletionController.CurrentParser.LanguageInformation.FindPattern(off, Text, out is_pattern); if (is_pattern && Text[off - pattern.Length - 1] == '.') { inside_dot_pattern = true; expr = FindExpression(off - pattern.Length - 1, Text, line, col); } } else if (new_space) { expr = CodeCompletion.CodeCompletionController.CurrentParser.LanguageInformation.SkipNew(off - 1, Text, ref keyword); } else if (!new_space && keyw != PascalABCCompiler.Parsers.KeywordKind.Uses) { if (charTyped != '$') { expr = FindExpression(off, Text, line, col); } else { expr = FindExpression(off - 1, Text, line, col); } } List <PascalABCCompiler.Errors.Error> Errors = new List <PascalABCCompiler.Errors.Error>(); PascalABCCompiler.SyntaxTree.expression e = null; if (ctrl_space && !shift_space && (pattern == null || pattern == "")) { string[] keywords = CodeCompletion.CodeCompletionNameHelper.Helper.GetKeywords(); foreach (string key in keywords) { //if (key.StartsWith(pattern, StringComparison.CurrentCultureIgnoreCase)) resultList.Add(new UserDefaultCompletionData(key, null, ImagesProvider.IconNumberKeyword, false)); } } if ((!ctrl_space || inside_dot_pattern) && expr != null) { e = WorkbenchServiceFactory.Workbench.VisualEnvironmentCompiler.StandartCompiler.ParsersController.GetTypeAsExpression("test" + System.IO.Path.GetExtension(FileName), expr, Errors, new List <PascalABCCompiler.Errors.CompilerWarning>()); if (e == null) { Errors.Clear(); e = WorkbenchServiceFactory.Workbench.VisualEnvironmentCompiler.StandartCompiler.ParsersController.GetExpression("test" + System.IO.Path.GetExtension(FileName), expr, Errors, new List <PascalABCCompiler.Errors.CompilerWarning>()); } if ((e == null || Errors.Count > 0) && !new_space) { return(null); } } SymInfo[] mis = null; CodeCompletion.DomConverter dconv = (CodeCompletion.DomConverter)CodeCompletion.CodeCompletionController.comp_modules[FileName]; if (dconv == null) { if (keyw == PascalABCCompiler.Parsers.KeywordKind.Uses) { mis = CodeCompletion.DomConverter.standard_units; } else if (!ctrl_space) { return(new ICompletionData[0]); } } string fname = FileName; SymInfo sel_si = null; string last_used_member = null; if (dconv != null) { if (new_space) { mis = dconv.GetTypes(e, line, col, out sel_si); } else if (keyw == PascalABCCompiler.Parsers.KeywordKind.Uses && mis == null) { if (WorkbenchServiceFactory.Workbench.UserOptions.EnableSmartIntellisense) { mis = dconv.GetNamespaces(); } else { mis = CodeCompletion.DomConverter.standard_units; } } else if (!ctrl_space) { CodeCompletion.SymScope dot_sc = null; mis = dconv.GetName(e, expr, line, col, keyword, ref dot_sc); if (dot_sc != null && VisualPABCSingleton.MainForm.UserOptions.EnableSmartIntellisense) { CompletionDataDispatcher.AddMemberBeforeDot(dot_sc); last_used_member = CompletionDataDispatcher.GetRecentUsedMember(dot_sc); } } else { CodeCompletion.SymScope dot_sc = null; if (inside_dot_pattern) { List <SymInfo> si_list = new List <SymInfo>(); SymInfo[] from_list = dconv.GetName(e, expr, line, col, keyword, ref dot_sc); for (int i = 0; i < from_list.Length; i++) { if (from_list[i].name.StartsWith(pattern, StringComparison.OrdinalIgnoreCase)) { si_list.Add(from_list[i]); } } mis = si_list.ToArray(); } else { mis = dconv.GetNameByPattern(pattern, line, col, charTyped == '_', VisualPABCSingleton.MainForm.UserOptions.CodeCompletionNamespaceVisibleRange); } } } Hashtable cache = null; if (!CodeCompletion.CodeCompletionController.CurrentParser.CaseSensitive) { cache = new Hashtable(StringComparer.CurrentCultureIgnoreCase); } else { cache = new Hashtable(); } int num = 0; if (mis != null) { bool stop = false; ICompletionData data = null; foreach (SymInfo mi in mis) { if (mi.not_include) { continue; } if (cache.Contains(mi.name)) { continue; } UserDefaultCompletionData ddd = new UserDefaultCompletionData(mi.addit_name != null ? mi.addit_name : mi.name, mi.description, ImagesProvider.GetPictureNum(mi), false); disp.Add(mi, ddd); resultList.Add(ddd); cache[mi.name] = mi; /*if (VisualPABCSingleton.MainForm.UserOptions.EnableSmartIntellisense && mi.name != null && mi.name != "" && data == null) * { * data = CompletionDataDispatcher.GetLastUsedItem(mi.name[0]); * if (data != null && data.Text == ddd.Text) data = ddd; * }*/ if (last_used_member != null && last_used_member == mi.name) { defaultCompletionElement = ddd; } if (sel_si != null && mi == sel_si) { defaultCompletionElement = ddd; stop = true; } } if (defaultCompletionElement == null && data != null) { defaultCompletionElement = data as UserDefaultCompletionData; } } } catch (Exception e) { } return(resultList.ToArray()); }
private static void internalCompleteDocumentation() { try { if (dispatcher == null) { return; } for (int i = 0; i < elem_cache.Count; i++) { MemberInfo mi = elem_cache[i]; SymInfo si = null; switch (mi.MemberType) { case MemberTypes.TypeInfo: si = doc_wait_list[mi]; si.description += "\n" + AssemblyDocCache.GetDocumentation(mi as Type); si.has_doc = true; dispatcher.Update(si); break; case MemberTypes.Method: si = doc_wait_list[mi]; MethodInfo meth = mi as MethodInfo; si.description += "\n" + AssemblyDocCache.GetDocumentation(meth); //AssemblyDocCache.GetDocumentation(meth.DeclaringType.Assembly,"M:"+meth.DeclaringType.FullName+"."+meth.Name+GetParamNames(meth)); si.has_doc = true; dispatcher.Update(si); break; case MemberTypes.Property: si = doc_wait_list[mi]; PropertyInfo pi = mi as PropertyInfo; si.description += "\n" + AssemblyDocCache.GetDocumentation(pi); //AssemblyDocCache.GetDocumentation(pi.DeclaringType.Assembly,"P:"+pi.DeclaringType.FullName+"."+pi.Name); si.has_doc = true; dispatcher.Update(si); break; case MemberTypes.Event: si = doc_wait_list[mi]; EventInfo ei = mi as EventInfo; si.description += "\n" + AssemblyDocCache.GetDocumentation(ei); //AssemblyDocCache.GetDocumentation(ei.DeclaringType.Assembly,"E:"+ei.DeclaringType.FullName+"."+ei.Name); si.has_doc = true; dispatcher.Update(si); break; case MemberTypes.Constructor: si = doc_wait_list[mi]; ConstructorInfo ci = mi as ConstructorInfo; si.description += "\n" + AssemblyDocCache.GetDocumentation(ci); //AssemblyDocCache.GetDocumentation(ci.DeclaringType.Assembly,"M:"+ci.DeclaringType.FullName+".#ctor"+GetParamNames(ci)); si.has_doc = true; dispatcher.Update(si); break; case MemberTypes.Field: si = doc_wait_list[mi]; FieldInfo fi = mi as FieldInfo; si.description += "\n" + AssemblyDocCache.GetDocumentation(fi); //AssemblyDocCache.GetDocumentation(fi.DeclaringType.Assembly,"F:"+fi.DeclaringType.FullName+"."+fi.Name); si.has_doc = true; dispatcher.Update(si); break; } } } catch (Exception e) { } }
public static void AddDescribeToComplete(SymInfo si, ConstructorInfo ci) { elem_cache.Add(ci); doc_wait_list[ci] = si; }
public static void AddDescribeToComplete(SymInfo si, PropertyInfo pi) { elem_cache.Add(pi); doc_wait_list[pi] = si; }
public static void AddDescribeToComplete(SymInfo si, EventInfo ei) { elem_cache.Add(ei); doc_wait_list[ei] = si; }
public static void AddDescribeToComplete(SymInfo si, FieldInfo fi) { elem_cache.Add(fi); doc_wait_list[fi] = si; }
public static void AddDescribeToComplete(SymInfo si, MethodInfo mi) { elem_cache.Add(mi); doc_wait_list[mi] = si; }
public static void AddDescribeToComplete(SymInfo si, Type t) { elem_cache.Add(t); doc_wait_list[t] = si; }
public virtual void Update(SymInfo si) { }