Example #1
0
        public BlockStructureService(IAssemblyLoader loader, OmniSharpWorkspace workspace)
        {
            _workspace             = workspace;
            _loader                = loader;
            _featureAssembly       = _loader.LazyLoad(Configuration.RoslynFeatures);
            _blockStructureService = _featureAssembly.LazyGetType("Microsoft.CodeAnalysis.Structure.BlockStructureService");
            _blockStructure        = _featureAssembly.LazyGetType("Microsoft.CodeAnalysis.Structure.BlockStructure");
            _taskOfBlockStructure  = new(() => typeof(Task <>).MakeGenericType(_blockStructure.Value));
            _blockSpan             = _featureAssembly.LazyGetType("Microsoft.CodeAnalysis.Structure.BlockSpan");

            _getBlockStructure = _blockStructureService.LazyGetMethod("GetBlockStructureAsync");
            _result            = _taskOfBlockStructure.LazyGetProperty("Result", getMethod: true);
            _getSpans          = _blockStructure.LazyGetProperty("Spans", getMethod: true);
            _getIsCollpasible  = _blockSpan.LazyGetProperty("IsCollapsible", getMethod: true);
            _getTextSpan       = _blockSpan.LazyGetProperty("TextSpan", getMethod: true);
            _getType           = _blockSpan.LazyGetProperty("Type", getMethod: true);
        }
Example #2
0
        public static void AddCsxProjectToWorkspace(OmniSharpWorkspace workspace, TestFile testFile)
        {
            var references   = GetReferences();
            var scriptHelper = new ScriptProjectProvider(new ScriptOptions(), new OmniSharpEnvironment(), new LoggerFactory(), true);
            var project      = scriptHelper.CreateProject(testFile.FileName, references.Union(new[] { MetadataReference.CreateFromFile(typeof(CommandLineScriptGlobals).GetTypeInfo().Assembly.Location) }), testFile.FileName, typeof(CommandLineScriptGlobals), Enumerable.Empty <string>());

            workspace.AddProject(project);

            var documentInfo = DocumentInfo.Create(
                id: DocumentId.CreateNewId(project.Id),
                name: testFile.FileName,
                sourceCodeKind: SourceCodeKind.Script,
                loader: TextLoader.From(TextAndVersion.Create(testFile.Content.Text, VersionStamp.Create())),
                filePath: testFile.FileName);

            workspace.AddDocument(documentInfo);
        }
Example #3
0
 public OmniSharpTextDocumentSyncHandler(
     Mef.IRequestHandler <FileOpenRequest, FileOpenResponse> openHandler,
     Mef.IRequestHandler <FileCloseRequest, FileCloseResponse> closeHandler,
     Mef.IRequestHandler <UpdateBufferRequest, object> bufferHandler,
     DocumentSelector documentSelector,
     TextDocumentSyncKind documentSyncKind,
     OmniSharpWorkspace workspace,
     DocumentVersions documentVersions)
 {
     _openHandler      = openHandler;
     _closeHandler     = closeHandler;
     _bufferHandler    = bufferHandler;
     _documentSelector = documentSelector;
     _documentSyncKind = documentSyncKind;
     _workspace        = workspace;
     _documentVersions = documentVersions;
 }
 public OmniSharpTextDocumentSyncHandler(
     Mef.IRequestHandler <FileOpenRequest, FileOpenResponse> openHandler,
     Mef.IRequestHandler <FileCloseRequest, FileCloseResponse> closeHandler,
     Mef.IRequestHandler <UpdateBufferRequest, object> bufferHandler,
     DocumentSelector documentSelector,
     TextDocumentSyncKind documentSyncKind,
     OmniSharpWorkspace workspace)
     : base(documentSyncKind, new TextDocumentSaveRegistrationOptions()
 {
     DocumentSelector = documentSelector,
     IncludeText      = true,
 })
 {
     _openHandler   = openHandler;
     _closeHandler  = closeHandler;
     _bufferHandler = bufferHandler;
     _workspace     = workspace;
 }
        private static async Task <Range> TranslateAsync(this Range range, OmniSharpWorkspace workspace, SimpleFileRequest request)
        {
            var(line, _) = await LineIndexHelper.TranslateFromGenerated(request.FileName, range.Start.Line, workspace, true);

            if (range.Start.Line == range.End.Line)
            {
                range.Start.Line = line;
                range.End.Line   = line;
                return(range);
            }

            range.Start.Line = line;
            (line, _)        = await LineIndexHelper.TranslateFromGenerated(request.FileName, range.End.Line, workspace, true);

            range.End.Line = line;

            return(range);
        }
        public ProjectManager(ILoggerFactory loggerFactory, IEventEmitter eventEmitter, IFileSystemWatcher fileSystemWatcher, MetadataFileReferenceCache metadataFileReferenceCache, PackageDependencyChecker packageDependencyChecker, ProjectLoader projectLoader, OmniSharpWorkspace workspace)
        {
            _logger                     = loggerFactory.CreateLogger <ProjectManager>();
            _eventEmitter               = eventEmitter;
            _fileSystemWatcher          = fileSystemWatcher;
            _metadataFileReferenceCache = metadataFileReferenceCache;
            _packageDependencyChecker   = packageDependencyChecker;
            _projectFiles               = new ProjectFileInfoCollection();
            _failedToLoadProjectFiles   = new HashSet <string>(StringComparer.OrdinalIgnoreCase);
            _projectLoader              = projectLoader;
            _workspace                  = workspace;

            _queue = new BufferBlock <ProjectToUpdate>();
            _processLoopCancellation = new CancellationTokenSource();
            _processLoopTask         = Task.Run(() => ProcessLoopAsync(_processLoopCancellation.Token));

            _onDirectoryFileChanged = OnDirectoryFileChanged;
        }
        public CsharpDiagnosticWorkerComposer(
            OmniSharpWorkspace workspace,
            [ImportMany] IEnumerable <ICodeActionProvider> providers,
            ILoggerFactory loggerFactory,
            DiagnosticEventForwarder forwarder,
            OmniSharpOptions options)
        {
            if (options.RoslynExtensionsOptions.EnableAnalyzersSupport)
            {
                _implementation = new CSharpDiagnosticWorkerWithAnalyzers(workspace, providers, loggerFactory, forwarder, options);
            }
            else
            {
                _implementation = new CSharpDiagnosticWorker(workspace, forwarder, loggerFactory);
            }

            _workspace = workspace;
        }
        public CakeProjectSystem(
            OmniSharpWorkspace workspace,
            MetadataFileReferenceCache metadataReferenceCache,
            IOmniSharpEnvironment environment,
            IAssemblyLoader assemblyLoader,
            ICakeScriptService scriptService,
            ILoggerFactory loggerFactory)
        {
            _workspace = workspace ?? throw new ArgumentNullException(nameof(workspace));
            _metadataReferenceCache = metadataReferenceCache ?? throw new ArgumentNullException(nameof(metadataReferenceCache));
            _environment            = environment ?? throw new ArgumentNullException(nameof(environment));
            _assemblyLoader         = assemblyLoader ?? throw new ArgumentNullException(nameof(assemblyLoader));
            _scriptService          = scriptService ?? throw new ArgumentNullException(nameof(scriptService));
            _logger = loggerFactory?.CreateLogger <CakeProjectSystem>() ?? throw new ArgumentNullException(nameof(loggerFactory));

            _projects           = new Dictionary <string, ProjectInfo>();
            _compilationOptions = new Lazy <CSharpCompilationOptions>(CreateCompilationOptions);
        }
Example #9
0
        public static IEnumerable <ProjectId> AddProjectToWorkspace(OmniSharpWorkspace workspace, string filePath, string[] frameworks, TestFile[] testFiles, ImmutableArray <AnalyzerReference> analyzerRefs = default, string languageName = LanguageNames.CSharp)
        {
            var versionStamp = VersionStamp.Create();
            var references   = GetReferences();

            frameworks = frameworks ?? new[] { string.Empty };
            var projectsIds       = new List <ProjectId>();
            var editorConfigPaths = EditorConfigFinder.GetEditorConfigPaths(filePath);

            foreach (var framework in frameworks)
            {
                var projectId = ProjectId.CreateNewId();
                var analyzerConfigDocuments = editorConfigPaths.Select(path =>
                                                                       DocumentInfo.Create(
                                                                           DocumentId.CreateNewId(projectId),
                                                                           name: ".editorconfig",
                                                                           loader: new FileTextLoader(path, Encoding.UTF8),
                                                                           filePath: path))
                                              .ToImmutableArray();

                var projectInfo = ProjectInfo.Create(
                    id: projectId,
                    version: versionStamp,
                    name: "OmniSharp+" + framework,
                    assemblyName: "AssemblyName",
                    language: languageName,
                    filePath: filePath,
                    metadataReferences: references,
                    analyzerReferences: analyzerRefs)
                                  .WithDefaultNamespace("OmniSharpTest")
                                  .WithAnalyzerConfigDocuments(analyzerConfigDocuments);

                workspace.AddProject(projectInfo);

                foreach (var testFile in testFiles)
                {
                    workspace.AddDocument(projectInfo.Id, testFile.FileName, TextLoader.From(TextAndVersion.Create(testFile.Content.Text, versionStamp)), SourceCodeKind.Regular);
                }

                projectsIds.Add(projectInfo.Id);
            }

            return(projectsIds);
        }
 public static IEnumerable <IJsonRpcHandler> Enumerate(
     RequestHandlers handlers,
     OmniSharpWorkspace workspace)
 {
     foreach (var(selector, openHandler, closeHandler, bufferHandler) in handlers
              .OfType <
                  Mef.IRequestHandler <FileOpenRequest, FileOpenResponse>,
                  Mef.IRequestHandler <FileCloseRequest, FileCloseResponse>,
                  Mef.IRequestHandler <UpdateBufferRequest, object> >())
     {
         // TODO: Fix once cake has working support for incremental
         var documentSyncKind = TextDocumentSyncKind.Incremental;
         if (selector.ToString().IndexOf(".cake") > -1)
         {
             documentSyncKind = TextDocumentSyncKind.Full;
         }
         yield return(new OmniSharpTextDocumentSyncHandler(openHandler, closeHandler, bufferHandler, selector, documentSyncKind, workspace));
     }
 }
        public DotNetProjectSystem(
            IOmniSharpEnvironment environment,
            OmniSharpWorkspace workspace,
            IDotNetCliService dotNetCliService,
            MetadataFileReferenceCache metadataFileReferenceCache,
            IEventEmitter eventEmitter,
            IFileSystemWatcher fileSystemWatcher,
            ILoggerFactory loggerFactory)
        {
            _environment                = environment;
            _workspace                  = workspace;
            _dotNetCliService           = dotNetCliService;
            _metadataFileReferenceCache = metadataFileReferenceCache;
            _eventEmitter               = eventEmitter;
            _fileSystemWatcher          = fileSystemWatcher;
            _logger = loggerFactory.CreateLogger <DotNetProjectSystem>();

            _projectStates = new ProjectStatesCache(loggerFactory, _eventEmitter);
        }
        private async Task <IEnumerable <ISymbol> > SymbolsFromQuickFixesAsync(OmniSharpWorkspace workspace, IEnumerable <QuickFix> quickFixes)
        {
            var symbols = new List <ISymbol>();

            foreach (var quickfix in quickFixes)
            {
                var document   = workspace.GetDocument(quickfix.FileName);
                var sourceText = await document.GetTextAsync();

                var position      = sourceText.Lines.GetPosition(new LinePosition(quickfix.Line, quickfix.Column));
                var semanticModel = await document.GetSemanticModelAsync();

                var symbol = await SymbolFinder.FindSymbolAtPositionAsync(semanticModel, position, workspace);

                symbols.Add(symbol);
            }

            return(symbols);
        }
Example #13
0
        public void ProvideOptions(OmniSharpWorkspace workspace, OmniSharpOptions options)
        {
            // run all workspace options providers discovered with MEF
            foreach (var workspaceOptionsProvider in _compositionHost.GetExports <IWorkspaceOptionsProvider>())
            {
                var providerName = workspaceOptionsProvider.GetType().FullName;

                try
                {
                    _logger.LogInformation($"Invoking Workspace Options Provider: {providerName}");
                    workspace.Options = workspaceOptionsProvider.Process(workspace.Options, options.FormattingOptions);
                }
                catch (Exception e)
                {
                    var message = $"The workspace options provider '{providerName}' threw exception during initialization.";
                    _logger.LogError(e, message);
                }
            }
        }
Example #14
0
        public static async Task <NavigateResponse> Navigate(OmniSharpWorkspace workspace, Request request, Func <FileMemberElement, FileMemberElement, Request, bool> IsCloserNode)
        {
            var stack    = new List <FileMemberElement>(await StructureComputer.Compute(workspace.GetDocuments(request.FileName)));
            var response = new NavigateResponse();

            //Retain current line in case we dont need to navigate.
            response.Line   = request.Line;
            response.Column = request.Column;

            FileMemberElement closestNode = null;
            FileMemberElement thisNode    = null;

            while (stack.Count > 0)
            {
                var node = stack[0];
                stack.Remove(node);
                var isCloserNode = IsCloserNode(node, closestNode, request);
                if (isCloserNode)
                {
                    closestNode = node;
                }
                if (node.Location.Line == request.Line)
                {
                    thisNode = node;
                }
                stack.AddRange(node.ChildNodes);
            }

            //If there is a closest node, use its line and column.
            //or if we are on the last node, adjust column.
            //if we are above the first or below the last node, do nothing.
            if (closestNode != null)
            {
                response.Line   = closestNode.Location.Line;
                response.Column = closestNode.Location.Column;
            }
            else if (thisNode != null)
            {
                response.Column = thisNode.Location.Column;
            }
            return(response);
        }
Example #15
0
        private static OmniSharpWorkspace CreateSimpleWorkspace(string fileName, string contents)
        {
            var workspace = new OmniSharpWorkspace(
                new HostServicesAggregator(
                    Enumerable.Empty <IHostServicesProvider>(), new LoggerFactory()),
                new LoggerFactory());

            var projectInfo = ProjectInfo.Create(ProjectId.CreateNewId(), VersionStamp.Create(),
                                                 "ProjectNameVal", "AssemblyNameVal", LanguageNames.CSharp);

            var documentInfo = DocumentInfo.Create(DocumentId.CreateNewId(projectInfo.Id), fileName,
                                                   null, SourceCodeKind.Regular,
                                                   TextLoader.From(TextAndVersion.Create(SourceText.From(contents), VersionStamp.Create())),
                                                   fileName);

            workspace.AddProject(projectInfo);
            workspace.AddDocument(documentInfo);

            return(workspace);
        }
        private static async Task <QuickFix> TranslateAsync(this QuickFix quickFix, OmniSharpWorkspace workspace, Request request)
        {
            var sameFile = string.IsNullOrEmpty(quickFix.FileName);
            var fileName = !sameFile ? quickFix.FileName : request.FileName;

            if (string.IsNullOrEmpty(fileName))
            {
                return(quickFix);
            }

            var(line, newFileName) = await LineIndexHelper.TranslateFromGenerated(fileName, quickFix.Line, workspace, sameFile);

            quickFix.Line     = line;
            quickFix.FileName = newFileName;

            (line, _) = await LineIndexHelper.TranslateFromGenerated(fileName, quickFix.EndLine, workspace, sameFile);

            quickFix.EndLine = line;

            return(quickFix);
        }
        protected BaseCodeActionService(OmniSharpWorkspace workspace, CodeActionHelper helper, IEnumerable <ICodeActionProvider> providers, ILogger logger)
        {
            this.Workspace = workspace;
            this.Providers = providers;
            this.Logger    = logger;
            this._helper   = helper;

            // Sadly, the CodeAction.NestedCodeActions property is still internal.
            var nestedCodeActionsProperty = typeof(CodeAction).GetProperty("NestedCodeActions", BindingFlags.NonPublic | BindingFlags.Instance);

            if (nestedCodeActionsProperty == null)
            {
                throw new InvalidOperationException("Could not find CodeAction.NestedCodeActions property.");
            }

            this._getNestedCodeActions = nestedCodeActionsProperty.GetGetMethod(nonPublic: true);
            if (this._getNestedCodeActions == null)
            {
                throw new InvalidOperationException("Could not retrieve 'get' method for CodeAction.NestedCodeActions property.");
            }
        }
Example #18
0
        public static IEnumerable <ProjectId> AddProjectToWorkspace(OmniSharpWorkspace workspace, string filePath, string[] frameworks, TestFile[] testFiles, ImmutableArray <AnalyzerReference> analyzerRefs = default)
        {
            var versionStamp = VersionStamp.Create();
            var references   = GetReferences();

            frameworks = frameworks ?? new[] { string.Empty };
            var projectsIds = new List <ProjectId>();

            foreach (var framework in frameworks)
            {
                var projectInfo = ProjectInfo.Create(
                    id: ProjectId.CreateNewId(),
                    version: versionStamp,
                    name: "OmniSharp+" + framework,
                    assemblyName: "AssemblyName",
                    language: LanguageNames.CSharp,
                    filePath: filePath,
                    metadataReferences: references,
                    analyzerReferences: analyzerRefs);

                workspace.AddProject(projectInfo);

                foreach (var testFile in testFiles)
                {
                    var documentInfo = DocumentInfo.Create(
                        id: DocumentId.CreateNewId(projectInfo.Id),
                        name: testFile.FileName,
                        sourceCodeKind: SourceCodeKind.Regular,
                        loader: TextLoader.From(TextAndVersion.Create(testFile.Content.Text, versionStamp)),
                        filePath: testFile.FileName);

                    workspace.AddDocument(documentInfo);
                }

                projectsIds.Add(projectInfo.Id);
            }

            return(projectsIds);
        }
Example #19
0
        public MSBuildProjectSystem(
            IOmniSharpEnvironment environment,
            OmniSharpWorkspace workspace,
            DotNetCliService dotNetCliService,
            MetadataFileReferenceCache metadataFileReferenceCache,
            IEventEmitter eventEmitter,
            IFileSystemWatcher fileSystemWatcher,
            ILoggerFactory loggerFactory)
        {
            _environment = environment;
            _workspace   = workspace;
            _dotNetCli   = dotNetCliService;
            _metadataFileReferenceCache = metadataFileReferenceCache;
            _eventEmitter      = eventEmitter;
            _fileSystemWatcher = fileSystemWatcher;
            _loggerFactory     = loggerFactory;

            _projects                 = new ProjectFileInfoCollection();
            _projectsToProcess        = new Queue <ProjectFileInfo>();
            _logger                   = loggerFactory.CreateLogger <MSBuildProjectSystem>();
            _packageDepedencyResolver = new PackageDependencyResolver(loggerFactory);
        }
        public async Task UpdateBufferFindsProjectBasedOnNearestPath()
        {
            var workspace = new OmniSharpWorkspace(
                new HostServicesAggregator(
                    Enumerable.Empty <IHostServicesProvider>(), new LoggerFactory()),
                new LoggerFactory());

            TestHelpers.AddProjectToWorkspace(workspace,
                                              filePath: Path.Combine("src", "root", "foo.csproj"),
                                              frameworks: null,
                                              testFiles: new[] { new TestFile(Path.Combine("src", "root", "foo.cs"), "class C1 {}") });

            TestHelpers.AddProjectToWorkspace(workspace,
                                              filePath: Path.Combine("src", "root", "foo", "bar", "insane.csproj"),
                                              frameworks: null,
                                              testFiles: new [] { new TestFile(Path.Combine("src", "root", "foo", "bar", "nested", "code.cs"), "class C2 {}") });

            await workspace.BufferManager.UpdateBufferAsync(new Request()
            {
                FileName = Path.Combine("src", "root", "bar.cs"), Buffer = "enum E {}"
            });

            var documents = workspace.GetDocuments(Path.Combine("src", "root", "bar.cs"));

            Assert.Single(documents);
            Assert.Equal(Path.Combine("src", "root", "foo.csproj"), documents.ElementAt(0).Project.FilePath);
            Assert.Equal(2, documents.ElementAt(0).Project.Documents.Count());

            await workspace.BufferManager.UpdateBufferAsync(new Request()
            {
                FileName = Path.Combine("src", "root", "foo", "bar", "nested", "paths", "dance.cs"), Buffer = "enum E {}"
            });

            documents = workspace.GetDocuments(Path.Combine("src", "root", "foo", "bar", "nested", "paths", "dance.cs"));
            Assert.Single(documents);
            Assert.Equal(Path.Combine("src", "root", "foo", "bar", "insane.csproj"), documents.ElementAt(0).Project.FilePath);
            Assert.Equal(2, documents.ElementAt(0).Project.Documents.Count());
        }
Example #21
0
        public ProjectManager(
            ILoggerFactory loggerFactory,
            MSBuildOptions options,
            IEventEmitter eventEmitter,
            IFileSystemWatcher fileSystemWatcher,
            MetadataFileReferenceCache metadataFileReferenceCache,
            PackageDependencyChecker packageDependencyChecker,
            ProjectLoader projectLoader,
            OmniSharpWorkspace workspace,
            IAnalyzerAssemblyLoader analyzerAssemblyLoader,
            ImmutableArray <IMSBuildEventSink> eventSinks,
            DotNetInfo dotNetInfo)
        {
            _logger                     = loggerFactory.CreateLogger <ProjectManager>();
            _options                    = options ?? new MSBuildOptions();
            _eventEmitter               = eventEmitter;
            _fileSystemWatcher          = fileSystemWatcher;
            _metadataFileReferenceCache = metadataFileReferenceCache;
            _packageDependencyChecker   = packageDependencyChecker;
            _projectFiles               = new ProjectFileInfoCollection();
            _failedToLoadProjectFiles   = new HashSet <string>(StringComparer.OrdinalIgnoreCase);
            _projectsRequestedOnDemand  = new ConcurrentDictionary <string, int>(StringComparer.OrdinalIgnoreCase);
            _projectLoader              = projectLoader;
            _workspace                  = workspace;
            _eventSinks                 = eventSinks;
            _dotNetInfo                 = dotNetInfo;
            _queue = new BufferBlock <ProjectToUpdate>();
            _processLoopCancellation = new CancellationTokenSource();
            _processLoopTask         = Task.Run(() => ProcessLoopAsync(_processLoopCancellation.Token));
            _analyzerAssemblyLoader  = analyzerAssemblyLoader;
            _onDirectoryFileChanged  = OnDirectoryFileChanged;

            if (_options.LoadProjectsOnDemand)
            {
                _workspace.AddWaitForProjectModelReadyHandler(WaitForProjectModelReadyAsync);
            }
        }
        public ProjectSystem(
            IOmniSharpEnvironment environment,
            OmniSharpWorkspace workspace,
            IMSBuildLocator msbuildLocator,
            DotNetCliService dotNetCliService,
            SdksPathResolver sdksPathResolver,
            MetadataFileReferenceCache metadataFileReferenceCache,
            IEventEmitter eventEmitter,
            IFileSystemWatcher fileSystemWatcher,
            ILoggerFactory loggerFactory)
        {
            _environment                = environment;
            _workspace                  = workspace;
            _propertyOverrides          = msbuildLocator.RegisteredInstance.PropertyOverrides;
            _dotNetCli                  = dotNetCliService;
            _sdksPathResolver           = sdksPathResolver;
            _metadataFileReferenceCache = metadataFileReferenceCache;
            _eventEmitter               = eventEmitter;
            _fileSystemWatcher          = fileSystemWatcher;
            _loggerFactory              = loggerFactory;

            _projectsToProcess = new Queue <ProjectFileInfo>();
            _logger            = loggerFactory.CreateLogger <ProjectSystem>();
        }
Example #23
0
        private static OmniSharpWorkspace GetWorkspaceWithProjects()
        {
            var workspace = new OmniSharpWorkspace(
                new HostServicesAggregator(
                    Enumerable.Empty <IHostServicesProvider>(), new LoggerFactory()));

            TestHelpers.AddProjectToWorkspace(workspace,
                                              filePath: Path.Combine("src", "project.json"),
                                              frameworks: new[] { "dnx451", "dnxcore50" },
                                              testFiles: new [] { new TestFile(Path.Combine("src", "a.cs"), "class C {}") });

            TestHelpers.AddProjectToWorkspace(workspace,
                                              filePath: Path.Combine("test", "project.json"),
                                              frameworks: new[] { "dnx451", "dnxcore50" },
                                              testFiles: new [] { new TestFile(Path.Combine("test", "b.cs"), "class C {}") });

            Assert.Equal(4, workspace.CurrentSolution.Projects.Count());
            foreach (var project in workspace.CurrentSolution.Projects)
            {
                Assert.Single(project.Documents);
            }

            return(workspace);
        }
Example #24
0
        public CSharpDiagnosticWorker(OmniSharpWorkspace workspace, DiagnosticEventForwarder forwarder, ILoggerFactory loggerFactory)
        {
            _workspace = workspace;
            _forwarder = forwarder;
            _logger    = loggerFactory.CreateLogger <CSharpDiagnosticWorker>();

            var openDocumentsSubject = new Subject <string>();

            _openDocuments = openDocumentsSubject;

            _workspace.WorkspaceChanged += OnWorkspaceChanged;
            _workspace.DocumentOpened   += OnDocumentOpened;
            _workspace.DocumentClosed   += OnDocumentOpened;

            _disposable = openDocumentsSubject
                          .Buffer(() => Observable.Amb(
                                      openDocumentsSubject.Skip(99).Select(z => Unit.Default),
                                      Observable.Timer(TimeSpan.FromMilliseconds(100)).Select(z => Unit.Default)
                                      ))
                          .SubscribeOn(TaskPoolScheduler.Default)
                          .Select(ProcessQueue)
                          .Merge()
                          .Subscribe();
        }
 public FormatAfterKeystrokeService(OmniSharpWorkspace workspace, OmniSharpOptions omnisharpOptions)
 {
     _workspace        = workspace;
     _omnisharpOptions = omnisharpOptions;
 }
Example #26
0
 public FindImplementationsService(OmniSharpWorkspace workspace)
 {
     _workspace = workspace;
 }
Example #27
0
 public AutoCompleteHandler(OmniSharpWorkspace workspace)
     : base(workspace)
 {
 }
Example #28
0
        public static async Task <(int, string)> TranslateFromGenerated(string fileName, int index, OmniSharpWorkspace workspace, bool sameFile)
        {
            if (string.IsNullOrEmpty(fileName))
            {
                return(-1, fileName);
            }

            var document = workspace.GetDocument(fileName);

            if (document == null)
            {
                return(-1, fileName);
            }

            var sourceText = await document.GetTextAsync();

            if (index > sourceText.Lines.Count)
            {
                return(-1, fileName);
            }

            var syntaxTree = await document.GetSyntaxTreeAsync(CancellationToken.None);

            if (syntaxTree == null)
            {
                return(-1, fileName);
            }

            var point = new Point {
                Column = 0, Line = index
            };
            var textSpan = sourceText.GetSpanFromRange(new Range
            {
                Start = point,
                End   = point
            });

            var lineMapping = syntaxTree.GetMappedLineSpan(textSpan);

            if (sameFile && !PathsAreEqual(lineMapping.Path, fileName))
            {
                return(-1, fileName);
            }

            return(lineMapping.StartLinePosition.Line, PlatformHelper.IsWindows ? lineMapping.Path.Replace('/', '\\') : lineMapping.Path);
        }
Example #29
0
        public static async Task <int> TranslateToGenerated(string fileName, int index, OmniSharpWorkspace workspace)
        {
            if (string.IsNullOrEmpty(fileName))
            {
                return(index);
            }

            var document = workspace.GetDocument(fileName);

            if (document == null)
            {
                return(index);
            }

            var sourceText = await document.GetTextAsync();

            var root = await document.GetSyntaxRootAsync();

            for (var i = sourceText.Lines.Count - 1; i >= 0; i--)
            {
                var line = sourceText.Lines[i];

                if (!line.StartsWith("#line "))
                {
                    continue;
                }

                if (!(root.FindNode(line.Span, true) is LineDirectiveTriviaSyntax lineDirective) ||
                    lineDirective.Line.IsMissing ||
                    !PathsAreEqual((string)lineDirective.File.Value, fileName))
                {
                    continue;
                }

                var lineDirectiveValue = (int)lineDirective.Line.Value - 1;

                if (index < lineDirectiveValue)
                {
                    continue;
                }

                return(line.LineNumber - lineDirectiveValue + index + 1);
            }

            return(index);
        }
 public GotoRegionService(OmniSharpWorkspace workspace)
 {
     _workspace = workspace;
 }