진단과 제한
Stack 진단은 콘솔 문장이 아닌 구조화된 결과입니다. 안정적인 코드, error 또는 warning 심각도, 1부터 시작하는 end-exclusive 소스 범위, 간결한 메시지, 정렬된 expected 목록을 가집니다. 유용할 때 수정 도움말과 관련 소스 범위도 포함합니다.
처리와 심각도
도구는 인코딩과 token, 문법, 식별자와 기본값, 의미 제한, 테마와 아이콘, 레이아웃, 렌더링 순서로 처리합니다. 앞 네 단계의 오류는 렌더링을 막습니다. 테마, 아이콘, 밀도, 레이아웃 힌트 경고는 fallback SVG와 함께 반환될 수 있습니다.
Playground는 소스 편집 후 오래된 진단을 지웁니다. 결과를 선택하면 primary source에 포커스하고 관련 정보에서 이전 선언으로 이동할 수 있습니다.
복잡도 제한
| 항목 | Draft Stack 1.0 제한 |
|---|---|
| 문서당 다이어그램 | 1 |
| 노드 | 1~40 |
| 그룹 | 0~12 |
| 다이어그램 아래 그룹 중첩 | 3레벨 |
| 엣지 | 0~80 또는 노드 수 두 배 중 작은 값 |
| 경고 전 노드 degree | 12개의 incident edge 선언 |
하드 제한 초과는 STK4003입니다. 권장 degree를 넘은 노드는 유효하지만 STK4002가 발생합니다. 큰 시스템은 하나에 압축하지 말고 집중된 여러 다이어그램으로 나누세요.
이식 가능한 진단 코드
| Code | Severity | 의미 |
|---|---|---|
STK1001 | Error | 입력이 유효한 UTF-8이 아님 |
STK1002 | Error | Byte order mark가 있음 |
STK1003 | Error | 문자열 이스케이프나 디코드 값이 유효하지 않음 |
STK2001 | Error | 선언한 언어 버전을 지원하지 않음 |
STK2002 | Error | 예상하지 못한 token, 선언, 속성, 값, 연산자 |
STK2003 | Error | 현재 구문이 끝나기 전에 입력이 종료됨 |
STK3001 | Error | 식별자가 유효하지 않음 |
STK3002 | Error | 식별자가 중복 선언됨 |
STK3003 | Error | 엣지가 알 수 없는 노드를 참조함 |
STK3004 | Error | 그룹을 엣지 endpoint로 사용함 |
STK3005 | Error | 엣지가 노드 자신을 연결함 |
STK3006 | Error | 정확히 중복된 엣지를 선언함 |
STK3007 | Error | 한 block에서 속성이 중복됨 |
STK3008 | Error | 제목, 라벨, 상세가 텍스트 제약을 위반함 |
STK3009 | Error | 그룹에 하위 노드가 없음 |
STK3010 | Error | 그룹 중첩이 언어 제한을 넘음 |
STK3011 | Error | 레이아웃 참조가 스코프에서 유효하지 않음 |
STK3012 | Error | 레이아웃 블록 또는 singleton 문장이 중복됨 |
STK3013 | Error | 아이콘 식별자 형식이 잘못됨 |
STK3014 | Error | 다이어그램에 여러 테마 문장이 있음 |
STK4001 | Warning | 순서 힌트를 만족할 수 없음 |
STK4002 | Warning | 노드가 권장 incident-edge degree를 넘음 |
STK4003 | Error | 다이어그램이 언어 복잡도 제한을 넘음 |
STK5001 | Warning | 유효 테마에 아이콘이 없어 kind fallback을 사용함 |
STK6001 | Warning | 요청한 non-core 테마가 없어 default를 사용함 |
코드 family에서 STK1000은 인코딩/어휘, STK2000은 문법, STK3000은 이름/의미, STK4000은 레이아웃/복잡도, STK5000은 아이콘, STK6000은 테마입니다. STK9000은 소스 실수가 아닌 구현 실패용입니다. 구현은 자체 non-STK prefix로만 진단을 추가할 수 있습니다.
복구 규칙
파서는 여러 독립 오류를 보고하기 위해 복구할 수 있지만 부분 다이어그램을 유효한 것으로 렌더링할 수 없습니다. 알 수 없는 선언, 속성, enum 값, 연산자는 무시되지 않습니다. 의미를 잃은 채 성공처럼 보이는 출력을 막습니다.