Ejemplo n.º 1
0
        /// <summary>
        /// Load items from data table.
        /// - Only for Header or C-File
        /// </summary>
        /// <param name="workspace"></param>
        /// <param name="dt"></param>
        public int LoadItems(string workspace, DataTable dt)
        {
            int count = 0;

            // create all files
            using (var db = new DataModels.Symbols.SYMBOLDB(_dbProvider, _connectionString))

            {
                // all symbols
                // - kind = files
                // - only for C/H files
                var items = from DataRow i in dt.Rows
                            join f in db.Files on Path.Combine(workspace.ToLower().Replace(@"\", "/"), i.Field <string>("File"))
                            .ToLower().Replace(@"\", "/") equals f.Name
                            join k in db.CodeItemKinds on i.Field <string>("Kind") equals k.Name
                                where i.Field <string>("Kind") != "File"
                                where IsCFile(f.LeafName) || IsHFile(f.LeafName) // only header and C-Files
                            let position = LspAnalyzerHelper.GetSymbolStartPosition(
                    i.Field <string>("Intern"),
                    i.Field <string>("Name"),
                    new OmniSharpPosition(i.Field <long>("StartLine"), i.Field <long>("StartChar")
                                          ))

                                           select new
                {
                    Signature     = i.Field <string>("Intern"),
                    Name          = i.Field <string>("Name"),
                    Kind          = k.Id,
                    StartLine     = i.Field <long>("StartLine"),
                    EndLine       = i.Field <long>("EndLine"),
                    StartChar     = i.Field <long>("StartChar"),
                    EndChar       = i.Field <long>("EndChar"),
                    NameStartLine = position.Line,
                    NameStartChar = position.Character,
                    FileId        = f.Id
                };
                db.BeginTransaction();

                foreach (var i in items)
                {
                    db.Insert <CodeItems>(new CodeItems
                    {
                        Name            = i.Name,
                        Signature       = i.Signature,
                        Kind            = i.Kind,
                        StartLine       = (int)i.StartLine,
                        StartColumn     = (int)i.StartChar,
                        EndLine         = (int)i.EndLine,
                        EndColumn       = (int)i.EndChar,
                        NameStartLine   = (int)i.NameStartLine,
                        NameStartColumn = (int)i.NameStartChar,
                        FileId          = i.FileId
                    });
                    count += 1;
                }
                db.CommitTransaction();
            }

            return(count);
        }
Ejemplo n.º 2
0
        /// <summary>
        /// Load usage for variables and functions in symbol database for workspace
        /// </summary>
        /// <param name="workspace"></param>
        public async Task <int> LoadUsage(string workspace)
        {
            // create all usages
            int countUsages = 0;

            using (var db = new DataModels.Symbols.SYMBOLDB(_dbProvider, _connectionString))

            {
                // Get all items from symbol database
                var items = (from item in db.CodeItems
                             join file in db.Files on item.FileId equals file.Id
                             join kind in db.CodeItemKinds on item.Kind equals kind.Id
                             select new
                {
                    ItemId = item.Id,
                    ItemKind = kind.Name,
                    ItemName = item.Name,
                    FileName = file.Name,
                    NameStartLine = item.NameStartLine,
                    NameStartColumn = item.NameStartColumn
                }).ToArray();

                // write to Database
                db.BeginTransaction();

                foreach (var item in items)
                {
                    // Item used as reference
                    if (IsCallable(item.ItemKind) ||
                        IsVars(item.ItemKind))
                    {
                        string method    = IsCallable(item.ItemKind) ? @"$cquery/callers" : @"$cquery/vars";
                        var    locations =
                            await _client.TextDocument.Cquery(method, item.FileName, item.NameStartLine, item.NameStartColumn);

                        foreach (var location in locations)
                        {
                            string path = location.Uri.LocalPath.Substring(1).ToLower();
                            // only consider files with path in workspace and which are C-Files
                            if (path.Contains(workspace.ToLower()) & IsCFile(path))    // || IsHFile(path)))
                            {
                                // ReSharper disable once UnusedVariable
                                // Check to use it in insert
                                if (_dictFile.TryGetValue(path, out int fileId) == false)
                                {
                                    MessageBox.Show(
                                        $"path='{path}'\r\n\r\nmethod='{method}'\r\nkind='{item.ItemKind}'\r\nitem='{item.ItemName}'",
                                        "Cant find file id");
                                    continue;
                                }

                                db.Insert <CodeItemUsages>(new CodeItemUsages
                                {
                                    CodeItemId  = item.ItemId,
                                    FileId      = _dictFile[path],
                                    Signature   = " ",
                                    StartColumn = (int)location.Range.Start.Character,
                                    StartLine   = (int)location.Range.Start.Line,
                                    EndColumn   = (int)location.Range.End.Character,
                                    EndLine     = (int)location.Range.End.Line,
                                });
                                countUsages += 1;
                            }
                            else
                            {
                            }
                        }
                    }
                }
                db.CommitTransaction();
            }

            return(countUsages);
        }
Ejemplo n.º 3
0
        /// <summary>
        /// Create Database
        /// </summary>
        /// <returns></returns>
        public bool Create()
        {
            // Delete Symbol database
            DeleteOldDatabase();


            //// accessing with LINQ to SQL
            using (var db = new DataModels.Symbols.SYMBOLDB(_dbProvider, _connectionString))

            {
                var sp       = db.DataProvider.GetSchemaProvider();
                var dbSchema = sp.GetSchema(db);
                try
                {
                    db.BeginTransaction();
                }
                catch (Exception e)
                {
                    MessageBox.Show($"SQLite locked?\r\n\r\n{e}", "Can't begin transaction");
                    return(false);
                }

                if (dbSchema.Tables.All(t => t.TableName != "code_item_kinds"))
                {
                    db.CreateTable <CodeItemKinds>();
                }

                if (dbSchema.Tables.All(t => t.TableName != "files"))
                {
                    db.CreateTable <File>();
                }

                if (dbSchema.Tables.All(t => t.TableName != "code_items"))
                {
                    db.CreateTable <CodeItems>();
                }
                if (dbSchema.Tables.All(t => t.TableName != "code_item_usages"))
                {
                    db.CreateTable <CodeItemUsages>();
                }

                db.GetTable <CodeItemKinds>()
                .Delete();
                db.Insert(new CodeItemKinds {
                    Id = 1, Name = "File"
                });
                db.Insert(new CodeItemKinds {
                    Id = 2, Name = "Module"
                });
                db.Insert(new CodeItemKinds {
                    Id = 3, Name = "Namespace"
                });
                db.Insert(new CodeItemKinds {
                    Id = 4, Name = "Package"
                });
                db.Insert(new CodeItemKinds {
                    Id = 5, Name = "Class"
                });
                db.Insert(new CodeItemKinds {
                    Id = 6, Name = "Method"
                });
                db.Insert(new CodeItemKinds {
                    Id = 7, Name = "Property"
                });
                db.Insert(new CodeItemKinds {
                    Id = 8, Name = "Field"
                });
                db.Insert(new CodeItemKinds {
                    Id = 9, Name = "Constructor"
                });
                db.Insert(new CodeItemKinds {
                    Id = 10, Name = "Enum"
                });
                db.Insert(new CodeItemKinds {
                    Id = 11, Name = "Method"
                });
                db.Insert(new CodeItemKinds {
                    Id = 12, Name = "Function"
                });
                db.Insert(new CodeItemKinds {
                    Id = 13, Name = "Variable"
                });
                db.Insert(new CodeItemKinds {
                    Id = 14, Name = "Constant"
                });
                db.Insert(new CodeItemKinds {
                    Id = 15, Name = "String"
                });
                db.Insert(new CodeItemKinds {
                    Id = 16, Name = "Number"
                });
                db.Insert(new CodeItemKinds {
                    Id = 17, Name = "Boolean"
                });
                db.Insert(new CodeItemKinds {
                    Id = 18, Name = "Array"
                });
                db.Insert(new CodeItemKinds {
                    Id = 19, Name = "Object"
                });
                db.Insert(new CodeItemKinds {
                    Id = 20, Name = "Key"
                });
                db.Insert(new CodeItemKinds {
                    Id = 21, Name = "Null"
                });
                db.Insert(new CodeItemKinds {
                    Id = 22, Name = "EnumMember"
                });
                db.Insert(new CodeItemKinds {
                    Id = 23, Name = @"Struct"
                });
                db.Insert(new CodeItemKinds {
                    Id = 24, Name = "Event"
                });
                db.Insert(new CodeItemKinds {
                    Id = 25, Name = "Operator"
                });
                db.Insert(new CodeItemKinds {
                    Id = 26, Name = "TypeParameter"
                });


                db.Insert(new CodeItemKinds {
                    Id = 27, Name = "Type27"
                });
                db.Insert(new CodeItemKinds {
                    Id = 28, Name = "Type28"
                });
                db.Insert(new CodeItemKinds {
                    Id = 29, Name = "Type29"
                });

                db.Insert(new CodeItemKinds {
                    Id = 30, Name = "Type30"
                });
                db.Insert(new CodeItemKinds {
                    Id = 31, Name = "Type31"
                });
                db.Insert(new CodeItemKinds {
                    Id = 32, Name = "Type32"
                });
                db.Insert(new CodeItemKinds {
                    Id = 33, Name = "Type33"
                });
                db.Insert(new CodeItemKinds {
                    Id = 34, Name = "Type34"
                });
                db.Insert(new CodeItemKinds {
                    Id = 35, Name = "Type35"
                });
                db.Insert(new CodeItemKinds {
                    Id = 36, Name = "Type36"
                });
                db.Insert(new CodeItemKinds {
                    Id = 37, Name = "Type37"
                });
                db.Insert(new CodeItemKinds {
                    Id = 38, Name = "Type38"
                });
                db.Insert(new CodeItemKinds {
                    Id = 39, Name = "Type39"
                });

                db.Insert(new CodeItemKinds {
                    Id = 40, Name = "Type40"
                });
                db.Insert(new CodeItemKinds {
                    Id = 41, Name = "Type41"
                });
                db.Insert(new CodeItemKinds {
                    Id = 42, Name = "Type42"
                });
                db.Insert(new CodeItemKinds {
                    Id = 43, Name = "Type43"
                });
                db.Insert(new CodeItemKinds {
                    Id = 44, Name = "Type44"
                });
                db.Insert(new CodeItemKinds {
                    Id = 45, Name = "Type45"
                });
                db.Insert(new CodeItemKinds {
                    Id = 46, Name = "Type46"
                });
                db.Insert(new CodeItemKinds {
                    Id = 47, Name = "Type47"
                });
                db.Insert(new CodeItemKinds {
                    Id = 48, Name = "Type48"
                });
                db.Insert(new CodeItemKinds {
                    Id = 49, Name = "Type49"
                });

                db.Insert(new CodeItemKinds {
                    Id = 50, Name = "Type50"
                });
                db.Insert(new CodeItemKinds {
                    Id = 51, Name = "Type51"
                });
                db.Insert(new CodeItemKinds {
                    Id = 52, Name = "Type52"
                });
                db.Insert(new CodeItemKinds {
                    Id = 53, Name = "Type53"
                });
                db.Insert(new CodeItemKinds {
                    Id = 54, Name = "Type54"
                });
                db.Insert(new CodeItemKinds {
                    Id = 55, Name = "Type55"
                });
                db.Insert(new CodeItemKinds {
                    Id = 56, Name = "Type56"
                });
                db.Insert(new CodeItemKinds {
                    Id = 57, Name = "Type57"
                });
                db.Insert(new CodeItemKinds {
                    Id = 58, Name = "Type58"
                });
                db.Insert(new CodeItemKinds {
                    Id = 59, Name = "Type59"
                });



                db.Insert(new CodeItemKinds {
                    Id = 200, Name = "Type200"
                });
                db.Insert(new CodeItemKinds {
                    Id = 201, Name = "Type201"
                });
                db.Insert(new CodeItemKinds {
                    Id = 202, Name = "Type202"
                });
                db.Insert(new CodeItemKinds {
                    Id = 203, Name = "Type203"
                });
                db.Insert(new CodeItemKinds {
                    Id = 204, Name = "Type204"
                });
                db.Insert(new CodeItemKinds {
                    Id = 205, Name = "Type205"
                });
                db.Insert(new CodeItemKinds {
                    Id = 206, Name = "Type206"
                });
                db.Insert(new CodeItemKinds {
                    Id = 207, Name = "Type207"
                });
                db.Insert(new CodeItemKinds {
                    Id = 208, Name = "Type208"
                });
                db.Insert(new CodeItemKinds {
                    Id = 209, Name = "Type209"
                });

                db.Insert(new CodeItemKinds {
                    Id = 210, Name = "Type210"
                });
                db.Insert(new CodeItemKinds {
                    Id = 211, Name = "Type211"
                });
                db.Insert(new CodeItemKinds {
                    Id = 212, Name = "Type212"
                });
                db.Insert(new CodeItemKinds {
                    Id = 213, Name = "Type213"
                });
                db.Insert(new CodeItemKinds {
                    Id = 214, Name = "Type214"
                });
                db.Insert(new CodeItemKinds {
                    Id = 215, Name = "Type215"
                });
                db.Insert(new CodeItemKinds {
                    Id = 216, Name = "Type216"
                });
                db.Insert(new CodeItemKinds {
                    Id = 217, Name = "Type217"
                });
                db.Insert(new CodeItemKinds {
                    Id = 218, Name = "Type218"
                });
                db.Insert(new CodeItemKinds {
                    Id = 219, Name = "Type219"
                });



                db.Insert(new CodeItemKinds {
                    Id = 220, Name = "Type220"
                });
                db.Insert(new CodeItemKinds {
                    Id = 221, Name = "Type221"
                });
                db.Insert(new CodeItemKinds {
                    Id = 222, Name = "Type222"
                });
                db.Insert(new CodeItemKinds {
                    Id = 223, Name = "Type223"
                });
                db.Insert(new CodeItemKinds {
                    Id = 224, Name = "Type224"
                });
                db.Insert(new CodeItemKinds {
                    Id = 225, Name = "Type225"
                });
                db.Insert(new CodeItemKinds {
                    Id = 226, Name = "Type226"
                });
                db.Insert(new CodeItemKinds {
                    Id = 227, Name = "Type227"
                });
                db.Insert(new CodeItemKinds {
                    Id = 228, Name = "Type228"
                });
                db.Insert(new CodeItemKinds {
                    Id = 229, Name = "Type229"
                });

                db.Insert(new CodeItemKinds {
                    Id = 230, Name = "Type230"
                });
                db.Insert(new CodeItemKinds {
                    Id = 231, Name = "Type231"
                });
                db.Insert(new CodeItemKinds {
                    Id = 232, Name = "Type232"
                });
                db.Insert(new CodeItemKinds {
                    Id = 233, Name = "Type233"
                });
                db.Insert(new CodeItemKinds {
                    Id = 234, Name = "Type234"
                });
                db.Insert(new CodeItemKinds {
                    Id = 235, Name = "Type235"
                });
                db.Insert(new CodeItemKinds {
                    Id = 236, Name = "Type236"
                });
                db.Insert(new CodeItemKinds {
                    Id = 237, Name = "Type237"
                });
                db.Insert(new CodeItemKinds {
                    Id = 238, Name = "Type238"
                });
                db.Insert(new CodeItemKinds {
                    Id = 239, Name = "Type239"
                });

                db.Insert(new CodeItemKinds {
                    Id = 240, Name = "Type240"
                });
                db.Insert(new CodeItemKinds {
                    Id = 241, Name = "Type241"
                });
                db.Insert(new CodeItemKinds {
                    Id = 242, Name = "Type242"
                });
                db.Insert(new CodeItemKinds {
                    Id = 243, Name = "Type243"
                });
                db.Insert(new CodeItemKinds {
                    Id = 244, Name = "Type244"
                });
                db.Insert(new CodeItemKinds {
                    Id = 245, Name = "Type245"
                });
                db.Insert(new CodeItemKinds {
                    Id = 246, Name = "Type246"
                });
                db.Insert(new CodeItemKinds {
                    Id = 247, Name = "Type247"
                });
                db.Insert(new CodeItemKinds {
                    Id = 248, Name = "Type248"
                });
                db.Insert(new CodeItemKinds {
                    Id = 249, Name = "Type249"
                });

                db.Insert(new CodeItemKinds {
                    Id = 250, Name = "Type250"
                });
                db.Insert(new CodeItemKinds {
                    Id = 251, Name = "Type251"
                });
                db.Insert(new CodeItemKinds {
                    Id = 252, Name = "Type252"
                });
                db.Insert(new CodeItemKinds {
                    Id = 253, Name = "TypeAlias"
                });
                db.Insert(new CodeItemKinds {
                    Id = 254, Name = "StaticMethod"
                });
                db.Insert(new CodeItemKinds {
                    Id = 255, Name = "Macro"
                });

                MakeKindDictionary(db);

                db.GetTable <CodeItems>()
                .Delete();
                db.GetTable <File>()
                .Delete();
                db.GetTable <CodeItemUsages>()
                .Delete();
                db.CommitTransaction();
            }

            return(true);
        }