Skip to content

Commit 91d87f2

Browse files
christophkloeffelphiwuu
authored andcommitted
adds linter warnings on unused imports
1 parent 54a5735 commit 91d87f2

File tree

7 files changed

+60
-15
lines changed

7 files changed

+60
-15
lines changed

CHANGELOG.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,8 @@ generated in the following situations:
2727

2828
### 2.0.2-dev
2929

30+
* [TRLC] Add linter warning on unused imports.
31+
3032
* [TRLC] Add support for Python 3.13.
3133

3234
* [TRLC] Fix help message for command line argument `--no-detailed-info`.
Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1,4 @@
1-
Processed 0 models and 2 requirement files and found no issues
1+
import Foo
2+
^^^ late-packages-2/bar.trlc:2: issue: unused import Foo [unused_imports]
3+
| Consider deleting this import statement if not needed.
4+
Processed 0 models and 2 requirement files and found 1 warning
Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1,4 @@
1-
Processed 0 models and 2 requirement files and found no issues
1+
import Foo
2+
^^^ late-packages-2/bar.trlc:2: issue: unused import Foo [unused_imports]
3+
| Consider deleting this import statement if not needed.
4+
Processed 0 models and 2 requirement files and found 1 warning
Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1,4 @@
1-
Processed 0 models and 3 requirement files and found no issues
1+
import Foo
2+
^^^ rbt-late-package-declarations/baz.trlc:3: issue: unused import Foo [unused_imports]
3+
| Consider deleting this import statement if not needed.
4+
Processed 0 models and 3 requirement files and found 1 warning
Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1,4 @@
1-
Processed 0 models and 3 requirement files and found no issues
1+
import Foo
2+
^^^ rbt-late-package-declarations/baz.trlc:3: issue: unused import Foo [unused_imports]
3+
| Consider deleting this import statement if not needed.
4+
Processed 0 models and 3 requirement files and found 1 warning

trlc/lint.py

Lines changed: 33 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ def __init__(self, mh, stab, verify_checks, debug_vcg, cvc5_binary):
4141
self.abstract_extensions = {}
4242
self.checked_types = set()
4343

44-
def verify(self):
44+
def perform_sanity_checks(self):
4545
# lobster-exclude: Not safety relevant
4646
ok = True
4747
for package in self.stab.values(ast.Package):
@@ -202,3 +202,35 @@ def verify_array_type(self, n_typ):
202202
"An array with 0 to 1 components should just\n"
203203
"be an optional %s instead." %
204204
n_typ.element_type.name)
205+
206+
def markup_ref(self, item, string_literals):
207+
for string_literal in string_literals:
208+
for reference in string_literal.references:
209+
if reference.package.name == item.name:
210+
return string_literal
211+
return None
212+
213+
def verify_imports(self):
214+
for file in self.mh.sm.all_files.values():
215+
if not file.primary and not file.secondary:
216+
continue
217+
if not file.cu.imports:
218+
continue
219+
for item in file.cu.imports:
220+
import_tokens = [t for t in file.lexer.tokens
221+
if t.value == item.name]
222+
markup = self.markup_ref(item,
223+
(m.ast_link for m in
224+
file.lexer.tokens if
225+
isinstance(m.ast_link,
226+
ast.String_Literal) and
227+
m.ast_link.has_references))
228+
if markup is not None:
229+
import_tokens.append(markup)
230+
if len(import_tokens) == 1:
231+
import_tk = import_tokens[0]
232+
self.mh.check(import_tk.location,
233+
"unused import %s" % import_tk.value,
234+
"unused_imports",
235+
"Consider deleting this import"
236+
" statement if not needed.")

trlc/trlc.py

Lines changed: 9 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -480,14 +480,6 @@ def perform_checks(self):
480480

481481
return ok
482482

483-
def perform_sanity_checks(self):
484-
linter = lint.Linter(mh = self.mh,
485-
stab = self.stab,
486-
verify_checks = self.verify_mode,
487-
debug_vcg = self.debug_vcg,
488-
cvc5_binary = self.cvc5_binary)
489-
return linter.verify()
490-
491483
def process(self):
492484
"""Parse all registered files.
493485
@@ -514,8 +506,12 @@ def process(self):
514506
# Perform sanity checks (enabled by default). We only do this
515507
# if there were no errors so far.
516508
if self.lint_mode and ok:
517-
ok &= self.perform_sanity_checks()
518-
509+
linter = lint.Linter(mh = self.mh,
510+
stab = self.stab,
511+
verify_checks = self.verify_mode,
512+
debug_vcg = self.debug_vcg,
513+
cvc5_binary = self.cvc5_binary)
514+
ok &= linter.perform_sanity_checks()
519515
# Stop here if we're not processing TRLC files.
520516
if not self.parse_trlc: # pragma: no cover
521517
self.callback_parse_end()
@@ -547,6 +543,9 @@ def process(self):
547543
self.callback_parse_end()
548544
return None
549545

546+
if self.lint_mode and ok:
547+
linter.verify_imports()
548+
550549
self.callback_parse_end()
551550
return self.stab
552551

0 commit comments

Comments
 (0)