Cargo 프로젝트
Cargo가 .rs 파일을 기대하는 자리에 .rk 파일을 둔다. 다음 명령은 src, examples, tests,
benches 아래의 모든 .rk 파일과 build.rk를 각각 옆의 .rs 파일로 트랜스파일한 뒤 같은
Cargo 명령을 실행한다:
renk build
renk check
renk run
renk test
renk clippy
renk doc
renk bench
renk cargo ARGS... # any other cargo command, as cargo ARGS...
생성된 파일은 // @generated by renk; do not edit.로 시작하며, 내용이 바뀔 때만 다시 쓴다. 이
헤더가 없는 .rs 파일은 덮어쓰지 않고 오류로 멈춘다.
src/main.rk:
fn main():
println!("{double(21)}")
fn double(n: i32) -> i32 = n * 2
#[cfg(test)]
mod tests:
#[test]
fn doubles():
assert_eq!(super.double(2), 4)
renk run은 42를 출력하고, renk test는 doubles를 실행한다. 본문 없는 mod name은 Rust의
mod name;처럼 모듈 파일을 선언한다.
진단
- 생성된 파일에 대한 컴파일러 진단은
.rk의 줄과 열을 가리키고.rk소스를 인용한다. 다른 파일에 대한 진단은 rustc가 렌더링한 그대로 출력한다. - rustc가 제안하는 수정은 Rust 코드이므로
.rkspan에서는 뺀다. --message-format=short는src/main.rk:LINE:COLUMN: error: ...줄을 출력한다.--message-format=json...은 span, 인용한 줄,rendered텍스트를.rk파일로 옮긴 cargo의 JSON 메시지를 출력한다.renk run,renk test,renk bench의 panic 메시지와 backtrace는.rk위치를 보여 준다. 출력이 터미널인 프로그램은 계속 터미널에 쓴다.a.b에서 이름을 찾지 못하면 renk가 점을 어떻게 읽었는지 알려 주는 help 줄이 붙는다. 한계를 참고한다.