Esempio n. 1
0
        private async void BuildIndex(bool reindex = true)
        {
            foreach (var path in Directory
                     .EnumerateFiles(_ctx.WorkspaceRootFolder, "*", SearchOption.AllDirectories)
                     .Where(f => _vdfExtensions.Contains(Path.GetExtension(f).ToUpper())))
            {
                var fileInfo   = new FileInfo(path);
                var sourceFile = await _ctx.SourceFiles
                                 .Include(s => s.Symbols)
                                 .Where(src => src.FilePath.ToUpper() == path.ToUpper())
                                 .SingleOrDefaultAsync();

                if (sourceFile != null)
                {
                    if (reindex || sourceFile.LastWriteTime != fileInfo.LastWriteTime)
                    {
                        if (sourceFile.Symbols == null)
                        {
                            sourceFile.Symbols = new List <LanguageSymbol>();
                        }
                        else
                        {
                            _ctx.Symbols.RemoveRange(sourceFile.Symbols);
                        }

                        var symbols = _parser.ParseFile(path);
                        sourceFile.Symbols.AddRange(symbols);
                        sourceFile.LastWriteTime = fileInfo.LastWriteTime;
                        sourceFile.LastUpdated   = DateTime.Now;
                        _ctx.SourceFiles.Update(sourceFile);
                    }
                }
                else
                {
                    sourceFile = new SourceFile();

                    if (sourceFile.Symbols == null)
                    {
                        sourceFile.Symbols = new List <LanguageSymbol>();
                    }

                    var symbols = _parser.ParseFile(path);
                    sourceFile.Symbols.AddRange(symbols);
                    sourceFile.FilePath      = path;
                    sourceFile.FileName      = fileInfo.Name;
                    sourceFile.LastWriteTime = fileInfo.LastWriteTime;
                    sourceFile.LastUpdated   = DateTime.Now;
                    _ctx.SourceFiles.Add(sourceFile);
                }
            }

            await _ctx.SaveChangesAsync();
        }
Esempio n. 2
0
 private string HandlePreIndexRequest(Request request)
 {
     if (request.Lookup == CommandType.Symbols)
     {
         var symbols = _internalParser.ParseFile(request.Path);
         return(_serializer.Serialize(GetSymbolResults(request, symbols)));
     }
     else
     {
         var results = new CommandResult
         {
             IsInternal  = true,
             RequestId   = request.Id,
             MessageType = IPCMessage.LanguageServerIndexing,
             Message     = ServerConstants.LANGUAGE_SERVER_INDEXING
         };
         return(_serializer.Serialize(results));
     }
 }