pub struct ValidationIssue { /* private fields */ }Expand description
A single validation issue found in a template.
Each issue contains information about the problem, its severity, and optionally the location where it was found.
Implementations§
Source§impl ValidationIssue
impl ValidationIssue
Sourcepub fn new<S: Into<String>>(
severity: Severity,
category: IssueCategory,
message: S,
) -> Self
pub fn new<S: Into<String>>( severity: Severity, category: IssueCategory, message: S, ) -> Self
Create a new validation issue.
§Examples
use tron::validation::{ValidationIssue, Severity, IssueCategory};
let issue = ValidationIssue::new(
Severity::Warning,
IssueCategory::Style,
"Consider using descriptive placeholder names"
);Sourcepub fn with_line(self, line: usize) -> Self
pub fn with_line(self, line: usize) -> Self
Set the line number where the issue was found.
§Examples
use tron::validation::{ValidationIssue, Severity, IssueCategory};
let issue = ValidationIssue::new(Severity::Error, IssueCategory::Syntax, "Invalid syntax")
.with_line(5);Sourcepub fn with_column(self, column: usize) -> Self
pub fn with_column(self, column: usize) -> Self
Set the column number where the issue was found.
Sourcepub fn with_suggestion<S: Into<String>>(self, suggestion: S) -> Self
pub fn with_suggestion<S: Into<String>>(self, suggestion: S) -> Self
Add a suggestion for fixing the issue.
§Examples
use tron::validation::{ValidationIssue, Severity, IssueCategory};
let issue = ValidationIssue::new(Severity::Warning, IssueCategory::Style, "Short placeholder name")
.with_suggestion("Consider using a more descriptive name like 'function_name'");Sourcepub fn severity(&self) -> Severity
pub fn severity(&self) -> Severity
Get the issue severity.
Examples found in repository?
examples/validation_usage.rs (line 153)
128fn example_multiple_template_validation() -> Result<()> {
129 println!("5. Multiple Template Validation:");
130
131 let templates = vec![
132 TronTemplate::new("fn @[function_name]@(@[params]@) -> @[return_type]@ { @[body]@ }")?,
133 TronTemplate::new("struct @[n]@ { @[f]@ }")?, // Short placeholder names
134 TronTemplate::new("Hello @[user_name]@! Welcome to @[application_name]@.")?, // Good template
135 TronTemplate::new("const @[C]@ = @[value]@;")?, // Uppercase in placeholder
136 ];
137
138 let validator = TemplateValidator::new();
139
140 // Validate each template and collect results
141 for (index, template) in templates.iter().enumerate() {
142 let report = validator.validate(template)?;
143
144 println!(" Template #{}: {} issue(s)",
145 index + 1,
146 report.issues().len()
147 );
148
149 if report.has_issues() {
150 // Show first few issues
151 for issue in report.issues().iter().take(2) {
152 println!(" - [{}] {}: {}",
153 issue.severity(),
154 issue.category(),
155 issue.message()
156 );
157 }
158 if report.issues().len() > 2 {
159 println!(" ... and {} more", report.issues().len() - 2);
160 }
161 } else {
162 println!(" ✓ No issues found");
163 }
164 println!();
165 }
166
167 // Demonstrate template reference validation
168 println!(" Template Reference Validation:");
169 let template = TronTemplate::new("fn main() { @[body]@ }")?;
170 let template_ref = TronRef::new(template)
171 .with_dependency("unsafe_crate = \"0.1\"");
172
173 let report = validator.validate_ref(&template_ref)?;
174 println!(" TronRef validation: {} issue(s)", report.issues().len());
175
176 Ok(())
177}Sourcepub fn category(&self) -> &IssueCategory
pub fn category(&self) -> &IssueCategory
Get the issue category.
Examples found in repository?
examples/validation_usage.rs (line 154)
128fn example_multiple_template_validation() -> Result<()> {
129 println!("5. Multiple Template Validation:");
130
131 let templates = vec![
132 TronTemplate::new("fn @[function_name]@(@[params]@) -> @[return_type]@ { @[body]@ }")?,
133 TronTemplate::new("struct @[n]@ { @[f]@ }")?, // Short placeholder names
134 TronTemplate::new("Hello @[user_name]@! Welcome to @[application_name]@.")?, // Good template
135 TronTemplate::new("const @[C]@ = @[value]@;")?, // Uppercase in placeholder
136 ];
137
138 let validator = TemplateValidator::new();
139
140 // Validate each template and collect results
141 for (index, template) in templates.iter().enumerate() {
142 let report = validator.validate(template)?;
143
144 println!(" Template #{}: {} issue(s)",
145 index + 1,
146 report.issues().len()
147 );
148
149 if report.has_issues() {
150 // Show first few issues
151 for issue in report.issues().iter().take(2) {
152 println!(" - [{}] {}: {}",
153 issue.severity(),
154 issue.category(),
155 issue.message()
156 );
157 }
158 if report.issues().len() > 2 {
159 println!(" ... and {} more", report.issues().len() - 2);
160 }
161 } else {
162 println!(" ✓ No issues found");
163 }
164 println!();
165 }
166
167 // Demonstrate template reference validation
168 println!(" Template Reference Validation:");
169 let template = TronTemplate::new("fn main() { @[body]@ }")?;
170 let template_ref = TronRef::new(template)
171 .with_dependency("unsafe_crate = \"0.1\"");
172
173 let report = validator.validate_ref(&template_ref)?;
174 println!(" TronRef validation: {} issue(s)", report.issues().len());
175
176 Ok(())
177}Sourcepub fn message(&self) -> &str
pub fn message(&self) -> &str
Get the issue message.
Examples found in repository?
examples/validation_usage.rs (line 118)
93fn example_security_validation() -> Result<()> {
94 println!("4. Security Validation:");
95
96 // Template with potential security issues
97 let template = TronTemplate::new(
98 r#"
99function processData() {
100 eval(@[user_code]@);
101 var password = "@[user_password]@";
102 return "<script>alert('XSS');</script>";
103}
104"#
105 )?;
106
107 let validator = TemplateValidator::new();
108 let report = validator.validate(&template)?;
109
110 println!(" Template with security concerns:");
111 println!(" {}", report);
112
113 // Show only security issues
114 let security_issues = report.issues_by_category(&IssueCategory::Security);
115 if !security_issues.is_empty() {
116 println!(" Security-specific issues:");
117 for (i, issue) in security_issues.iter().enumerate() {
118 println!(" {}. {}", i + 1, issue.message());
119 if let Some(suggestion) = issue.suggestion() {
120 println!(" Suggestion: {}", suggestion);
121 }
122 }
123 }
124
125 Ok(())
126}
127
128fn example_multiple_template_validation() -> Result<()> {
129 println!("5. Multiple Template Validation:");
130
131 let templates = vec![
132 TronTemplate::new("fn @[function_name]@(@[params]@) -> @[return_type]@ { @[body]@ }")?,
133 TronTemplate::new("struct @[n]@ { @[f]@ }")?, // Short placeholder names
134 TronTemplate::new("Hello @[user_name]@! Welcome to @[application_name]@.")?, // Good template
135 TronTemplate::new("const @[C]@ = @[value]@;")?, // Uppercase in placeholder
136 ];
137
138 let validator = TemplateValidator::new();
139
140 // Validate each template and collect results
141 for (index, template) in templates.iter().enumerate() {
142 let report = validator.validate(template)?;
143
144 println!(" Template #{}: {} issue(s)",
145 index + 1,
146 report.issues().len()
147 );
148
149 if report.has_issues() {
150 // Show first few issues
151 for issue in report.issues().iter().take(2) {
152 println!(" - [{}] {}: {}",
153 issue.severity(),
154 issue.category(),
155 issue.message()
156 );
157 }
158 if report.issues().len() > 2 {
159 println!(" ... and {} more", report.issues().len() - 2);
160 }
161 } else {
162 println!(" ✓ No issues found");
163 }
164 println!();
165 }
166
167 // Demonstrate template reference validation
168 println!(" Template Reference Validation:");
169 let template = TronTemplate::new("fn main() { @[body]@ }")?;
170 let template_ref = TronRef::new(template)
171 .with_dependency("unsafe_crate = \"0.1\"");
172
173 let report = validator.validate_ref(&template_ref)?;
174 println!(" TronRef validation: {} issue(s)", report.issues().len());
175
176 Ok(())
177}Sourcepub fn suggestion(&self) -> Option<&str>
pub fn suggestion(&self) -> Option<&str>
Get the suggestion if available.
Examples found in repository?
examples/validation_usage.rs (line 119)
93fn example_security_validation() -> Result<()> {
94 println!("4. Security Validation:");
95
96 // Template with potential security issues
97 let template = TronTemplate::new(
98 r#"
99function processData() {
100 eval(@[user_code]@);
101 var password = "@[user_password]@";
102 return "<script>alert('XSS');</script>";
103}
104"#
105 )?;
106
107 let validator = TemplateValidator::new();
108 let report = validator.validate(&template)?;
109
110 println!(" Template with security concerns:");
111 println!(" {}", report);
112
113 // Show only security issues
114 let security_issues = report.issues_by_category(&IssueCategory::Security);
115 if !security_issues.is_empty() {
116 println!(" Security-specific issues:");
117 for (i, issue) in security_issues.iter().enumerate() {
118 println!(" {}. {}", i + 1, issue.message());
119 if let Some(suggestion) = issue.suggestion() {
120 println!(" Suggestion: {}", suggestion);
121 }
122 }
123 }
124
125 Ok(())
126}Trait Implementations§
Source§impl Clone for ValidationIssue
impl Clone for ValidationIssue
Source§fn clone(&self) -> ValidationIssue
fn clone(&self) -> ValidationIssue
Returns a duplicate of the value. Read more
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
Performs copy-assignment from
source. Read moreSource§impl Debug for ValidationIssue
impl Debug for ValidationIssue
Auto Trait Implementations§
impl Freeze for ValidationIssue
impl RefUnwindSafe for ValidationIssue
impl Send for ValidationIssue
impl Sync for ValidationIssue
impl Unpin for ValidationIssue
impl UnwindSafe for ValidationIssue
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more