콘텐츠로 이동

GritQL

GritQL은 소스 코드 내에서 구조적 검색을 수행하기 위한 쿼리 언어입니다.
이는 공백이나 문자열에 사용된 따옴표 유형과 같은 세부 사항이 검색 과정에서 무시됨을 의미합니다. 또한, 블록, 일치, 중첩 및 변수와 같은 구문 구조를 조사할 수 있는 다양한 기능을 제공합니다.

GritQL은 오픈소스이며 Grit.io에서 개발되었습니다.

Biome는 다음과 같은 두 가지 목적을 위해 GritQL을 사용합니다:

GritQL 쿼리는 _패턴_을 통해 작동합니다. 가장 흔히 볼 수 있는 패턴은 일반 소스 코드처럼 보이지만 백틱(`)으로 감싸진 코드 조각입니다:

`console.log('Hello, world!')`

이 패턴은 'Hello, world!'라는 문자열을 인수로 전달하는 console.log() 호출과 일치합니다. 그러나 GritQL은 구조적 일치를 수행하므로 형식의 세부 사항은 신경 쓰지 않습니다. 다음도 일치합니다:

console.log("Hello, world!");

또한 이 경우도 일치합니다 (따옴표 유형 변경 주의):

console.log("Hello, world!");

GritQL 쿼리는 _변수_를 포함할 수 있습니다. 아래 예제는 전달된 메시지에 관계없이 console.log() 호출과 일치합니다:

`console.log($message)`

또한 이는 console 객체의 어떤 메서드와도 일치합니다:

`console.$method($message)`

같은 변수 이름은 한 번의 코드 조각 안에서 여러 번 등장할 수 있습니다:

`$fn && $fn()`

이 패턴은 foo && foo() 또는 foo.bar && foo.bar()와 일치하지만, foo && bar()는 일치하지 않습니다.

where 연산자를 사용하여 패턴에 조건을 추가할 수 있습니다. 이 연산자는 종종 _매칭_ 연산자 <:와 함께 사용됩니다:

`console.$method($message)` where {
$method <: `log`
}

이 쿼리는 앞서 본 console.log($메시지) 패턴과 정확히 동일하지만, 다른 연산자를 조합하면 더 흥미로워집니다:

`console.$method($message)` where {
$method <: or { `log`, `info`, `warn`, `error` }
}

GritQL 및 문법에 대한 자세한 정보는 공식 GritQL 언어 문서 페이지를 참조하세요.

참고로, 현재 Biome는 모든 Grit 기능을 지원하지는 않습니다 (아직).

Biome에서의 GritQL 지원을 위해 활발히 작업이 진행되고 있습니다. 많은 기능이 이미 작동 중이나, 여전히 일부 오류가 발생하고 기능 부족이 존재합니다.

지원되는 기능과 진행 중인 기능에 대한 상세한 설명은 다음의 GitHub 이슈를 참고하세요:
GitHub issue: https://github.com/biomejs/biome/issues/2582.

또한 플러그인 관련 노력 방향을 안내하는 상세한 RFC가 있습니다:
https://github.com/biomejs/biome/discussions/1762

tl;dr: 우리는 플러그인 지원을 개발 중이며, 이는 순수하게 GritQL 기반인 플러그인 또는, 코드 선택에 GritQL을 활용하는 JS/TS 플러그인 모두 포함됩니다. 계속 지켜봐 주세요.