mirror of
https://gitlab.cern.ch/wotsubo/endcap-sl-software-ri-generator.git
synced 2025-08-05 02:09:25 +09:00
Escape bracket in generated docs
This commit is contained in:
parent
a0a1c8c9a3
commit
ef1b10a21d
5 changed files with 55 additions and 8 deletions
|
@ -21,6 +21,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
||||||
- Use `u8` and `u16` for `T` of registers when the mask is 0xff or 0xffff, instead of defining new tuple struct.
|
- Use `u8` and `u16` for `T` of registers when the mask is 0xff or 0xffff, instead of defining new tuple struct.
|
||||||
- Use `Mmapped` instead of `RegisterSpec` !21
|
- Use `Mmapped` instead of `RegisterSpec` !21
|
||||||
- Remove empty doc generation !23
|
- Remove empty doc generation !23
|
||||||
|
- Added escape to brackets of form `[numbers]` in docs. (e.g., `a[1]` to `a\[1\]`, `b[1:2]` to `b\[1:2\]`) !24
|
||||||
|
|
||||||
## [0.3.1] - 2025-04-11
|
## [0.3.1] - 2025-04-11
|
||||||
|
|
||||||
|
|
6
Cargo.lock
generated
6
Cargo.lock
generated
|
@ -385,9 +385,11 @@ dependencies = [
|
||||||
"hex",
|
"hex",
|
||||||
"itertools",
|
"itertools",
|
||||||
"log",
|
"log",
|
||||||
|
"once_cell",
|
||||||
"prettyplease",
|
"prettyplease",
|
||||||
"proc-macro2",
|
"proc-macro2",
|
||||||
"quote",
|
"quote",
|
||||||
|
"regex",
|
||||||
"roxmltree",
|
"roxmltree",
|
||||||
"sha2",
|
"sha2",
|
||||||
"syn",
|
"syn",
|
||||||
|
@ -565,9 +567,9 @@ dependencies = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "once_cell"
|
name = "once_cell"
|
||||||
version = "1.20.2"
|
version = "1.21.3"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "1261fe7e33c73b354eab43b1273a57c8f967d0391e80353e51f764ac02cf6775"
|
checksum = "42f5e15c9953c5e4ccceeb2e7382a716482c34515315f7b03532b8b4e8393d2d"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "powerfmt"
|
name = "powerfmt"
|
||||||
|
|
|
@ -26,9 +26,11 @@ heck = "0.5"
|
||||||
hex = "0.4"
|
hex = "0.4"
|
||||||
itertools = "0.14"
|
itertools = "0.14"
|
||||||
log = "0.4"
|
log = "0.4"
|
||||||
|
once_cell = "1.21.3"
|
||||||
prettyplease = "0.2"
|
prettyplease = "0.2"
|
||||||
proc-macro2 = "1.0"
|
proc-macro2 = "1.0"
|
||||||
quote = "1.0"
|
quote = "1.0"
|
||||||
|
regex = "1.11.1"
|
||||||
roxmltree = "0.20"
|
roxmltree = "0.20"
|
||||||
sha2 = "0.10"
|
sha2 = "0.10"
|
||||||
syn = "2.0"
|
syn = "2.0"
|
||||||
|
|
|
@ -41,6 +41,9 @@ pub enum CodeGenError {
|
||||||
}
|
}
|
||||||
|
|
||||||
mod util {
|
mod util {
|
||||||
|
use once_cell::sync::Lazy;
|
||||||
|
use regex::Regex;
|
||||||
|
|
||||||
use crate::types::DataType;
|
use crate::types::DataType;
|
||||||
|
|
||||||
use super::CodeGenError;
|
use super::CodeGenError;
|
||||||
|
@ -115,9 +118,17 @@ mod util {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static RE_BRACKET_WITH_NUM: Lazy<Regex> =
|
||||||
|
Lazy::new(|| Regex::new(r"\[(?<inner>[\d:]+)\]").unwrap());
|
||||||
|
pub(super) fn escape_brackets_with_numbers(s: &str) -> String {
|
||||||
|
RE_BRACKET_WITH_NUM
|
||||||
|
.replace_all(s, "\\[$inner\\]")
|
||||||
|
.into_owned()
|
||||||
|
}
|
||||||
|
|
||||||
#[cfg(test)]
|
#[cfg(test)]
|
||||||
mod test {
|
mod test {
|
||||||
use super::RustUxTypes;
|
use super::{RustUxTypes, escape_brackets_with_numbers};
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn rustuxtypes_from_mask() {
|
fn rustuxtypes_from_mask() {
|
||||||
|
@ -148,6 +159,23 @@ mod util {
|
||||||
proc_macro2::Ident::new("u8", proc_macro2::Span::call_site())
|
proc_macro2::Ident::new("u8", proc_macro2::Span::call_site())
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn test_regex() {
|
||||||
|
assert_eq!(escape_brackets_with_numbers("abc"), "abc".to_string());
|
||||||
|
assert_eq!(
|
||||||
|
escape_brackets_with_numbers("abc[1]"),
|
||||||
|
r"abc\[1\]".to_string()
|
||||||
|
);
|
||||||
|
assert_eq!(
|
||||||
|
escape_brackets_with_numbers("abc[12:34]"),
|
||||||
|
r"abc\[12:34\]".to_string()
|
||||||
|
);
|
||||||
|
assert_eq!(
|
||||||
|
escape_brackets_with_numbers("abc[12:34], def[1]"),
|
||||||
|
r"abc\[12:34\], def\[1\]".to_string()
|
||||||
|
);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -312,7 +340,10 @@ impl CodeGen for Block {
|
||||||
let desc = match self.desc {
|
let desc = match self.desc {
|
||||||
None => quote! {},
|
None => quote! {},
|
||||||
Some(ref s) if s.is_empty() => quote! {},
|
Some(ref s) if s.is_empty() => quote! {},
|
||||||
Some(ref desc) => quote! { #![doc = #desc] },
|
Some(ref desc) => {
|
||||||
|
let desc = util::escape_brackets_with_numbers(desc);
|
||||||
|
quote! { #![doc = #desc] }
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
let accessors_methods = self.elements.iter().map(|e| {
|
let accessors_methods = self.elements.iter().map(|e| {
|
||||||
|
@ -474,7 +505,10 @@ impl CodeGen for Register {
|
||||||
let doc = match self.desc {
|
let doc = match self.desc {
|
||||||
None => quote! {},
|
None => quote! {},
|
||||||
Some(ref s) if s.is_empty() => quote! {},
|
Some(ref s) if s.is_empty() => quote! {},
|
||||||
Some(ref desc) => quote! { #![doc = #desc] },
|
Some(ref desc) => {
|
||||||
|
let desc = util::escape_brackets_with_numbers(desc);
|
||||||
|
quote! { #![doc = #desc] }
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
let out = quote! {
|
let out = quote! {
|
||||||
|
|
|
@ -190,6 +190,11 @@ fn generate_field(
|
||||||
true => FieldType::RustType(util::RustUxTypes::from_mask(field.mask)),
|
true => FieldType::RustType(util::RustUxTypes::from_mask(field.mask)),
|
||||||
false => FieldType::CustomValue(&field.elements),
|
false => FieldType::CustomValue(&field.elements),
|
||||||
};
|
};
|
||||||
|
let desc = match field.desc.clone() {
|
||||||
|
None => "".to_string(),
|
||||||
|
Some(s) if s.is_empty() => s,
|
||||||
|
Some(desc) => util::escape_brackets_with_numbers(&desc),
|
||||||
|
};
|
||||||
|
|
||||||
let (code_mask, code_getter, code_setter) = match &field.multiple {
|
let (code_mask, code_getter, code_setter) = match &field.multiple {
|
||||||
Some(multiple_params) => generate_multiple_field(
|
Some(multiple_params) => generate_multiple_field(
|
||||||
|
@ -199,7 +204,7 @@ fn generate_field(
|
||||||
field_type,
|
field_type,
|
||||||
snake_case_name,
|
snake_case_name,
|
||||||
multiple_params,
|
multiple_params,
|
||||||
&field.desc.clone().unwrap_or("".to_string()),
|
&desc,
|
||||||
),
|
),
|
||||||
None => generate_single_field(
|
None => generate_single_field(
|
||||||
mask_name,
|
mask_name,
|
||||||
|
@ -207,7 +212,7 @@ fn generate_field(
|
||||||
field.mask,
|
field.mask,
|
||||||
field_type,
|
field_type,
|
||||||
snake_case_name,
|
snake_case_name,
|
||||||
&field.desc.clone().unwrap_or("".to_string()),
|
&desc,
|
||||||
),
|
),
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -352,7 +357,10 @@ fn generate_custom_values_const_enumdef(
|
||||||
let doc = match value.desc {
|
let doc = match value.desc {
|
||||||
None => quote! {},
|
None => quote! {},
|
||||||
Some(ref s) if s.is_empty() => quote! {},
|
Some(ref s) if s.is_empty() => quote! {},
|
||||||
Some(ref desc) => quote! { #[doc = #desc] },
|
Some(ref desc) => {
|
||||||
|
let desc = util::escape_brackets_with_numbers(desc);
|
||||||
|
quote! { #![doc = #desc] }
|
||||||
|
}
|
||||||
};
|
};
|
||||||
let variant_name = util::parse_to_ident(&value.name.to_upper_camel_case()).unwrap();
|
let variant_name = util::parse_to_ident(&value.name.to_upper_camel_case()).unwrap();
|
||||||
quote! {
|
quote! {
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue