public Task <DocumentScriptInfo> Handle(DocumentScriptInfoParams request, CancellationToken cancellationToken) { try { var filePath = request.TextDocument.Uri.ToFilePath(); var sourceIncludes = _projectManager.Projects.SelectMany(p => p.Program.Options.Sources.Includes); var searchPaths = sourceIncludes.Select(include => include.Path).Distinct().ToArray(); var possibleImportPaths = searchPaths.Where(path => filePath.StartsWith(path, StringComparison.OrdinalIgnoreCase)).ToArray(); var possibleIdentifiers = possibleImportPaths.Select(path => ObjectIdentifier.FromScriptFilePath(PathUtilities.PathNetCore.GetRelativePath(path, filePath)).ToString()).ToArray(); var scriptFiles = possibleIdentifiers.SelectMany(identifier => _projectManager.Projects.Select(p => p.Program.ScriptFiles.GetValueOrDefault(identifier))).WhereNotNull().ToArray(); return(Task.FromResult(new DocumentScriptInfo() { Identifiers = possibleIdentifiers, IdentifierFiles = scriptFiles.GroupBy(f => f.Id).ToDictionary(k => k.Key.ToString(), k => k.Select(f => f.FilePath).ToList()).ToList().Select(kvp => new IdentifierFiles() { Identifier = kvp.Key, Files = kvp.Value }).ToArray(), SearchPaths = searchPaths })); } catch (Exception e) { _logger.LogWarning(e, "Error while handling request."); } return(Task.FromResult <DocumentScriptInfo>(null)); }
public void ShouldParseAndConvertToAFilePath() { var identifierA = ObjectIdentifier.Parse("NamespaceA:NamespaceB:ScriptName"); var identifierB = ObjectIdentifier.FromScriptFilePath("NamespaceA/NamespaceB/ScriptName.psc"); var path = identifierB.ToScriptFilePath(); var identifierC = ObjectIdentifier.FromScriptFilePath(path); Assert.AreEqual(identifierA, identifierB); Assert.AreEqual(identifierB, identifierC); }