고급 린터 검사 스크립트
Linter 검사 스크립트는 스크립트에서 문제를 찾는 검사를 작성하는 데 도움이 됩니다. 레코드에 대해 린터 검사가 실행되면 해당 코드에 대한 추상 구문 트리가 제공됩니다. 이 추상 구문 트리를 사용하여 중첩된 if 문이 너무 많거나 while 루프에서 느린 API 사용과 같은 코드 문제를 분석할 수 있습니다.
린터 검사 사용량
Linter 검사에는 rootNode라는 고유한 개체를 사용할 수 있습니다. 현재 기록의 스크립트에 대해 구문 분석된 AST(추상 구문 트리)의 루트 노드입니다. 이 객체에는 많은 기능이 있지만 방문 기능이 가장 중요합니다. 방문 함수는 콜백 함수를 트리의 모든 노드에서 호출되는 매개변수로 사용합니다. 그런 다음 콜백 함수는 노드를 반복 중에 현재 노드를 나타내는 매개변수로 사용합니다. 콜백 함수에서 false를 반환하여 트리 반복을 조기에 중지할 수 있으며, 그렇지 않으면 visit 를 호출한 노드의 트리에 있는 모든 하위 노드를 계속 방문합니다.
예를 들어
badFunction()이라는 사용되지 않는 API를 검색하려는 경우입니다. 다음 예시에서 스크립트를 사용하여 린터 검사를 작성할 수 있습니다.(function(engine) {
engine.rootNode.visit(function(node) {
if (node.getTypeName() === "NAME" &&
node.getNameIdentifier() === "badFunction" &&
node.getParent().getTypeName() === "CALL") {
engine.finding.incrementWithNode(node);
}
});
})(engine);이 린터 검사를 사용하여 검사를 실행하면 스크립트 필드를 사용하여 검사의 모든 기록을 검사합니다. 예를 들어 해당 검사의 기록에 다음과 같은 스크립트가 있으면 검사에서 이 기록에 대한 발견 사항이 선택됩니다./*
badFunction()
*/
// badFunction()
function badFunction() {
return;
}
var GoodClass = Class.create();
GoodClass.prototype = Object.extendsObject(Object, {
badFunction: function() {
// actually good
}
});
var badFunction = ["badFunction", "badFunction()"];
badFunctionButSometimesGood();
badFunction();
노드 기능
다음은 노드 객체에서 호출할 수 있는 함수 목록입니다.
getRootNode():이 노드에 대한 트리의 루트 노드를 가져옵니다.getParent():이 노드의 상위 항목 가져오기getLineNo():이 노드의 줄 번호 위치를 가져옵니다.getColumnNo():이 노드의 열 번호 위치를 가져옵니다.toSource():이 노드의 소스를 가져옵니다. 소스는 이 노드와 해당 하위 노드를 기반으로 합니다.getTypeName():이 노드의 노드 유형 이름을 가져옵니다. 예를 들어, 소스의 함수 호출은 유형 이름이 "CALL"인 노드로 토큰화됩니다주:node.getTypeName()의 값은 추상 구문 트리(AST)에 있는 다양한 유형의 노드에서 가져옵니다. 가능한 값은 Rhino의 AST 파서 자체에서 가져옵니다.getNameIdentifier():이 노드의 노드 유형이 "NAME"인 경우 이름 자체의 문자열 값인 식별자를 반환합니다. "NAME" 노드는 함수 이름이나 변수 이름과 같이 키워드가 아닌 단순한 이름을 나타냅니다.주:이 노드가 NAME 노드가 아닌 경우 결과는 널(NULL)입니다.getAbsolutePosition():이 노드의 절대 위치를 가져옵니다. 절대 위치는 스크립트 시작부터 이 노드까지의 문자 수입니다.compareTo(other):이 노드를 다른 노드와 비교합니다. 절대 위치와 길이가 더 큰 노드가 비교에서 더 큽니다.기타는 이 노드와 비교할 노드입니다.visit(callbackFunction): 이 노드에서 시작하여 하위 트리의 각 노드를 방문하여 각 노드에서 지정된 콜백 함수를 실행합니다.callbackFunction은 이 노드의 하위 트리에 있는 각 노드에서 실행되는 함수입니다. 이 콜백 함수는 LinterCheckAstNode를 매개변수로 사용합니다.debugPrint():이 노드에서 시작하여 추상 구문 트리의 문자열 표현을 반환합니다. 각 줄에는 노드에 대한 정보가 포함되어 있으며 들여쓰기는 노드 간의 계층 구조를 나타냅니다. 각 줄의 정보는 다음과 같이 배열되어 있습니다- 절대 위치
- 노드 유형 이름
- 상위를 기준으로 한 위치
- 길이
- 이름 식별자(NAME 노드의 경우)