Chisle
코딩 에이전트 플러그인, 20개 실시간 작업에서 기본 모델 52% 활용, 간결한 페르소나와 출력 압축 제공
YAML 1.2와 R 객체를 상호 변환하며, cyaml 파서를 내장해 별도 시스템이 필요 없습니다
Converts between YAML 1.2 (<https://yaml.org/spec/1.2.2/>) and ordinary R objects using a bundled copy of the cyaml C11 parser and emitter (<https://github.com/andrewmd5/cyaml>), so there is no system
개발 도구C · RGitHub @pedrobtz온라인운영자 미확인
써 보셨어요? 한 번만 눌러 주세요. 로그인은 필요 없어요.
Parse and Emit YAML 1.2
README 전체를 불러오는 중입니다.
README 전문 보기 ↗zuyaml converts between YAML 1.2 and ordinary R objects, using a bundled copy of
the cyaml C11 parser and emitter, so there
is no system dependency and no runtime dependency beyond R itself. Ambiguous YAML
is handled strictly: the 1.2 core schema (so yes is a string), duplicate keys
refused, large integers preserved, and a document stream kept apart from a sequence.
install.packages("zuyaml")
Or the development version from GitHub:
# install.packages("pak")
pak::pak("pedrobtz/zuyaml")
yaml_parse() turns YAML text into R objects:
library(zuyaml)
yaml_parse("host: localhost\nport: 8080\ntls: true\n")
#> $host
#> [1] "localhost"
#>
#> $port
#> [1] 8080
#>
#> $tls
#> [1] TRUE
yaml_emit() goes the other way. Note the quoting: "42" is a string in R, so it
stays a string in YAML and on the way back. The same holds for the cases that are
easy to get wrong — line breaks, leading and trailing whitespace, mapping keys,
whole-numbered doubles — so what you emit parses back to what you had.
cat(yaml_emit(list(version = "42", ratio = 0.5)))
#> version: "42"
#> ratio: 0.5
Both have an _all variant for a YAML stream — several documents separated by
---, which is a different thing from a sequence — and yaml_read() /
yaml_write() do the same for files:
yaml_parse_all("a: 1\n---\na: 2\n")
#> [[1]]
#> [[1]]$a
#> [1] 1
#>
#>
#> [[2]]
#> [[2]]$a
#> [1] 2
The getting started article documents the conversion rules in full, including the cases that do not round-trip.
tests/testthat/ runs a curated 84-case yaml-test-suite subset in every R CMD check; ZUYAML_TEST_SUITE points it at a full 402-case checkout instead.tools/conformance.R walks the same corpus but reports rather than asserts — counts per boundary, failures named, against a baseline pinned in the script.278/279 that is meant to change deliberately rather than break a build.| Workflow | Jobs, and what they do | When | Runs |
|---|---|---|---|
R-CMD-check.yaml | R CMD check --as-cran on macOS, Windows and Ubuntu at R release and oldrel-1, and in the CRAN-like containers clang23, ubuntu-clang and ubuntu-gcc16 — the package vendors C11, so the compiler CRAN uses is the one that has to see it | push, PR | view |
hardening.yaml | full-test-suite — all 402 yaml-test-suite cases, then tools/conformance.R against its pinned baseline. fuzz — the wrapper fuzzer at 20,000 iterations | push, PR, weekly | view |
native-checks.yaml | sanitizers — UBSan on a runner, ASan in the clang-asan and gcc-asan images. valgrind, lto, rchk (failing on findings), and gctorture at step 500 on every push with the sensitive step-20 run weekly | push, PR, weekly | view |
coverage.yaml | covr, with a per-file breakdown in the job summary | push, PR | view |
R-CMD-check.yaml, native-checks.yaml and coverage.yaml call the reusable
workflows in r-actions rather than
keeping a second copy here. hardening.yaml does not: it holds the two checks
that are specific to this package.