ErrorHighlight 모듈
ErrorHighlight 모듈 (ErrorHighlight)
ErrorHighlight 모듈은 예외가 발생한 정확한 코드 조각을 식별하는 데 쓰여요. 에러 메시지에서 해당 예외가 어느 코드 위치에서 터졌는지 가리키는 기능을 담당하죠.
출처: Ruby 4.0 API
본문
상수 (Constants)
VERSION— 모듈 버전.
::formatter (Public Class Method)
formatter() — 현재의 에러 하이라이트 포매터를 돌려줘요. 기본값은 DefaultFormatter예요. Ractor마다 별도로 설정할 수 있는 값이라, Ractor.current[:__error_highlight_formatter__]에 설정된 값이 있으면 그것을 돌려줍니다.
# File lib/error_highlight/formatter.rb, line 67
def self.formatter
Ractor.current[:__error_highlight_formatter__] || DefaultFormatter
end
::formatter= (Public Class Method)
formatter=(formatter) — 에러 하이라이트 포매터를 설정해요. Ractor.current[:__error_highlight_formatter__]에 값을 넣는 방식이라 현재 Ractor에만 영향을 줘요.
# File lib/error_highlight/formatter.rb, line 71
def self.formatter=(formatter)
Ractor.current[:__error_highlight_formatter__] = formatter
end
::spot (Public Class Method)
spot(obj, **opts) — 주어진 예외가 발생한 코드 조각을 식별해요.
옵션은 두 가지가 있어요.
point_type: :name | :args—:name(기본)은 예외가 발생한 메서드/변수 이름을 가리키고,:args는 예외가 발생한 메서드 호출의 인자 부분을 가리켜요.backtrace_location: Thread::Backtrace::Location— 주어진 백트레이스 위치의 코드 조각을 찾아요. 기본은 주어진 예외의backtrace_locations의 첫 프레임을 사용해요.
반환 값은 위치 정보를 담은 해시이거나 nil이에요.
{
first_lineno: Integer,
first_column: Integer,
last_lineno: Integer,
last_column: Integer,
snippet: String,
script_lines: [String],
} | nil
obj로 예외 객체를 넘기면 backtrace_locations의 첫 프레임을 기준으로 찾고, RubyVM::AbstractSyntaxTree::Node나 Prism::Node를 넘기면 그 노드를 직접 분석해요. 그 밖의 타입이면 TypeError가 발생해요.
제약 — 현재 ErrorHighlight.spot는 한 줄(single-line) 코드 조각만 지원해요. 그래서 반환값이 nil이 아니면 first_lineno와 last_lineno는 같은 값이에요. 관련 코드 조각이 여러 줄에 걸쳐 있으면(예: ary[(newline)expr(newline)] 형태의 Array#[]) 이 메서드는 nil을 돌려줘요. 이 제약은 나중에 없어질 수 있어요.
::prism_find (Private Class Method)
prism_find(location) — Thread::Backtrace::Location 객체를 받아, 소스 코드에서 그 백트레이스 위치에 해당하는 Prism::Node를 돌려줘요. spot이 AST를 prism 컴파일러로 파싱한 경우에 내부적으로 사용되는 보조 메서드예요.