Skip to content

Commit e92d6c0

Browse files
committed
Python: Stop py/import-deprecated-module from double alerting
This changes the location from the import statement, to the actual expression
1 parent 7949acc commit e92d6c0

File tree

3 files changed

+13
-11
lines changed

3 files changed

+13
-11
lines changed

python/ql/src/Imports/DeprecatedModule.ql

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,10 @@
1212

1313
import python
1414

15+
/**
16+
* The module `name` was deprecated in Python version `major`.`minor`,
17+
* and module `instead` should be used instead (or `instead = "no replacement"`)
18+
*/
1519
predicate deprecated_module(string name, string instead, int major, int minor) {
1620
name = "posixfile" and instead = "email" and major = 1 and minor = 5
1721
or
@@ -69,8 +73,8 @@ string replacement_message(string mod) {
6973
)
7074
}
7175

72-
from ImportExpr imp, Stmt s, Expr e
76+
from ImportExpr imp, string name
7377
where
74-
s.getASubExpression() = e and
75-
(e = imp or e.contains(imp))
76-
select s, deprecation_message(imp.getName()) + replacement_message(imp.getName())
78+
name = imp.getName() and
79+
deprecated_module(name, _, _, _)
80+
select imp, deprecation_message(name) + replacement_message(name)
Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,4 @@
1-
| test.py:2:1:2:13 | Import | The rfc822 module was deprecated in version 2.3. Use email module instead. |
2-
| test.py:3:1:3:16 | Import | The posixfile module was deprecated in version 1.5. Use email module instead. |
3-
| test.py:6:1:6:18 | ClassDef | The md5 module was deprecated in version 2.5. Use hashlib module instead. |
4-
| test.py:7:5:7:18 | FunctionDef | The md5 module was deprecated in version 2.5. Use hashlib module instead. |
5-
| test.py:8:9:8:18 | Import | The md5 module was deprecated in version 2.5. Use hashlib module instead. |
6-
| test.py:14:5:14:23 | Import | The md5 module was deprecated in version 2.5. Use hashlib module instead. |
1+
| test.py:2:8:2:13 | ImportExpr | The rfc822 module was deprecated in version 2.3. Use email module instead. |
2+
| test.py:3:8:3:16 | ImportExpr | The posixfile module was deprecated in version 1.5. Use email module instead. |
3+
| test.py:8:16:8:18 | ImportExpr | The md5 module was deprecated in version 2.5. Use hashlib module instead. |
4+
| test.py:14:10:14:12 | ImportExpr | The md5 module was deprecated in version 2.5. Use hashlib module instead. |

python/ql/test/query-tests/Imports/deprecated/test.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
import rfc822
33
import posixfile
44

5-
# TODO: We should only report a bad import once
5+
# We should only report a bad import once
66
class Foo(object):
77
def foo(self):
88
import md5

0 commit comments

Comments
 (0)