Keyboard shortcuts

Press ← or → to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

오류 코드

일반적으로 각 오류 메시지에는 E0123과 같은 고유 코드를 부여하려고 합니다. 이러한 코드는 컴파일러 내 각 크레이트에 있는 diagnostics.rs 파일에 정의되어 있으며, 이 파일은 기본적으로 매크로로 구성되어 있습니다. 모든 오류 코드에는 관련 설명이 있으며, 새로운 오류 코드에는 반드시 설명이 포함되어야 합니다. 다만 모든 과거의(더 이상 발생하지 않는) 오류 코드에 설명이 있는 것은 아니라는 점에 유의하십시오.

오류 설명

설명은 Markdown으로 작성되며(구문에 관한 세부 사항은 CommonMark Spec을 참고하십시오), 모든 설명은 rustc_error_codes 크레이트에 연결되어 있습니다. 긴 오류 코드의 형식과 작성 방법에 대한 자세한 내용은 RFC 1567을 읽어 보십시오. 2026년 3월 기준으로, 대체로 낡은 이 RFC를 더 유연한 새 표준으로 대체하려는 노력1이 진행 중입니다.

오류 설명은 오류 메시지를 보충하여 오류가 왜 발생하는지에 대한 세부 정보를 제공해야 합니다. 사용자가 빠른 수정 방법을 복사하여 붙여 넣게 하는 것은 도움이 되지 않습니다. 설명은 사용자가 자신의 코드가 왜 컴파일러에서 허용될 수 없는지 이해하도록 도와야 합니다. Rust는 도움이 되는 오류 메시지를 자랑으로 여기며, 긴 형식의 설명도 예외가 아닙니다. 그러나 오류 설명이 전면 개편되기 전1까지는 설명을 정확히 어떻게 작성해야 하는지가 다소 열려 있으므로, 언제나처럼 리뷰어에게 묻거나 Rust Zulip에서 문의하십시오.

새 코드 할당하기

오류 코드는 compiler/rustc_error_codes에 저장되어 있습니다.

새 오류를 만들려면 먼저 사용 가능한 다음 코드를 찾아야 합니다. rustc_error_codes/src/lib.rs를 열고 error_codes! 매크로 선언의 끝까지 스크롤하면 찾을 수 있습니다.

여기서 사용 중인 가장 높은 오류 코드가 E0805임을 확인할 수 있으므로, 아마도 E0806을 사용하면 될 것입니다. 확실히 하려면 rg E0806을 실행하여 확인하십시오. 참조가 하나도 없어야 합니다.

오류에 대한 확장 설명을 작성해야 하며, 이 설명은 rustc_error_codes/src/error_codes/E0806.md에 들어갑니다. 오류를 등록하려면 다음과 같이 error_codes! 매크로에 코드를 (올바른 번호 순서에 맞게) 추가하십시오.

#![allow(unused)]
fn main() {
macro_rules! error_codes {
...
0806,
}
}

실제로 오류를 발생시키려면 struct_span_code_err! 매크로를 사용할 수 있습니다.

#![allow(unused)]
fn main() {
struct_span_code_err!(self.dcx(), // some path to the `DiagCtxt` here
                 span, // whatever span in the source you want
                 E0806, // your new error code
                 fluent::example::an_error_message)
    .emit() // actually issue the error
}

노트나 기타 코드 조각을 추가하려면 .emit()을 호출하기 전에 메서드를 호출할 수 있습니다.

#![allow(unused)]
fn main() {
struct_span_code_err!(...)
    .span_label(another_span, fluent::example::example_label)
    .span_note(another_span, fluent::example::separate_note)
    .emit()
}

오류 코드를 추가하는 PR의 예시는 #76143을 참고하십시오.

오류 코드 doctest 실행하기

rustc_error_codes/src/error_codes에 추가된 예제를 테스트하려면 다음 명령으로 오류 인덱스 생성기를 실행하십시오.

./x test ./src/tools/error_index_generator

  1. RFC 초안은 여기에서 확인하십시오. ↩ ↩2