diff --git a/parso/grammar.py b/parso/grammar.py index 85c65db..92755d5 100644 --- a/parso/grammar.py +++ b/parso/grammar.py @@ -1,5 +1,6 @@ import hashlib import os +import warnings from typing import Generic, TypeVar, Union, Dict, Optional, Any from pathlib import Path @@ -239,7 +240,15 @@ def load_grammar(*, version: str = None, path: str = None): :param str version: A python version string, e.g. ``version='3.8'``. :param str path: A path to a grammar file """ - version_info = parse_version_string(version) + # NOTE: this (3, 14) should be updated to the latest version parso supports. + # (if this doesn't happen, users will get older syntaxes and spurious warnings) + passed_version_info = parse_version_string(version) + version_info = min(passed_version_info, PythonVersionInfo(3, 14)) + + if passed_version_info != version_info: + warnings.warn('parso does not support %s.%s yet.' % ( + passed_version_info.major, passed_version_info.minor + )) file = path or os.path.join( 'python', diff --git a/pytest.ini b/pytest.ini index cd6a4af..bef857c 100644 --- a/pytest.ini +++ b/pytest.ini @@ -10,3 +10,6 @@ norecursedirs = .* docs scripts normalizer_issue_files build # fine as long as we are using `clean_jedi_cache` as a session scoped # fixture. usefixtures = clean_parso_cache + +# Disallow warnings +filterwarnings = error diff --git a/test/test_load_grammar.py b/test/test_load_grammar.py index 0ea648e..024ce8c 100644 --- a/test/test_load_grammar.py +++ b/test/test_load_grammar.py @@ -4,15 +4,21 @@ from parso import utils def test_load_inexisting_grammar(): - # This version shouldn't be out for a while, but if we ever do, wow! - with pytest.raises(NotImplementedError): - load_grammar(version='15.8') - # The same is true for very old grammars (even though this is probably not - # going to be an issue. + # We support future grammars assuming future compatibility, + # but we don't know how to parse old grammars. with pytest.raises(NotImplementedError): load_grammar(version='1.5') +def test_load_grammar_uses_older_syntax(): + with pytest.warns(): + load_grammar(version='4.0') + + +def test_load_grammar_doesnt_warn(each_version): + load_grammar(version=each_version) + + @pytest.mark.parametrize(('string', 'result'), [ ('2', (2, 7)), ('3', (3, 6)), ('1.1', (1, 1)), ('1.1.1', (1, 1)), ('300.1.31', (300, 1)) ])