Esempio n. 1
0
        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());
        }
Esempio n. 5
0
        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)
            {
            }
        }
Esempio n. 6
0
 public static void AddDescribeToComplete(SymInfo si, ConstructorInfo ci)
 {
     elem_cache.Add(ci);
     doc_wait_list[ci] = si;
 }
Esempio n. 7
0
 public static void AddDescribeToComplete(SymInfo si, PropertyInfo pi)
 {
     elem_cache.Add(pi);
     doc_wait_list[pi] = si;
 }
Esempio n. 8
0
 public static void AddDescribeToComplete(SymInfo si, EventInfo ei)
 {
     elem_cache.Add(ei);
     doc_wait_list[ei] = si;
 }
Esempio n. 9
0
 public static void AddDescribeToComplete(SymInfo si, FieldInfo fi)
 {
     elem_cache.Add(fi);
     doc_wait_list[fi] = si;
 }
Esempio n. 10
0
 public static void AddDescribeToComplete(SymInfo si, MethodInfo mi)
 {
     elem_cache.Add(mi);
     doc_wait_list[mi] = si;
 }
Esempio n. 11
0
 public static void AddDescribeToComplete(SymInfo si, Type t)
 {
     elem_cache.Add(t);
     doc_wait_list[t] = si;
 }
 public virtual void Update(SymInfo si)
 {
 }