yerba 0.3.0-aarch64-linux-gnu → 0.4.1-aarch64-linux-gnu
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/README.md +93 -8
- data/exe/aarch64-linux-gnu/yerba +0 -0
- data/ext/yerba/extconf.rb +22 -3
- data/ext/yerba/include/yerba.h +32 -9
- data/ext/yerba/yerba.c +133 -25
- data/lib/yerba/3.2/yerba.so +0 -0
- data/lib/yerba/3.3/yerba.so +0 -0
- data/lib/yerba/3.4/yerba.so +0 -0
- data/lib/yerba/4.0/yerba.so +0 -0
- data/lib/yerba/collection.rb +35 -0
- data/lib/yerba/document.rb +45 -3
- data/lib/yerba/query_result.rb +50 -0
- data/lib/yerba/sequence.rb +187 -1
- data/lib/yerba/version.rb +1 -1
- data/lib/yerba/yerbafile.rb +45 -0
- data/lib/yerba.rb +2 -0
- data/rust/Cargo.lock +3 -1
- data/rust/Cargo.toml +3 -2
- data/rust/cbindgen.toml +1 -0
- data/rust/rustfmt.toml +1 -1
- data/rust/src/commands/apply.rs +11 -2
- data/rust/src/commands/blank_lines.rs +1 -4
- data/rust/src/commands/check.rs +11 -2
- data/rust/src/commands/directives.rs +61 -0
- data/rust/src/commands/get.rs +5 -22
- data/rust/src/commands/mod.rs +16 -18
- data/rust/src/commands/quote_style.rs +12 -6
- data/rust/src/commands/selectors.rs +3 -19
- data/rust/src/commands/sort.rs +22 -157
- data/rust/src/didyoumean.rs +2 -4
- data/rust/src/document/condition.rs +139 -0
- data/rust/src/document/delete.rs +91 -0
- data/rust/src/document/get.rs +262 -0
- data/rust/src/document/insert.rs +384 -0
- data/rust/src/document/mod.rs +784 -0
- data/rust/src/document/set.rs +100 -0
- data/rust/src/document/sort.rs +639 -0
- data/rust/src/document/style.rs +473 -0
- data/rust/src/error.rs +24 -6
- data/rust/src/ffi.rs +272 -518
- data/rust/src/json.rs +1 -7
- data/rust/src/lib.rs +88 -2
- data/rust/src/main.rs +2 -0
- data/rust/src/quote_style.rs +83 -7
- data/rust/src/selector.rs +2 -7
- data/rust/src/syntax.rs +41 -21
- data/rust/src/yerbafile.rs +86 -19
- metadata +13 -3
- data/rust/src/document.rs +0 -2304
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
use super::*;
|
|
2
|
+
|
|
3
|
+
impl Document {
|
|
4
|
+
pub fn set(&mut self, dot_path: &str, value: &str) -> Result<(), YerbaError> {
|
|
5
|
+
let current_node = self.navigate(dot_path)?;
|
|
6
|
+
|
|
7
|
+
if let Some(block_scalar) = current_node.descendants().find(|node| node.kind() == SyntaxKind::BLOCK_SCALAR) {
|
|
8
|
+
let new_text = if value.is_empty() {
|
|
9
|
+
"\"\"".to_string()
|
|
10
|
+
} else if value.contains('\n') {
|
|
11
|
+
format!("|-\n {}", value.replace('\n', "\n "))
|
|
12
|
+
} else {
|
|
13
|
+
format!("\"{}\"", value.replace('"', "\\\""))
|
|
14
|
+
};
|
|
15
|
+
|
|
16
|
+
let range = block_scalar.text_range();
|
|
17
|
+
|
|
18
|
+
return self.apply_edit(range, &new_text);
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
let scalar_token = find_scalar_token(¤t_node).ok_or_else(|| YerbaError::SelectorNotFound(dot_path.to_string()))?;
|
|
22
|
+
|
|
23
|
+
let new_text = format_scalar_value(value, scalar_token.kind());
|
|
24
|
+
|
|
25
|
+
self.replace_token(&scalar_token, &new_text)
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
pub fn set_all(&mut self, dot_path: &str, value: &str) -> Result<(), YerbaError> {
|
|
29
|
+
let nodes = self.navigate_all(dot_path);
|
|
30
|
+
|
|
31
|
+
if nodes.is_empty() {
|
|
32
|
+
return Err(YerbaError::SelectorNotFound(dot_path.to_string()));
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
for node in nodes.into_iter().rev() {
|
|
36
|
+
if let Some(block_scalar) = node.descendants().find(|child| child.kind() == SyntaxKind::BLOCK_SCALAR) {
|
|
37
|
+
let new_text = if value.is_empty() {
|
|
38
|
+
"\"\"".to_string()
|
|
39
|
+
} else if value.contains('\n') {
|
|
40
|
+
format!("|-\n {}", value.replace('\n', "\n "))
|
|
41
|
+
} else {
|
|
42
|
+
format!("\"{}\"", value.replace('"', "\\\""))
|
|
43
|
+
};
|
|
44
|
+
|
|
45
|
+
self.apply_edit(block_scalar.text_range(), &new_text)?;
|
|
46
|
+
} else if let Some(scalar_token) = find_scalar_token(&node) {
|
|
47
|
+
let new_text = format_scalar_value(value, scalar_token.kind());
|
|
48
|
+
|
|
49
|
+
self.replace_token(&scalar_token, &new_text)?;
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
Ok(())
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
pub fn set_scalar_style(&mut self, dot_path: &str, style: &QuoteStyle) -> Result<(), YerbaError> {
|
|
57
|
+
let current_node = self.navigate(dot_path)?;
|
|
58
|
+
let scalar_token = find_scalar_token(¤t_node).ok_or_else(|| YerbaError::SelectorNotFound(dot_path.to_string()))?;
|
|
59
|
+
|
|
60
|
+
let current_kind = scalar_token.kind();
|
|
61
|
+
let target_kind = style.to_syntax_kind();
|
|
62
|
+
|
|
63
|
+
if current_kind == target_kind {
|
|
64
|
+
return Ok(());
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
let raw_value = match current_kind {
|
|
68
|
+
SyntaxKind::DOUBLE_QUOTED_SCALAR => {
|
|
69
|
+
let text = scalar_token.text();
|
|
70
|
+
unescape_double_quoted(&text[1..text.len() - 1])
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
SyntaxKind::SINGLE_QUOTED_SCALAR => {
|
|
74
|
+
let text = scalar_token.text();
|
|
75
|
+
unescape_single_quoted(&text[1..text.len() - 1])
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
SyntaxKind::PLAIN_SCALAR => scalar_token.text().to_string(),
|
|
79
|
+
|
|
80
|
+
_ => return Ok(()),
|
|
81
|
+
};
|
|
82
|
+
|
|
83
|
+
let new_text = format_scalar_value(&raw_value, target_kind);
|
|
84
|
+
|
|
85
|
+
self.replace_token(&scalar_token, &new_text)
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
pub fn set_plain(&mut self, dot_path: &str, value: &str) -> Result<(), YerbaError> {
|
|
89
|
+
let current_node = self.navigate(dot_path)?;
|
|
90
|
+
|
|
91
|
+
if let Some(block_scalar) = current_node.descendants().find(|node| node.kind() == SyntaxKind::BLOCK_SCALAR) {
|
|
92
|
+
let range = block_scalar.text_range();
|
|
93
|
+
return self.apply_edit(range, value);
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
let scalar_token = find_scalar_token(¤t_node).ok_or_else(|| YerbaError::SelectorNotFound(dot_path.to_string()))?;
|
|
97
|
+
|
|
98
|
+
self.replace_token(&scalar_token, value)
|
|
99
|
+
}
|
|
100
|
+
}
|