mirror of
https://github.com/davidhalter/jedi.git
synced 2025-12-16 02:27:06 +08:00
* Replaced token tuple with token class
* Fixed PEP8 where I read code
This commit is contained in:
@@ -220,7 +220,7 @@ def save_module(path, name, parser, pickling=True):
|
|||||||
|
|
||||||
class _ModulePickling(object):
|
class _ModulePickling(object):
|
||||||
|
|
||||||
version = 4
|
version = 5
|
||||||
"""
|
"""
|
||||||
Version number (integer) for file system cache.
|
Version number (integer) for file system cache.
|
||||||
|
|
||||||
|
|||||||
@@ -146,8 +146,13 @@ class NoErrorTokenizer(object):
|
|||||||
if self.is_fast_parser \
|
if self.is_fast_parser \
|
||||||
and self.previous[0] in (tokenize.INDENT, tokenize.NL, None,
|
and self.previous[0] in (tokenize.INDENT, tokenize.NL, None,
|
||||||
tokenize.NEWLINE, tokenize.DEDENT) \
|
tokenize.NEWLINE, tokenize.DEDENT) \
|
||||||
and c[0] not in (tokenize.COMMENT, tokenize.INDENT,
|
and c[0] not in (
|
||||||
tokenize.NL, tokenize.NEWLINE, tokenize.DEDENT):
|
tokenize.COMMENT,
|
||||||
|
tokenize.INDENT,
|
||||||
|
tokenize.NL,
|
||||||
|
tokenize.NEWLINE,
|
||||||
|
tokenize.DEDENT
|
||||||
|
):
|
||||||
# print c, tokenize.tok_name[c[0]]
|
# print c, tokenize.tok_name[c[0]]
|
||||||
|
|
||||||
tok = c[1]
|
tok = c[1]
|
||||||
|
|||||||
@@ -24,6 +24,7 @@ from jedi._compatibility import next, StringIO
|
|||||||
from jedi import debug
|
from jedi import debug
|
||||||
from jedi import common
|
from jedi import common
|
||||||
from jedi.parser import representation as pr
|
from jedi.parser import representation as pr
|
||||||
|
from jedi.parser import token as token_pr
|
||||||
|
|
||||||
|
|
||||||
class Parser(object):
|
class Parser(object):
|
||||||
@@ -271,8 +272,11 @@ class Parser(object):
|
|||||||
first_pos = self.start_pos
|
first_pos = self.start_pos
|
||||||
token_type, cname = self.next()
|
token_type, cname = self.next()
|
||||||
if token_type != tokenize.NAME:
|
if token_type != tokenize.NAME:
|
||||||
debug.warning("class: syntax err, token is not a name@%s (%s: %s)"
|
debug.warning(
|
||||||
% (self.start_pos[0], tokenize.tok_name[token_type], cname))
|
"class: syntax err, token is not a name@%s (%s: %s)" % (
|
||||||
|
self.start_pos[0], tokenize.tok_name[token_type], cname
|
||||||
|
)
|
||||||
|
)
|
||||||
return None
|
return None
|
||||||
|
|
||||||
cname = pr.Name(self.module, [(cname, self.start_pos)], self.start_pos,
|
cname = pr.Name(self.module, [(cname, self.start_pos)], self.start_pos,
|
||||||
@@ -345,11 +349,17 @@ class Parser(object):
|
|||||||
or tok in breaks and level <= 0):
|
or tok in breaks and level <= 0):
|
||||||
try:
|
try:
|
||||||
# print 'parse_stmt', tok, tokenize.tok_name[token_type]
|
# print 'parse_stmt', tok, tokenize.tok_name[token_type]
|
||||||
tok_list.append(self._current + (self.start_pos,))
|
tok_list.append(
|
||||||
|
token_pr.Token.from_tuple(
|
||||||
|
self._current + (self.start_pos,)
|
||||||
|
)
|
||||||
|
)
|
||||||
if tok == 'as':
|
if tok == 'as':
|
||||||
token_type, tok = self.next()
|
token_type, tok = self.next()
|
||||||
if token_type == tokenize.NAME:
|
if token_type == tokenize.NAME:
|
||||||
n, token_type, tok = self._parse_dot_name(self._current)
|
n, token_type, tok = self._parse_dot_name(
|
||||||
|
self._current
|
||||||
|
)
|
||||||
if n:
|
if n:
|
||||||
set_vars.append(n)
|
set_vars.append(n)
|
||||||
as_names.append(n)
|
as_names.append(n)
|
||||||
@@ -396,7 +406,6 @@ class Parser(object):
|
|||||||
self._scope.statements[-1].add_docstr(first_tok[1])
|
self._scope.statements[-1].add_docstr(first_tok[1])
|
||||||
return None, tok
|
return None, tok
|
||||||
|
|
||||||
|
|
||||||
stmt = stmt_class(self.module, tok_list, first_pos, self.end_pos,
|
stmt = stmt_class(self.module, tok_list, first_pos, self.end_pos,
|
||||||
as_names=as_names,
|
as_names=as_names,
|
||||||
names_are_set_vars=names_are_set_vars)
|
names_are_set_vars=names_are_set_vars)
|
||||||
@@ -435,9 +444,11 @@ class Parser(object):
|
|||||||
s = s.parent
|
s = s.parent
|
||||||
raise
|
raise
|
||||||
|
|
||||||
if self.user_position and (self.start_pos[0] == self.user_position[0]
|
if self.user_position and (
|
||||||
or self.user_scope is None
|
self.start_pos[0] == self.user_position[0]
|
||||||
and self.start_pos[0] >= self.user_position[0]):
|
or self.user_scope is None
|
||||||
|
and self.start_pos[0] >= self.user_position[0]
|
||||||
|
):
|
||||||
debug.dbg('user scope found [%s] = %s' %
|
debug.dbg('user scope found [%s] = %s' %
|
||||||
(self.parserline.replace('\n', ''), repr(self._scope)))
|
(self.parserline.replace('\n', ''), repr(self._scope)))
|
||||||
self.user_scope = self._scope
|
self.user_scope = self._scope
|
||||||
@@ -489,8 +500,9 @@ class Parser(object):
|
|||||||
and not isinstance(self._scope, pr.SubModule):
|
and not isinstance(self._scope, pr.SubModule):
|
||||||
self._scope = self.module
|
self._scope = self.module
|
||||||
|
|
||||||
use_as_parent_scope = self.top_module if isinstance(self._scope,
|
use_as_parent_scope = self.top_module if isinstance(
|
||||||
pr.SubModule) else self._scope
|
self._scope, pr.SubModule
|
||||||
|
) else self._scope
|
||||||
first_pos = self.start_pos
|
first_pos = self.start_pos
|
||||||
if tok == 'def':
|
if tok == 'def':
|
||||||
func = self._parse_function()
|
func = self._parse_function()
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
from jedi.parser import Parser
|
from jedi.parser import Parser
|
||||||
from jedi.parser import representation as pr
|
from jedi.parser import representation as pr
|
||||||
|
|
||||||
|
|
||||||
def test_user_statement_on_import():
|
def test_user_statement_on_import():
|
||||||
"""github #285"""
|
"""github #285"""
|
||||||
s = "from datetime import (\n" \
|
s = "from datetime import (\n" \
|
||||||
@@ -9,7 +10,7 @@ def test_user_statement_on_import():
|
|||||||
for pos in [(2, 1), (2, 4)]:
|
for pos in [(2, 1), (2, 4)]:
|
||||||
u = Parser(s, user_position=pos).user_stmt
|
u = Parser(s, user_position=pos).user_stmt
|
||||||
assert isinstance(u, pr.Import)
|
assert isinstance(u, pr.Import)
|
||||||
assert u.defunct == False
|
assert u.defunct is False
|
||||||
assert [str(n) for n in u.get_defined_names()] == ['time']
|
assert [str(n) for n in u.get_defined_names()] == ['time']
|
||||||
|
|
||||||
|
|
||||||
@@ -47,6 +48,7 @@ class TestCallAndName():
|
|||||||
assert isinstance(literal, pr.String)
|
assert isinstance(literal, pr.String)
|
||||||
assert literal.value == 'hello'
|
assert literal.value == 'hello'
|
||||||
|
|
||||||
|
|
||||||
class TestSubscopes():
|
class TestSubscopes():
|
||||||
def get_sub(self, source):
|
def get_sub(self, source):
|
||||||
return Parser(source).module.subscopes[0]
|
return Parser(source).module.subscopes[0]
|
||||||
@@ -62,6 +64,7 @@ class TestSubscopes():
|
|||||||
assert name.end_pos == (1, len('def foo'))
|
assert name.end_pos == (1, len('def foo'))
|
||||||
assert str(name) == 'foo'
|
assert str(name) == 'foo'
|
||||||
|
|
||||||
|
|
||||||
class TestImports():
|
class TestImports():
|
||||||
def get_import(self, source):
|
def get_import(self, source):
|
||||||
return Parser(source).module.imports[0]
|
return Parser(source).module.imports[0]
|
||||||
|
|||||||
Reference in New Issue
Block a user