]>
git.madduck.net Git - etc/vim.git/blobdiff - src/black/parsing.py
madduck's git repository
Every one of the projects in this repository is available at the canonical
URL git://git.madduck.net/madduck/pub/<projectpath> — see
each project's metadata for the exact URL.
All patches and comments are welcome. Please squash your changes to logical
commits before using git-format-patch and git-send-email to
patches@ git. madduck. net .
If you'd read over the Git project's submission guidelines and adhered to them,
I'd be especially grateful.
SSH access, as well as push access can be individually
arranged .
If you use my repositories frequently, consider adding the following
snippet to ~/.gitconfig and using the third clone URL listed for each
project:
[url "git://git.madduck.net/madduck/"]
insteadOf = madduck:
except ImportError:
if sys.version_info < (3, 8) and not _IS_PYPY:
print(
except ImportError:
if sys.version_info < (3, 8) and not _IS_PYPY:
print(
- (
- "The typed_ast package is required but not installed.\n"
- "You can upgrade to Python 3.8+ or install typed_ast with\n"
- "`python3 -m pip install typed-ast`."
- ),
+ "The typed_ast package is required but not installed.\n"
+ "You can upgrade to Python 3.8+ or install typed_ast with\n"
+ "`python3 -m pip install typed-ast`.",
file=sys.stderr,
)
sys.exit(1)
file=sys.stderr,
)
sys.exit(1)
def parse_single_version(
def parse_single_version(
- src: str, version: Tuple[int, int]
+ src: str, version: Tuple[int, int], *, type_comments: bool
) -> Union[ast.AST, ast3.AST]:
filename = "<unknown>"
# typed-ast is needed because of feature version limitations in the builtin ast 3.8>
if sys.version_info >= (3, 8) and version >= (3,):
) -> Union[ast.AST, ast3.AST]:
filename = "<unknown>"
# typed-ast is needed because of feature version limitations in the builtin ast 3.8>
if sys.version_info >= (3, 8) and version >= (3,):
- return ast.parse(src, filename, feature_version=version, type_comments=True)
+ return ast.parse(
+ src, filename, feature_version=version, type_comments=type_comments
+ )
if _IS_PYPY:
# PyPy 3.7 doesn't support type comment tracking which is not ideal, but there's
# not much we can do as typed-ast won't work either.
if sys.version_info >= (3, 8):
if _IS_PYPY:
# PyPy 3.7 doesn't support type comment tracking which is not ideal, but there's
# not much we can do as typed-ast won't work either.
if sys.version_info >= (3, 8):
- return ast3.parse(src, filename, type_comments=True )
+ return ast3.parse(src, filename, type_comments=type_comments )
else:
return ast3.parse(src, filename)
else:
else:
return ast3.parse(src, filename)
else:
- # Typed-ast is guaranteed to be used here and automatically tracks type
- # comments separately.
- return ast3.parse(src, filename, feature_version=version[1])
+ if type_comments:
+ # Typed-ast is guaranteed to be used here and automatically tracks type
+ # comments separately.
+ return ast3.parse(src, filename, feature_version=version[1])
+ else:
+ return ast.parse(src, filename)
def parse_ast(src: str) -> Union[ast.AST, ast3.AST]:
def parse_ast(src: str) -> Union[ast.AST, ast3.AST]:
first_error = ""
for version in sorted(versions, reverse=True):
try:
first_error = ""
for version in sorted(versions, reverse=True):
try:
- return parse_single_version(src, version)
+ return parse_single_version(src, version, type_comments=True )
except SyntaxError as e:
if not first_error:
first_error = str(e)
except SyntaxError as e:
if not first_error:
first_error = str(e)
+ # Try to parse without type comments
+ for version in sorted(versions, reverse=True):
+ try:
+ return parse_single_version(src, version, type_comments=False)
+ except SyntaxError:
+ pass
+
raise SyntaxError(first_error)
raise SyntaxError(first_error)