8. Detect and build the error
The first step is to detect this is a valid function call with a defined function name. Once we checked this, we:
- Get the function name and check the name of the function is print
- Get the arguments, make sure there is only one argument and the value is "foo"
To check that the function name is not print, we use the following code. It exits the visit function if the function name does not match what we are looking for.
1if (
2 !node.functionName ||
3 node.functionName.value !== "print"
4) {
5 return;
6}
To check that there is only argument and that the argument is "foo", we use the following code.
1if (
2 !node.arguments ||
3 !node.arguments.values ||
4 node.arguments.values.length !== 1 ||
5 node.arguments.values[0].value.value === "foo"
6) {
7 return;
8}
In the
argument
value, you'll notice two consecutive values. The first one node.arguments.values[0].value
returns the value of the argument. The second one node.arguments.values[0].value.value
returns the string value of the argument.Then, we build the error object. It will highlight exactly where the first argument of the print function is located. So let's start by grabbing the arugment node and then we'll build the error at the node position.
1const firstArgument = node.arguments.values[0].value;
2
3const error = buildError(
4 exceptionName.start.line,
5 exceptionName.start.col,
6 exceptionName.end.line,
7 exceptionName.end.col,
8 "do not assert on foo",
9 "INFO",
10 "BEST_PRACTICES"
11);
Let's go!
Start interacting with the tutorial!
my-new-rule.js