mirror of
https://github.com/ARM-software/workload-automation.git
synced 2025-01-31 10:11:17 +00:00
dev_scripts: pylint: ignore errors per subdir
Add the ability to ignore specific pylint errors on per-subpackage or per-module basis by adding a plugin that checks the path of the module against pre-defined sub-paths and inserts disable tags as needed.
This commit is contained in:
parent
651adaaa57
commit
88c5005b38
@ -42,12 +42,13 @@ if [ "$result" == "2" ]; then
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
THIS_DIR="`dirname \"$0\"`"
|
THIS_DIR="`dirname \"$0\"`"
|
||||||
|
CWD=$PWD
|
||||||
|
pushd $THIS_DIR > /dev/null
|
||||||
if [[ "$target" == "" ]]; then
|
if [[ "$target" == "" ]]; then
|
||||||
pushd $THIS_DIR/.. > /dev/null
|
|
||||||
for dir in "${DEFAULT_DIRS[@]}"; do
|
for dir in "${DEFAULT_DIRS[@]}"; do
|
||||||
pylint --rcfile extras/pylintrc $dir
|
PYTHONPATH=. pylint --rcfile ../extras/pylintrc --load-plugins pylint_plugins $CWD/$dir
|
||||||
done
|
done
|
||||||
popd > /dev/null
|
|
||||||
else
|
else
|
||||||
pylint --rcfile $THIS_DIR/../extras/pylintrc $target
|
PYTHONPATH=. pylint --rcfile ../extras/pylintrc --load-plugins pylint_plugins $CWD/$target
|
||||||
fi
|
fi
|
||||||
|
popd > /dev/null
|
||||||
|
45
dev_scripts/pylint_plugins.py
Normal file
45
dev_scripts/pylint_plugins.py
Normal file
@ -0,0 +1,45 @@
|
|||||||
|
from astroid import MANAGER
|
||||||
|
from astroid import scoped_nodes
|
||||||
|
|
||||||
|
|
||||||
|
IGNORE_ERRORS = {
|
||||||
|
('attribute-defined-outside-init', ): [
|
||||||
|
'wa.workloads',
|
||||||
|
'wa.instruments',
|
||||||
|
'wa.output_procesors',
|
||||||
|
]
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
def register(linter):
|
||||||
|
pass
|
||||||
|
|
||||||
|
|
||||||
|
def transform(mod):
|
||||||
|
for errors, paths in IGNORE_ERRORS.items():
|
||||||
|
for path in paths:
|
||||||
|
if path in mod.name:
|
||||||
|
text = mod.stream().read()
|
||||||
|
if not text.strip():
|
||||||
|
return
|
||||||
|
|
||||||
|
text = text.split('\n')
|
||||||
|
# NOTE: doing it this way because the "correct" approach below does not
|
||||||
|
# work. We can get away with this, because in well-formated WA files,
|
||||||
|
# the initial line is the copyright header's blank line.
|
||||||
|
if 'pylint:' in text[0]:
|
||||||
|
msg = 'pylint directive found on the first line of {}; please move to below copyright header'
|
||||||
|
raise RuntimeError(msg.format(mod.name))
|
||||||
|
if text[0].strip() and text[0][0] != '#':
|
||||||
|
msg = 'first line of {} is not a comment; is the copyright header missing?'
|
||||||
|
raise RuntimeError(msg.format(mod.name))
|
||||||
|
text[0] = '# pylint: disable={}'.format(','.join(errors))
|
||||||
|
mod.file_bytes = '\n'.join(text)
|
||||||
|
|
||||||
|
# This is what *should* happen, but doesn't work.
|
||||||
|
# text.insert(0, '# pylint: disable=attribute-defined-outside-init')
|
||||||
|
# mod.file_bytes = '\n'.join(text)
|
||||||
|
# mod.tolineno += 1
|
||||||
|
|
||||||
|
|
||||||
|
MANAGER.register_transform(scoped_nodes.Module, transform)
|
Loading…
x
Reference in New Issue
Block a user