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