고급 linter 검사 스크립트
Linter 검사 스크립트는 스크립트에서 문제를 찾는 검사를 작성하는 데 도움이 됩니다. linter 검사가 레코드에서 실행되면 해당 코드에 대한 추상 구문 트리가 제공됩니다. 이 추상 구문 트리를 사용하여 너무 많은 중첩 if 문 또는 while 루프에서 느린 API 사용과 같은 코드 문제를 분석할 수 있습니다.
Linter 검사 사용량
린터 검사에는 rootNode라는 고유한 오브젝트가 있습니다. 현재 기록의 스크립트에 대해 구문 분석된 추상 구문 트리(AST)의 루트 노드입니다. 이 객체에는 많은 기능이 있지만 방문 기능이 가장 중요합니다. 방문 함수는 트리의 모든 노드에서 호출되는 매개변수로 콜백 함수를 사용합니다. 그런 다음 콜백 함수는 노드를 반복 중에 현재 노드를 나타내는 매개 변수로 사용합니다. 콜백 함수에서 false를 반환하여 트리 반복을 조기에 중지할 수 있으며, 그렇지 않으면 visit를 호출한 노드의 트리에 있는 모든 하위 노드를 계속 방문합니다.
예를 들어
badFunction()이라는 더 이상 사용되지 않는 API를 스캔하려는 경우입니다. 다음 예제의 스크립트를 사용하여 Linter 검사를 작성할 수 있습니다.(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(): 이 노드의 노드 유형 이름을 가져옵니다. 예를 들어, source의 함수 호출은 유형 이름이 "CALL"인 노드로 토큰화됩니다주:node.getTypeName()의 값은 AST(Abstract Syntax Tree)의 다양한 유형의 노드에서 가져온 것입니다. 가능한 값은 Rhino의 AST 파서 자체에서 가져옵니다.getNameIdentifier(): 이 노드의 노드 유형이 "NAME"인 경우 이름 자체의 문자열 값인 식별자를 반환합니다. "NAME" 노드는 함수 이름이나 변수 이름과 같이 키워드가 아닌 단순한 이름을 나타냅니다.주:이 노드가 NAME 노드가 아닌 경우 결과는 널(NULL)입니다.getAbsolutePosition(): 이 노드의 절대 위치를 가져옵니다. 절대 위치는 스크립트 시작부터 이 노드까지의 문자 수입니다compareTo(other): 이 노드를 다른 노드와 비교합니다. 절대 위치와 길이가 더 긴 노드가 상대적으로 더 큽니다.other는 이 노드와 비교할 노드입니다.visit(callbackFunction):이 노드에서 시작하여 하위 트리의 각 노드를 방문하고 각 노드에서 지정된 콜백 함수를 실행합니다.callbackFunction은 이 노드의 하위 트리에 있는 각 노드에서 실행되는 함수입니다. 이 콜백 함수는 LinterCheckAstNode를 방문 중인 노드가 될 매개 변수로 사용합니다debugPrint(): 이 노드에서 시작하여 추상 구문 트리의 문자열 표현을 반환합니다. 각 줄에는 노드에 대한 정보가 포함되어 있으며 들여쓰기는 노드 간의 계층 관계를 나타냅니다. 각 줄의 정보는 다음과 같이 정렬됩니다- 절대 위치
- 노드 유형 이름
- 상위를 기준으로 한 위치
- 길이
- 이름 식별자(NAME 노드인 경우)