public async Task CompiledCode()
        {
            const string code     = @"
import os
os.mkdir()
";
            var          analysis = await GetAnalysisAsync(code);

            var hs    = new HoverSource(new PlainTextDocumentationSource());
            var hover = hs.GetHover(analysis, new SourceLocation(3, 6));

            hover.contents.value.Should().Contain("Create a directory");
        }
Beispiel #2
0
        public async Task <Hover> Hover(TextDocumentPositionParams @params, CancellationToken cancellationToken)
        {
            var uri = @params.textDocument.uri;

            _log?.Log(TraceEventType.Verbose, $"Hover in {uri} at {@params.position}");

            var analysis = await Document.GetAnalysisAsync(uri, Services, CompletionAnalysisTimeout, cancellationToken);

            if (analysis != null)
            {
                return(_hoverSource.GetHover(analysis, @params.position));
            }
            return(null);
        }
Beispiel #3
0
        public async Task BasicTypes()
        {
            const string code     = @"
x = 'str'

class C:
    '''Class C is awesome'''
    def method(self, a:int, b) -> float:
        '''Returns a float!!!'''
        return 1.0

def func(a, b):
    '''Does nothing useful'''
    return 1

y = func(1, 2)
string = str
";
            var          analysis = await GetAnalysisAsync(code);

            var hs = new HoverSource(new PlainTextDocumentationSource());

            var hover = hs.GetHover(analysis, new SourceLocation(2, 2));

            hover.contents.value.Should().Be("x: str");

            hover = hs.GetHover(analysis, new SourceLocation(2, 7));
            hover.Should().BeNull();

            hover = hs.GetHover(analysis, new SourceLocation(4, 7));
            hover.contents.value.Should().Be("class C\n\nClass C is awesome");

            hover = hs.GetHover(analysis, new SourceLocation(6, 9));
            hover.contents.value.Should().Be("C.method(a: int, b) -> float\n\nReturns a float!!!");

            hover = hs.GetHover(analysis, new SourceLocation(6, 22));
            hover.contents.value.Should().Be("a: int");

            hover = hs.GetHover(analysis, new SourceLocation(10, 7));
            hover.contents.value.Should().Be("func(a, b)\n\nDoes nothing useful");

            hover = hs.GetHover(analysis, new SourceLocation(14, 2));
            hover.contents.value.Should().Be("y: int");

            hover = hs.GetHover(analysis, new SourceLocation(15, 2));
            hover.contents.value.Should().StartWith("class str\n\nstr(object='') -> str");
        }
Beispiel #4
0
        public async Task FStringExpressions()
        {
            const string code     = @"
some = ''
f'{some'
Fr'{some'
f'{some}'
f'hey {some}'
";
            var          analysis = await GetAnalysisAsync(code);

            var hs = new HoverSource(new PlainTextDocumentationSource());

            AssertHover(hs, analysis, new SourceLocation(3, 4), @"some: str", new SourceSpan(3, 4, 3, 8));
            AssertHover(hs, analysis, new SourceLocation(4, 5), @"some: str", new SourceSpan(4, 5, 4, 9));
            AssertHover(hs, analysis, new SourceLocation(5, 4), @"some: str", new SourceSpan(5, 4, 5, 8));
            hs.GetHover(analysis, new SourceLocation(6, 3)).Should().BeNull();
            AssertHover(hs, analysis, new SourceLocation(6, 8), @"some: str", new SourceSpan(6, 8, 6, 12));
        }
Beispiel #5
0
        private static void AssertHover(HoverSource hs, IDocumentAnalysis analysis, SourceLocation position, string hoverText, SourceSpan?span = null)
        {
            var hover = hs.GetHover(analysis, position);

            if (hoverText.EndsWith("*"))
            {
                // Check prefix first, but then show usual message for mismatched value
                if (!hover.contents.value.StartsWith(hoverText.Remove(hoverText.Length - 1)))
                {
                    Assert.AreEqual(hoverText, hover.contents.value);
                }
            }
            else
            {
                Assert.AreEqual(hoverText, hover.contents.value);
            }
            if (span.HasValue)
            {
                hover.range.Should().Be((Range)span.Value);
            }
        }
        private static void AssertNoHover(HoverSource hs, IDocumentAnalysis analysis, SourceLocation position)
        {
            var hover = hs.GetHover(analysis, position);

            hover.Should().BeNull();
        }