규칙 7.7
7장, 표현식과 문 테스트
discard must be written as a bare statement, the identifier alone (discard), and may stand in a fragment entry and in a helper no vertex or compute entry can reach.
The check closes over the call graph, and discard() is not a call the surface has.
규칙 본문과 그 아래 항목은 설계 문서에 적힌 컴파일러 원문이라 한국어 페이지에서도 영어로 둡니다.
근거
WGSL’s discard is a statement of the fragment stage; TypeScript has no statement to borrow, so the ambient library declares discard as a constant of type void (§9.3, family 5) and the compiler lowers an expression statement that is exactly that identifier to the statement, with the stage rule kept.
출처
Discard Statement (“must only be used in a fragment shader stage”); surface §10; declare const discard: void in src/language-service/ambient.ts.
검증 방식
테스트로 확인합니다. 테스트나 게이트 스크립트, CI 워크플로가 이 규칙을 가리키고, 아래 파일 가운데 하나라도 규칙을 더는 가리키지 않으면 추적 검사가 실패합니다.
컴파일러가 이 규칙을 적용하는 곳을 규칙이 직접 적은 내용입니다.
src/compiler/ts/builtins.test.ts (discard: lowers to the discard statement, emits it on both targets); TS8099 names the entry, or the helper and the entry, on the wrong stage; discard() is TS8004, which says that discard is a statement and is written without the parentheses (src/compiler/ts/unknown-names.test.ts).
커밋 c66579bf에서 이 규칙을 확인하는 파일입니다. 파일마다 규칙을 처음 가리키는 줄로 연결했습니다.
설명하는 절
커밋 c66579bf의 표면 문서에서 이 규칙을 설명하는 절입니다.
적용하는 오류 코드
규칙이 Enforced by 항목에서 가리키는 진단 코드와, 레지스트리 설명에서 이 규칙을 가리키는 진단 코드입니다.
함께 보기
소스
커밋 c66579bf의 규칙 원문:
docs/language-design.md:577(설계 문서)reqs/rules/RULE-0707.md(추적 항목)