function-definition

Try in Playground
python-inclusiveUnknownInformational

0

No tags

No CWE or CVE

This rule checks that the function names and arguments do not use certain words (such as master or slave) and suggest better alternatives.

Ast Rule: function definition


function-definition

How to write a rule
const NAMES_TO_REPLACE = new Map([
  ['blacklist', 'denylist'],
  ['whitelist', 'allowlist'],
  ['master', 'primary'],
  ['slave', 'secondary'],
  ['dummy', 'placeholder'],
]);

const checkString = (node, avoidString, replaceString) => {
  if(node && node.value && node.value.includes(avoidString)) {
    const updatedName = node.value.replace(avoidString, replaceString);
    const error = buildError(node.start.line, node.start.col, 
                             node.end.line, node.end.col, 
                             `do not use word ${avoidString}`, "INFO", "BEST_PRACTICES");
    const edit = buildEditUpdate(node.start.line, node.start.col,
                                 node.end.line, node.end.col,
                                 updatedName);
    const fix = buildFix(`use ${updatedName} instead`, [edit]);
    addError(error.addFix(fix));
  }
}

function visit(node, filename, code) {
  
  // If filename starts or ends with test_ or _test, do not do anything
  if(filename.includes("_test.py") || filename.startsWith("test_")) {
    return;
  }
  for (const name of NAMES_TO_REPLACE.keys()) {
    	const replacement = NAMES_TO_REPLACE.get(name);
      if(node.name && node.name.value) {
				checkString(node.name, name, replacement);
      }

      // if the parameters of the function are defined
      if (node.parameters && node.parameters.values) {

        node.parameters.values.forEach(parameter => {
          checkString(parameter.name, name, replacement);
        });
      }
  }
}

function-parameter.py

Expected test result: has error

def myfunc(blacklist_foo, blacklist_bar):
  pass

function-name.py

Expected test result: has error

def blacklist_something(arguments):
  pass
Add comment

Log in to add a comment


    Be the first one to leave a comment!

Codiga Logo
Codiga Hub
  • Rulesets
  • Explore
  • Cookbooks
  • Playground
soc-2 icon

We are SOC-2 Compliance Certified

G2 high performer medal

Codiga – All rights reserved 2022.