fix(website): hack schemars to render code snippet in markdown (#3417)

This commit is contained in:
Boshen 2024-05-26 10:36:53 +00:00
parent 31c8e3340d
commit 19bb1c02f2
7 changed files with 102 additions and 97 deletions

137
Cargo.lock generated
View file

@ -76,7 +76,7 @@ checksum = "c6fa2087f2753a7da8cc1c0dbfcf89579dd57458e36769de5ac750b4671737ca"
dependencies = [
"proc-macro2",
"quote",
"syn 2.0.63",
"syn",
]
[[package]]
@ -87,7 +87,7 @@ checksum = "3c87f3f15e7794432337fc718554eaa4dc8f04c9677a950ffe366f20a162ae42"
dependencies = [
"proc-macro2",
"quote",
"syn 2.0.63",
"syn",
]
[[package]]
@ -170,7 +170,7 @@ checksum = "9a8d5b11f7fa1068e5bbac8ab6c8c2c6940047f69185987446b60c995d4bf89c"
dependencies = [
"proc-macro2",
"quote",
"syn 2.0.63",
"syn",
]
[[package]]
@ -252,31 +252,6 @@ dependencies = [
"half",
]
[[package]]
name = "ckb_schemars"
version = "0.8.19"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f21f99fca82a4eb8708e406e99246987b087ecc1e1babeece1a0b1d5238b1750"
dependencies = [
"ckb_schemars_derive",
"dyn-clone",
"indexmap",
"serde",
"serde_json",
]
[[package]]
name = "ckb_schemars_derive"
version = "0.8.19"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "40c813b4fadbdd9f33b1cf02a1ddfa9537d955c8d2fbe150d1fc1684dbf78e73"
dependencies = [
"proc-macro2",
"quote",
"serde_derive_internals 0.26.0",
"syn 1.0.109",
]
[[package]]
name = "clean-path"
version = "0.2.1"
@ -428,7 +403,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "edb49164822f3ee45b17acd4a208cfc1251410cf0cad9a833234c9890774dd9f"
dependencies = [
"quote",
"syn 2.0.63",
"syn",
]
[[package]]
@ -619,7 +594,7 @@ checksum = "87750cf4b7a4c0625b1529e4c543c2182106e4dedc60a2a6455e00d212c489ac"
dependencies = [
"proc-macro2",
"quote",
"syn 2.0.63",
"syn",
]
[[package]]
@ -1026,7 +1001,7 @@ checksum = "dcf09caffaac8068c346b6df2a7fc27a177fd20b39421a39ce0a211bde679a6c"
dependencies = [
"proc-macro2",
"quote",
"syn 2.0.63",
"syn",
]
[[package]]
@ -1105,7 +1080,7 @@ dependencies = [
"napi-derive-backend",
"proc-macro2",
"quote",
"syn 2.0.63",
"syn",
]
[[package]]
@ -1120,7 +1095,7 @@ dependencies = [
"quote",
"regex",
"semver",
"syn 2.0.63",
"syn",
]
[[package]]
@ -1223,7 +1198,7 @@ dependencies = [
"proc-macro2",
"proc-macro2-diagnostics",
"quote",
"syn 2.0.63",
"syn",
]
[[package]]
@ -1413,7 +1388,6 @@ dependencies = [
name = "oxc_linter"
version = "0.0.0"
dependencies = [
"ckb_schemars",
"convert_case",
"dashmap",
"insta",
@ -1440,6 +1414,7 @@ dependencies = [
"regex",
"rust-lapper",
"rustc-hash",
"schemars",
"serde",
"serde_json",
"static_assertions",
@ -1454,7 +1429,7 @@ dependencies = [
"itertools",
"proc-macro2",
"quote",
"syn 2.0.63",
"syn",
]
[[package]]
@ -1808,7 +1783,7 @@ dependencies = [
"pest_meta",
"proc-macro2",
"quote",
"syn 2.0.63",
"syn",
]
[[package]]
@ -1862,7 +1837,7 @@ dependencies = [
"phf_shared",
"proc-macro2",
"quote",
"syn 2.0.63",
"syn",
]
[[package]]
@ -1897,7 +1872,7 @@ checksum = "2f38a4412a78282e09a2cf38d195ea5420d15ba0602cb375210efbc877243965"
dependencies = [
"proc-macro2",
"quote",
"syn 2.0.63",
"syn",
]
[[package]]
@ -1929,7 +1904,7 @@ checksum = "af066a9c399a26e020ada66a034357a868728e72cd426f3adcd35f80d88d88c8"
dependencies = [
"proc-macro2",
"quote",
"syn 2.0.63",
"syn",
"version_check",
"yansi",
]
@ -2178,6 +2153,31 @@ dependencies = [
"hashlink",
]
[[package]]
name = "schemars"
version = "0.8.21"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "09c024468a378b7e36765cd36702b7a90cc3cba11654f6685c8f233408e89e92"
dependencies = [
"dyn-clone",
"indexmap",
"schemars_derive",
"serde",
"serde_json",
]
[[package]]
name = "schemars_derive"
version = "0.8.21"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b1eee588578aff73f856ab961cd2f79e36bc45d7ded33a7562adba4667aecc0e"
dependencies = [
"proc-macro2",
"quote",
"serde_derive_internals 0.29.1",
"syn",
]
[[package]]
name = "scopeguard"
version = "1.2.0"
@ -2224,18 +2224,7 @@ checksum = "c5e405930b9796f1c00bee880d03fc7e0bb4b9a11afc776885ffe84320da2865"
dependencies = [
"proc-macro2",
"quote",
"syn 2.0.63",
]
[[package]]
name = "serde_derive_internals"
version = "0.26.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "85bf8229e7920a9f636479437026331ce11aa132b4dde37d121944a44d6e5f3c"
dependencies = [
"proc-macro2",
"quote",
"syn 1.0.109",
"syn",
]
[[package]]
@ -2246,7 +2235,18 @@ checksum = "e578a843d40b4189a4d66bba51d7684f57da5bd7c304c64e14bd63efbef49509"
dependencies = [
"proc-macro2",
"quote",
"syn 2.0.63",
"syn",
]
[[package]]
name = "serde_derive_internals"
version = "0.29.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "18d26a20a969b9e3fdf2fc2d9f21eda6c40e2de84c9408bb5d3b05d499aae711"
dependencies = [
"proc-macro2",
"quote",
"syn",
]
[[package]]
@ -2269,7 +2269,7 @@ checksum = "6c64451ba24fc7a6a2d60fc75dd9c83c90903b19028d4eff35e88fc1e86564e9"
dependencies = [
"proc-macro2",
"quote",
"syn 2.0.63",
"syn",
]
[[package]]
@ -2386,17 +2386,6 @@ dependencies = [
"is_ci",
]
[[package]]
name = "syn"
version = "1.0.109"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237"
dependencies = [
"proc-macro2",
"quote",
"unicode-ident",
]
[[package]]
name = "syn"
version = "2.0.63"
@ -2457,7 +2446,7 @@ checksum = "e2470041c06ec3ac1ab38d0356a6119054dedaea53e12fbefc0de730a1c08524"
dependencies = [
"proc-macro2",
"quote",
"syn 2.0.63",
"syn",
]
[[package]]
@ -2522,7 +2511,7 @@ checksum = "5b8a1e28f2deaa14e508979454cb3a223b10b938b45af148bc0986de36f1923b"
dependencies = [
"proc-macro2",
"quote",
"syn 2.0.63",
"syn",
]
[[package]]
@ -2623,7 +2612,7 @@ checksum = "84fd902d4e0b9a4b27f2f440108dc034e1758628a9b702f8ec61ad66355422fa"
dependencies = [
"proc-macro2",
"quote",
"syn 2.0.63",
"syn",
]
[[package]]
@ -2651,7 +2640,7 @@ checksum = "34704c8d6ebcbc939824180af020566b01a7c01f80641264eba0999f6c2b6be7"
dependencies = [
"proc-macro2",
"quote",
"syn 2.0.63",
"syn",
]
[[package]]
@ -2725,7 +2714,7 @@ dependencies = [
"proc-macro2",
"quote",
"serde_derive_internals 0.28.0",
"syn 2.0.63",
"syn",
]
[[package]]
@ -2898,7 +2887,7 @@ dependencies = [
"once_cell",
"proc-macro2",
"quote",
"syn 2.0.63",
"syn",
"wasm-bindgen-shared",
]
@ -2920,7 +2909,7 @@ checksum = "e94f17b526d0a461a191c78ea52bbce64071ed5c04c9ffe424dcb38f74171bb7"
dependencies = [
"proc-macro2",
"quote",
"syn 2.0.63",
"syn",
"wasm-bindgen-backend",
"wasm-bindgen-shared",
]
@ -2955,12 +2944,12 @@ name = "website"
version = "0.0.0"
dependencies = [
"bpaf",
"ckb_schemars",
"handlebars",
"insta",
"oxc_linter",
"oxlint",
"pico-args",
"schemars",
"serde",
"serde_json",
]
@ -3167,7 +3156,7 @@ checksum = "15e934569e47891f7d9411f1a451d947a60e000ab3bd24fbb970f000387d1b3b"
dependencies = [
"proc-macro2",
"quote",
"syn 2.0.63",
"syn",
]
[[package]]

View file

@ -173,7 +173,7 @@ unicode-width = "0.1.12"
saphyr = "0.0.1"
base64-simd = "0.8"
cfg-if = "1.0.0"
schemars = { version = "0.8.16", package = "ckb_schemars" } # contains fix for stripping newlines in description
schemars = { version = "0.8.21" }
[workspace.metadata.cargo-shear]
ignored = ["napi", "oxc_traverse"]

View file

@ -31,21 +31,21 @@ pub use self::{
///
/// Example
///
/// `.oxlintrc.json`
///
/// ```json
/// // oxlintrc.json
/// {
/// // Comments are supported.
/// "env": {
/// "browser": true
/// },
/// "globals": {
/// "foo": "readonly",
/// "foo": "readonly"
/// },
/// "settings": {
/// },
/// "rules": {
/// "eqeqeq": "warn",
/// },
/// "eqeqeq": "warn"
/// }
/// }
/// ```
#[derive(Debug, Default, Deserialize, JsonSchema)]

View file

@ -5,7 +5,7 @@ expression: json
{
"$schema": "http://json-schema.org/draft-07/schema#",
"title": "OxlintConfig",
"description": "Oxlint Configuration File\n\nThis configuration is aligned with ESLint v8's configuration schema (`eslintrc.json`).\n\nUsage: `oxlint -c oxlintrc.json`\n\n::: danger NOTE\n\nOnly the `.json` format is supported.\n\n:::\n\nExample\n\n```json\n // oxlintrc.json\n {\n // Comments are supported.\n \"env\": {\n \"browser\": true\n },\n \"globals\": {\n \"foo\": \"readonly\",\n },\n \"settings\": {\n },\n \"rules\": {\n \"eqeqeq\": \"warn\",\n },\n }\n```",
"description": "Oxlint Configuration File\n\nThis configuration is aligned with ESLint v8's configuration schema (`eslintrc.json`).\n\nUsage: `oxlint -c oxlintrc.json`\n\n::: danger NOTE\n\nOnly the `.json` format is supported.\n\n:::\n\nExample\n\n`.oxlintrc.json`\n\n```json { \"env\": { \"browser\": true }, \"globals\": { \"foo\": \"readonly\" }, \"settings\": { }, \"rules\": { \"eqeqeq\": \"warn\" } } ```",
"type": "object",
"properties": {
"env": {

View file

@ -1,7 +1,7 @@
{
"$schema": "http://json-schema.org/draft-07/schema#",
"title": "OxlintConfig",
"description": "Oxlint Configuration File\n\nThis configuration is aligned with ESLint v8's configuration schema (`eslintrc.json`).\n\nUsage: `oxlint -c oxlintrc.json`\n\n::: danger NOTE\n\nOnly the `.json` format is supported.\n\n:::\n\nExample\n\n```json\n // oxlintrc.json\n {\n // Comments are supported.\n \"env\": {\n \"browser\": true\n },\n \"globals\": {\n \"foo\": \"readonly\",\n },\n \"settings\": {\n },\n \"rules\": {\n \"eqeqeq\": \"warn\",\n },\n }\n```",
"description": "Oxlint Configuration File\n\nThis configuration is aligned with ESLint v8's configuration schema (`eslintrc.json`).\n\nUsage: `oxlint -c oxlintrc.json`\n\n::: danger NOTE\n\nOnly the `.json` format is supported.\n\n:::\n\nExample\n\n`.oxlintrc.json`\n\n```json { \"env\": { \"browser\": true }, \"globals\": { \"foo\": \"readonly\" }, \"settings\": { }, \"rules\": { \"eqeqeq\": \"warn\" } } ```",
"type": "object",
"properties": {
"env": {

View file

@ -84,7 +84,8 @@ impl Renderer {
}
fn render(self) -> String {
let root = self.render_root_schema(&self.root_schema);
let mut root = self.render_root_schema(&self.root_schema);
root.sanitize();
self.handlebars.render("root", &root).unwrap()
}
@ -167,3 +168,19 @@ impl Renderer {
}
}
}
impl Root {
fn sanitize(&mut self) {
sanitize(&mut self.title);
}
}
fn sanitize(s: &mut String) {
let Some(start) = s.find("```json") else { return };
let start = start + 7;
let end = s[start..].find("```").unwrap();
let json: serde_json::Value = serde_json::from_str(&s[start..start + end]).unwrap();
let json = serde_json::to_string_pretty(&json).unwrap();
let json = format!("\n{json}\n");
s.replace_range(start..start + end, &json);
}

View file

@ -16,22 +16,21 @@ Only the `.json` format is supported.
Example
`.oxlintrc.json`
```json
// oxlintrc.json
{
// Comments are supported.
"env": {
"browser": true
},
"globals": {
"foo": "readonly",
},
"settings": {
},
"rules": {
"eqeqeq": "warn",
},
{
"env": {
"browser": true
},
"globals": {
"foo": "readonly"
},
"settings": {},
"rules": {
"eqeqeq": "warn"
}
}
```