---
sourceDocument: 요코하마 ServiceNow AI 플랫폼 관리
sourceDocumentLink: https://servicenow-prod.fluidtopics.net/r/ko-KR/yokohama/platform-administration

 Release :

    - yokohama

ft:locale :

    - ko-KR

ft:publication_title :

    - 요코하마 ServiceNow AI 플랫폼 관리

ft:clusterId :

    - platadm

bundleId :

    - platadm

workflow :

    - Platform


---

# 고급 린터 검사 스크립트

# 고급 린터 검사 스크립트 {#ariaid-title1}

* 릴리스 버전: Yokohama
* 
* 업데이트 날짜 2025년 01월 30일
* 
* ![](https://www.servicenow.com/docs/portal-asset/ico-clock) 소요 시간: 3분

린터 검사 스크립트는 스크립트에서 문제를 찾는 검사를 작성하는 데 도움이 됩니다. 기록에 대해 린터 검사가 실행되면 해당 코드에 대한 추상 구문 트리가 제공됩니다. 이 추상 구문 트리를 사용하여 while 루프에서 너무 많은 중첩된 if 문 또는 느린 API 사용과 같은 코드 문제를 분석할 수 있습니다.

## 린터 검사 사용량 {#hs-linter-check-scripts__section_zcb_151_dpb}

린터 검사에는 `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();

## 노드 기능 {#hs-linter-check-scripts__section_q4q_zv1_dpb}

다음은 노드 객체에서 호출할 수 있는 함수 목록입니다.

* `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()`: 이 노드에서 시작하여 추상 구문 트리의 문자열 표현을 반환합니다. 각 줄에는 노드에 대한 정보가 포함되어 있으며 들여쓰기는 노드 간의 계층 구조 관계를 나타냅니다. 각 줄의 정보는 다음과 같이 배열되어 있습니다
  1. 절대 위치
  2. 노드 유형 이름
  3. 상위를 기준으로 한 위치
  4. 길이
  5. 이름 식별자(NAME 노드인 경우)
  {#hs-linter-check-scripts__ol_hlh_q1b_dpb}

{#hs-linter-check-scripts__ul_vkj_bw1_dpb}자세한 내용은 [LinterCheckAstNode API - 범위, 전역](https://www.servicenow.com/docs/access?context=LinterCheckAstNodeAPIBoth&version=yokohama&pubname=yokohama-api-reference&ft:locale=en-US)을 참조하세요.

