1
0
mirror of https://github.com/ARM-software/workload-automation.git synced 2024-10-05 18:31:12 +01: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:
Sergei Trofimov 2018-07-05 16:37:28 +01:00 committed by Marc Bonnici
parent 651adaaa57
commit 88c5005b38
2 changed files with 50 additions and 4 deletions

View File

@ -42,12 +42,13 @@ if [ "$result" == "2" ]; then
fi
THIS_DIR="`dirname \"$0\"`"
CWD=$PWD
pushd $THIS_DIR > /dev/null
if [[ "$target" == "" ]]; then
pushd $THIS_DIR/.. > /dev/null
for dir in "${DEFAULT_DIRS[@]}"; do
pylint --rcfile extras/pylintrc $dir
PYTHONPATH=. pylint --rcfile ../extras/pylintrc --load-plugins pylint_plugins $CWD/$dir
done
popd > /dev/null
else
pylint --rcfile $THIS_DIR/../extras/pylintrc $target
PYTHONPATH=. pylint --rcfile ../extras/pylintrc --load-plugins pylint_plugins $CWD/$target
fi
popd > /dev/null

View 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)