nie jestem pewien, jaki rodzaj s nasze narzędzie do analizy, którego używasz, więc mogę tylko zaproponować sugestię. Byłoby jednak zbyt długo na komentarz, więc napisałem scenariusz proof-of-concept.
Chodzi o to, aby przyjrzeć się kodem źródłowym za pomocą modułu Pythona tokenize
, który generuje tokeny z wyrażeń Pythona. Jeśli dobrze napisany kod Pythona zawiera niejawnie kontynuowane ciągi literałów, pojawi się jako token STRING
, a następnie NL
.
Na przykład użyjmy pliku źródłowego source.py
jako przypadku testowego.
x = ("a"
"b" # some trailing spaces
# Coment line
"c"
""
# The following is an explicit continuation
"d" \
"e")
Uruchomienie polecenia python check.py < source.py
plik generuje:
1:8: implicit continuation:
x = ("a"
~~~^
2:35: implicit continuation:
"b" # some trailing spaces
~~~^
4:3: implicit continuation:
"c"
~~~^
5:2: implicit continuation:
""
^
Program, check.py
, jest tylko proof-of-concept i nie sprawdzić błędy składniowe lub inne przypadki krawędzi:
import sys
import tokenize
LOOKNEXT = False
tok_gen = tokenize.generate_tokens(sys.stdin.readline)
for tok, tok_str, start, end, line_text in tok_gen:
if tok == tokenize.STRING:
LOOKNEXT = True
continue
if LOOKNEXT and (tok == tokenize.NL):
warn_header = "%d:%d: implicit continuation: " % start
print >> sys.stderr, warn_header
print >> sys.stderr, line_text
indents = start[1] - 3
if indents >= 0:
print >> sys.stderr, "%s~~~^" % (" " * indents)
else:
print >> sys.stderr, "%s^" % (" " * start[1])
LOOKNEXT = False
Mam nadzieję, że pomysł może pomóc w rozszerzeniu narzędzia lub IDE ID do użycia.
To samo dotyczy '' foo '"bar" ', który jest' "foobar" '. Czy to błąd? Czemu? –
Hmm tak, myślę, że chciałbym również błędu lint dla tej sprawy, jak również. Tworzy więcej kłopotów niż to, co jest warte. Zobacz także http://legacy.python.org/dev/peps/pep-3126/#concerns – Moberg
Nie wiem, czy istnieje jakieś narzędzie do tego? Nawet jeśli tak, dlaczego tego potrzebujesz? Jest to zachowanie Pythona i powinieneś o tym pamiętać. Zawsze będzie * Co "IF" *? Co jeśli napisałem 2 zamiast 3? Czy potrzebujesz narzędzia, które ci to powie? Obawa, o której wspomniałeś w pytaniu, jest taka sama. –