diff --git a/jedi/api/keywords.py b/jedi/api/keywords.py index 1ee929191..b624d73af 100644 --- a/jedi/api/keywords.py +++ b/jedi/api/keywords.py @@ -76,12 +76,16 @@ class KeywordName(AbstractNameDefinition): api_type = 'keyword' def __init__(self, evaluator, name): + self.evaluator = evaluator self.string_name = name self.parent_context = evaluator.BUILTINS def eval(self): return set() + def infer(self): + return [Keyword(self.evaluator, self.string_name, (0, 0))] + class Keyword(object): api_type = 'keyword' @@ -100,9 +104,8 @@ def names(self): """ For a `parsing.Name` like comparision """ return [self.name] - @property - def docstr(self): - return imitate_pydoc(self.name) + def py__doc__(self, include_call_signature=False): + return imitate_pydoc(self.name.string_name) def __repr__(self): return '<%s: %s>' % (type(self).__name__, self.name) @@ -136,6 +139,6 @@ def imitate_pydoc(string): return '' try: - return pydoc_topics.topics[label] if pydoc_topics else '' + return pydoc_topics.topics[label].strip() if pydoc_topics else '' except KeyError: return '' diff --git a/test/test_evaluate/test_docstring.py b/test/test_evaluate/test_docstring.py index 6dbd1cac9..98858b914 100644 --- a/test/test_evaluate/test_docstring.py +++ b/test/test_evaluate/test_docstring.py @@ -20,7 +20,7 @@ def test_function_doc(self): def func(): '''Docstring of `func`.''' func""").goto_definitions() - self.assertEqual(defs[0].raw_doc, 'Docstring of `func`.') + self.assertEqual(defs[0].docstring(), 'func()\n\nDocstring of `func`.') @unittest.skip('need evaluator class for that') def test_attribute_docstring(self): @@ -28,7 +28,7 @@ def test_attribute_docstring(self): x = None '''Docstring of `x`.''' x""").goto_definitions() - self.assertEqual(defs[0].raw_doc, 'Docstring of `x`.') + self.assertEqual(defs[0].docstring(), 'Docstring of `x`.') @unittest.skip('need evaluator class for that') def test_multiple_docstrings(self): @@ -38,7 +38,7 @@ def func(): x = func '''Docstring of `x`.''' x""").goto_definitions() - docs = [d.raw_doc for d in defs] + docs = [d.docstring() for d in defs] self.assertEqual(docs, ['Original docstring.', 'Docstring of `x`.']) def test_completion(self): @@ -105,6 +105,10 @@ def method_b(c): assert '__init__' in names assert 'mro' not in names # Exists only for types. + def test_docstring_keyword(self): + completions = jedi.Script('assert').completions() + self.assertIn('assert', completions[0].docstring()) + @unittest.skipIf(numpydoc_unavailable, 'numpydoc module is unavailable') def test_numpydoc_docstring(self): s = dedent('''