mirror of
https://github.com/davidhalter/jedi.git
synced 2025-12-07 22:44:27 +08:00
Improved API documentation
This commit is contained in:
@@ -26,7 +26,7 @@ sys.path.insert(0, os.path.abspath('../../jedi'))
|
|||||||
|
|
||||||
# Add any Sphinx extension module names here, as strings. They can be extensions
|
# Add any Sphinx extension module names here, as strings. They can be extensions
|
||||||
# coming with Sphinx (named 'sphinx.ext.*') or your custom ones.
|
# coming with Sphinx (named 'sphinx.ext.*') or your custom ones.
|
||||||
extensions = ['sphinx.ext.autodoc', 'sphinx.ext.viewcode']
|
extensions = ['sphinx.ext.autodoc', 'sphinx.ext.viewcode', 'sphinx.ext.todo']
|
||||||
|
|
||||||
# Add any paths that contain templates here, relative to this directory.
|
# Add any paths that contain templates here, relative to this directory.
|
||||||
templates_path = ['_templates']
|
templates_path = ['_templates']
|
||||||
@@ -241,3 +241,7 @@ texinfo_documents = [
|
|||||||
|
|
||||||
# How to display URL addresses: 'footnote', 'no', or 'inline'.
|
# How to display URL addresses: 'footnote', 'no', or 'inline'.
|
||||||
#texinfo_show_urls = 'footnote'
|
#texinfo_show_urls = 'footnote'
|
||||||
|
|
||||||
|
# -- Options for todo module ---------------------------------------------------
|
||||||
|
|
||||||
|
todo_include_todos = False
|
||||||
|
|||||||
22
jedi/api.py
22
jedi/api.py
@@ -45,7 +45,7 @@ from _compatibility import next, unicode
|
|||||||
|
|
||||||
|
|
||||||
class NotFoundError(Exception):
|
class NotFoundError(Exception):
|
||||||
""" A custom error to avoid catching the wrong exceptions """
|
"""A custom error to avoid catching the wrong exceptions."""
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
|
||||||
@@ -78,7 +78,7 @@ class Script(object):
|
|||||||
|
|
||||||
@property
|
@property
|
||||||
def parser(self):
|
def parser(self):
|
||||||
""" The lazy parser """
|
""" The lazy parser."""
|
||||||
return self.module.parser
|
return self.module.parser
|
||||||
|
|
||||||
def complete(self):
|
def complete(self):
|
||||||
@@ -210,7 +210,7 @@ class Script(object):
|
|||||||
"""
|
"""
|
||||||
Return the definitions of a the path under the cursor. This is not a
|
Return the definitions of a the path under the cursor. This is not a
|
||||||
goto function! This follows complicated paths and returns the end, not
|
goto function! This follows complicated paths and returns the end, not
|
||||||
the first definition. The big difference of :meth:`goto` and
|
the first definition. The big difference between :meth:`goto` and
|
||||||
:meth:`get_definition` is that :meth:`goto` doesn't follow imports and
|
:meth:`get_definition` is that :meth:`goto` doesn't follow imports and
|
||||||
statements. Multiple objects may be returned, because Python itself is
|
statements. Multiple objects may be returned, because Python itself is
|
||||||
a dynamic language, which means depending on an option you can have two
|
a dynamic language, which means depending on an option you can have two
|
||||||
@@ -311,7 +311,7 @@ class Script(object):
|
|||||||
is very useful for refactoring (renaming), or to show all usages of a
|
is very useful for refactoring (renaming), or to show all usages of a
|
||||||
variable.
|
variable.
|
||||||
|
|
||||||
TODO implement additional_module_paths
|
.. todo:: Implement additional_module_paths
|
||||||
"""
|
"""
|
||||||
user_stmt = self.parser.user_stmt
|
user_stmt = self.parser.user_stmt
|
||||||
definitions, search_name = self._goto(add_import_name=True)
|
definitions, search_name = self._goto(add_import_name=True)
|
||||||
@@ -340,13 +340,17 @@ class Script(object):
|
|||||||
|
|
||||||
def get_in_function_call(self):
|
def get_in_function_call(self):
|
||||||
"""
|
"""
|
||||||
Return the function, that the cursor is in, e.g.:
|
Return the function object of the call you're currently in.
|
||||||
>>> isinstance(| # | <-- cursor is here
|
|
||||||
|
|
||||||
This would return the `isinstance` function. In contrary:
|
E.g. if the cursor is here::
|
||||||
>>> isinstance()| # | <-- cursor is here
|
|
||||||
|
|
||||||
This would return `None`.
|
>>> abs(# <-- cursor is here
|
||||||
|
|
||||||
|
This would return the ``abs`` function. On the other hand::
|
||||||
|
|
||||||
|
>>> abs()# <-- cursor is here
|
||||||
|
|
||||||
|
This would return ``None``.
|
||||||
"""
|
"""
|
||||||
def check_user_stmt(user_stmt):
|
def check_user_stmt(user_stmt):
|
||||||
if user_stmt is None \
|
if user_stmt is None \
|
||||||
|
|||||||
@@ -135,8 +135,10 @@ class BaseDefinition(object):
|
|||||||
|
|
||||||
|
|
||||||
class Completion(BaseDefinition):
|
class Completion(BaseDefinition):
|
||||||
""" `Completion` objects are returned from `Script.complete`. Providing
|
"""
|
||||||
some useful functions for IDE's. """
|
`Completion` objects are returned from :meth:`api.Script.complete`. They
|
||||||
|
provide additional information about a completion.
|
||||||
|
"""
|
||||||
def __init__(self, name, needs_dot, like_name_length, base):
|
def __init__(self, name, needs_dot, like_name_length, base):
|
||||||
super(Completion, self).__init__(name.parent, name.start_pos)
|
super(Completion, self).__init__(name.parent, name.start_pos)
|
||||||
|
|
||||||
@@ -149,11 +151,13 @@ class Completion(BaseDefinition):
|
|||||||
|
|
||||||
@property
|
@property
|
||||||
def complete(self):
|
def complete(self):
|
||||||
""" Delievers the rest of the word, e.g. completing `isinstance`
|
"""
|
||||||
>>> isinstan
|
Return the rest of the word, e.g. completing ``isinstance``::
|
||||||
|
|
||||||
|
>>> isinstan# <-- Cursor is here
|
||||||
|
|
||||||
would return the string 'ce'. It also adds additional stuff, depending
|
would return the string 'ce'. It also adds additional stuff, depending
|
||||||
on your `settings.py`
|
on your `settings.py`.
|
||||||
"""
|
"""
|
||||||
dot = '.' if self.needs_dot else ''
|
dot = '.' if self.needs_dot else ''
|
||||||
append = ''
|
append = ''
|
||||||
@@ -170,7 +174,9 @@ class Completion(BaseDefinition):
|
|||||||
|
|
||||||
@property
|
@property
|
||||||
def word(self):
|
def word(self):
|
||||||
""" In contrary to `complete` returns the whole word, e.g.
|
"""
|
||||||
|
Similar to :meth:`Completion.complete`, but return the whole word, e.g. ::
|
||||||
|
|
||||||
>>> isinstan
|
>>> isinstan
|
||||||
|
|
||||||
would return 'isinstance'.
|
would return 'isinstance'.
|
||||||
@@ -179,8 +185,11 @@ class Completion(BaseDefinition):
|
|||||||
|
|
||||||
@property
|
@property
|
||||||
def description(self):
|
def description(self):
|
||||||
""" Provides a description of the completion object
|
"""
|
||||||
TODO return value is just __repr__ of some objects, improve! """
|
Provide a description of the completion object.
|
||||||
|
|
||||||
|
.. todo:: return value is just __repr__ of some objects, improve!
|
||||||
|
"""
|
||||||
parent = self.name.parent
|
parent = self.name.parent
|
||||||
if parent is None:
|
if parent is None:
|
||||||
return ''
|
return ''
|
||||||
@@ -194,12 +203,13 @@ class Completion(BaseDefinition):
|
|||||||
return '%s: %s%s' % (t, desc, line_nr)
|
return '%s: %s%s' % (t, desc, line_nr)
|
||||||
|
|
||||||
def follow_definition(self):
|
def follow_definition(self):
|
||||||
""" Returns you the original definitions. I strongly recommend not
|
"""
|
||||||
using it for your completions, because it might slow down Jedi. If you
|
Return the original definitions. I strongly recommend not using it for
|
||||||
want to read only a few objects (<=20). I think it might be useful,
|
your completions, because it might slow down *Jedi*. If you want to read
|
||||||
especially to get the original docstrings.
|
only a few objects (<=20), it might be useful, especially to
|
||||||
The basic problem of this function is that it follows all results. This
|
get the original docstrings. The basic problem of this function is
|
||||||
means with 1000 completions (e.g. numpy), it's just PITA slow.
|
that it follows all results. This means with 1000 completions (e.g.
|
||||||
|
numpy), it's just PITA-slow.
|
||||||
"""
|
"""
|
||||||
if self._followed_definitions is None:
|
if self._followed_definitions is None:
|
||||||
if self.definition.isinstance(parsing.Statement):
|
if self.definition.isinstance(parsing.Statement):
|
||||||
@@ -220,15 +230,19 @@ class Completion(BaseDefinition):
|
|||||||
|
|
||||||
|
|
||||||
class Definition(BaseDefinition):
|
class Definition(BaseDefinition):
|
||||||
""" These are the objects returned by either `Script.goto` or
|
"""
|
||||||
`Script.get_definition`. """
|
*Definition* objects are returned from :meth:`api.Script.goto` or
|
||||||
|
:meth:`api.Script.get_definition`.
|
||||||
|
"""
|
||||||
def __init__(self, definition):
|
def __init__(self, definition):
|
||||||
super(Definition, self).__init__(definition, definition.start_pos)
|
super(Definition, self).__init__(definition, definition.start_pos)
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def description(self):
|
def description(self):
|
||||||
""" A description of the Definition object, which is heavily used in
|
"""
|
||||||
testing. e.g. for `isinstance` it returns 'def isinstance' """
|
A description of the :class:`.Definition` object, which is heavily used
|
||||||
|
in testing. e.g. for ``isinstance`` it returns ``def isinstance``.
|
||||||
|
"""
|
||||||
d = self.definition
|
d = self.definition
|
||||||
if isinstance(d, evaluate.InstanceElement):
|
if isinstance(d, evaluate.InstanceElement):
|
||||||
d = d.var
|
d = d.var
|
||||||
@@ -252,10 +266,15 @@ class Definition(BaseDefinition):
|
|||||||
|
|
||||||
@property
|
@property
|
||||||
def desc_with_module(self):
|
def desc_with_module(self):
|
||||||
""" In addition to the Definition, it also returns the module. Don't
|
"""
|
||||||
use it yet, its behaviour may change. If you really need it, talk to me
|
In addition to the definition, also return the module.
|
||||||
TODO add full path. This function is should return a
|
|
||||||
module.class.function path. """
|
.. warning:: Don't use this function yet, its behaviour may change. If
|
||||||
|
you really need it, talk to me.
|
||||||
|
|
||||||
|
.. todo:: Add full path. This function is should return a
|
||||||
|
`module.class.function` path.
|
||||||
|
"""
|
||||||
if self.module_path.endswith('.py') \
|
if self.module_path.endswith('.py') \
|
||||||
and not isinstance(self.definition, parsing.Module):
|
and not isinstance(self.definition, parsing.Module):
|
||||||
position = '@%s' % (self.line_nr)
|
position = '@%s' % (self.line_nr)
|
||||||
|
|||||||
Reference in New Issue
Block a user