Beispiel #1
0
        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));
        }
Beispiel #2
0
        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);
        }