示例#1
0
 SignatureHelpSession(SignatureHelpService signatureHelpService, Lazy <ISignatureHelpBroker> signatureHelpBroker, ITextView textView)
 {
     this.signatureHelpBroker = signatureHelpBroker;
     this.textView            = textView;
     signatures = new List <Signature>();
     this.signatureHelpService = signatureHelpService;
 }
示例#2
0
 SignatureHelpInfo(SignatureHelpService signatureHelpService, Document document, SourceText sourceText, ITextSnapshot snapshot)
 {
     SignatureHelpService = signatureHelpService;
     Document             = document;
     SourceText           = sourceText;
     Snapshot             = snapshot;
 }
示例#3
0
        public async Task <SignatureHelpResult> GetSignatureHelp(WorkspaceRequest request, Budget budget)
        {
            budget ??= new TimeBudget(TimeSpan.FromSeconds(defaultBudgetInSeconds));

            var package = await _packageFinder.Find <ICreateWorkspace>(request.Workspace.WorkspaceType);

            var workspace = await request.Workspace.InlineBuffersAsync();

            var sourceFiles = workspace.GetSourceFiles();

            var(compilation, project) = await package.GetCompilationForLanguageServices(sourceFiles, GetSourceCodeKind(request), GetUsings(request.Workspace), budget);

            var documents = project.Documents.ToList();

            var selectedDocument = documents.FirstOrDefault(doc => doc.IsMatch(request.ActiveBufferId.FileName))
                                   ??
                                   (documents.Count == 1 ? documents.Single() : null);

            if (selectedDocument == null)
            {
                return(new SignatureHelpResult(requestId: request.RequestId));
            }

            var diagnostics = await DiagnosticsExtractor.ExtractSerializableDiagnosticsFromDocument(request.ActiveBufferId, budget, selectedDocument, workspace);

            var tree = await selectedDocument.GetSyntaxTreeAsync();

            var absolutePosition = workspace.GetAbsolutePositionForGetBufferWithSpecifiedIdOrSingleBufferIfThereIsOnlyOne(request.ActiveBufferId);

            var syntaxNode = tree.GetRoot().FindToken(absolutePosition).Parent;

            var result = await SignatureHelpService.GetSignatureHelp(
                () => Task.FromResult(compilation.GetSemanticModel(tree)),
                syntaxNode,
                absolutePosition);

            result.RequestId = request.RequestId;
            if (diagnostics?.Count > 0)
            {
                result.Diagnostics = diagnostics;
            }

            return(result);
        }
        private async Task <SignatureHelp> GetSignatureHelp(string source)
        {
            var lineColumn = TestHelpers.GetLineAndColumnFromDollar(source);

            source = source.Replace("$", string.Empty);

            var request = new SignatureHelpRequest()
            {
                FileName = "dummy.cs",
                Line     = lineColumn.Line,
                Column   = lineColumn.Column,
                Buffer   = source
            };

            var workspace = await TestHelpers.CreateSimpleWorkspace(source);

            var controller = new SignatureHelpService(workspace);

            return(await controller.Handle(request));
        }
示例#5
0
        public static SignatureHelpInfo?Create(ITextSnapshot snapshot)
        {
            if (snapshot == null)
            {
                throw new ArgumentNullException(nameof(snapshot));
            }
            var sourceText = snapshot.AsText();
            var document   = sourceText.GetOpenDocumentInCurrentContextWithChanges();

            if (document == null)
            {
                return(null);
            }
            var signatureHelpService = SignatureHelpService.GetService(document);

            if (signatureHelpService == null)
            {
                return(null);
            }
            return(new SignatureHelpInfo(signatureHelpService, document, sourceText, snapshot));
        }
        private async Task<SignatureHelp> GetSignatureHelp(string source)
        {
            var lineColumn = TestHelpers.GetLineAndColumnFromDollar(source);
            source = source.Replace("$", string.Empty);

            var request = new SignatureHelpRequest()
            {
                FileName = "dummy.cs",
                Line = lineColumn.Line,
                Column = lineColumn.Column,
                Buffer = source
            };

            var workspace = await TestHelpers.CreateSimpleWorkspace(source);
            var controller = new SignatureHelpService(workspace);
            return await controller.Handle(request);
        }