("[x for x\nin range(3)\nof x]", "if"),
("[123 fur x\nin range(3)\nif x]", "for"),
("for x im n:\n pass", "in"),
+ ("mach x:", "match"),
+ ("math x:", "match"),
+ ("match 1:\n cse 1:", "case"),
+ ("typ x = int", "type"),
+ ("typed x = int", "type"),
+ ("lazi import x", "lazy"),
+ ("lezi import x", "lazy"),
+ ("switch x:\n case:", "match"),
+ ("delete x", "del"),
+ ("function f():", "def"),
+ ("func f():", "def"),
+ ("void f():", "def"),
]
def test_keyword_suggestions_from_file(self):
# Limit the number of possible matches to try
max_matches = 3
matches = []
+
+ hint = _get_cross_language_keyword_hint(wrong_name)
+ if hint:
+ matches.append(hint)
if _suggestions is not None:
- suggestion = _suggestions._generate_suggestions(keyword.kwlist, wrong_name)
+ suggestion = _suggestions._generate_suggestions(keyword.kwlist + keyword.softkwlist, wrong_name)
if suggestion:
matches.append(suggestion)
- matches.extend(difflib.get_close_matches(wrong_name, keyword.kwlist, n=max_matches, cutoff=0.5))
+ matches.extend(
+ difflib.get_close_matches(
+ wrong_name,
+ keyword.kwlist + keyword.softkwlist,
+ n=max_matches,
+ cutoff=0.5
+ )
+ )
matches = matches[:max_matches]
for suggestion in matches:
if not suggestion or suggestion == wrong_name:
})
+# Cross-language keyword suggestions.
+_CROSS_LANGUAGE_KEYWORD_HINTS = frozendict({
+ # C/C++ equivalents
+ 'switch': 'match',
+ 'delete': 'del',
+ # function define equivalents
+ 'function': 'def',
+ 'func': 'def',
+ 'void': 'def',
+})
+
def _substitution_cost(ch_a, ch_b):
if ch_a == ch_b:
return 0
return None
+def _get_cross_language_keyword_hint(wrong_name):
+ """Check if wrong_name is a common keyword from another language
+ """
+ return _CROSS_LANGUAGE_KEYWORD_HINTS.get(wrong_name)
+
+
def _get_safe___dir__(obj):
# Use obj.__dir__() to avoid a TypeError when calling dir(obj).
# See gh-131001 and gh-139933.