Extend validate-modules to check the next to last line (#34819)
* Add validation for the next to last line of a module * Fix last error code * Reduce to a single conditional * Fix conditionals * Move the final warnings statement to main() in mysql_replication
This commit is contained in:
parent
a65f702155
commit
b10d5f34ea
3 changed files with 27 additions and 1 deletions
|
@ -70,6 +70,7 @@ Errors
|
|||
``DOCUMENTATION``/``EXAMPLES``/``RETURN``/``ANSIBLE_METADATA``
|
||||
107 Imports should be directly below ``DOCUMENTATION``/``EXAMPLES``/``RETURN``/``ANSIBLE_METADATA``
|
||||
108 GPLv3 license header should be the :ref:`short form <copyright>` for new modules
|
||||
109 Next to last line is not ``if __name__ == "__main__":``
|
||||
..
|
||||
--------- -------------------
|
||||
**2xx** **Imports**
|
||||
|
|
|
@ -359,7 +359,8 @@ def main():
|
|||
else:
|
||||
module.exit_json(msg="Slave already reset", changed=False)
|
||||
|
||||
warnings.simplefilter("ignore")
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
main()
|
||||
warnings.simplefilter("ignore")
|
||||
|
|
|
@ -518,6 +518,30 @@ class ModuleValidator(Validator):
|
|||
bodies.extend(if_bodies)
|
||||
|
||||
for child in bodies:
|
||||
|
||||
# validate that the next to last line is 'if __name__ == "__main__"'
|
||||
if child.lineno == (self.length - 1):
|
||||
|
||||
mainchecked = False
|
||||
try:
|
||||
if isinstance(child, ast.If) and \
|
||||
child.test.left.id == '__name__' and \
|
||||
len(child.test.ops) == 1 and \
|
||||
isinstance(child.test.ops[0], ast.Eq) and \
|
||||
child.test.comparators[0].s == '__main__':
|
||||
mainchecked = True
|
||||
except Exception:
|
||||
pass
|
||||
|
||||
if not mainchecked:
|
||||
self.reporter.error(
|
||||
path=self.object_path,
|
||||
code=109,
|
||||
msg='Next to last line should be: if __name__ == "__main__":',
|
||||
line=child.lineno
|
||||
)
|
||||
|
||||
# validate that the final line is a call to main()
|
||||
if isinstance(child, ast.Expr):
|
||||
if isinstance(child.value, ast.Call):
|
||||
if (isinstance(child.value.func, ast.Name) and
|
||||
|
|
Loading…
Reference in a new issue