Add fstrings to the grammar.

This commit is contained in:
Dave Halter
2017-08-24 00:01:42 +02:00
parent 2ba107872d
commit 033e880408
+34 -1
View File
@@ -12,6 +12,7 @@ from parso.parser import BaseParser
from parso.python.parser import Parser as PythonParser from parso.python.parser import Parser as PythonParser
from parso.python.errors import ErrorFinderConfig from parso.python.errors import ErrorFinderConfig
from parso.python import pep8 from parso.python import pep8
from parso.python import fstring
_loaded_grammars = {} _loaded_grammars = {}
@@ -197,6 +198,30 @@ class PythonGrammar(Grammar):
return tokenize(code, self.version_info) return tokenize(code, self.version_info)
class PythonFStringGrammar(Grammar):
def __init__(self):
super(PythonFStringGrammar, self).__init__(
text=fstring.GRAMMAR,
tokenizer=fstring.tokenize
)
def parse(self, code, **kwargs):
return self._parse(code, **kwargs)
def _parse(self, code, error_recovery=True, start_pos=(1, 0)):
tokens = self._tokenizer(lines)
p = self._parser(
self._pgen_grammar,
error_recovery=error_recovery,
start_symbol=start_symbol
)
return p.parse(tokens=tokens)
def parse_leaf(leaf, error_recovery=True):
code = leaf._get_payload()
return self.parse(code, error_recovery=True, start_pos=leaf.start_pos)
def load_grammar(**kwargs): def load_grammar(**kwargs):
""" """
Loads a Python grammar. The default version is the current Python version. Loads a Python grammar. The default version is the current Python version.
@@ -204,7 +229,8 @@ def load_grammar(**kwargs):
If you need support for a specific version, please use e.g. If you need support for a specific version, please use e.g.
`version='3.3'`. `version='3.3'`.
""" """
def load_grammar(version=None): def load_grammar(language='python', version=None):
if language == 'python':
version_info = parse_version_string(version) version_info = parse_version_string(version)
file = 'python/grammar%s%s.txt' % (version_info.major, version_info.minor) file = 'python/grammar%s%s.txt' % (version_info.major, version_info.minor)
@@ -223,4 +249,11 @@ def load_grammar(**kwargs):
except FileNotFoundError: except FileNotFoundError:
message = "Python version %s is currently not supported." % version message = "Python version %s is currently not supported." % version
raise NotImplementedError(message) raise NotImplementedError(message)
elif language == 'python-f-string':
if version is not None:
raise NotImplementedError("Currently different versions are not supported.")
return PythonFStringGrammar()
else:
raise NotImplementedError("No support for language %s." % language)
return load_grammar(**kwargs) return load_grammar(**kwargs)