neo_solidity/cli/cli_parts/
cli_diagnostics.rs1fn emit_warning(message: &str, contract: Option<&str>, json: bool, code: Option<&str>) {
2 emit_warning_with_suggestion(message, contract, json, code, None);
3}
4
5fn emit_warning_with_suggestion(
6 message: &str,
7 contract: Option<&str>,
8 json: bool,
9 code: Option<&str>,
10 suggestion: Option<&str>,
11) {
12 use std::io::{self, Write};
13
14 if json {
15 let warning = json!({
16 "component": "neo-solidity",
17 "severity": "warning",
18 "type": "CompilerWarning",
19 "code": code.unwrap_or("COMPILER_WARNING"),
20 "contract": contract,
21 "message": message,
22 "formattedMessage": message,
23 "suggestion": suggestion,
24 });
25 let mut stderr = io::stderr().lock();
26 let _ = stderr.write_all(warning.to_string().as_bytes());
27 let _ = stderr.write_all(b"\n");
28 return;
29 }
30
31 let code_tag = code.map(|c| format!("[{c}]")).unwrap_or_default();
32 let line = if let Some(contract) = contract {
33 format!("warning{code_tag} ({contract}): {message}\n")
34 } else {
35 format!("warning{code_tag}: {message}\n")
36 };
37
38 let mut stderr = io::stderr().lock();
39 let _ = stderr.write_all(line.as_bytes());
40 if let Some(hint) = suggestion {
41 let _ = stderr.write_all(format!(" help: {hint}\n").as_bytes());
42 }
43}
44
45fn emit_error(message: &str, code: &str, json: bool) {
46 use std::io::{self, Write};
47
48 if json {
49 let error = json!({
50 "component": "neo-solidity",
51 "severity": "error",
52 "type": "CompilerError",
53 "code": code,
54 "message": message,
55 "formattedMessage": message,
56 });
57 let mut stderr = io::stderr().lock();
58 let _ = stderr.write_all(error.to_string().as_bytes());
59 let _ = stderr.write_all(b"\n");
60 } else {
61 let mut stderr = io::stderr().lock();
62 let _ = stderr.write_all(format!("error: {message}\n").as_bytes());
63 }
64}