Ответ 1
Я не уверен, какой инструмент анализа исходного кода вы используете, поэтому я могу предложить только предложение. Тем не менее, это слишком долго для комментария, поэтому я написал доказательство концепции script.
Идея состоит в том, чтобы посмотреть исходный код с модулем Python tokenize
, который генерирует токены из выражений Python. Если хорошо сформированный код Python содержит неявно продолжающиеся строковые литералы, он будет отображаться как токен STRING
, за которым следует NL
.
Например, позвольте использовать в качестве тестового примера следующий исходный файл source.py
.
x = ("a"
"b" # some trailing spaces
# Coment line
"c"
""
# The following is an explicit continuation
"d" \
"e")
Запуск команды python check.py < source.py
в файле генерирует:
1:8: implicit continuation:
x = ("a"
~~~^
2:35: implicit continuation:
"b" # some trailing spaces
~~~^
4:3: implicit continuation:
"c"
~~~^
5:2: implicit continuation:
""
^
Программа check.py
является просто доказательством концепции и не проверяет синтаксические ошибки или другие случаи:
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
Надеюсь, эта идея поможет вам расширить свой инструмент для линта или IDE для вашей цели.