forked from VimPlug/jedi
Remove an occurance of the complicated parser creation.
This commit is contained in:
@@ -22,8 +22,8 @@ x support for type hint comments for functions, `# type: (int, str) -> int`.
|
|||||||
import itertools
|
import itertools
|
||||||
|
|
||||||
import os
|
import os
|
||||||
from jedi.parser import Parser, ParseError, ParserWithRecovery, tree
|
from jedi.parser import ParseError, tree
|
||||||
from jedi.parser.python import load_grammar
|
from jedi.parser.python import parse
|
||||||
from jedi.common import unite
|
from jedi.common import unite
|
||||||
from jedi.evaluate.cache import memoize_default
|
from jedi.evaluate.cache import memoize_default
|
||||||
from jedi.evaluate import compiled
|
from jedi.evaluate import compiled
|
||||||
@@ -62,9 +62,11 @@ def _fix_forward_reference(context, node):
|
|||||||
if isinstance(evaled_node, compiled.CompiledObject) and \
|
if isinstance(evaled_node, compiled.CompiledObject) and \
|
||||||
isinstance(evaled_node.obj, str):
|
isinstance(evaled_node.obj, str):
|
||||||
try:
|
try:
|
||||||
p = Parser(load_grammar(), _compatibility.unicode(evaled_node.obj),
|
new_node = parse(
|
||||||
start_symbol='eval_input')
|
_compatibility.unicode(evaled_node.obj),
|
||||||
new_node = p.get_parsed_node()
|
start_symbol='eval_input',
|
||||||
|
error_recovery=False
|
||||||
|
)
|
||||||
except ParseError:
|
except ParseError:
|
||||||
debug.warning('Annotation not parsed: %s' % evaled_node.obj)
|
debug.warning('Annotation not parsed: %s' % evaled_node.obj)
|
||||||
return node
|
return node
|
||||||
@@ -116,8 +118,7 @@ def _get_typing_replacement_module():
|
|||||||
os.path.abspath(os.path.join(__file__, "../jedi_typing.py"))
|
os.path.abspath(os.path.join(__file__, "../jedi_typing.py"))
|
||||||
with open(typing_path) as f:
|
with open(typing_path) as f:
|
||||||
code = _compatibility.unicode(f.read())
|
code = _compatibility.unicode(f.read())
|
||||||
p = ParserWithRecovery(load_grammar(), code)
|
_typing_module = parse(code)
|
||||||
_typing_module = p.module
|
|
||||||
return _typing_module
|
return _typing_module
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -1,2 +1,7 @@
|
|||||||
from jedi.parser.parser import Parser, ParserWithRecovery, ParseError
|
from jedi.parser.parser import Parser, ParserWithRecovery, ParseError
|
||||||
from jedi.parser.pgen2.pgen import generate_grammar
|
from jedi.parser.pgen2.pgen import generate_grammar
|
||||||
|
|
||||||
|
|
||||||
|
def parse(grammar, code):
|
||||||
|
raise NotImplementedError
|
||||||
|
Parser(grammar, code)
|
||||||
|
|||||||
@@ -41,7 +41,11 @@ def load_grammar(version=None):
|
|||||||
return load_grammar()
|
return load_grammar()
|
||||||
|
|
||||||
|
|
||||||
def parse(code, grammar=None, error_recovery=True):
|
def parse(code, grammar=None, error_recovery=True, start_symbol='file_input'):
|
||||||
|
if start_symbol != 'file_input' and error_recovery:
|
||||||
|
raise Exception(
|
||||||
|
'The start_symbol is only allowed when error recovery is disabled.')
|
||||||
|
|
||||||
added_newline = not code.endswith('\n')
|
added_newline = not code.endswith('\n')
|
||||||
if added_newline:
|
if added_newline:
|
||||||
code += '\n'
|
code += '\n'
|
||||||
@@ -50,11 +54,14 @@ def parse(code, grammar=None, error_recovery=True):
|
|||||||
grammar = load_grammar()
|
grammar = load_grammar()
|
||||||
|
|
||||||
tokens = source_tokens(code, use_exact_op_types=True)
|
tokens = source_tokens(code, use_exact_op_types=True)
|
||||||
|
kwargs = {}
|
||||||
if error_recovery:
|
if error_recovery:
|
||||||
parser = ParserWithRecovery
|
parser = ParserWithRecovery
|
||||||
else:
|
else:
|
||||||
|
kwargs = dict(start_symbol=start_symbol)
|
||||||
parser = Parser
|
parser = Parser
|
||||||
p = parser(grammar, code, tokens=tokens)
|
p = parser(grammar, code, tokens=tokens, **kwargs)
|
||||||
if added_newline:
|
if added_newline:
|
||||||
p.remove_last_newline()
|
p.remove_last_newline()
|
||||||
|
|
||||||
return p.get_root_node()
|
return p.get_root_node()
|
||||||
|
|||||||
Reference in New Issue
Block a user