Lucas Steuernagel пре 3 година
родитељ
комит
32fc77b0ec
100 измењених фајлова са 582 додато и 837 уклоњено
  1. 5 5
      src/bin/solang.rs
  2. 3 4
      src/codegen/mod.rs
  3. 1 1
      src/lib.rs
  4. 2 1
      src/sema/ast.rs
  5. 2 2
      src/sema/contracts.rs
  6. 186 79
      src/sema/diagnostics.rs
  7. 1 1
      src/sema/dotgraphviz.rs
  8. 9 6
      src/sema/mod.rs
  9. 1 2
      src/sema/mutability.rs
  10. 1 2
      src/sema/types.rs
  11. 0 1
      src/sema/variables.rs
  12. 4 6
      src/sema/yul/expression.rs
  13. 48 77
      src/sema/yul/tests/block.rs
  14. 125 171
      src/sema/yul/tests/expression.rs
  15. 16 29
      src/sema/yul/tests/for_loop.rs
  16. 7 9
      src/sema/yul/tests/functions.rs
  17. 0 11
      src/sema/yul/tests/mod.rs
  18. 67 89
      src/sema/yul/tests/mutability.rs
  19. 61 81
      src/sema/yul/tests/statements.rs
  20. 10 15
      src/sema/yul/tests/switch.rs
  21. 13 17
      src/sema/yul/tests/types.rs
  22. 14 18
      src/sema/yul/tests/unused_variable.rs
  23. 2 2
      tests/contract.rs
  24. 0 10
      tests/contract_testcases/ewasm/comment_tests.dot
  25. 0 2
      tests/contract_testcases/solana/accessor/constant_01.dot
  26. 0 4
      tests/contract_testcases/solana/call/abi_encode_call.dot
  27. 0 2
      tests/contract_testcases/solana/doccomments_everywhere.dot
  28. 0 2
      tests/contract_testcases/solana/event.dot
  29. 0 2
      tests/contract_testcases/solana/returns/return_err.dot
  30. 0 2
      tests/contract_testcases/solana/returns/return_err_01.dot
  31. 0 2
      tests/contract_testcases/substrate/arrays/storage_delete.dot
  32. 0 2
      tests/contract_testcases/substrate/arrays/storage_delete_01.dot
  33. 0 2
      tests/contract_testcases/substrate/arrays/storage_dynamic_array_pop_01.dot
  34. 0 2
      tests/contract_testcases/substrate/arrays/storage_dynamic_array_push_01.dot
  35. 0 2
      tests/contract_testcases/substrate/arrays/storage_dynamic_array_push_02.dot
  36. 0 2
      tests/contract_testcases/substrate/contracts/contract_type.dot
  37. 0 2
      tests/contract_testcases/substrate/contracts/creation_code.dot
  38. 0 4
      tests/contract_testcases/substrate/contracts/external_call.dot
  39. 0 6
      tests/contract_testcases/substrate/contracts/external_call_01.dot
  40. 0 2
      tests/contract_testcases/substrate/contracts/external_call_02.dot
  41. 0 2
      tests/contract_testcases/substrate/events/emit_01.dot
  42. 0 2
      tests/contract_testcases/substrate/events/emit_04.dot
  43. 0 2
      tests/contract_testcases/substrate/events/event_decl_04.dot
  44. 0 2
      tests/contract_testcases/substrate/events/event_decl_05.dot
  45. 0 2
      tests/contract_testcases/substrate/events/event_decl_06.dot
  46. 0 2
      tests/contract_testcases/substrate/events/event_decl_07.dot
  47. 0 2
      tests/contract_testcases/substrate/events/event_decl_09.dot
  48. 0 2
      tests/contract_testcases/substrate/function_types/decls_04.dot
  49. 0 2
      tests/contract_testcases/substrate/function_types/decls_05.dot
  50. 0 4
      tests/contract_testcases/substrate/functions/args_and_returns.dot
  51. 0 6
      tests/contract_testcases/substrate/functions/args_and_returns_01.dot
  52. 0 2
      tests/contract_testcases/substrate/functions/mutability_03.dot
  53. 0 2
      tests/contract_testcases/substrate/functions/payable.dot
  54. 0 2
      tests/contract_testcases/substrate/functions/payable_01.dot
  55. 0 2
      tests/contract_testcases/substrate/functions/payable_02.dot
  56. 0 2
      tests/contract_testcases/substrate/functions/payable_03.dot
  57. 2 4
      tests/contract_testcases/substrate/inheritance/base_contract_01.dot
  58. 2 4
      tests/contract_testcases/substrate/inheritance/base_contract_on_constructor_07.dot
  59. 0 2
      tests/contract_testcases/substrate/inheritance/inherit_types_05.dot
  60. 0 2
      tests/contract_testcases/substrate/inheritance/inherit_variables_01.dot
  61. 0 2
      tests/contract_testcases/substrate/inheritance/test_override_08.dot
  62. 0 2
      tests/contract_testcases/substrate/libraries/using_06.dot
  63. 0 2
      tests/contract_testcases/substrate/mappings/bad_mapping_declares_03.dot
  64. 0 2
      tests/contract_testcases/substrate/modifier/function_modifier_02.dot
  65. 0 2
      tests/contract_testcases/substrate/modifier/mutability.dot
  66. 0 2
      tests/contract_testcases/substrate/primitives/address.dot
  67. 0 2
      tests/contract_testcases/substrate/primitives/address_01.dot
  68. 0 2
      tests/contract_testcases/substrate/primitives/address_02.dot
  69. 0 2
      tests/contract_testcases/substrate/primitives/address_03.dot
  70. 0 2
      tests/contract_testcases/substrate/primitives/address_04.dot
  71. 0 2
      tests/contract_testcases/substrate/primitives/address_09.dot
  72. 0 2
      tests/contract_testcases/substrate/primitives/test_literal_overflow.dot
  73. 0 2
      tests/contract_testcases/substrate/primitives/test_literal_overflow_01.dot
  74. 0 2
      tests/contract_testcases/substrate/primitives/test_literal_overflow_02.dot
  75. 0 2
      tests/contract_testcases/substrate/primitives/test_literal_overflow_03.dot
  76. 0 2
      tests/contract_testcases/substrate/primitives/test_literal_overflow_07.dot
  77. 0 2
      tests/contract_testcases/substrate/primitives/test_literal_overflow_08.dot
  78. 0 2
      tests/contract_testcases/substrate/primitives/test_literal_overflow_09.dot
  79. 0 2
      tests/contract_testcases/substrate/primitives/test_literal_overflow_10.dot
  80. 0 2
      tests/contract_testcases/substrate/strings/string_escape.dot
  81. 0 2
      tests/contract_testcases/substrate/strings/string_escape_01.dot
  82. 0 2
      tests/contract_testcases/substrate/strings/string_escape_02.dot
  83. 0 2
      tests/contract_testcases/substrate/strings/string_escape_03.dot
  84. 0 2
      tests/contract_testcases/substrate/strings/string_escape_04.dot
  85. 0 2
      tests/contract_testcases/substrate/strings/string_escape_05.dot
  86. 0 2
      tests/contract_testcases/substrate/tags/event_tag.dot
  87. 0 2
      tests/contract_testcases/substrate/tags/event_tag_01.dot
  88. 0 2
      tests/contract_testcases/substrate/tags/event_tag_02.dot
  89. 0 2
      tests/contract_testcases/substrate/tags/functions_01.dot
  90. 0 2
      tests/contract_testcases/substrate/tags/functions_02.dot
  91. 0 4
      tests/contract_testcases/substrate/tags/functions_05.dot
  92. 0 4
      tests/contract_testcases/substrate/tags/functions_06.dot
  93. 0 4
      tests/contract_testcases/substrate/tags/functions_07.dot
  94. 0 4
      tests/contract_testcases/substrate/tags/functions_08.dot
  95. 0 2
      tests/contract_testcases/substrate/tags/variables.dot
  96. 0 6
      tests/contract_testcases/substrate/value/external_call_value.dot
  97. 0 6
      tests/contract_testcases/substrate/value/external_call_value_01.dot
  98. 0 6
      tests/contract_testcases/substrate/value/external_call_value_02.dot
  99. 0 6
      tests/contract_testcases/substrate/value/external_call_value_03.dot
  100. 0 6
      tests/contract_testcases/substrate/value/external_call_value_04.dot

+ 5 - 5
src/bin/solang.rs

@@ -283,12 +283,12 @@ fn main() {
         for filename in matches.values_of_os("INPUT").unwrap() {
             let ns = solang::parse_and_resolve(filename, &mut resolver, target);
 
-            diagnostics::print_diagnostics(&resolver, &ns, verbose);
+            ns.print_diagnostics(&resolver, verbose);
 
             if ns.contracts.is_empty() {
                 eprintln!("{}: error: no contracts found", filename.to_string_lossy());
                 success = false;
-            } else if diagnostics::any_errors(&ns.diagnostics) {
+            } else if ns.diagnostics.any_errors() {
                 success = false;
             } else {
                 files.push(ns);
@@ -449,10 +449,10 @@ fn process_file(
     codegen(&mut ns, opt);
 
     if matches.is_present("STD-JSON") {
-        let mut out = diagnostics::diagnostics_as_json(&ns, resolver);
+        let mut out = ns.diagnostics_as_json(resolver);
         json.errors.append(&mut out);
     } else {
-        diagnostics::print_diagnostics(resolver, &ns, verbose);
+        ns.print_diagnostics(resolver, verbose);
     }
 
     if let Some("ast-dot") = matches.value_of("EMIT") {
@@ -476,7 +476,7 @@ fn process_file(
         return Ok(ns);
     }
 
-    if ns.contracts.is_empty() || diagnostics::any_errors(&ns.diagnostics) {
+    if ns.contracts.is_empty() || ns.diagnostics.any_errors() {
         return Err(());
     }
 

+ 3 - 4
src/codegen/mod.rs

@@ -24,7 +24,6 @@ use self::{
 use crate::emit::Generate;
 use crate::sema::ast::{Layout, Namespace};
 use crate::sema::contracts::visit_bases;
-use crate::sema::diagnostics::any_errors;
 use crate::{ast, Target};
 use std::cmp::Ordering;
 
@@ -100,7 +99,7 @@ impl Default for Options {
 /// The contracts are fully resolved but they do not have any CFGs which is needed for
 /// the llvm code emitter. This will also do additional code checks.
 pub fn codegen(ns: &mut Namespace, opt: &Options) {
-    if any_errors(&ns.diagnostics) {
+    if ns.diagnostics.any_errors() {
         return;
     }
 
@@ -131,7 +130,7 @@ pub fn codegen(ns: &mut Namespace, opt: &Options) {
 
             contract(contract_no, ns, opt);
 
-            if any_errors(&ns.diagnostics) {
+            if ns.diagnostics.any_errors() {
                 return;
             }
 
@@ -167,7 +166,7 @@ pub fn codegen(ns: &mut Namespace, opt: &Options) {
 }
 
 fn contract(contract_no: usize, ns: &mut Namespace, opt: &Options) {
-    if !any_errors(&ns.diagnostics) && ns.contracts[contract_no].is_concrete() {
+    if !ns.diagnostics.any_errors() && ns.contracts[contract_no].is_concrete() {
         layout(contract_no, ns);
 
         let mut cfg_no = 0;

+ 1 - 1
src/lib.rs

@@ -119,7 +119,7 @@ pub fn compile(
 ) -> (Vec<(Vec<u8>, String)>, ast::Namespace) {
     let mut ns = parse_and_resolve(filename, resolver, target);
 
-    if diagnostics::any_errors(&ns.diagnostics) {
+    if ns.diagnostics.any_errors() {
         return (Vec::new(), ns);
     }
 

+ 2 - 1
src/sema/ast.rs

@@ -1,5 +1,6 @@
 use super::symtable::Symtable;
 use crate::codegen::cfg::ControlFlowGraph;
+use crate::diagnostics::Diagnostics;
 pub use crate::parser::diagnostics::*;
 use crate::parser::pt;
 use crate::parser::pt::{CodeLocation, OptionalCodeLocation};
@@ -449,7 +450,7 @@ pub struct Namespace {
     pub address_length: usize,
     /// value length in bytes
     pub value_length: usize,
-    pub diagnostics: Vec<Diagnostic>,
+    pub diagnostics: Diagnostics,
     /// There is a separate namespace for functions and non-functions
     pub function_symbols: HashMap<(usize, Option<usize>, String), Symbol>,
     /// Symbol key is file_no, contract, identifier

+ 2 - 2
src/sema/contracts.rs

@@ -903,7 +903,7 @@ fn resolve_bodies(
             .is_err()
         {
             broken = true;
-        } else {
+        } else if !ns.diagnostics.any_errors() {
             for variable in ns.functions[function_no].symtable.vars.values() {
                 if let Some(warning) = emit_warning_local_variable(variable) {
                     ns.diagnostics.push(warning);
@@ -1074,7 +1074,7 @@ fn check_base_args(contract_no: usize, ns: &mut ast::Namespace) {
         }
     }
 
-    ns.diagnostics.extend(diagnostics.into_iter());
+    ns.diagnostics.extend(diagnostics.into_iter().collect());
 }
 
 /// Compare two visibility levels

+ 186 - 79
src/sema/diagnostics.rs

@@ -2,51 +2,117 @@ use super::ast::{Diagnostic, Level, Namespace};
 use crate::file_resolver::FileResolver;
 use crate::parser::pt::Loc;
 use codespan_reporting::{diagnostic, files, term};
+use itertools::Itertools;
 use serde::Serialize;
+use std::slice::Iter;
 use std::{io, sync::Arc};
 
-/// Print the diagnostics to stderr with fancy formatting
-pub fn print_diagnostics(cache: &FileResolver, ns: &Namespace, debug: bool) {
-    let (files, file_id) = convert_files(ns, cache);
+#[derive(Default)]
+pub struct Diagnostics {
+    contents: Vec<Diagnostic>,
+    has_error: bool,
+}
 
-    let writer = term::termcolor::StandardStream::stderr(term::termcolor::ColorChoice::Always);
-    let config = term::Config::default();
+impl Diagnostics {
+    pub fn any_errors(&self) -> bool {
+        self.has_error
+    }
 
-    for msg in &ns.diagnostics {
-        if msg.level == Level::Debug && !debug {
-            continue;
+    pub fn len(&self) -> usize {
+        self.contents.len()
+    }
+
+    pub fn iter(&self) -> Iter<Diagnostic> {
+        self.contents.iter()
+    }
+
+    pub fn is_empty(&self) -> bool {
+        self.contents.is_empty()
+    }
+
+    pub fn push(&mut self, diagnostic: Diagnostic) {
+        if matches!(diagnostic.level, Level::Error) {
+            self.has_error = true;
         }
+        self.contents.push(diagnostic);
+    }
 
-        let diagnostic = convert_diagnostic(msg, &file_id);
+    pub fn extend(&mut self, diagnostics: Vec<Diagnostic>) {
+        if !self.has_error {
+            self.has_error = diagnostics.iter().any(|m| m.level == Level::Error);
+        }
+        self.contents.extend(diagnostics);
+    }
 
-        term::emit(&mut writer.lock(), &config, &files, &diagnostic).unwrap();
+    pub fn append(&mut self, diagnostics: &mut Vec<Diagnostic>) {
+        if !self.has_error {
+            self.has_error = diagnostics.iter().any(|m| m.level == Level::Error);
+        }
+        self.contents.append(diagnostics);
     }
-}
 
-/// Print the diagnostics to stdout with plain formatting
-pub fn print_diagnostics_plain(cache: &FileResolver, ns: &Namespace, debug: bool) {
-    let (files, file_id) = convert_files(ns, cache);
+    pub fn first_error(&self) -> String {
+        match self.contents.iter().find(|m| m.level == Level::Error) {
+            Some(m) => m.message.to_owned(),
+            None => panic!("no errors found"),
+        }
+    }
 
-    let config = term::Config::default();
+    pub fn count_warnings(&self) -> usize {
+        self.contents
+            .iter()
+            .filter(|&x| x.level == Level::Warning)
+            .count()
+    }
 
-    for msg in &ns.diagnostics {
-        if msg.level == Level::Debug && !debug {
-            continue;
+    pub fn first_warning(&self) -> &Diagnostic {
+        self.contents
+            .iter()
+            .find_or_first(|&x| x.level == Level::Warning)
+            .unwrap()
+    }
+
+    pub fn warnings(&self) -> Vec<&Diagnostic> {
+        let mut res = Vec::new();
+        for elem in &self.contents {
+            if elem.level == Level::Warning {
+                res.push(elem);
+            }
         }
 
-        let diagnostic = convert_diagnostic(msg, &file_id);
+        res
+    }
 
-        let mut buffer = RawBuffer::new();
+    pub fn errors(&self) -> Vec<&Diagnostic> {
+        let mut vec = Vec::new();
+        for diag in &self.contents {
+            if matches!(diag.level, Level::Error) {
+                vec.push(diag);
+            }
+        }
+        vec
+    }
 
-        term::emit(&mut buffer, &config, &files, &diagnostic).unwrap();
+    pub fn warning_contains(&self, message: &str) -> bool {
+        let warnings = self.warnings();
+        for warning in warnings {
+            if warning.message == message {
+                return true;
+            }
+        }
 
-        println!("{}", buffer.into_string());
+        false
     }
-}
 
-/// Do we have any errors
-pub fn any_errors(diagnotic: &[Diagnostic]) -> bool {
-    diagnotic.iter().any(|m| m.level == Level::Error)
+    pub fn contains_message(&self, message: &str) -> bool {
+        for item in &self.contents {
+            if item.message == message {
+                return true;
+            }
+        }
+
+        false
+    }
 }
 
 fn convert_diagnostic(msg: &Diagnostic, file_id: &[usize]) -> diagnostic::Diagnostic<usize> {
@@ -82,19 +148,103 @@ fn convert_diagnostic(msg: &Diagnostic, file_id: &[usize]) -> diagnostic::Diagno
     }
 }
 
-fn convert_files(
-    ns: &Namespace,
-    cache: &FileResolver,
-) -> (files::SimpleFiles<String, Arc<str>>, Vec<usize>) {
-    let mut files = files::SimpleFiles::new();
-    let mut file_id = Vec::new();
+impl Namespace {
+    /// Print the diagnostics to stdout with plain formatting
+    pub fn print_diagnostics_in_plain(&self, cache: &FileResolver, debug: bool) {
+        let (files, file_id) = self.convert_files(cache);
+
+        let config = term::Config::default();
+
+        for msg in self.diagnostics.iter() {
+            if msg.level == Level::Debug && !debug {
+                continue;
+            }
+
+            let diagnostic = convert_diagnostic(msg, &file_id);
+
+            let mut buffer = RawBuffer::new();
+
+            term::emit(&mut buffer, &config, &files, &diagnostic).unwrap();
 
-    for file in &ns.files {
-        let (contents, _) = cache.get_file_contents_and_number(&file.path);
-        file_id.push(files.add(format!("{}", file), contents.to_owned()));
+            println!("{}", buffer.into_string());
+        }
     }
 
-    (files, file_id)
+    /// Print the diagnostics to stderr with fancy formatting
+    pub fn print_diagnostics(&self, cache: &FileResolver, debug: bool) {
+        let (files, file_id) = self.convert_files(cache);
+
+        let writer = term::termcolor::StandardStream::stderr(term::termcolor::ColorChoice::Always);
+        let config = term::Config::default();
+
+        for msg in self.diagnostics.iter() {
+            if msg.level == Level::Debug && !debug {
+                continue;
+            }
+
+            let diagnostic = convert_diagnostic(msg, &file_id);
+
+            term::emit(&mut writer.lock(), &config, &files, &diagnostic).unwrap();
+        }
+    }
+
+    pub fn diagnostics_as_json(&self, cache: &FileResolver) -> Vec<OutputJson> {
+        let (files, file_id) = self.convert_files(cache);
+        let mut json = Vec::new();
+
+        let config = term::Config {
+            display_style: term::DisplayStyle::Short,
+            ..Default::default()
+        };
+
+        for msg in self.diagnostics.iter() {
+            if msg.level == Level::Info || msg.level == Level::Debug {
+                continue;
+            }
+
+            let diagnostic = convert_diagnostic(msg, &file_id);
+
+            let mut buffer = RawBuffer::new();
+
+            term::emit(&mut buffer, &config, &files, &diagnostic).unwrap();
+
+            let location = if let Loc::File(file_no, start, end) = msg.pos {
+                Some(LocJson {
+                    file: format!("{}", self.files[file_no]),
+                    start: start + 1,
+                    end: end + 1,
+                })
+            } else {
+                None
+            };
+
+            json.push(OutputJson {
+                sourceLocation: location,
+                ty: format!("{:?}", msg.ty),
+                component: "general".to_owned(),
+                severity: msg.level.to_string().to_owned(),
+                message: msg.message.to_owned(),
+                formattedMessage: buffer.into_string(),
+            });
+        }
+
+        json
+    }
+
+    fn convert_files(
+        &self,
+        cache: &FileResolver,
+    ) -> (files::SimpleFiles<String, Arc<str>>, Vec<usize>) {
+        let mut files = files::SimpleFiles::new();
+        let mut file_id = Vec::new();
+
+        for file in &self.files {
+            let (contents, _) = cache.get_file_contents_and_number(&file.path);
+            file_id.push(files.add(format!("{}", file), contents.to_owned()));
+        }
+
+        (files, file_id)
+    }
 }
 
 #[derive(Serialize)]
@@ -116,49 +266,6 @@ pub struct OutputJson {
     pub formattedMessage: String,
 }
 
-pub fn diagnostics_as_json(ns: &Namespace, cache: &FileResolver) -> Vec<OutputJson> {
-    let (files, file_id) = convert_files(ns, cache);
-    let mut json = Vec::new();
-
-    let config = term::Config {
-        display_style: term::DisplayStyle::Short,
-        ..Default::default()
-    };
-
-    for msg in &ns.diagnostics {
-        if msg.level == Level::Info || msg.level == Level::Debug {
-            continue;
-        }
-
-        let diagnostic = convert_diagnostic(msg, &file_id);
-
-        let mut buffer = RawBuffer::new();
-
-        term::emit(&mut buffer, &config, &files, &diagnostic).unwrap();
-
-        let location = if let Loc::File(file_no, start, end) = msg.pos {
-            Some(LocJson {
-                file: format!("{}", ns.files[file_no]),
-                start: start + 1,
-                end: end + 1,
-            })
-        } else {
-            None
-        };
-
-        json.push(OutputJson {
-            sourceLocation: location,
-            ty: format!("{:?}", msg.ty),
-            component: "general".to_owned(),
-            severity: msg.level.to_string().to_owned(),
-            message: msg.message.to_owned(),
-            formattedMessage: buffer.into_string(),
-        });
-    }
-
-    json
-}
-
 pub struct RawBuffer {
     buf: Vec<u8>,
 }

+ 1 - 1
src/sema/dotgraphviz.rs

@@ -2266,7 +2266,7 @@ impl Namespace {
         if !self.diagnostics.is_empty() {
             let diagnostics = dot.add_node(Node::new("diagnostics", Vec::new()), None, None);
 
-            for diag in &self.diagnostics {
+            for diag in self.diagnostics.iter() {
                 let mut labels = vec![diag.message.to_string(), format!("level {:?}", diag.level)];
 
                 labels.push(self.loc_to_string(&diag.pos));

+ 9 - 6
src/sema/mod.rs

@@ -1,3 +1,4 @@
+use crate::diagnostics::Diagnostics;
 use crate::parser::{parse, pt};
 use crate::sema::ast::RetrieveType;
 use crate::Target;
@@ -50,9 +51,11 @@ pub const SOLANA_SPARSE_ARRAY_SIZE: u64 = 1024;
 pub fn sema(file: &ResolvedFile, resolver: &mut FileResolver, ns: &mut ast::Namespace) {
     sema_file(file, resolver, ns);
 
-    // Checks for unused variables
-    check_unused_namespace_variables(ns);
-    check_unused_events(ns);
+    if !ns.diagnostics.any_errors() {
+        // Checks for unused variables
+        check_unused_namespace_variables(ns);
+        check_unused_events(ns);
+    }
 }
 
 /// Parse and resolve a file and its imports in a recursive manner.
@@ -114,7 +117,7 @@ fn sema_file(file: &ResolvedFile, resolver: &mut FileResolver, ns: &mut ast::Nam
     types::resolve_fields(fields, file_no, ns);
 
     // give up if we failed
-    if diagnostics::any_errors(&ns.diagnostics) {
+    if ns.diagnostics.any_errors() {
         return;
     }
 
@@ -192,7 +195,7 @@ fn resolve_import(
                 sema_file(&file, resolver, ns);
 
                 // give up if we failed
-                if diagnostics::any_errors(&ns.diagnostics) {
+                if ns.diagnostics.any_errors() {
                     return;
                 }
             }
@@ -341,7 +344,7 @@ impl ast::Namespace {
             value_length,
             variable_symbols: HashMap::new(),
             function_symbols: HashMap::new(),
-            diagnostics: Vec::new(),
+            diagnostics: Diagnostics::default(),
             next_id: 0,
             var_constants: HashMap::new(),
             hover_overrides: HashMap::new(),

+ 1 - 2
src/sema/mutability.rs

@@ -2,7 +2,6 @@ use super::ast::{
     Builtin, DestructureField, Diagnostic, Expression, Function, Mutability, Namespace, Statement,
     Type,
 };
-use super::diagnostics;
 use crate::parser::pt;
 use crate::sema::ast::RetrieveType;
 use crate::sema::yul::ast::{YulExpression, YulStatement};
@@ -10,7 +9,7 @@ use crate::sema::Recurse;
 
 /// check state mutability
 pub fn mutability(file_no: usize, ns: &mut Namespace) {
-    if !diagnostics::any_errors(&ns.diagnostics) {
+    if !ns.diagnostics.any_errors() {
         for func in &ns.functions {
             if func.loc.file_no() != file_no {
                 continue;

+ 1 - 2
src/sema/types.rs

@@ -1,4 +1,3 @@
-use super::diagnostics::any_errors;
 use super::tags::resolve_tags;
 use super::SOLANA_BUCKET_SIZE;
 use super::{
@@ -207,7 +206,7 @@ pub fn resolve_fields(delay: ResolveFields, file_no: usize, ns: &mut Namespace)
     }
 
     // Do not attempt to call struct offsets if there are any infinitely recursive structs
-    if !any_errors(&ns.diagnostics) {
+    if !ns.diagnostics.any_errors() {
         struct_offsets(ns);
     }
 

+ 0 - 1
src/sema/variables.rs

@@ -245,7 +245,6 @@ pub fn variable_decl<'a>(
                 lvalue: false,
                 yul_function: false,
             };
-
             match expression(
                 initializer,
                 &context,

+ 4 - 6
src/sema/yul/expression.rs

@@ -63,12 +63,10 @@ pub(crate) fn resolve_yul_expression(
         }
 
         pt::YulExpression::StringLiteral(value, ty) => {
-            let unescaped_string = unescape(
-                &value.string[..],
-                0,
-                value.loc.file_no(),
-                &mut ns.diagnostics,
-            );
+            let mut diagnostics: Vec<Diagnostic> = Vec::new();
+            let unescaped_string =
+                unescape(&value.string[..], 0, value.loc.file_no(), &mut diagnostics);
+            ns.diagnostics.append(&mut diagnostics);
             resolve_string_literal(&value.loc, unescaped_string, ty, ns)
         }
 

+ 48 - 77
src/sema/yul/tests/block.rs

@@ -1,4 +1,4 @@
-use crate::sema::yul::tests::{assert_message_in_diagnostics, parse};
+use crate::sema::yul::tests::parse;
 
 #[test]
 fn unreachable_leave() {
@@ -20,10 +20,7 @@ fn unreachable_leave() {
     "#;
 
     let ns = parse(file);
-    assert!(assert_message_in_diagnostics(
-        &ns.diagnostics,
-        "unreachable yul statement"
-    ));
+    assert!(ns.diagnostics.contains_message("unreachable yul statement"));
 
     let file = r#"
 contract testTypes {
@@ -45,18 +42,15 @@ contract testTypes {
     "#;
     let ns = parse(file);
     assert_eq!(ns.diagnostics.len(), 3);
-    assert!(assert_message_in_diagnostics(
-        &ns.diagnostics,
-        "found contract ‘testTypes’"
-    ));
-    assert!(assert_message_in_diagnostics(
-        &ns.diagnostics,
-        "inline assembly is not yet supported"
-    ));
-    assert!(assert_message_in_diagnostics(
-        &ns.diagnostics,
-        "yul function has never been used"
-    ));
+    assert!(ns
+        .diagnostics
+        .contains_message("found contract ‘testTypes’"));
+    assert!(ns
+        .diagnostics
+        .contains_message("inline assembly is not yet supported"));
+    assert!(ns
+        .diagnostics
+        .contains_message("yul function has never been used"));
 }
 
 #[test]
@@ -81,10 +75,7 @@ contract testTypes {
 }
     "#;
     let ns = parse(file);
-    assert!(assert_message_in_diagnostics(
-        &ns.diagnostics,
-        "unreachable yul statement"
-    ));
+    assert!(ns.diagnostics.contains_message("unreachable yul statement"));
 
     let file = r#"
     contract testTypes {
@@ -107,14 +98,12 @@ contract testTypes {
     "#;
     let ns = parse(file);
     assert_eq!(ns.diagnostics.len(), 2);
-    assert!(assert_message_in_diagnostics(
-        &ns.diagnostics,
-        "found contract ‘testTypes’"
-    ));
-    assert!(assert_message_in_diagnostics(
-        &ns.diagnostics,
-        "inline assembly is not yet supported"
-    ));
+    assert!(ns
+        .diagnostics
+        .contains_message("found contract ‘testTypes’"));
+    assert!(ns
+        .diagnostics
+        .contains_message("inline assembly is not yet supported"));
 }
 
 #[test]
@@ -139,10 +128,7 @@ contract testTypes {
 }
     "#;
     let ns = parse(file);
-    assert!(assert_message_in_diagnostics(
-        &ns.diagnostics,
-        "unreachable yul statement"
-    ));
+    assert!(ns.diagnostics.contains_message("unreachable yul statement"));
 
     let file = r#"
     contract testTypes {
@@ -165,14 +151,12 @@ contract testTypes {
     "#;
     let ns = parse(file);
     assert_eq!(ns.diagnostics.len(), 2);
-    assert!(assert_message_in_diagnostics(
-        &ns.diagnostics,
-        "found contract ‘testTypes’"
-    ));
-    assert!(assert_message_in_diagnostics(
-        &ns.diagnostics,
-        "inline assembly is not yet supported"
-    ));
+    assert!(ns
+        .diagnostics
+        .contains_message("found contract ‘testTypes’"));
+    assert!(ns
+        .diagnostics
+        .contains_message("inline assembly is not yet supported"));
 }
 
 #[test]
@@ -209,10 +193,7 @@ contract testTypes {
     "#;
 
     let ns = parse(file);
-    assert!(assert_message_in_diagnostics(
-        &ns.diagnostics,
-        "unreachable yul statement"
-    ));
+    assert!(ns.diagnostics.contains_message("unreachable yul statement"));
 
     let file = r#"
 contract testTypes {
@@ -236,14 +217,12 @@ contract testTypes {
 }    "#;
     let ns = parse(file);
     assert_eq!(ns.diagnostics.len(), 2);
-    assert!(assert_message_in_diagnostics(
-        &ns.diagnostics,
-        "found contract ‘testTypes’"
-    ));
-    assert!(assert_message_in_diagnostics(
-        &ns.diagnostics,
-        "inline assembly is not yet supported"
-    ));
+    assert!(ns
+        .diagnostics
+        .contains_message("found contract ‘testTypes’"));
+    assert!(ns
+        .diagnostics
+        .contains_message("inline assembly is not yet supported"));
 
     let file = r#"
     contract testTypes {
@@ -267,14 +246,12 @@ contract testTypes {
 
     let ns = parse(file);
     assert_eq!(ns.diagnostics.len(), 2);
-    assert!(assert_message_in_diagnostics(
-        &ns.diagnostics,
-        "found contract ‘testTypes’"
-    ));
-    assert!(assert_message_in_diagnostics(
-        &ns.diagnostics,
-        "inline assembly is not yet supported"
-    ));
+    assert!(ns
+        .diagnostics
+        .contains_message("found contract ‘testTypes’"));
+    assert!(ns
+        .diagnostics
+        .contains_message("inline assembly is not yet supported"));
 }
 
 #[test]
@@ -318,20 +295,14 @@ contract testTypes {
 
     let ns = parse(file);
     assert_eq!(ns.diagnostics.len(), 4);
-    assert!(assert_message_in_diagnostics(
-        &ns.diagnostics,
-        "found contract ‘testTypes’"
-    ));
-    assert!(assert_message_in_diagnostics(
-        &ns.diagnostics,
-        "inline assembly is not yet supported"
-    ));
-    assert!(assert_message_in_diagnostics(
-        &ns.diagnostics,
-        "unreachable yul statement"
-    ));
-    assert!(assert_message_in_diagnostics(
-        &ns.diagnostics,
-        "yul variable ‘x‘ has never been read"
-    ));
+    assert!(ns
+        .diagnostics
+        .contains_message("found contract ‘testTypes’"));
+    assert!(ns
+        .diagnostics
+        .contains_message("inline assembly is not yet supported"));
+    assert!(ns.diagnostics.contains_message("unreachable yul statement"));
+    assert!(ns
+        .diagnostics
+        .contains_message("yul variable ‘x‘ has never been read"));
 }

+ 125 - 171
src/sema/yul/tests/expression.rs

@@ -1,13 +1,14 @@
 #![cfg(test)]
 
 use crate::ast::{Namespace, Parameter, Symbol, Type, Variable};
+use crate::diagnostics::Diagnostics;
 use crate::sema::expression::ExprContext;
 use crate::sema::symtable::{Symtable, VariableInitializer, VariableUsage};
 use crate::sema::yul::ast::{YulExpression, YulSuffix};
 use crate::sema::yul::builtin::YulBuiltInFunction;
 use crate::sema::yul::expression::{check_type, resolve_yul_expression};
 use crate::sema::yul::functions::FunctionsTable;
-use crate::sema::yul::tests::{assert_message_in_diagnostics, parse};
+use crate::sema::yul::tests::parse;
 use crate::{ast, Target};
 use num_bigint::BigInt;
 use num_traits::FromPrimitive;
@@ -93,11 +94,11 @@ fn resolve_number_literal() {
     assert!(parsed.is_ok());
     assert_eq!(ns.diagnostics.len(), 1);
     assert_eq!(
-        ns.diagnostics[0].message,
+        ns.diagnostics.iter().next().unwrap().message,
         "the provided literal requires 72 bits, but the type only supports 64"
     );
 
-    ns.diagnostics.clear();
+    ns.diagnostics = Diagnostics::default();
     let expr = pt::YulExpression::NumberLiteral(
         loc,
         BigInt::from_i32(-50).unwrap(),
@@ -110,11 +111,11 @@ fn resolve_number_literal() {
     assert!(parsed.is_err());
     assert_eq!(ns.diagnostics.len(), 1);
     assert_eq!(
-        ns.diagnostics[0].message,
+        ns.diagnostics.iter().next().unwrap().message,
         "signed integer cannot fit in unsigned integer"
     );
 
-    ns.diagnostics.clear();
+    ns.diagnostics = Diagnostics::default();
     let expr = pt::YulExpression::NumberLiteral(loc, BigInt::from(20), None);
     let parsed = resolve_yul_expression(&expr, &ctx, &mut symtable, &mut function_table, &mut ns);
     assert!(parsed.is_ok());
@@ -154,11 +155,11 @@ fn resolve_hex_number_literal() {
     assert!(resolved.is_ok());
     assert_eq!(ns.diagnostics.len(), 1);
     assert_eq!(
-        ns.diagnostics[0].message,
+        ns.diagnostics.iter().next().unwrap().message,
         "the provided literal requires 40 bits, but the type only supports 32"
     );
 
-    ns.diagnostics.clear();
+    ns.diagnostics = Diagnostics::default();
     let expr = pt::YulExpression::HexNumberLiteral(
         loc,
         "0xff".to_string(),
@@ -204,11 +205,11 @@ fn resolve_hex_string_literal() {
     assert!(resolved.is_err());
     assert_eq!(ns.diagnostics.len(), 1);
     assert_eq!(
-        ns.diagnostics[0].message,
+        ns.diagnostics.iter().next().unwrap().message,
         "hex string \"3ca\" has odd number of characters"
     );
 
-    ns.diagnostics.clear();
+    ns.diagnostics = Diagnostics::default();
     let expr = pt::YulExpression::HexStringLiteral(
         HexLiteral {
             loc,
@@ -223,11 +224,11 @@ fn resolve_hex_string_literal() {
     assert!(resolved.is_err());
     assert_eq!(ns.diagnostics.len(), 1);
     assert_eq!(
-        ns.diagnostics[0].message,
+        ns.diagnostics.iter().next().unwrap().message,
         "the specified type 'myType' does not exist"
     );
 
-    ns.diagnostics.clear();
+    ns.diagnostics = Diagnostics::default();
     let expr = pt::YulExpression::HexStringLiteral(
         HexLiteral {
             loc,
@@ -490,11 +491,11 @@ fn resolve_variable_contract() {
     assert!(res.is_err());
     assert_eq!(ns.diagnostics.len(), 1);
     assert_eq!(
-        ns.diagnostics[0].message,
+        ns.diagnostics.iter().next().unwrap().message,
         "only variables can be accessed inside assembly blocks"
     );
 
-    ns.diagnostics.clear();
+    ns.diagnostics = Diagnostics::default();
     let expr = pt::YulExpression::Variable(Identifier {
         loc,
         name: "none".to_string(),
@@ -502,9 +503,12 @@ fn resolve_variable_contract() {
     let res = resolve_yul_expression(&expr, &context, &mut symtable, &mut function_table, &mut ns);
     assert!(res.is_err());
     assert_eq!(ns.diagnostics.len(), 1);
-    assert_eq!(ns.diagnostics[0].message, "'none' is not found");
+    assert_eq!(
+        ns.diagnostics.iter().next().unwrap().message,
+        "'none' is not found"
+    );
 
-    ns.diagnostics.clear();
+    ns.diagnostics = Diagnostics::default();
     let expr = pt::YulExpression::Variable(Identifier {
         loc,
         name: "imut".to_string(),
@@ -513,7 +517,7 @@ fn resolve_variable_contract() {
     assert!(res.is_err());
     assert_eq!(ns.diagnostics.len(), 1);
     assert_eq!(
-        ns.diagnostics[0].message,
+        ns.diagnostics.iter().next().unwrap().message,
         "assembly access to immutable variables is not supported"
     );
 }
@@ -547,10 +551,10 @@ fn function_call() {
     assert!(res.is_err());
     assert_eq!(ns.diagnostics.len(), 1);
     assert_eq!(
-        ns.diagnostics[0].message,
+        ns.diagnostics.iter().next().unwrap().message,
         "verbatim functions are not yet supported in Solang"
     );
-    ns.diagnostics.clear();
+    ns.diagnostics = Diagnostics::default();
 
     let expr = pt::YulExpression::FunctionCall(Box::new(YulFunctionCall {
         loc,
@@ -564,10 +568,10 @@ fn function_call() {
     assert!(res.is_err());
     assert_eq!(ns.diagnostics.len(), 1);
     assert_eq!(
-        ns.diagnostics[0].message,
+        ns.diagnostics.iter().next().unwrap().message,
         "the internal EVM built-in 'linkersymbol' is not yet supported"
     );
-    ns.diagnostics.clear();
+    ns.diagnostics = Diagnostics::default();
 
     let arg = pt::YulExpression::BoolLiteral(
         Loc::File(0, 3, 5),
@@ -590,10 +594,10 @@ fn function_call() {
     assert!(res.is_err());
     assert_eq!(ns.diagnostics.len(), 1);
     assert_eq!(
-        ns.diagnostics[0].message,
+        ns.diagnostics.iter().next().unwrap().message,
         "builtin function 'add' requires 2 arguments, but 1 were provided"
     );
-    ns.diagnostics.clear();
+    ns.diagnostics = Diagnostics::default();
 
     let expr = pt::YulExpression::FunctionCall(Box::new(YulFunctionCall {
         loc,
@@ -642,10 +646,10 @@ fn function_call() {
     assert!(res.is_err());
     assert_eq!(ns.diagnostics.len(), 1);
     assert_eq!(
-        ns.diagnostics[0].message,
+        ns.diagnostics.iter().next().unwrap().message,
         "function 'myFunc' requires 0 arguments, but 1 were provided"
     );
-    ns.diagnostics.clear();
+    ns.diagnostics = Diagnostics::default();
 
     let expr = pt::YulExpression::FunctionCall(Box::new(YulFunctionCall {
         loc,
@@ -670,7 +674,10 @@ fn function_call() {
     let res = resolve_yul_expression(&expr, &context, &mut symtable, &mut function_table, &mut ns);
     assert!(res.is_err());
     assert_eq!(ns.diagnostics.len(), 1);
-    assert_eq!(ns.diagnostics[0].message, "function 'none' is not defined");
+    assert_eq!(
+        ns.diagnostics.iter().next().unwrap().message,
+        "function 'none' is not defined"
+    );
 }
 
 #[test]
@@ -754,10 +761,10 @@ fn check_arguments() {
     let _ = resolve_yul_expression(&expr, &context, &mut symtable, &mut function_table, &mut ns);
     assert!(!ns.diagnostics.is_empty());
     assert_eq!(
-        ns.diagnostics[0].message,
+        ns.diagnostics.iter().next().unwrap().message,
         "builtin function 'pop' returns nothing"
     );
-    ns.diagnostics.clear();
+    ns.diagnostics = Diagnostics::default();
 
     let expr = pt::YulExpression::FunctionCall(Box::new(YulFunctionCall {
         loc,
@@ -778,10 +785,10 @@ fn check_arguments() {
     let _ = resolve_yul_expression(&expr, &context, &mut symtable, &mut function_table, &mut ns);
     assert!(!ns.diagnostics.is_empty());
     assert_eq!(
-        ns.diagnostics[0].message,
+        ns.diagnostics.iter().next().unwrap().message,
         "function 'func1' returns nothing"
     );
-    ns.diagnostics.clear();
+    ns.diagnostics = Diagnostics::default();
 
     let expr = pt::YulExpression::FunctionCall(Box::new(YulFunctionCall {
         loc,
@@ -802,7 +809,7 @@ fn check_arguments() {
     let _ = resolve_yul_expression(&expr, &context, &mut symtable, &mut function_table, &mut ns);
     assert!(!ns.diagnostics.is_empty());
     assert_eq!(
-        ns.diagnostics[0].message,
+        ns.diagnostics.iter().next().unwrap().message,
         "function 'func2' has multiple returns and cannot be used in this scope"
     );
 }
@@ -857,10 +864,10 @@ fn test_member_access() {
     assert!(res.is_err());
     assert_eq!(ns.diagnostics.len(), 1);
     assert_eq!(
-        ns.diagnostics[0].message,
+        ns.diagnostics.iter().next().unwrap().message,
         "the provided suffix is not allowed in yul"
     );
-    ns.diagnostics.clear();
+    ns.diagnostics = Diagnostics::default();
 
     let expr = pt::YulExpression::Member(
         loc,
@@ -875,10 +882,10 @@ fn test_member_access() {
     assert!(res.is_err());
     assert_eq!(ns.diagnostics.len(), 1);
     assert_eq!(
-        ns.diagnostics[0].message,
+        ns.diagnostics.iter().next().unwrap().message,
         "the given expression does not support ‘.slot‘ suffixes"
     );
-    ns.diagnostics.clear();
+    ns.diagnostics = Diagnostics::default();
 
     let expr = pt::YulExpression::Member(
         loc,
@@ -999,10 +1006,9 @@ contract testTypes {
     "#;
 
     let ns = parse(file);
-    assert!(assert_message_in_diagnostics(
-        &ns.diagnostics,
-        "cannot assign a value to offset"
-    ));
+    assert!(ns
+        .diagnostics
+        .contains_message("cannot assign a value to offset"));
 
     let file = r#"
     contract testTypes {
@@ -1019,10 +1025,9 @@ contract testTypes {
     "#;
 
     let ns = parse(file);
-    assert!(assert_message_in_diagnostics(
-        &ns.diagnostics,
-        "cannot assign a value to length"
-    ));
+    assert!(ns
+        .diagnostics
+        .contains_message("cannot assign a value to length"));
 
     let file = r#"
 contract testTypes {
@@ -1039,8 +1044,7 @@ contract testTypes {
     "#;
 
     let ns = parse(file);
-    assert!(assert_message_in_diagnostics(
-        &ns.diagnostics,
+    assert!(ns.diagnostics.contains_message(
         r#"unrecognised token `:=', expected ")", ",", "address", "bool", "break", "byte", "case", "continue", "default", "for", "function", "if", "leave", "let", "return", "revert", "switch", "{", "}", identifier"#
     ));
 
@@ -1059,10 +1063,9 @@ contract testTypes {
     "#;
 
     let ns = parse(file);
-    assert!(assert_message_in_diagnostics(
-        &ns.diagnostics,
-        "cannot assigned a value to a constant"
-    ));
+    assert!(ns
+        .diagnostics
+        .contains_message("cannot assigned a value to a constant"));
 
     let file = r#"
 contract testTypes {
@@ -1085,10 +1088,9 @@ contract testTypes {
     "#;
 
     let ns = parse(file);
-    assert!(assert_message_in_diagnostics(
-        &ns.diagnostics,
-        "cannot assign to slot of storage variable"
-    ));
+    assert!(ns
+        .diagnostics
+        .contains_message("cannot assign to slot of storage variable"));
 
     let file = r#"
     contract testTypes {
@@ -1111,18 +1113,15 @@ contract testTypes {
     "#;
     let ns = parse(file);
     assert_eq!(ns.diagnostics.len(), 3);
-    assert!(assert_message_in_diagnostics(
-        &ns.diagnostics,
-        "found contract ‘testTypes’"
-    ));
-    assert!(assert_message_in_diagnostics(
-        &ns.diagnostics,
-        "inline assembly is not yet supported"
-    ));
-    assert!(assert_message_in_diagnostics(
-        &ns.diagnostics,
-        "function parameter ‘vl‘ has never been read"
-    ));
+    assert!(ns
+        .diagnostics
+        .contains_message("found contract ‘testTypes’"));
+    assert!(ns
+        .diagnostics
+        .contains_message("inline assembly is not yet supported"));
+    assert!(ns
+        .diagnostics
+        .contains_message("function parameter ‘vl‘ has never been read"));
 
     let file = r#"
     contract testTypes {
@@ -1144,8 +1143,7 @@ contract testTypes {
 }   "#;
 
     let ns = parse(file);
-    assert!(assert_message_in_diagnostics(
-        &ns.diagnostics,
+    assert!(ns.diagnostics.contains_message(
         "storage variables cannot be assigned any value in assembly. You may use ‘sstore()‘"
     ));
 
@@ -1168,10 +1166,9 @@ contract testTypes {
     }
 }    "#;
     let ns = parse(file);
-    assert!(assert_message_in_diagnostics(
-        &ns.diagnostics,
-        "Storage variables must be accessed with ‘.slot‘ or ‘.offset‘"
-    ));
+    assert!(ns
+        .diagnostics
+        .contains_message("Storage variables must be accessed with ‘.slot‘ or ‘.offset‘"));
 
     let file = r#"
 contract testTypes {
@@ -1186,8 +1183,7 @@ contract testTypes {
 }    "#;
 
     let ns = parse(file);
-    assert!(assert_message_in_diagnostics(
-        &ns.diagnostics,
+    assert!(ns.diagnostics.contains_message(
         "Calldata arrays must be accessed with ‘.offset‘, ‘.length‘ and the ‘calldatacopy‘ function"
     ));
 }
@@ -1213,10 +1209,9 @@ contract testTypes {
 }    "#;
 
     let ns = parse(file);
-    assert!(assert_message_in_diagnostics(
-        &ns.diagnostics,
-        "there cannot be multiple suffixes to a name"
-    ));
+    assert!(ns
+        .diagnostics
+        .contains_message("there cannot be multiple suffixes to a name"));
 
     let file = r#"
 contract testTypes {
@@ -1238,10 +1233,9 @@ contract testTypes {
     "#;
 
     let ns = parse(file);
-    assert!(assert_message_in_diagnostics(
-        &ns.diagnostics,
-        "state variables only support ‘.slot‘ and ‘.offset‘"
-    ));
+    assert!(ns
+        .diagnostics
+        .contains_message("state variables only support ‘.slot‘ and ‘.offset‘"));
 
     let file = r#"
 contract testTypes {
@@ -1266,10 +1260,9 @@ contract testTypes {
 }    "#;
 
     let ns = parse(file);
-    assert!(assert_message_in_diagnostics(
-        &ns.diagnostics,
-        "only variables of type external function pointer support suffixes"
-    ));
+    assert!(ns
+        .diagnostics
+        .contains_message("only variables of type external function pointer support suffixes"));
 
     let file = r#"
 contract testTypes {
@@ -1294,8 +1287,7 @@ contract testTypes {
 }    "#;
 
     let ns = parse(file);
-    assert!(assert_message_in_diagnostics(
-        &ns.diagnostics,
+    assert!(ns.diagnostics.contains_message(
         "variables of type function pointer only support ‘.selector‘ and ‘.address‘ suffixes"
     ));
 
@@ -1310,10 +1302,9 @@ contract testTypes {
     }
 }    "#;
     let ns = parse(file);
-    assert!(assert_message_in_diagnostics(
-        &ns.diagnostics,
-        "calldata variables only support ‘.offset‘ and ‘.length‘"
-    ));
+    assert!(ns
+        .diagnostics
+        .contains_message("calldata variables only support ‘.offset‘ and ‘.length‘"));
 
     let file = r#"
 contract testTypes {
@@ -1328,8 +1319,7 @@ contract testTypes {
 }
     "#;
     let ns = parse(file);
-    assert!(assert_message_in_diagnostics(
-        &ns.diagnostics,
+    assert!(ns.diagnostics.contains_message(
         "the suffixes .offset and .slot can only be used in non-constant storage variables"
     ));
 
@@ -1346,10 +1336,9 @@ contract testTypes {
 }    "#;
 
     let ns = parse(file);
-    assert!(assert_message_in_diagnostics(
-        &ns.diagnostics,
-        "the provided suffix is not allowed in yul"
-    ));
+    assert!(ns
+        .diagnostics
+        .contains_message("the provided suffix is not allowed in yul"));
 }
 
 #[test]
@@ -1381,30 +1370,25 @@ contract testTypes {
     "#;
 
     let ns = parse(file);
-    assert!(assert_message_in_diagnostics(
-        &ns.diagnostics,
-        "32 bit unsigned integer may not fit into 32 bit signed integer"
-    ));
+    assert!(ns
+        .diagnostics
+        .contains_message("32 bit unsigned integer may not fit into 32 bit signed integer"));
 
-    assert!(assert_message_in_diagnostics(
-        &ns.diagnostics,
-        "signed integer may not be correctly represented as unsigned integer"
-    ));
+    assert!(ns
+        .diagnostics
+        .contains_message("signed integer may not be correctly represented as unsigned integer"));
 
-    assert!(assert_message_in_diagnostics(
-        &ns.diagnostics,
-        "256 bit type may not fit into 128 bit type"
-    ));
+    assert!(ns
+        .diagnostics
+        .contains_message("256 bit type may not fit into 128 bit type"));
 
-    assert!(assert_message_in_diagnostics(
-        &ns.diagnostics,
-        "256 bit type may not fit into 128 bit type"
-    ));
+    assert!(ns
+        .diagnostics
+        .contains_message("256 bit type may not fit into 128 bit type"));
 
-    assert!(assert_message_in_diagnostics(
-        &ns.diagnostics,
-        "Truncating argument to bool"
-    ));
+    assert!(ns
+        .diagnostics
+        .contains_message("Truncating argument to bool"));
 }
 
 #[test]
@@ -1423,15 +1407,11 @@ contract C {
 
     let ns = parse(file);
     assert_eq!(ns.diagnostics.len(), 2);
-    assert!(assert_message_in_diagnostics(
-        &ns.diagnostics,
-        "inline assembly is not yet supported"
-    ));
+    assert!(ns
+        .diagnostics
+        .contains_message("inline assembly is not yet supported"));
 
-    assert!(assert_message_in_diagnostics(
-        &ns.diagnostics,
-        "found contract ‘C’"
-    ));
+    assert!(ns.diagnostics.contains_message("found contract ‘C’"));
 }
 
 #[test]
@@ -1452,19 +1432,11 @@ contract test {
 }
     "#;
     let ns = parse(file);
-    assert_eq!(ns.diagnostics.len(), 3);
-    assert!(assert_message_in_diagnostics(
-        &ns.diagnostics,
-        "found contract ‘test’"
-    ));
-    assert!(assert_message_in_diagnostics(
-        &ns.diagnostics,
-        "the given expression does not support ‘.slot‘ suffixes"
-    ));
-    assert!(assert_message_in_diagnostics(
-        &ns.diagnostics,
-        "yul variable ‘x‘ has never been read"
-    ));
+    assert_eq!(ns.diagnostics.len(), 2);
+    assert!(ns.diagnostics.contains_message("found contract ‘test’"));
+    assert!(ns
+        .diagnostics
+        .contains_message("the given expression does not support ‘.slot‘ suffixes"));
 
     let file = r#"
     contract test {
@@ -1482,19 +1454,11 @@ contract test {
 }
     "#;
     let ns = parse(file);
-    assert_eq!(ns.diagnostics.len(), 3);
-    assert!(assert_message_in_diagnostics(
-        &ns.diagnostics,
-        "found contract ‘test’"
-    ));
-    assert!(assert_message_in_diagnostics(
-        &ns.diagnostics,
-        "the given expression does not support ‘.slot‘ suffixes"
-    ));
-    assert!(assert_message_in_diagnostics(
-        &ns.diagnostics,
-        "yul variable ‘x‘ has never been read"
-    ));
+    assert_eq!(ns.diagnostics.len(), 2);
+    assert!(ns.diagnostics.contains_message("found contract ‘test’"));
+    assert!(ns
+        .diagnostics
+        .contains_message("the given expression does not support ‘.slot‘ suffixes"));
 
     let file = r#"
     contract test {
@@ -1510,19 +1474,11 @@ contract test {
 }
     "#;
     let ns = parse(file);
-    assert_eq!(ns.diagnostics.len(), 3);
-    assert!(assert_message_in_diagnostics(
-        &ns.diagnostics,
-        "found contract ‘test’"
-    ));
-    assert!(assert_message_in_diagnostics(
-        &ns.diagnostics,
-        "the given expression does not support ‘.offset‘ suffixes"
-    ));
-    assert!(assert_message_in_diagnostics(
-        &ns.diagnostics,
-        "yul variable ‘x‘ has never been read"
-    ));
+    assert_eq!(ns.diagnostics.len(), 2);
+    assert!(ns.diagnostics.contains_message("found contract ‘test’"));
+    assert!(ns
+        .diagnostics
+        .contains_message("the given expression does not support ‘.offset‘ suffixes"));
 }
 
 #[test]
@@ -1538,10 +1494,9 @@ contract testTypes {
     }
 }    "#;
     let ns = parse(file);
-    assert!(assert_message_in_diagnostics(
-        &ns.diagnostics,
-        "calldata variables only support ‘.offset‘ and ‘.length‘"
-    ));
+    assert!(ns
+        .diagnostics
+        .contains_message("calldata variables only support ‘.offset‘ and ‘.length‘"));
 
     let file = r#"
 contract testTypes {
@@ -1555,8 +1510,7 @@ contract testTypes {
 }  "#;
 
     let ns = parse(file);
-    assert!(assert_message_in_diagnostics(
-        &ns.diagnostics,
-        "the given expression does not support ‘.length‘ suffixes"
-    ));
+    assert!(ns
+        .diagnostics
+        .contains_message("the given expression does not support ‘.length‘ suffixes"));
 }

+ 16 - 29
src/sema/yul/tests/for_loop.rs

@@ -1,6 +1,6 @@
 #![cfg(test)]
 
-use crate::sema::yul::tests::{assert_message_in_diagnostics, parse};
+use crate::sema::yul::tests::parse;
 
 #[test]
 fn function_inside_init() {
@@ -30,10 +30,9 @@ contract testTypes {
 }
     "#;
     let ns = parse(file);
-    assert!(assert_message_in_diagnostics(
-        &ns.diagnostics,
-        "function definitions are not allowed inside for-init block"
-    ));
+    assert!(ns
+        .diagnostics
+        .contains_message("function definitions are not allowed inside for-init block"));
 }
 
 #[test]
@@ -60,10 +59,7 @@ contract testTypes {
     "#;
 
     let ns = parse(file);
-    assert!(assert_message_in_diagnostics(
-        &ns.diagnostics,
-        "unreachable yul statement"
-    ));
+    assert!(ns.diagnostics.contains_message("unreachable yul statement"));
 
     let file = r#"
 contract testTypes {
@@ -87,10 +83,7 @@ contract testTypes {
     "#;
 
     let ns = parse(file);
-    assert!(assert_message_in_diagnostics(
-        &ns.diagnostics,
-        "unreachable yul statement"
-    ));
+    assert!(ns.diagnostics.contains_message("unreachable yul statement"));
 
     let file = r#"
 contract testTypes {
@@ -114,10 +107,7 @@ contract testTypes {
     "#;
 
     let ns = parse(file);
-    assert!(assert_message_in_diagnostics(
-        &ns.diagnostics,
-        "unreachable yul statement"
-    ));
+    assert!(ns.diagnostics.contains_message("unreachable yul statement"));
 
     let file = r#"
 contract testTypes {
@@ -142,16 +132,13 @@ contract testTypes {
 
     let ns = parse(file);
     assert_eq!(ns.diagnostics.len(), 3);
-    assert!(assert_message_in_diagnostics(
-        &ns.diagnostics,
-        "found contract ‘testTypes’"
-    ));
-    assert!(assert_message_in_diagnostics(
-        &ns.diagnostics,
-        "inline assembly is not yet supported"
-    ));
-    assert!(assert_message_in_diagnostics(
-        &ns.diagnostics,
-        "yul variable ‘x‘ has never been read"
-    ));
+    assert!(ns
+        .diagnostics
+        .contains_message("found contract ‘testTypes’"));
+    assert!(ns
+        .diagnostics
+        .contains_message("inline assembly is not yet supported"));
+    assert!(ns
+        .diagnostics
+        .contains_message("yul variable ‘x‘ has never been read"));
 }

+ 7 - 9
src/sema/yul/tests/functions.rs

@@ -1,4 +1,4 @@
-use crate::sema::yul::tests::{assert_message_in_diagnostics, parse};
+use crate::sema::yul::tests::parse;
 
 #[test]
 fn repeated_names() {
@@ -21,10 +21,9 @@ contract testTypes {
 }
     "#;
     let ns = parse(file);
-    assert!(assert_message_in_diagnostics(
-        &ns.diagnostics,
-        "variable name 'a' already used in this scope"
-    ));
+    assert!(ns
+        .diagnostics
+        .contains_message("variable name 'a' already used in this scope"));
 
     let file = r#"
     contract testTypes {
@@ -45,8 +44,7 @@ contract testTypes {
 }    "#;
 
     let ns = parse(file);
-    assert!(assert_message_in_diagnostics(
-        &ns.diagnostics,
-        "variable name 'b' already used in this scope"
-    ));
+    assert!(ns
+        .diagnostics
+        .contains_message("variable name 'b' already used in this scope"));
 }

+ 0 - 11
src/sema/yul/tests/mod.rs

@@ -1,7 +1,6 @@
 #![cfg(test)]
 
 use crate::{ast, parse_and_resolve, FileResolver, Target};
-use solang_parser::Diagnostic;
 use std::ffi::OsStr;
 
 mod block;
@@ -20,13 +19,3 @@ pub(crate) fn parse(src: &'static str) -> ast::Namespace {
 
     parse_and_resolve(OsStr::new("test.sol"), &mut cache, Target::Solana)
 }
-
-pub(crate) fn assert_message_in_diagnostics(diagnostics: &[Diagnostic], message: &str) -> bool {
-    for item in diagnostics {
-        if item.message == message {
-            return true;
-        }
-    }
-
-    false
-}

+ 67 - 89
src/sema/yul/tests/mutability.rs

@@ -1,4 +1,4 @@
-use crate::sema::yul::tests::{assert_message_in_diagnostics, parse};
+use crate::sema::yul::tests::parse;
 
 #[test]
 fn inside_function() {
@@ -16,10 +16,9 @@ fn inside_function() {
     }
     "#;
     let ns = parse(file);
-    assert!(assert_message_in_diagnostics(
-        &ns.diagnostics,
-        "function declared ‘pure’ but this expression reads from state"
-    ));
+    assert!(ns
+        .diagnostics
+        .contains_message("function declared ‘pure’ but this expression reads from state"));
 }
 
 #[test]
@@ -40,10 +39,9 @@ fn inside_argument() {
 }
     "#;
     let ns = parse(file);
-    assert!(assert_message_in_diagnostics(
-        &ns.diagnostics,
-        "function declared ‘pure’ but this expression reads from state"
-    ));
+    assert!(ns
+        .diagnostics
+        .contains_message("function declared ‘pure’ but this expression reads from state"));
 
     let file = r#"
     contract testTypes {
@@ -61,10 +59,9 @@ fn inside_argument() {
 }
     "#;
     let ns = parse(file);
-    assert!(assert_message_in_diagnostics(
-        &ns.diagnostics,
-        "function declared ‘pure’ but this expression reads from state"
-    ));
+    assert!(ns
+        .diagnostics
+        .contains_message("function declared ‘pure’ but this expression reads from state"));
 }
 
 #[test]
@@ -88,10 +85,9 @@ fn block() {
     "#;
 
     let ns = parse(file);
-    assert!(assert_message_in_diagnostics(
-        &ns.diagnostics,
-        "function declared ‘pure’ but this expression reads from state"
-    ));
+    assert!(ns
+        .diagnostics
+        .contains_message("function declared ‘pure’ but this expression reads from state"));
 }
 
 #[test]
@@ -112,10 +108,9 @@ fn assign_declaration() {
     "#;
 
     let ns = parse(file);
-    assert!(assert_message_in_diagnostics(
-        &ns.diagnostics,
-        "function declared ‘pure’ but this expression reads from state"
-    ));
+    assert!(ns
+        .diagnostics
+        .contains_message("function declared ‘pure’ but this expression reads from state"));
 
     let file = r#"
     contract testTypes {
@@ -133,10 +128,9 @@ fn assign_declaration() {
     "#;
 
     let ns = parse(file);
-    assert!(assert_message_in_diagnostics(
-        &ns.diagnostics,
-        "function declared ‘pure’ but this expression reads from state"
-    ));
+    assert!(ns
+        .diagnostics
+        .contains_message("function declared ‘pure’ but this expression reads from state"));
 }
 
 #[test]
@@ -155,10 +149,9 @@ fn if_block() {
 }    "#;
 
     let ns = parse(file);
-    assert!(assert_message_in_diagnostics(
-        &ns.diagnostics,
-        "function declared ‘pure’ but this expression reads from state"
-    ));
+    assert!(ns
+        .diagnostics
+        .contains_message("function declared ‘pure’ but this expression reads from state"));
 
     let file = r#"
     contract testTypes {
@@ -176,10 +169,9 @@ fn if_block() {
 }    "#;
 
     let ns = parse(file);
-    assert!(assert_message_in_diagnostics(
-        &ns.diagnostics,
-        "function declared ‘pure’ but this expression reads from state"
-    ));
+    assert!(ns
+        .diagnostics
+        .contains_message("function declared ‘pure’ but this expression reads from state"));
 }
 
 #[test]
@@ -201,10 +193,9 @@ fn switch() {
     "#;
 
     let ns = parse(file);
-    assert!(assert_message_in_diagnostics(
-        &ns.diagnostics,
-        "function declared ‘pure’ but this expression reads from state"
-    ));
+    assert!(ns
+        .diagnostics
+        .contains_message("function declared ‘pure’ but this expression reads from state"));
 
     let file = r#"
     contract testTypes {
@@ -224,10 +215,9 @@ fn switch() {
     "#;
 
     let ns = parse(file);
-    assert!(assert_message_in_diagnostics(
-        &ns.diagnostics,
-        "function declared ‘pure’ but this expression reads from state"
-    ));
+    assert!(ns
+        .diagnostics
+        .contains_message("function declared ‘pure’ but this expression reads from state"));
 
     let file = r#"
     contract testTypes {
@@ -247,10 +237,9 @@ fn switch() {
     "#;
 
     let ns = parse(file);
-    assert!(assert_message_in_diagnostics(
-        &ns.diagnostics,
-        "function declared ‘pure’ but this expression reads from state"
-    ));
+    assert!(ns
+        .diagnostics
+        .contains_message("function declared ‘pure’ but this expression reads from state"));
 }
 
 #[test]
@@ -268,10 +257,9 @@ fn test_for() {
     }
 }    "#;
     let ns = parse(file);
-    assert!(assert_message_in_diagnostics(
-        &ns.diagnostics,
-        "function declared ‘pure’ but this expression reads from state"
-    ));
+    assert!(ns
+        .diagnostics
+        .contains_message("function declared ‘pure’ but this expression reads from state"));
 
     let file = r#"
     contract testTypes {
@@ -286,10 +274,9 @@ fn test_for() {
     }
 }    "#;
     let ns = parse(file);
-    assert!(assert_message_in_diagnostics(
-        &ns.diagnostics,
-        "function declared ‘pure’ but this expression reads from state"
-    ));
+    assert!(ns
+        .diagnostics
+        .contains_message("function declared ‘pure’ but this expression reads from state"));
 
     let file = r#"
     contract testTypes {
@@ -305,10 +292,9 @@ fn test_for() {
 }
     "#;
     let ns = parse(file);
-    assert!(assert_message_in_diagnostics(
-        &ns.diagnostics,
-        "function declared ‘pure’ but this expression reads from state"
-    ));
+    assert!(ns
+        .diagnostics
+        .contains_message("function declared ‘pure’ but this expression reads from state"));
 
     let file = r#"
     contract testTypes {
@@ -323,10 +309,9 @@ fn test_for() {
     }
 }    "#;
     let ns = parse(file);
-    assert!(assert_message_in_diagnostics(
-        &ns.diagnostics,
-        "function declared ‘pure’ but this expression reads from state"
-    ));
+    assert!(ns
+        .diagnostics
+        .contains_message("function declared ‘pure’ but this expression reads from state"));
 }
 
 #[test]
@@ -344,10 +329,9 @@ fn pure_function() {
     }
 }    "#;
     let ns = parse(file);
-    assert!(assert_message_in_diagnostics(
-        &ns.diagnostics,
-        "function declared ‘pure’ but this expression reads from state"
-    ));
+    assert!(ns
+        .diagnostics
+        .contains_message("function declared ‘pure’ but this expression reads from state"));
 
     let file = r#"
         contract testTypes {
@@ -363,10 +347,9 @@ fn pure_function() {
 }    "#;
 
     let ns = parse(file);
-    assert!(assert_message_in_diagnostics(
-        &ns.diagnostics,
-        "function declared ‘pure’ but this expression writes to state"
-    ));
+    assert!(ns
+        .diagnostics
+        .contains_message("function declared ‘pure’ but this expression writes to state"));
 }
 
 #[test]
@@ -386,10 +369,9 @@ fn view_function() {
     "#;
 
     let ns = parse(file);
-    assert!(assert_message_in_diagnostics(
-        &ns.diagnostics,
-        "function declared ‘view’ but this expression writes to state"
-    ));
+    assert!(ns
+        .diagnostics
+        .contains_message("function declared ‘view’ but this expression writes to state"));
 
     let file = r#"
     contract testTypes {
@@ -406,14 +388,12 @@ fn view_function() {
 
     let ns = parse(file);
     assert_eq!(ns.diagnostics.len(), 2);
-    assert!(assert_message_in_diagnostics(
-        &ns.diagnostics,
-        "found contract ‘testTypes’"
-    ));
-    assert!(assert_message_in_diagnostics(
-        &ns.diagnostics,
-        "inline assembly is not yet supported"
-    ));
+    assert!(ns
+        .diagnostics
+        .contains_message("found contract ‘testTypes’"));
+    assert!(ns
+        .diagnostics
+        .contains_message("inline assembly is not yet supported"));
 }
 
 #[test]
@@ -433,12 +413,10 @@ fn function_without_modifier() {
     "#;
     let ns = parse(file);
     assert_eq!(ns.diagnostics.len(), 2);
-    assert!(assert_message_in_diagnostics(
-        &ns.diagnostics,
-        "found contract ‘testTypes’"
-    ));
-    assert!(assert_message_in_diagnostics(
-        &ns.diagnostics,
-        "inline assembly is not yet supported"
-    ));
+    assert!(ns
+        .diagnostics
+        .contains_message("found contract ‘testTypes’"));
+    assert!(ns
+        .diagnostics
+        .contains_message("inline assembly is not yet supported"));
 }

+ 61 - 81
src/sema/yul/tests/statements.rs

@@ -1,6 +1,6 @@
 #![cfg(test)]
 
-use crate::sema::yul::tests::{assert_message_in_diagnostics, parse};
+use crate::sema::yul::tests::parse;
 
 #[test]
 fn variables_assignment_mismatch() {
@@ -15,10 +15,9 @@ contract testTypes {
     "#;
 
     let ns = parse(file);
-    assert!(assert_message_in_diagnostics(
-        &ns.diagnostics,
-        "a single value cannot be assigned to multiple variables"
-    ));
+    assert!(ns
+        .diagnostics
+        .contains_message("a single value cannot be assigned to multiple variables"));
 
     let file = r#"
 contract testTypes {
@@ -31,10 +30,9 @@ contract testTypes {
     "#;
 
     let ns = parse(file);
-    assert!(assert_message_in_diagnostics(
-        &ns.diagnostics,
-        "3 variables on the left hand side, but the function returns 1 values"
-    ));
+    assert!(ns
+        .diagnostics
+        .contains_message("3 variables on the left hand side, but the function returns 1 values"));
 
     let file = r#"
 contract testTypes {
@@ -52,10 +50,9 @@ contract testTypes {
     "#;
 
     let ns = parse(file);
-    assert!(assert_message_in_diagnostics(
-        &ns.diagnostics,
-        "3 variables on the left hand side, but the function returns 2 values"
-    ));
+    assert!(ns
+        .diagnostics
+        .contains_message("3 variables on the left hand side, but the function returns 2 values"));
 
     let file = r#"
 contract testTypes {
@@ -76,10 +73,9 @@ contract testTypes {
 
     let ns = parse(file);
 
-    assert!(assert_message_in_diagnostics(
-        &ns.diagnostics,
-        "1 variables on the left hand side, but the function returns 2 values"
-    ));
+    assert!(ns
+        .diagnostics
+        .contains_message("1 variables on the left hand side, but the function returns 2 values"));
 }
 
 #[test]
@@ -100,10 +96,9 @@ contract testTypes {
     "#;
 
     let ns = parse(file);
-    assert!(assert_message_in_diagnostics(
-        &ns.diagnostics,
-        "name 'foo' has been defined as a function"
-    ));
+    assert!(ns
+        .diagnostics
+        .contains_message("name 'foo' has been defined as a function"));
 
     let file = r#"
 contract testTypes {
@@ -121,10 +116,9 @@ contract testTypes {
     "#;
 
     let ns = parse(file);
-    assert!(assert_message_in_diagnostics(
-        &ns.diagnostics,
-        "'mulmod' is a built-in function and cannot be a variable name"
-    ));
+    assert!(ns
+        .diagnostics
+        .contains_message("'mulmod' is a built-in function and cannot be a variable name"));
 
     let file = r#"
     contract testTypes {
@@ -139,10 +133,9 @@ contract testTypes {
 
     let ns = parse(file);
 
-    assert!(assert_message_in_diagnostics(
-        &ns.diagnostics,
-        "the prefix 'verbatim' is reserved for verbatim functions"
-    ));
+    assert!(ns
+        .diagnostics
+        .contains_message("the prefix 'verbatim' is reserved for verbatim functions"));
 }
 
 #[test]
@@ -158,10 +151,9 @@ contract testTypes {
     "#;
 
     let ns = parse(file);
-    assert!(assert_message_in_diagnostics(
-        &ns.diagnostics,
-        "top level function calls must not return anything"
-    ));
+    assert!(ns
+        .diagnostics
+        .contains_message("top level function calls must not return anything"));
 
     let file = r#"
 contract testTypes {
@@ -178,10 +170,9 @@ contract testTypes {
     "#;
 
     let ns = parse(file);
-    assert!(assert_message_in_diagnostics(
-        &ns.diagnostics,
-        "top level function calls must not return anything"
-    ));
+    assert!(ns
+        .diagnostics
+        .contains_message("top level function calls must not return anything"));
 
     let file = r#"
 contract testTypes {
@@ -199,14 +190,12 @@ contract testTypes {
 
     let ns = parse(file);
     assert_eq!(ns.diagnostics.len(), 2);
-    assert!(assert_message_in_diagnostics(
-        &ns.diagnostics,
-        "found contract ‘testTypes’"
-    ));
-    assert!(assert_message_in_diagnostics(
-        &ns.diagnostics,
-        "inline assembly is not yet supported"
-    ));
+    assert!(ns
+        .diagnostics
+        .contains_message("found contract ‘testTypes’"));
+    assert!(ns
+        .diagnostics
+        .contains_message("inline assembly is not yet supported"));
 }
 
 #[test]
@@ -227,10 +216,9 @@ contract testTypes {
     "#;
 
     let ns = parse(file);
-    assert!(assert_message_in_diagnostics(
-        &ns.diagnostics,
-        "leave statement cannot be used outside a function"
-    ));
+    assert!(ns
+        .diagnostics
+        .contains_message("leave statement cannot be used outside a function"));
 
     let file = r#"
 contract testTypes {
@@ -248,14 +236,12 @@ contract testTypes {
 
     let ns = parse(file);
     assert_eq!(ns.diagnostics.len(), 2);
-    assert!(assert_message_in_diagnostics(
-        &ns.diagnostics,
-        "found contract ‘testTypes’"
-    ));
-    assert!(assert_message_in_diagnostics(
-        &ns.diagnostics,
-        "inline assembly is not yet supported"
-    ));
+    assert!(ns
+        .diagnostics
+        .contains_message("found contract ‘testTypes’"));
+    assert!(ns
+        .diagnostics
+        .contains_message("inline assembly is not yet supported"));
 }
 
 #[test]
@@ -276,10 +262,9 @@ contract testTypes {
     "#;
 
     let ns = parse(file);
-    assert!(assert_message_in_diagnostics(
-        &ns.diagnostics,
-        "continue statement outside a for loop"
-    ));
+    assert!(ns
+        .diagnostics
+        .contains_message("continue statement outside a for loop"));
 
     let file = r#"
 contract testTypes {
@@ -306,14 +291,12 @@ contract testTypes {
 
     let ns = parse(file);
     assert_eq!(ns.diagnostics.len(), 2);
-    assert!(assert_message_in_diagnostics(
-        &ns.diagnostics,
-        "found contract ‘testTypes’"
-    ));
-    assert!(assert_message_in_diagnostics(
-        &ns.diagnostics,
-        "inline assembly is not yet supported"
-    ));
+    assert!(ns
+        .diagnostics
+        .contains_message("found contract ‘testTypes’"));
+    assert!(ns
+        .diagnostics
+        .contains_message("inline assembly is not yet supported"));
 }
 
 #[test]
@@ -334,10 +317,9 @@ contract testTypes {
     "#;
 
     let ns = parse(file);
-    assert!(assert_message_in_diagnostics(
-        &ns.diagnostics,
-        "break statement outside a for loop"
-    ));
+    assert!(ns
+        .diagnostics
+        .contains_message("break statement outside a for loop"));
 
     let file = r#"
 contract testTypes {
@@ -364,12 +346,10 @@ contract testTypes {
 
     let ns = parse(file);
     assert_eq!(ns.diagnostics.len(), 2);
-    assert!(assert_message_in_diagnostics(
-        &ns.diagnostics,
-        "found contract ‘testTypes’"
-    ));
-    assert!(assert_message_in_diagnostics(
-        &ns.diagnostics,
-        "inline assembly is not yet supported"
-    ));
+    assert!(ns
+        .diagnostics
+        .contains_message("found contract ‘testTypes’"));
+    assert!(ns
+        .diagnostics
+        .contains_message("inline assembly is not yet supported"));
 }

+ 10 - 15
src/sema/yul/tests/switch.rs

@@ -1,6 +1,6 @@
 #![cfg(test)]
 
-use crate::sema::yul::tests::{assert_message_in_diagnostics, parse};
+use crate::sema::yul::tests::parse;
 
 #[test]
 fn case_not_literal() {
@@ -19,8 +19,7 @@ fn case_not_literal() {
     "#;
 
     let ns = parse(file);
-    assert!(assert_message_in_diagnostics(
-        &ns.diagnostics,
+    assert!(ns.diagnostics.contains_message(
         r#"unrecognised token `y', expected "false", "true", hexnumber, hexstring, number, string"#
     ));
 }
@@ -43,8 +42,7 @@ contract testTypes {
     "#;
 
     let ns = parse(file);
-    assert!(assert_message_in_diagnostics(
-        &ns.diagnostics,
+    assert!(ns.diagnostics.contains_message(
         r#"unrecognised token `case', expected "address", "bool", "break", "byte", "continue", "for", "function", "if", "leave", "let", "return", "revert", "switch", "{", "}", identifier"#
     ));
 }
@@ -67,8 +65,7 @@ contract testTypes {
     "#;
 
     let ns = parse(file);
-    assert!(assert_message_in_diagnostics(
-        &ns.diagnostics,
+    assert!(ns.diagnostics.contains_message(
         r#"unrecognised token `default', expected "address", "bool", "break", "byte", "continue", "for", "function", "if", "leave", "let", "return", "revert", "switch", "{", "}", identifier"#
     ));
 }
@@ -102,12 +99,10 @@ contract testTypes {
 
     let ns = parse(file);
     assert_eq!(ns.diagnostics.len(), 2);
-    assert!(assert_message_in_diagnostics(
-        &ns.diagnostics,
-        "found contract ‘testTypes’"
-    ));
-    assert!(assert_message_in_diagnostics(
-        &ns.diagnostics,
-        "inline assembly is not yet supported"
-    ));
+    assert!(ns
+        .diagnostics
+        .contains_message("found contract ‘testTypes’"));
+    assert!(ns
+        .diagnostics
+        .contains_message("inline assembly is not yet supported"));
 }

+ 13 - 17
src/sema/yul/tests/types.rs

@@ -1,6 +1,6 @@
 #![cfg(test)]
 
-use crate::sema::yul::tests::{assert_message_in_diagnostics, parse};
+use crate::sema::yul::tests::parse;
 
 #[test]
 fn type_not_found() {
@@ -15,10 +15,9 @@ contract testTypes {
     "#;
 
     let ns = parse(file);
-    assert!(assert_message_in_diagnostics(
-        &ns.diagnostics,
-        "the specified type 's120' does not exist"
-    ));
+    assert!(ns
+        .diagnostics
+        .contains_message("the specified type 's120' does not exist"));
 }
 
 #[test]
@@ -33,10 +32,9 @@ contract testTypes {
 }
     "#;
     let ns = parse(file);
-    assert!(assert_message_in_diagnostics(
-        &ns.diagnostics,
-        "builtin function 'log0' returns nothing"
-    ));
+    assert!(ns
+        .diagnostics
+        .contains_message("builtin function 'log0' returns nothing"));
 
     let file = r#"
     contract testTypes {
@@ -63,13 +61,11 @@ contract testTypes {
     "#;
 
     let ns = parse(file);
-    assert!(assert_message_in_diagnostics(
-        &ns.diagnostics,
-        "function 'doThis' returns nothing"
-    ));
+    assert!(ns
+        .diagnostics
+        .contains_message("function 'doThis' returns nothing"));
 
-    assert!(assert_message_in_diagnostics(
-        &ns.diagnostics,
-        "function 'foo' has multiple returns and cannot be used in this scope"
-    ));
+    assert!(ns
+        .diagnostics
+        .contains_message("function 'foo' has multiple returns and cannot be used in this scope"));
 }

+ 14 - 18
src/sema/yul/tests/unused_variable.rs

@@ -1,4 +1,4 @@
-use crate::sema::yul::tests::{assert_message_in_diagnostics, parse};
+use crate::sema::yul::tests::parse;
 
 #[test]
 fn unused_variables() {
@@ -23,10 +23,9 @@ contract testTypes {
     "#;
 
     let ns = parse(file);
-    assert!(assert_message_in_diagnostics(
-        &ns.diagnostics,
-        "yul variable ‘a‘ has never been read or assigned"
-    ));
+    assert!(ns
+        .diagnostics
+        .contains_message("yul variable ‘a‘ has never been read or assigned"));
 
     let file = r#"
 contract testTypes {
@@ -49,10 +48,9 @@ contract testTypes {
     "#;
 
     let ns = parse(file);
-    assert!(assert_message_in_diagnostics(
-        &ns.diagnostics,
-        "yul variable ‘c‘ has never been read"
-    ));
+    assert!(ns
+        .diagnostics
+        .contains_message("yul variable ‘c‘ has never been read"));
 }
 
 #[test]
@@ -90,7 +88,7 @@ fn correct_contracts() {
 }    "#;
 
     let ns = parse(file);
-    for item in &ns.diagnostics {
+    for item in ns.diagnostics.iter() {
         assert!(!item.message.starts_with("yul variable has never been"));
     }
 
@@ -114,12 +112,10 @@ fn correct_contracts() {
 
     let ns = parse(file);
     assert_eq!(ns.diagnostics.len(), 2);
-    assert!(assert_message_in_diagnostics(
-        &ns.diagnostics,
-        "found contract ‘testTypes’"
-    ));
-    assert!(assert_message_in_diagnostics(
-        &ns.diagnostics,
-        "inline assembly is not yet supported"
-    ));
+    assert!(ns
+        .diagnostics
+        .contains_message("found contract ‘testTypes’"));
+    assert!(ns
+        .diagnostics
+        .contains_message("inline assembly is not yet supported"));
 }

+ 2 - 2
tests/contract.rs

@@ -1,5 +1,5 @@
 use path_slash::PathExt;
-use solang::{codegen, file_resolver::FileResolver, parse_and_resolve, sema::ast::Level, Target};
+use solang::{codegen, file_resolver::FileResolver, parse_and_resolve, Target};
 use std::{
     ffi::OsStr,
     fs::{read_dir, File},
@@ -47,7 +47,7 @@ fn parse_file(path: PathBuf, target: Target) -> io::Result<()> {
 
     let mut ns = parse_and_resolve(OsStr::new(&filename), &mut cache, target);
 
-    if ns.diagnostics.iter().all(|diag| diag.level != Level::Error) {
+    if !ns.diagnostics.any_errors() {
         // codegen all the contracts
         codegen::codegen(
             &mut ns,

+ 0 - 10
tests/contract_testcases/ewasm/comment_tests.dot

@@ -829,11 +829,6 @@ strict digraph "tests/contract_testcases/ewasm/comment_tests.sol" {
 	diagnostic_830 [label="function can be declared ‘view’\nlevel Warning\ntests/contract_testcases/ewasm/comment_tests.sol:188:5-75"]
 	diagnostic_831 [label="inline assembly is not yet supported\nlevel Error\ntests/contract_testcases/ewasm/comment_tests.sol:287:17-290:18"]
 	diagnostic_832 [label="function can be declared ‘view’\nlevel Warning\ntests/contract_testcases/ewasm/comment_tests.sol:264:5-270:37"]
-	diagnostic_833 [label="storage variable ‘_isExcluded‘ has never been used\nlevel Warning\ntests/contract_testcases/ewasm/comment_tests.sol:386:9-61"]
-	diagnostic_834 [label="storage variable ‘MAX‘ has been assigned, but never read\nlevel Warning\ntests/contract_testcases/ewasm/comment_tests.sol:390:9-51"]
-	diagnostic_835 [label="storage variable ‘burnrepeat‘ has been assigned, but never read\nlevel Warning\ntests/contract_testcases/ewasm/comment_tests.sol:408:5-44"]
-	diagnostic_836 [label="storage variable ‘_tFeeTotal‘ has never been used\nlevel Warning\ntests/contract_testcases/ewasm/comment_tests.sol:410:5-31"]
-	diagnostic_837 [label="storage variable ‘damada‘ has been assigned, but never read\nlevel Warning\ntests/contract_testcases/ewasm/comment_tests.sol:522:5-27"]
 	events -> Transfer
 	events -> Approval
 	events -> OwnershipTransferred
@@ -1664,9 +1659,4 @@ strict digraph "tests/contract_testcases/ewasm/comment_tests.sol" {
 	diagnostics -> diagnostic_830 [label="Warning"]
 	diagnostics -> diagnostic_831 [label="Error"]
 	diagnostics -> diagnostic_832 [label="Warning"]
-	diagnostics -> diagnostic_833 [label="Warning"]
-	diagnostics -> diagnostic_834 [label="Warning"]
-	diagnostics -> diagnostic_835 [label="Warning"]
-	diagnostics -> diagnostic_836 [label="Warning"]
-	diagnostics -> diagnostic_837 [label="Warning"]
 }

+ 0 - 2
tests/contract_testcases/solana/accessor/constant_01.dot

@@ -8,7 +8,6 @@ strict digraph "tests/contract_testcases/solana/accessor/constant_01.sol" {
 	constant [label="constant variable\nx.z\nbytes32\nimplicit"]
 	diagnostic [label="found contract ‘x’\nlevel Debug\ntests/contract_testcases/solana/accessor/constant_01.sol:2:9-20"]
 	diagnostic_11 [label="cannot read contract variable ‘foo’ in constant expression\nlevel Error\ntests/contract_testcases/solana/accessor/constant_01.sol:4:51-54"]
-	diagnostic_12 [label="storage variable ‘foo‘ has never been used\nlevel Warning\ntests/contract_testcases/solana/accessor/constant_01.sol:3:13-22"]
 	contracts -> contract
 	contract -> var [label="variable"]
 	contract -> var_4 [label="variable"]
@@ -18,5 +17,4 @@ strict digraph "tests/contract_testcases/solana/accessor/constant_01.sol" {
 	return -> constant [label="expr"]
 	diagnostics -> diagnostic [label="Debug"]
 	diagnostics -> diagnostic_11 [label="Error"]
-	diagnostics -> diagnostic_12 [label="Warning"]
 }

+ 0 - 4
tests/contract_testcases/solana/call/abi_encode_call.dot

@@ -11,8 +11,6 @@ strict digraph "tests/contract_testcases/solana/call/abi_encode_call.sol" {
 	diagnostic_12 [label="conversion from bool to int256 not possible\nlevel Error\ntests/contract_testcases/solana/call/abi_encode_call.sol:7:49-53"]
 	diagnostic_13 [label="declaration of ‘foo’ shadows function\nlevel Warning\ntests/contract_testcases/solana/call/abi_encode_call.sol:12:22-25"]
 	note [label="previous declaration of function\ntests/contract_testcases/solana/call/abi_encode_call.sol:12:14-17"]
-	diagnostic_15 [label="function parameter ‘foo‘ has never been read\nlevel Warning\ntests/contract_testcases/solana/call/abi_encode_call.sol:12:22-25"]
-	diagnostic_16 [label="function parameter ‘bar‘ has never been read\nlevel Warning\ntests/contract_testcases/solana/call/abi_encode_call.sol:12:31-34"]
 	contracts -> contract
 	contract -> test1 [label="function"]
 	contract -> test2 [label="function"]
@@ -25,6 +23,4 @@ strict digraph "tests/contract_testcases/solana/call/abi_encode_call.sol" {
 	diagnostics -> diagnostic_12 [label="Error"]
 	diagnostics -> diagnostic_13 [label="Warning"]
 	diagnostic_13 -> note [label="note"]
-	diagnostics -> diagnostic_15 [label="Warning"]
-	diagnostics -> diagnostic_16 [label="Warning"]
 }

+ 0 - 2
tests/contract_testcases/solana/doccomments_everywhere.dot

@@ -133,7 +133,6 @@ strict digraph "tests/contract_testcases/solana/doccomments_everywhere.sol" {
 	diagnostic_135 [label="`_tokenIds' is not found\nlevel Error\ntests/contract_testcases/solana/doccomments_everywhere.sol:28:29-38"]
 	diagnostic_136 [label="cannot find overloaded function which matches signature\nlevel Error\ntests/contract_testcases/solana/doccomments_everywhere.sol:53:7-50"]
 	diagnostic_137 [label="cannot find overloaded function which matches signature\nlevel Error\ntests/contract_testcases/solana/doccomments_everywhere.sol:86:7-38"]
-	diagnostic_138 [label="event ‘MintProperty‘ has never been emitted\nlevel Warning\ntests/contract_testcases/solana/doccomments_everywhere.sol:15:9-21"]
 	events -> MintProperty
 	contracts -> contract
 	contract -> tags [label="tags"]
@@ -268,5 +267,4 @@ strict digraph "tests/contract_testcases/solana/doccomments_everywhere.sol" {
 	diagnostics -> diagnostic_135 [label="Error"]
 	diagnostics -> diagnostic_136 [label="Error"]
 	diagnostics -> diagnostic_137 [label="Error"]
-	diagnostics -> diagnostic_138 [label="Warning"]
 }

+ 0 - 2
tests/contract_testcases/solana/event.dot

@@ -14,7 +14,6 @@ strict digraph "tests/contract_testcases/solana/event.sol" {
 	diagnostic_16 [label="`b' is not found\nlevel Error\ntests/contract_testcases/solana/event.sol:9:34-35"]
 	diagnostic_17 [label="duplicate argument with name ‘no’\nlevel Error\ntests/contract_testcases/solana/event.sol:9:37-39"]
 	diagnostic_18 [label="`c' is a contract\nlevel Error\ntests/contract_testcases/solana/event.sol:9:41-42"]
-	diagnostic_19 [label="event ‘Foo‘ has never been emitted\nlevel Warning\ntests/contract_testcases/solana/event.sol:3:7-10"]
 	events -> Foo
 	contracts -> contract
 	contract -> foo [label="function"]
@@ -30,5 +29,4 @@ strict digraph "tests/contract_testcases/solana/event.sol" {
 	diagnostics -> diagnostic_16 [label="Error"]
 	diagnostics -> diagnostic_17 [label="Error"]
 	diagnostics -> diagnostic_18 [label="Error"]
-	diagnostics -> diagnostic_19 [label="Warning"]
 }

+ 0 - 2
tests/contract_testcases/solana/returns/return_err.dot

@@ -5,12 +5,10 @@ strict digraph "tests/contract_testcases/solana/returns/return_err.sol" {
 	get [label="function get\ncontract: foo\ntests/contract_testcases/solana/returns/return_err.sol:5:13-34\nsignature get()\nvisibility public\nmutability nonpayable"]
 	diagnostic [label="found contract ‘foo’\nlevel Debug\ntests/contract_testcases/solana/returns/return_err.sol:2:9-22"]
 	diagnostic_8 [label="function has no return values\nlevel Error\ntests/contract_testcases/solana/returns/return_err.sol:6:17-27"]
-	diagnostic_9 [label="storage variable ‘val‘ has been assigned, but never read\nlevel Warning\ntests/contract_testcases/solana/returns/return_err.sol:3:13-33"]
 	contracts -> contract
 	contract -> var [label="variable"]
 	var -> number_literal [label="initializer"]
 	contract -> get [label="function"]
 	diagnostics -> diagnostic [label="Debug"]
 	diagnostics -> diagnostic_8 [label="Error"]
-	diagnostics -> diagnostic_9 [label="Warning"]
 }

+ 0 - 2
tests/contract_testcases/solana/returns/return_err_01.dot

@@ -6,7 +6,6 @@ strict digraph "tests/contract_testcases/solana/returns/return_err_01.sol" {
 	returns [label="returns\nuint256 \nuint256 "]
 	diagnostic [label="found contract ‘foo’\nlevel Debug\ntests/contract_testcases/solana/returns/return_err_01.sol:2:9-22"]
 	diagnostic_9 [label="incorrect number of return values, expected 2 but got 3\nlevel Error\ntests/contract_testcases/solana/returns/return_err_01.sol:6:17-39"]
-	diagnostic_10 [label="storage variable ‘val‘ has been assigned, but never read\nlevel Warning\ntests/contract_testcases/solana/returns/return_err_01.sol:3:13-33"]
 	contracts -> contract
 	contract -> var [label="variable"]
 	var -> number_literal [label="initializer"]
@@ -14,5 +13,4 @@ strict digraph "tests/contract_testcases/solana/returns/return_err_01.sol" {
 	get -> returns [label="returns"]
 	diagnostics -> diagnostic [label="Debug"]
 	diagnostics -> diagnostic_9 [label="Error"]
-	diagnostics -> diagnostic_10 [label="Warning"]
 }

+ 0 - 2
tests/contract_testcases/substrate/arrays/storage_delete.dot

@@ -4,11 +4,9 @@ strict digraph "tests/contract_testcases/substrate/arrays/storage_delete.sol" {
 	test [label="function test\ncontract: foo\ntests/contract_testcases/substrate/arrays/storage_delete.sol:5:13-35\nsignature test()\nvisibility public\nmutability nonpayable"]
 	diagnostic [label="found contract ‘foo’\nlevel Debug\ntests/contract_testcases/substrate/arrays/storage_delete.sol:2:9-22"]
 	diagnostic_6 [label="argument to ‘delete’ should be storage reference\nlevel Error\ntests/contract_testcases/substrate/arrays/storage_delete.sol:6:17-27"]
-	diagnostic_7 [label="storage variable ‘bar‘ has never been used\nlevel Warning\ntests/contract_testcases/substrate/arrays/storage_delete.sol:3:13-24"]
 	contracts -> contract
 	contract -> var [label="variable"]
 	contract -> test [label="function"]
 	diagnostics -> diagnostic [label="Debug"]
 	diagnostics -> diagnostic_6 [label="Error"]
-	diagnostics -> diagnostic_7 [label="Warning"]
 }

+ 0 - 2
tests/contract_testcases/substrate/arrays/storage_delete_01.dot

@@ -4,11 +4,9 @@ strict digraph "tests/contract_testcases/substrate/arrays/storage_delete_01.sol"
 	test [label="function test\ncontract: foo\ntests/contract_testcases/substrate/arrays/storage_delete_01.sol:5:13-35\nsignature test()\nvisibility public\nmutability nonpayable"]
 	diagnostic [label="found contract ‘foo’\nlevel Debug\ntests/contract_testcases/substrate/arrays/storage_delete_01.sol:2:9-22"]
 	diagnostic_6 [label="delete not allowed in expression\nlevel Error\ntests/contract_testcases/substrate/arrays/storage_delete_01.sol:6:27-33"]
-	diagnostic_7 [label="storage variable ‘bar‘ has never been used\nlevel Warning\ntests/contract_testcases/substrate/arrays/storage_delete_01.sol:3:13-24"]
 	contracts -> contract
 	contract -> var [label="variable"]
 	contract -> test [label="function"]
 	diagnostics -> diagnostic [label="Debug"]
 	diagnostics -> diagnostic_6 [label="Error"]
-	diagnostics -> diagnostic_7 [label="Warning"]
 }

+ 0 - 2
tests/contract_testcases/substrate/arrays/storage_dynamic_array_pop_01.dot

@@ -4,11 +4,9 @@ strict digraph "tests/contract_testcases/substrate/arrays/storage_dynamic_array_
 	test [label="function test\ncontract: foo\ntests/contract_testcases/substrate/arrays/storage_dynamic_array_pop_01.sol:5:13-35\nsignature test()\nvisibility public\nmutability nonpayable"]
 	diagnostic [label="found contract ‘foo’\nlevel Debug\ntests/contract_testcases/substrate/arrays/storage_dynamic_array_pop_01.sol:2:9-22"]
 	diagnostic_6 [label="method ‘pop()’ not allowed on fixed length array\nlevel Error\ntests/contract_testcases/substrate/arrays/storage_dynamic_array_pop_01.sol:6:21-24"]
-	diagnostic_7 [label="storage variable ‘bar‘ has never been used\nlevel Warning\ntests/contract_testcases/substrate/arrays/storage_dynamic_array_pop_01.sol:3:13-25"]
 	contracts -> contract
 	contract -> var [label="variable"]
 	contract -> test [label="function"]
 	diagnostics -> diagnostic [label="Debug"]
 	diagnostics -> diagnostic_6 [label="Error"]
-	diagnostics -> diagnostic_7 [label="Warning"]
 }

+ 0 - 2
tests/contract_testcases/substrate/arrays/storage_dynamic_array_push_01.dot

@@ -4,11 +4,9 @@ strict digraph "tests/contract_testcases/substrate/arrays/storage_dynamic_array_
 	test [label="function test\ncontract: foo\ntests/contract_testcases/substrate/arrays/storage_dynamic_array_push_01.sol:5:13-35\nsignature test()\nvisibility public\nmutability nonpayable"]
 	diagnostic [label="found contract ‘foo’\nlevel Debug\ntests/contract_testcases/substrate/arrays/storage_dynamic_array_push_01.sol:2:9-22"]
 	diagnostic_6 [label="method ‘push()’ not allowed on fixed length array\nlevel Error\ntests/contract_testcases/substrate/arrays/storage_dynamic_array_push_01.sol:6:21-25"]
-	diagnostic_7 [label="storage variable ‘bar‘ has never been used\nlevel Warning\ntests/contract_testcases/substrate/arrays/storage_dynamic_array_push_01.sol:3:13-25"]
 	contracts -> contract
 	contract -> var [label="variable"]
 	contract -> test [label="function"]
 	diagnostics -> diagnostic [label="Debug"]
 	diagnostics -> diagnostic_6 [label="Error"]
-	diagnostics -> diagnostic_7 [label="Warning"]
 }

+ 0 - 2
tests/contract_testcases/substrate/arrays/storage_dynamic_array_push_02.dot

@@ -5,12 +5,10 @@ strict digraph "tests/contract_testcases/substrate/arrays/storage_dynamic_array_
 	test [label="function test\ncontract: foo\ntests/contract_testcases/substrate/arrays/storage_dynamic_array_push_02.sol:9:13-35\nsignature test()\nvisibility public\nmutability nonpayable"]
 	diagnostic [label="found contract ‘foo’\nlevel Debug\ntests/contract_testcases/substrate/arrays/storage_dynamic_array_push_02.sol:2:9-22"]
 	diagnostic_8 [label="function or method does not return a value\nlevel Error\ntests/contract_testcases/substrate/arrays/storage_dynamic_array_push_02.sol:10:35-39"]
-	diagnostic_9 [label="storage variable ‘bar‘ has been assigned, but never read\nlevel Warning\ntests/contract_testcases/substrate/arrays/storage_dynamic_array_push_02.sol:7:13-20"]
 	structs -> s
 	contracts -> contract
 	contract -> var [label="variable"]
 	contract -> test [label="function"]
 	diagnostics -> diagnostic [label="Debug"]
 	diagnostics -> diagnostic_8 [label="Error"]
-	diagnostics -> diagnostic_9 [label="Warning"]
 }

+ 0 - 2
tests/contract_testcases/substrate/contracts/contract_type.dot

@@ -16,7 +16,6 @@ strict digraph "tests/contract_testcases/substrate/contracts/contract_type.sol"
 	diagnostic [label="found contract ‘printer’\nlevel Debug\ntests/contract_testcases/substrate/contracts/contract_type.sol:2:9-26"]
 	diagnostic_17 [label="found contract ‘foo’\nlevel Debug\ntests/contract_testcases/substrate/contracts/contract_type.sol:8:9-22"]
 	diagnostic_18 [label="implicit conversion to address from contract printer not allowed\nlevel Error\ntests/contract_testcases/substrate/contracts/contract_type.sol:10:29-30"]
-	diagnostic_19 [label="local variable ‘y‘ has been assigned, but never read\nlevel Warning\ntests/contract_testcases/substrate/contracts/contract_type.sol:14:25-26"]
 	contracts -> contract
 	contract -> test [label="function"]
 	test -> expr [label="body"]
@@ -34,5 +33,4 @@ strict digraph "tests/contract_testcases/substrate/contracts/contract_type.sol"
 	diagnostics -> diagnostic [label="Debug"]
 	diagnostics -> diagnostic_17 [label="Debug"]
 	diagnostics -> diagnostic_18 [label="Error"]
-	diagnostics -> diagnostic_19 [label="Warning"]
 }

+ 0 - 2
tests/contract_testcases/substrate/contracts/creation_code.dot

@@ -10,7 +10,6 @@ strict digraph "tests/contract_testcases/substrate/contracts/creation_code.sol"
 	diagnostic_10 [label="found contract ‘b’\nlevel Debug\ntests/contract_testcases/substrate/contracts/creation_code.sol:8:9-20"]
 	diagnostic_11 [label="local variable ‘code‘ has been assigned, but never read\nlevel Warning\ntests/contract_testcases/substrate/contracts/creation_code.sol:4:27-31"]
 	diagnostic_12 [label="circular reference creating contract ‘a’\nlevel Error\ntests/contract_testcases/substrate/contracts/creation_code.sol:12:31-38"]
-	diagnostic_13 [label="storage variable ‘x‘ has never been used\nlevel Warning\ntests/contract_testcases/substrate/contracts/creation_code.sol:9:17-22"]
 	contracts -> contract
 	contract -> test [label="function"]
 	test -> var_decl [label="body"]
@@ -22,5 +21,4 @@ strict digraph "tests/contract_testcases/substrate/contracts/creation_code.sol"
 	diagnostics -> diagnostic_10 [label="Debug"]
 	diagnostics -> diagnostic_11 [label="Warning"]
 	diagnostics -> diagnostic_12 [label="Error"]
-	diagnostics -> diagnostic_13 [label="Warning"]
 }

+ 0 - 4
tests/contract_testcases/substrate/contracts/external_call.dot

@@ -12,8 +12,6 @@ strict digraph "tests/contract_testcases/substrate/contracts/external_call.sol"
 	diagnostic [label="found contract ‘c’\nlevel Debug\ntests/contract_testcases/substrate/contracts/external_call.sol:2:9-20"]
 	diagnostic_13 [label="found contract ‘b’\nlevel Debug\ntests/contract_testcases/substrate/contracts/external_call.sol:9:9-20"]
 	diagnostic_14 [label="function expects 1 arguments, 0 provided\nlevel Error\ntests/contract_testcases/substrate/contracts/external_call.sol:5:24-33"]
-	diagnostic_15 [label="function parameter ‘t‘ has never been read\nlevel Warning\ntests/contract_testcases/substrate/contracts/external_call.sol:10:34-35"]
-	diagnostic_16 [label="storage variable ‘x‘ has never been used\nlevel Warning\ntests/contract_testcases/substrate/contracts/external_call.sol:3:13-16"]
 	contracts -> contract
 	contract -> var [label="variable"]
 	contract -> test [label="function"]
@@ -27,6 +25,4 @@ strict digraph "tests/contract_testcases/substrate/contracts/external_call.sol"
 	diagnostics -> diagnostic [label="Debug"]
 	diagnostics -> diagnostic_13 [label="Debug"]
 	diagnostics -> diagnostic_14 [label="Error"]
-	diagnostics -> diagnostic_15 [label="Warning"]
-	diagnostics -> diagnostic_16 [label="Warning"]
 }

+ 0 - 6
tests/contract_testcases/substrate/contracts/external_call_01.dot

@@ -14,9 +14,6 @@ strict digraph "tests/contract_testcases/substrate/contracts/external_call_01.so
 	diagnostic_14 [label="function expects 2 arguments, 1 provided\nlevel Error\ntests/contract_testcases/substrate/contracts/external_call_01.sol:5:24-43"]
 	diagnostic_15 [label="declaration of ‘b’ shadows contract name\nlevel Warning\ntests/contract_testcases/substrate/contracts/external_call_01.sol:10:42-43"]
 	note [label="previous declaration of contract name\ntests/contract_testcases/substrate/contracts/external_call_01.sol:9:9-20"]
-	diagnostic_17 [label="function parameter ‘t‘ has never been read\nlevel Warning\ntests/contract_testcases/substrate/contracts/external_call_01.sol:10:34-35"]
-	diagnostic_18 [label="function parameter ‘b‘ has never been read\nlevel Warning\ntests/contract_testcases/substrate/contracts/external_call_01.sol:10:42-43"]
-	diagnostic_19 [label="storage variable ‘x‘ has never been used\nlevel Warning\ntests/contract_testcases/substrate/contracts/external_call_01.sol:3:13-16"]
 	contracts -> contract
 	contract -> var [label="variable"]
 	contract -> test [label="function"]
@@ -32,7 +29,4 @@ strict digraph "tests/contract_testcases/substrate/contracts/external_call_01.so
 	diagnostics -> diagnostic_14 [label="Error"]
 	diagnostics -> diagnostic_15 [label="Warning"]
 	diagnostic_15 -> note [label="note"]
-	diagnostics -> diagnostic_17 [label="Warning"]
-	diagnostics -> diagnostic_18 [label="Warning"]
-	diagnostics -> diagnostic_19 [label="Warning"]
 }

+ 0 - 2
tests/contract_testcases/substrate/contracts/external_call_02.dot

@@ -30,7 +30,6 @@ strict digraph "tests/contract_testcases/substrate/contracts/external_call_02.so
 	diagnostic_30 [label="found contract ‘b’\nlevel Debug\ntests/contract_testcases/substrate/contracts/external_call_02.sol:12:9-20"]
 	diagnostic_31 [label="‘public’: visibility for constructors is ignored\nlevel Warning\ntests/contract_testcases/substrate/contracts/external_call_02.sol:14:34-40"]
 	diagnostic_32 [label="duplicate argument with name ‘t’\nlevel Error\ntests/contract_testcases/substrate/contracts/external_call_02.sol:8:41-42"]
-	diagnostic_33 [label="storage variable ‘x‘ has been assigned, but never read\nlevel Warning\ntests/contract_testcases/substrate/contracts/external_call_02.sol:3:13-16"]
 	contracts -> contract
 	contract -> var [label="variable"]
 	contract -> node_3 [label="constructor"]
@@ -62,5 +61,4 @@ strict digraph "tests/contract_testcases/substrate/contracts/external_call_02.so
 	diagnostics -> diagnostic_30 [label="Debug"]
 	diagnostics -> diagnostic_31 [label="Warning"]
 	diagnostics -> diagnostic_32 [label="Error"]
-	diagnostics -> diagnostic_33 [label="Warning"]
 }

+ 0 - 2
tests/contract_testcases/substrate/events/emit_01.dot

@@ -4,11 +4,9 @@ strict digraph "tests/contract_testcases/substrate/events/emit_01.sol" {
 	f [label="function f\ncontract: c\ntests/contract_testcases/substrate/events/emit_01.sol:4:13-32\nsignature f()\nvisibility public\nmutability nonpayable"]
 	diagnostic [label="found contract ‘c’\nlevel Debug\ntests/contract_testcases/substrate/events/emit_01.sol:2:9-20"]
 	diagnostic_7 [label="expected event arguments, found code block\nlevel Error\ntests/contract_testcases/substrate/events/emit_01.sol:5:26-28"]
-	diagnostic_8 [label="event ‘foo‘ has never been emitted\nlevel Warning\ntests/contract_testcases/substrate/events/emit_01.sol:3:19-22"]
 	events -> foo
 	contracts -> contract
 	contract -> f [label="function"]
 	diagnostics -> diagnostic [label="Debug"]
 	diagnostics -> diagnostic_7 [label="Error"]
-	diagnostics -> diagnostic_8 [label="Warning"]
 }

+ 0 - 2
tests/contract_testcases/substrate/events/emit_04.dot

@@ -4,11 +4,9 @@ strict digraph "tests/contract_testcases/substrate/events/emit_04.sol" {
 	f [label="function f\ncontract: c\ntests/contract_testcases/substrate/events/emit_04.sol:4:13-32\nsignature f()\nvisibility public\nmutability nonpayable"]
 	diagnostic [label="found contract ‘c’\nlevel Debug\ntests/contract_testcases/substrate/events/emit_04.sol:2:9-20"]
 	diagnostic_7 [label="duplicate argument with name ‘a’\nlevel Error\ntests/contract_testcases/substrate/events/emit_04.sol:5:36-37"]
-	diagnostic_8 [label="event ‘foo‘ has never been emitted\nlevel Warning\ntests/contract_testcases/substrate/events/emit_04.sol:3:19-22"]
 	events -> foo
 	contracts -> contract
 	contract -> f [label="function"]
 	diagnostics -> diagnostic [label="Debug"]
 	diagnostics -> diagnostic_7 [label="Error"]
-	diagnostics -> diagnostic_8 [label="Warning"]
 }

+ 0 - 2
tests/contract_testcases/substrate/events/event_decl_04.dot

@@ -2,9 +2,7 @@ strict digraph "tests/contract_testcases/substrate/events/event_decl_04.sol" {
 	foo [label="name:foo\ncontract: 0\ntests/contract_testcases/substrate/events/event_decl_04.sol:3:19-22"]
 	contract [label="contract c\ntests/contract_testcases/substrate/events/event_decl_04.sol:2:9-20"]
 	diagnostic [label="mapping type is not permitted as event field\nlevel Error\ntests/contract_testcases/substrate/events/event_decl_04.sol:3:24-48"]
-	diagnostic_7 [label="event ‘foo‘ has never been emitted\nlevel Warning\ntests/contract_testcases/substrate/events/event_decl_04.sol:3:19-22"]
 	events -> foo
 	contracts -> contract
 	diagnostics -> diagnostic [label="Error"]
-	diagnostics -> diagnostic_7 [label="Warning"]
 }

+ 0 - 2
tests/contract_testcases/substrate/events/event_decl_05.dot

@@ -3,10 +3,8 @@ strict digraph "tests/contract_testcases/substrate/events/event_decl_05.sol" {
 	foo [label="name:foo\ncontract: 0\ntests/contract_testcases/substrate/events/event_decl_05.sol:7:19-22"]
 	contract [label="contract c\ntests/contract_testcases/substrate/events/event_decl_05.sol:6:9-20"]
 	diagnostic [label="mapping type is not permitted as event field\nlevel Error\ntests/contract_testcases/substrate/events/event_decl_05.sol:7:24-27"]
-	diagnostic_9 [label="event ‘foo‘ has never been emitted\nlevel Warning\ntests/contract_testcases/substrate/events/event_decl_05.sol:7:19-22"]
 	structs -> s
 	events -> foo
 	contracts -> contract
 	diagnostics -> diagnostic [label="Error"]
-	diagnostics -> diagnostic_9 [label="Warning"]
 }

+ 0 - 2
tests/contract_testcases/substrate/events/event_decl_06.dot

@@ -3,10 +3,8 @@ strict digraph "tests/contract_testcases/substrate/events/event_decl_06.sol" {
 	contract [label="contract c\ntests/contract_testcases/substrate/events/event_decl_06.sol:2:9-20"]
 	diagnostic [label="event ‘foo’ has duplicate field name ‘x’\nlevel Error\ntests/contract_testcases/substrate/events/event_decl_06.sol:3:50-51"]
 	note [label="location of previous declaration of ‘x’\ntests/contract_testcases/substrate/events/event_decl_06.sol:3:24-30"]
-	diagnostic_8 [label="event ‘foo‘ has never been emitted\nlevel Warning\ntests/contract_testcases/substrate/events/event_decl_06.sol:3:19-22"]
 	events -> foo
 	contracts -> contract
 	diagnostics -> diagnostic [label="Error"]
 	diagnostic -> note [label="note"]
-	diagnostics -> diagnostic_8 [label="Warning"]
 }

+ 0 - 2
tests/contract_testcases/substrate/events/event_decl_07.dot

@@ -2,9 +2,7 @@ strict digraph "tests/contract_testcases/substrate/events/event_decl_07.sol" {
 	foo [label="name:foo\ncontract: 0\ntests/contract_testcases/substrate/events/event_decl_07.sol:3:19-22"]
 	contract [label="contract c\ntests/contract_testcases/substrate/events/event_decl_07.sol:2:9-20"]
 	diagnostic [label="event definition for ‘foo’ has 4 indexed fields where 3 permitted\nlevel Error\ntests/contract_testcases/substrate/events/event_decl_07.sol:3:19-22"]
-	diagnostic_7 [label="event ‘foo‘ has never been emitted\nlevel Warning\ntests/contract_testcases/substrate/events/event_decl_07.sol:3:19-22"]
 	events -> foo
 	contracts -> contract
 	diagnostics -> diagnostic [label="Error"]
-	diagnostics -> diagnostic_7 [label="Warning"]
 }

+ 0 - 2
tests/contract_testcases/substrate/events/event_decl_09.dot

@@ -2,9 +2,7 @@ strict digraph "tests/contract_testcases/substrate/events/event_decl_09.sol" {
 	foo [label="name:foo\ncontract: 0\ntests/contract_testcases/substrate/events/event_decl_09.sol:3:19-22\nanonymous"]
 	contract [label="contract c\ntests/contract_testcases/substrate/events/event_decl_09.sol:2:9-20"]
 	diagnostic [label="anonymous event definition for ‘foo’ has 5 indexed fields where 4 permitted\nlevel Error\ntests/contract_testcases/substrate/events/event_decl_09.sol:3:19-22"]
-	diagnostic_7 [label="event ‘foo‘ has never been emitted\nlevel Warning\ntests/contract_testcases/substrate/events/event_decl_09.sol:3:19-22"]
 	events -> foo
 	contracts -> contract
 	diagnostics -> diagnostic [label="Error"]
-	diagnostics -> diagnostic_7 [label="Warning"]
 }

+ 0 - 2
tests/contract_testcases/substrate/function_types/decls_04.dot

@@ -4,11 +4,9 @@ strict digraph "tests/contract_testcases/substrate/function_types/decls_04.sol"
 	var_decl [label="variable decl function() internal returns (bool) a\ntests/contract_testcases/substrate/function_types/decls_04.sol:3:17-46"]
 	diagnostic [label="found contract ‘test’\nlevel Debug\ntests/contract_testcases/substrate/function_types/decls_04.sol:1:1-15"]
 	diagnostic_6 [label="function type returns cannot be named\nlevel Error\ntests/contract_testcases/substrate/function_types/decls_04.sol:3:42-43"]
-	diagnostic_7 [label="local variable ‘a‘ has never been read nor assigned\nlevel Warning\ntests/contract_testcases/substrate/function_types/decls_04.sol:3:45-46"]
 	contracts -> contract
 	contract -> foo [label="function"]
 	foo -> var_decl [label="body"]
 	diagnostics -> diagnostic [label="Debug"]
 	diagnostics -> diagnostic_6 [label="Error"]
-	diagnostics -> diagnostic_7 [label="Warning"]
 }

+ 0 - 2
tests/contract_testcases/substrate/function_types/decls_05.dot

@@ -4,11 +4,9 @@ strict digraph "tests/contract_testcases/substrate/function_types/decls_05.sol"
 	var_decl [label="variable decl function(address) internal returns (bool) a\ntests/contract_testcases/substrate/function_types/decls_05.sol:3:17-55"]
 	diagnostic [label="found contract ‘test’\nlevel Debug\ntests/contract_testcases/substrate/function_types/decls_05.sol:1:1-15"]
 	diagnostic_6 [label="function type parameters cannot be named\nlevel Error\ntests/contract_testcases/substrate/function_types/decls_05.sol:3:34-37"]
-	diagnostic_7 [label="local variable ‘a‘ has never been read nor assigned\nlevel Warning\ntests/contract_testcases/substrate/function_types/decls_05.sol:3:54-55"]
 	contracts -> contract
 	contract -> foo [label="function"]
 	foo -> var_decl [label="body"]
 	diagnostics -> diagnostic [label="Debug"]
 	diagnostics -> diagnostic_6 [label="Error"]
-	diagnostics -> diagnostic_7 [label="Warning"]
 }

+ 0 - 4
tests/contract_testcases/substrate/functions/args_and_returns.dot

@@ -5,14 +5,10 @@ strict digraph "tests/contract_testcases/substrate/functions/args_and_returns.so
 	diagnostic [label="found contract ‘args’\nlevel Debug\ntests/contract_testcases/substrate/functions/args_and_returns.sol:2:5-19"]
 	diagnostic_6 [label="arg1 is already declared\nlevel Error\ntests/contract_testcases/substrate/functions/args_and_returns.sol:3:38-42"]
 	note [label="location of previous declaration\ntests/contract_testcases/substrate/functions/args_and_returns.sol:3:27-31"]
-	diagnostic_8 [label="function parameter ‘arg1‘ has never been read\nlevel Warning\ntests/contract_testcases/substrate/functions/args_and_returns.sol:3:27-31"]
-	diagnostic_9 [label="function parameter ‘arg1‘ has never been read\nlevel Warning\ntests/contract_testcases/substrate/functions/args_and_returns.sol:3:38-42"]
 	contracts -> contract
 	contract -> foo [label="function"]
 	foo -> parameters [label="parameters"]
 	diagnostics -> diagnostic [label="Debug"]
 	diagnostics -> diagnostic_6 [label="Error"]
 	diagnostic_6 -> note [label="note"]
-	diagnostics -> diagnostic_8 [label="Warning"]
-	diagnostics -> diagnostic_9 [label="Warning"]
 }

+ 0 - 6
tests/contract_testcases/substrate/functions/args_and_returns_01.dot

@@ -6,9 +6,6 @@ strict digraph "tests/contract_testcases/substrate/functions/args_and_returns_01
 	diagnostic [label="found contract ‘args’\nlevel Debug\ntests/contract_testcases/substrate/functions/args_and_returns_01.sol:2:5-19"]
 	diagnostic_7 [label="arg2 is already declared\nlevel Error\ntests/contract_testcases/substrate/functions/args_and_returns_01.sol:3:68-72"]
 	note [label="location of previous declaration\ntests/contract_testcases/substrate/functions/args_and_returns_01.sol:3:38-42"]
-	diagnostic_9 [label="function parameter ‘arg1‘ has never been read\nlevel Warning\ntests/contract_testcases/substrate/functions/args_and_returns_01.sol:3:27-31"]
-	diagnostic_10 [label="function parameter ‘arg2‘ has never been read\nlevel Warning\ntests/contract_testcases/substrate/functions/args_and_returns_01.sol:3:38-42"]
-	diagnostic_11 [label="return variable ‘arg2‘ has never been assigned\nlevel Warning\ntests/contract_testcases/substrate/functions/args_and_returns_01.sol:3:68-72"]
 	contracts -> contract
 	contract -> foo [label="function"]
 	foo -> parameters [label="parameters"]
@@ -16,7 +13,4 @@ strict digraph "tests/contract_testcases/substrate/functions/args_and_returns_01
 	diagnostics -> diagnostic [label="Debug"]
 	diagnostics -> diagnostic_7 [label="Error"]
 	diagnostic_7 -> note [label="note"]
-	diagnostics -> diagnostic_9 [label="Warning"]
-	diagnostics -> diagnostic_10 [label="Warning"]
-	diagnostics -> diagnostic_11 [label="Warning"]
 }

+ 0 - 2
tests/contract_testcases/substrate/functions/mutability_03.dot

@@ -9,7 +9,6 @@ strict digraph "tests/contract_testcases/substrate/functions/mutability_03.sol"
 	number_literal_8 [label="int64 literal: 102\ntests/contract_testcases/substrate/functions/mutability_03.sol:5:23-26"]
 	diagnostic [label="found contract ‘test’\nlevel Debug\ntests/contract_testcases/substrate/functions/mutability_03.sol:1:1-15"]
 	diagnostic_11 [label="function declared ‘view’ but this expression writes to state\nlevel Error\ntests/contract_testcases/substrate/functions/mutability_03.sol:5:17-20"]
-	diagnostic_12 [label="storage variable ‘foo‘ has been assigned, but never read\nlevel Warning\ntests/contract_testcases/substrate/functions/mutability_03.sol:2:13-32"]
 	contracts -> contract
 	contract -> var [label="variable"]
 	var -> number_literal [label="initializer"]
@@ -20,5 +19,4 @@ strict digraph "tests/contract_testcases/substrate/functions/mutability_03.sol"
 	assign -> number_literal_8 [label="right"]
 	diagnostics -> diagnostic [label="Debug"]
 	diagnostics -> diagnostic_11 [label="Error"]
-	diagnostics -> diagnostic_12 [label="Warning"]
 }

+ 0 - 2
tests/contract_testcases/substrate/functions/payable.dot

@@ -5,12 +5,10 @@ strict digraph "tests/contract_testcases/substrate/functions/payable.sol" {
 	diagnostic [label="pragma ‘solidity’ is ignored\nlevel Debug\ntests/contract_testcases/substrate/functions/payable.sol:2:9-26"]
 	diagnostic_7 [label="found contract ‘c’\nlevel Debug\ntests/contract_testcases/substrate/functions/payable.sol:4:9-20"]
 	diagnostic_8 [label="internal or private function cannot be payable\nlevel Error\ntests/contract_testcases/substrate/functions/payable.sol:7:29-36"]
-	diagnostic_9 [label="storage variable ‘i‘ has been assigned, but never read\nlevel Warning\ntests/contract_testcases/substrate/functions/payable.sol:5:13-24"]
 	contracts -> contract
 	contract -> var [label="variable"]
 	var -> number_literal [label="initializer"]
 	diagnostics -> diagnostic [label="Debug"]
 	diagnostics -> diagnostic_7 [label="Debug"]
 	diagnostics -> diagnostic_8 [label="Error"]
-	diagnostics -> diagnostic_9 [label="Warning"]
 }

+ 0 - 2
tests/contract_testcases/substrate/functions/payable_01.dot

@@ -5,12 +5,10 @@ strict digraph "tests/contract_testcases/substrate/functions/payable_01.sol" {
 	diagnostic [label="pragma ‘solidity’ is ignored\nlevel Debug\ntests/contract_testcases/substrate/functions/payable_01.sol:2:9-26"]
 	diagnostic_7 [label="found contract ‘c’\nlevel Debug\ntests/contract_testcases/substrate/functions/payable_01.sol:4:9-20"]
 	diagnostic_8 [label="internal or private function cannot be payable\nlevel Error\ntests/contract_testcases/substrate/functions/payable_01.sol:7:29-36"]
-	diagnostic_9 [label="storage variable ‘i‘ has been assigned, but never read\nlevel Warning\ntests/contract_testcases/substrate/functions/payable_01.sol:5:13-24"]
 	contracts -> contract
 	contract -> var [label="variable"]
 	var -> number_literal [label="initializer"]
 	diagnostics -> diagnostic [label="Debug"]
 	diagnostics -> diagnostic_7 [label="Debug"]
 	diagnostics -> diagnostic_8 [label="Error"]
-	diagnostics -> diagnostic_9 [label="Warning"]
 }

+ 0 - 2
tests/contract_testcases/substrate/functions/payable_02.dot

@@ -5,12 +5,10 @@ strict digraph "tests/contract_testcases/substrate/functions/payable_02.sol" {
 	diagnostic [label="pragma ‘solidity’ is ignored\nlevel Debug\ntests/contract_testcases/substrate/functions/payable_02.sol:2:9-26"]
 	diagnostic_7 [label="found contract ‘c’\nlevel Debug\ntests/contract_testcases/substrate/functions/payable_02.sol:4:9-20"]
 	diagnostic_8 [label="receive function must be declared payable\nlevel Error\ntests/contract_testcases/substrate/functions/payable_02.sol:7:13-31"]
-	diagnostic_9 [label="storage variable ‘i‘ has been assigned, but never read\nlevel Warning\ntests/contract_testcases/substrate/functions/payable_02.sol:5:13-24"]
 	contracts -> contract
 	contract -> var [label="variable"]
 	var -> number_literal [label="initializer"]
 	diagnostics -> diagnostic [label="Debug"]
 	diagnostics -> diagnostic_7 [label="Debug"]
 	diagnostics -> diagnostic_8 [label="Error"]
-	diagnostics -> diagnostic_9 [label="Warning"]
 }

+ 0 - 2
tests/contract_testcases/substrate/functions/payable_03.dot

@@ -5,12 +5,10 @@ strict digraph "tests/contract_testcases/substrate/functions/payable_03.sol" {
 	diagnostic [label="pragma ‘solidity’ is ignored\nlevel Debug\ntests/contract_testcases/substrate/functions/payable_03.sol:2:9-26"]
 	diagnostic_7 [label="found contract ‘c’\nlevel Debug\ntests/contract_testcases/substrate/functions/payable_03.sol:4:9-20"]
 	diagnostic_8 [label="fallback function must not be declare payable, use ‘receive() external payable’ instead\nlevel Error\ntests/contract_testcases/substrate/functions/payable_03.sol:7:13-40"]
-	diagnostic_9 [label="storage variable ‘i‘ has been assigned, but never read\nlevel Warning\ntests/contract_testcases/substrate/functions/payable_03.sol:5:13-24"]
 	contracts -> contract
 	contract -> var [label="variable"]
 	var -> number_literal [label="initializer"]
 	diagnostics -> diagnostic [label="Debug"]
 	diagnostics -> diagnostic_7 [label="Debug"]
 	diagnostics -> diagnostic_8 [label="Error"]
-	diagnostics -> diagnostic_9 [label="Warning"]
 }

+ 2 - 4
tests/contract_testcases/substrate/inheritance/base_contract_01.dot

@@ -15,8 +15,7 @@ strict digraph "tests/contract_testcases/substrate/inheritance/base_contract_01.
 	diagnostic_15 [label="‘public’: visibility for constructors is ignored\nlevel Warning\ntests/contract_testcases/substrate/inheritance/base_contract_01.sol:3:35-41"]
 	diagnostic_16 [label="found contract ‘apex’\nlevel Debug\ntests/contract_testcases/substrate/inheritance/base_contract_01.sol:6:9-36"]
 	diagnostic_17 [label="conversion from bool to uint64 not possible\nlevel Error\ntests/contract_testcases/substrate/inheritance/base_contract_01.sol:6:31-35"]
-	diagnostic_18 [label="function parameter ‘a‘ has never been read\nlevel Warning\ntests/contract_testcases/substrate/inheritance/base_contract_01.sol:3:32-33"]
-	diagnostic_19 [label="missing arguments to base contract ‘base’ constructor\nlevel Error\ntests/contract_testcases/substrate/inheritance/base_contract_01.sol:6:9-36"]
+	diagnostic_18 [label="missing arguments to base contract ‘base’ constructor\nlevel Error\ntests/contract_testcases/substrate/inheritance/base_contract_01.sol:6:9-36"]
 	contracts -> contract
 	contract -> node_2 [label="constructor"]
 	node_2 -> parameters [label="parameters"]
@@ -33,6 +32,5 @@ strict digraph "tests/contract_testcases/substrate/inheritance/base_contract_01.
 	diagnostics -> diagnostic_15 [label="Warning"]
 	diagnostics -> diagnostic_16 [label="Debug"]
 	diagnostics -> diagnostic_17 [label="Error"]
-	diagnostics -> diagnostic_18 [label="Warning"]
-	diagnostics -> diagnostic_19 [label="Error"]
+	diagnostics -> diagnostic_18 [label="Error"]
 }

+ 2 - 4
tests/contract_testcases/substrate/inheritance/base_contract_on_constructor_07.dot

@@ -29,8 +29,7 @@ strict digraph "tests/contract_testcases/substrate/inheritance/base_contract_on_
 	diagnostic_29 [label="found contract ‘a’\nlevel Debug\ntests/contract_testcases/substrate/inheritance/base_contract_on_constructor_07.sol:10:9-20"]
 	diagnostic_30 [label="duplicate base contract ‘b’\nlevel Error\ntests/contract_testcases/substrate/inheritance/base_contract_on_constructor_07.sol:3:41-45"]
 	note [label="previous base contract ‘b’\ntests/contract_testcases/substrate/inheritance/base_contract_on_constructor_07.sol:3:34-40"]
-	diagnostic_32 [label="function parameter ‘y‘ has never been read\nlevel Warning\ntests/contract_testcases/substrate/inheritance/base_contract_on_constructor_07.sol:7:31-32"]
-	diagnostic_33 [label="missing arguments to base contract ‘a’ constructor\nlevel Error\ntests/contract_testcases/substrate/inheritance/base_contract_on_constructor_07.sol:2:9-24"]
+	diagnostic_32 [label="missing arguments to base contract ‘a’ constructor\nlevel Error\ntests/contract_testcases/substrate/inheritance/base_contract_on_constructor_07.sol:2:9-24"]
 	contracts -> contract
 	contract -> base [label="base"]
 	contract -> node_3 [label="constructor"]
@@ -61,6 +60,5 @@ strict digraph "tests/contract_testcases/substrate/inheritance/base_contract_on_
 	diagnostics -> diagnostic_29 [label="Debug"]
 	diagnostics -> diagnostic_30 [label="Error"]
 	diagnostic_30 -> note [label="note"]
-	diagnostics -> diagnostic_32 [label="Warning"]
-	diagnostics -> diagnostic_33 [label="Error"]
+	diagnostics -> diagnostic_32 [label="Error"]
 }

+ 0 - 2
tests/contract_testcases/substrate/inheritance/inherit_types_05.dot

@@ -13,7 +13,6 @@ strict digraph "tests/contract_testcases/substrate/inheritance/inherit_types_05.
 	diagnostic_15 [label="found contract ‘a’\nlevel Debug\ntests/contract_testcases/substrate/inheritance/inherit_types_05.sol:13:9-27"]
 	diagnostic_16 [label="already defined ‘foo’\nlevel Error\ntests/contract_testcases/substrate/inheritance/inherit_types_05.sol:3:20-23"]
 	note [label="previous definition of ‘foo’\ntests/contract_testcases/substrate/inheritance/inherit_types_05.sol:10:18-21"]
-	diagnostic_18 [label="function parameter ‘x‘ has never been read\nlevel Warning\ntests/contract_testcases/substrate/inheritance/inherit_types_05.sol:14:31-32"]
 	enums -> foo
 	structs -> foo_3
 	contracts -> contract
@@ -28,5 +27,4 @@ strict digraph "tests/contract_testcases/substrate/inheritance/inherit_types_05.
 	diagnostics -> diagnostic_15 [label="Debug"]
 	diagnostics -> diagnostic_16 [label="Error"]
 	diagnostic_16 -> note [label="note"]
-	diagnostics -> diagnostic_18 [label="Warning"]
 }

+ 0 - 2
tests/contract_testcases/substrate/inheritance/inherit_variables_01.dot

@@ -8,7 +8,6 @@ strict digraph "tests/contract_testcases/substrate/inheritance/inherit_variables
 	diagnostic [label="found contract ‘b’\nlevel Debug\ntests/contract_testcases/substrate/inheritance/inherit_variables_01.sol:2:9-20"]
 	diagnostic_9 [label="found contract ‘c’\nlevel Debug\ntests/contract_testcases/substrate/inheritance/inherit_variables_01.sol:6:9-24"]
 	diagnostic_10 [label="`foo' is not found\nlevel Error\ntests/contract_testcases/substrate/inheritance/inherit_variables_01.sol:8:24-27"]
-	diagnostic_11 [label="storage variable ‘foo‘ has never been used\nlevel Warning\ntests/contract_testcases/substrate/inheritance/inherit_variables_01.sol:3:13-28"]
 	contracts -> contract
 	contract -> var [label="variable"]
 	contracts -> contract_3
@@ -18,5 +17,4 @@ strict digraph "tests/contract_testcases/substrate/inheritance/inherit_variables
 	diagnostics -> diagnostic [label="Debug"]
 	diagnostics -> diagnostic_9 [label="Debug"]
 	diagnostics -> diagnostic_10 [label="Error"]
-	diagnostics -> diagnostic_11 [label="Warning"]
 }

+ 0 - 2
tests/contract_testcases/substrate/inheritance/test_override_08.dot

@@ -14,7 +14,6 @@ strict digraph "tests/contract_testcases/substrate/inheritance/test_override_08.
 	diagnostic_14 [label="found contract ‘a’\nlevel Debug\ntests/contract_testcases/substrate/inheritance/test_override_08.sol:6:9-24"]
 	diagnostic_15 [label="contract ‘a’ missing override for function ‘bar’\nlevel Error\ntests/contract_testcases/substrate/inheritance/test_override_08.sol:6:9-24"]
 	note [label="declaration of function ‘bar’\ntests/contract_testcases/substrate/inheritance/test_override_08.sol:3:17-47"]
-	diagnostic_17 [label="function parameter ‘x‘ has never been read\nlevel Warning\ntests/contract_testcases/substrate/inheritance/test_override_08.sol:7:34-35"]
 	contracts -> contract
 	contract -> bar [label="function"]
 	bar -> parameters [label="parameters"]
@@ -30,5 +29,4 @@ strict digraph "tests/contract_testcases/substrate/inheritance/test_override_08.
 	diagnostics -> diagnostic_14 [label="Debug"]
 	diagnostics -> diagnostic_15 [label="Error"]
 	diagnostic_15 -> note [label="note"]
-	diagnostics -> diagnostic_17 [label="Warning"]
 }

+ 0 - 2
tests/contract_testcases/substrate/libraries/using_06.dot

@@ -25,7 +25,6 @@ strict digraph "tests/contract_testcases/substrate/libraries/using_06.sol" {
 	diagnostic [label="found contract ‘test’\nlevel Debug\ntests/contract_testcases/substrate/libraries/using_06.sol:2:9-23"]
 	diagnostic_26 [label="found library ‘ints’\nlevel Debug\ntests/contract_testcases/substrate/libraries/using_06.sol:10:9-22"]
 	diagnostic_27 [label="cannot find overloaded library function which matches signature\nlevel Error\ntests/contract_testcases/substrate/libraries/using_06.sol:6:24-39"]
-	diagnostic_28 [label="storage variable ‘nada‘ has been assigned, but never read\nlevel Warning\ntests/contract_testcases/substrate/libraries/using_06.sol:11:13-37"]
 	contracts -> contract
 	contract -> using [label="base"]
 	contract -> foo [label="function"]
@@ -52,5 +51,4 @@ strict digraph "tests/contract_testcases/substrate/libraries/using_06.sol" {
 	diagnostics -> diagnostic [label="Debug"]
 	diagnostics -> diagnostic_26 [label="Debug"]
 	diagnostics -> diagnostic_27 [label="Error"]
-	diagnostics -> diagnostic_28 [label="Warning"]
 }

+ 0 - 2
tests/contract_testcases/substrate/mappings/bad_mapping_declares_03.dot

@@ -3,10 +3,8 @@ strict digraph "tests/contract_testcases/substrate/mappings/bad_mapping_declares
 	var [label="variable data\nvisibility internal\ntests/contract_testcases/substrate/mappings/bad_mapping_declares_03.sol:3:13-41"]
 	diagnostic [label="found contract ‘c’\nlevel Debug\ntests/contract_testcases/substrate/mappings/bad_mapping_declares_03.sol:2:9-20"]
 	diagnostic_6 [label="‘data’ is a contract variable\nlevel Error\ntests/contract_testcases/substrate/mappings/bad_mapping_declares_03.sol:4:21-25"]
-	diagnostic_7 [label="storage variable ‘data‘ has never been used\nlevel Warning\ntests/contract_testcases/substrate/mappings/bad_mapping_declares_03.sol:3:13-41"]
 	contracts -> contract
 	contract -> var [label="variable"]
 	diagnostics -> diagnostic [label="Debug"]
 	diagnostics -> diagnostic_6 [label="Error"]
-	diagnostics -> diagnostic_7 [label="Warning"]
 }

+ 0 - 2
tests/contract_testcases/substrate/modifier/function_modifier_02.dot

@@ -8,7 +8,6 @@ strict digraph "tests/contract_testcases/substrate/modifier/function_modifier_02
 	diagnostic [label="found contract ‘c’\nlevel Debug\ntests/contract_testcases/substrate/modifier/function_modifier_02.sol:2:9-20"]
 	diagnostic_9 [label="function parameter ‘f‘ has never been read\nlevel Warning\ntests/contract_testcases/substrate/modifier/function_modifier_02.sol:3:32-33"]
 	diagnostic_10 [label="conversion from bool to int32 not possible\nlevel Error\ntests/contract_testcases/substrate/modifier/function_modifier_02.sol:5:38-39"]
-	diagnostic_11 [label="function parameter ‘x‘ has never been read\nlevel Warning\ntests/contract_testcases/substrate/modifier/function_modifier_02.sol:5:31-32"]
 	contracts -> contract
 	contract -> foo [label="modifier"]
 	foo -> parameters [label="parameters"]
@@ -18,5 +17,4 @@ strict digraph "tests/contract_testcases/substrate/modifier/function_modifier_02
 	diagnostics -> diagnostic [label="Debug"]
 	diagnostics -> diagnostic_9 [label="Warning"]
 	diagnostics -> diagnostic_10 [label="Error"]
-	diagnostics -> diagnostic_11 [label="Warning"]
 }

+ 0 - 2
tests/contract_testcases/substrate/modifier/mutability.dot

@@ -8,7 +8,6 @@ strict digraph "tests/contract_testcases/substrate/modifier/mutability.sol" {
 	diagnostic [label="found contract ‘c’\nlevel Debug\ntests/contract_testcases/substrate/modifier/mutability.sol:2:9-20"]
 	diagnostic_9 [label="function parameter ‘x‘ has never been read\nlevel Warning\ntests/contract_testcases/substrate/modifier/mutability.sol:4:33-34"]
 	diagnostic_10 [label="function declared ‘pure’ but this expression reads from state\nlevel Error\ntests/contract_testcases/substrate/modifier/mutability.sol:6:32-35"]
-	diagnostic_11 [label="storage variable ‘var‘ has never been used\nlevel Warning\ntests/contract_testcases/substrate/modifier/mutability.sol:3:13-23"]
 	contracts -> contract
 	contract -> var [label="variable"]
 	contract -> foo [label="modifier"]
@@ -18,5 +17,4 @@ strict digraph "tests/contract_testcases/substrate/modifier/mutability.sol" {
 	diagnostics -> diagnostic [label="Debug"]
 	diagnostics -> diagnostic_9 [label="Warning"]
 	diagnostics -> diagnostic_10 [label="Error"]
-	diagnostics -> diagnostic_11 [label="Warning"]
 }

+ 0 - 2
tests/contract_testcases/substrate/primitives/address.dot

@@ -3,10 +3,8 @@ strict digraph "tests/contract_testcases/substrate/primitives/address.sol" {
 	var [label="variable foo\nvisibility internal\ntests/contract_testcases/substrate/primitives/address.sol:2:13-51"]
 	diagnostic [label="found contract ‘test’\nlevel Debug\ntests/contract_testcases/substrate/primitives/address.sol:1:1-15"]
 	diagnostic_6 [label="expected ‘address’, found integer\nlevel Error\ntests/contract_testcases/substrate/primitives/address.sol:2:28-51"]
-	diagnostic_7 [label="storage variable ‘foo‘ has been assigned, but never read\nlevel Warning\ntests/contract_testcases/substrate/primitives/address.sol:2:13-51"]
 	contracts -> contract
 	contract -> var [label="variable"]
 	diagnostics -> diagnostic [label="Debug"]
 	diagnostics -> diagnostic_6 [label="Error"]
-	diagnostics -> diagnostic_7 [label="Warning"]
 }

+ 0 - 2
tests/contract_testcases/substrate/primitives/address_01.dot

@@ -3,10 +3,8 @@ strict digraph "tests/contract_testcases/substrate/primitives/address_01.sol" {
 	var [label="variable foo\nvisibility internal\ntests/contract_testcases/substrate/primitives/address_01.sol:2:13-93"]
 	diagnostic [label="found contract ‘test’\nlevel Debug\ntests/contract_testcases/substrate/primitives/address_01.sol:1:1-15"]
 	diagnostic_6 [label="expected ‘address’, found integer\nlevel Error\ntests/contract_testcases/substrate/primitives/address_01.sol:2:27-93"]
-	diagnostic_7 [label="storage variable ‘foo‘ has been assigned, but never read\nlevel Warning\ntests/contract_testcases/substrate/primitives/address_01.sol:2:13-93"]
 	contracts -> contract
 	contract -> var [label="variable"]
 	diagnostics -> diagnostic [label="Debug"]
 	diagnostics -> diagnostic_6 [label="Error"]
-	diagnostics -> diagnostic_7 [label="Warning"]
 }

+ 0 - 2
tests/contract_testcases/substrate/primitives/address_02.dot

@@ -3,10 +3,8 @@ strict digraph "tests/contract_testcases/substrate/primitives/address_02.sol" {
 	var [label="variable foo\nvisibility internal\ntests/contract_testcases/substrate/primitives/address_02.sol:2:13-83"]
 	diagnostic [label="found contract ‘test’\nlevel Debug\ntests/contract_testcases/substrate/primitives/address_02.sol:1:1-15"]
 	diagnostic_6 [label="address literal 5GBWmgdFAMqm8ZgAHGobqDqX6tjLxJhv53ygjNtaaAn3sje incorrect length of 34\nlevel Error\ntests/contract_testcases/substrate/primitives/address_02.sol:2:27-83"]
-	diagnostic_7 [label="storage variable ‘foo‘ has been assigned, but never read\nlevel Warning\ntests/contract_testcases/substrate/primitives/address_02.sol:2:13-83"]
 	contracts -> contract
 	contract -> var [label="variable"]
 	diagnostics -> diagnostic [label="Debug"]
 	diagnostics -> diagnostic_6 [label="Error"]
-	diagnostics -> diagnostic_7 [label="Warning"]
 }

+ 0 - 2
tests/contract_testcases/substrate/primitives/address_03.dot

@@ -3,10 +3,8 @@ strict digraph "tests/contract_testcases/substrate/primitives/address_03.sol" {
 	var [label="variable foo\nvisibility internal\ntests/contract_testcases/substrate/primitives/address_03.sol:2:13-84"]
 	diagnostic [label="found contract ‘test’\nlevel Debug\ntests/contract_testcases/substrate/primitives/address_03.sol:1:1-15"]
 	diagnostic_6 [label="address literal 5GBWmgdFAMqm8ZgAHGobqDqX6tjLxJhv53ygjNtaaAn3sj%Z invalid character '%'\nlevel Error\ntests/contract_testcases/substrate/primitives/address_03.sol:2:73"]
-	diagnostic_7 [label="storage variable ‘foo‘ has been assigned, but never read\nlevel Warning\ntests/contract_testcases/substrate/primitives/address_03.sol:2:13-84"]
 	contracts -> contract
 	contract -> var [label="variable"]
 	diagnostics -> diagnostic [label="Debug"]
 	diagnostics -> diagnostic_6 [label="Error"]
-	diagnostics -> diagnostic_7 [label="Warning"]
 }

+ 0 - 2
tests/contract_testcases/substrate/primitives/address_04.dot

@@ -3,10 +3,8 @@ strict digraph "tests/contract_testcases/substrate/primitives/address_04.sol" {
 	var [label="variable foo\nvisibility internal\ntests/contract_testcases/substrate/primitives/address_04.sol:2:13-84"]
 	diagnostic [label="found contract ‘test’\nlevel Debug\ntests/contract_testcases/substrate/primitives/address_04.sol:1:1-15"]
 	diagnostic_6 [label="address literal 5GBWmgdFAMqm8ZgAHGobqDqX6tjLxJhv53ygjNtaaAn3sjZZ hash incorrect checksum\nlevel Error\ntests/contract_testcases/substrate/primitives/address_04.sol:2:27-84"]
-	diagnostic_7 [label="storage variable ‘foo‘ has been assigned, but never read\nlevel Warning\ntests/contract_testcases/substrate/primitives/address_04.sol:2:13-84"]
 	contracts -> contract
 	contract -> var [label="variable"]
 	diagnostics -> diagnostic [label="Debug"]
 	diagnostics -> diagnostic_6 [label="Error"]
-	diagnostics -> diagnostic_7 [label="Warning"]
 }

+ 0 - 2
tests/contract_testcases/substrate/primitives/address_09.dot

@@ -3,10 +3,8 @@ strict digraph "tests/contract_testcases/substrate/primitives/address_09.sol" {
 	var [label="variable foo\nvisibility internal\ntests/contract_testcases/substrate/primitives/address_09.sol:2:13-69"]
 	diagnostic [label="found contract ‘test’\nlevel Debug\ntests/contract_testcases/substrate/primitives/address_09.sol:1:1-15"]
 	diagnostic_6 [label="ethereum address literal ‘0x5b0Ddf2835f0A76c96D6113D47F6482e51a55487’ not supported on target substrate\nlevel Error\ntests/contract_testcases/substrate/primitives/address_09.sol:2:27-69"]
-	diagnostic_7 [label="storage variable ‘foo‘ has been assigned, but never read\nlevel Warning\ntests/contract_testcases/substrate/primitives/address_09.sol:2:13-69"]
 	contracts -> contract
 	contract -> var [label="variable"]
 	diagnostics -> diagnostic [label="Debug"]
 	diagnostics -> diagnostic_6 [label="Error"]
-	diagnostics -> diagnostic_7 [label="Warning"]
 }

+ 0 - 2
tests/contract_testcases/substrate/primitives/test_literal_overflow.dot

@@ -3,10 +3,8 @@ strict digraph "tests/contract_testcases/substrate/primitives/test_literal_overf
 	var [label="variable foo\nvisibility internal\ntests/contract_testcases/substrate/primitives/test_literal_overflow.sol:2:13-28"]
 	diagnostic [label="found contract ‘test’\nlevel Debug\ntests/contract_testcases/substrate/primitives/test_literal_overflow.sol:1:1-15"]
 	diagnostic_6 [label="literal 300 is too large to fit into type ‘uint8’\nlevel Error\ntests/contract_testcases/substrate/primitives/test_literal_overflow.sol:2:25-28"]
-	diagnostic_7 [label="storage variable ‘foo‘ has been assigned, but never read\nlevel Warning\ntests/contract_testcases/substrate/primitives/test_literal_overflow.sol:2:13-28"]
 	contracts -> contract
 	contract -> var [label="variable"]
 	diagnostics -> diagnostic [label="Debug"]
 	diagnostics -> diagnostic_6 [label="Error"]
-	diagnostics -> diagnostic_7 [label="Warning"]
 }

+ 0 - 2
tests/contract_testcases/substrate/primitives/test_literal_overflow_01.dot

@@ -3,10 +3,8 @@ strict digraph "tests/contract_testcases/substrate/primitives/test_literal_overf
 	var [label="variable foo\nvisibility internal\ntests/contract_testcases/substrate/primitives/test_literal_overflow_01.sol:2:13-33"]
 	diagnostic [label="found contract ‘test’\nlevel Debug\ntests/contract_testcases/substrate/primitives/test_literal_overflow_01.sol:1:1-15"]
 	diagnostic_6 [label="literal 65536 is too large to fit into type ‘uint16’\nlevel Error\ntests/contract_testcases/substrate/primitives/test_literal_overflow_01.sol:2:26-33"]
-	diagnostic_7 [label="storage variable ‘foo‘ has been assigned, but never read\nlevel Warning\ntests/contract_testcases/substrate/primitives/test_literal_overflow_01.sol:2:13-33"]
 	contracts -> contract
 	contract -> var [label="variable"]
 	diagnostics -> diagnostic [label="Debug"]
 	diagnostics -> diagnostic_6 [label="Error"]
-	diagnostics -> diagnostic_7 [label="Warning"]
 }

+ 0 - 2
tests/contract_testcases/substrate/primitives/test_literal_overflow_02.dot

@@ -3,10 +3,8 @@ strict digraph "tests/contract_testcases/substrate/primitives/test_literal_overf
 	var [label="variable foo\nvisibility internal\ntests/contract_testcases/substrate/primitives/test_literal_overflow_02.sol:2:13-29"]
 	diagnostic [label="found contract ‘test’\nlevel Debug\ntests/contract_testcases/substrate/primitives/test_literal_overflow_02.sol:1:1-15"]
 	diagnostic_6 [label="literal 128 is too large to fit into type ‘int8’\nlevel Error\ntests/contract_testcases/substrate/primitives/test_literal_overflow_02.sol:2:24-29"]
-	diagnostic_7 [label="storage variable ‘foo‘ has been assigned, but never read\nlevel Warning\ntests/contract_testcases/substrate/primitives/test_literal_overflow_02.sol:2:13-29"]
 	contracts -> contract
 	contract -> var [label="variable"]
 	diagnostics -> diagnostic [label="Debug"]
 	diagnostics -> diagnostic_6 [label="Error"]
-	diagnostics -> diagnostic_7 [label="Warning"]
 }

+ 0 - 2
tests/contract_testcases/substrate/primitives/test_literal_overflow_03.dot

@@ -3,10 +3,8 @@ strict digraph "tests/contract_testcases/substrate/primitives/test_literal_overf
 	var [label="variable foo\nvisibility internal\ntests/contract_testcases/substrate/primitives/test_literal_overflow_03.sol:2:13-28"]
 	diagnostic [label="found contract ‘test’\nlevel Debug\ntests/contract_testcases/substrate/primitives/test_literal_overflow_03.sol:1:1-15"]
 	diagnostic_6 [label="literal -129 is too large to fit into type ‘int8’\nlevel Error\ntests/contract_testcases/substrate/primitives/test_literal_overflow_03.sol:2:24-25"]
-	diagnostic_7 [label="storage variable ‘foo‘ has been assigned, but never read\nlevel Warning\ntests/contract_testcases/substrate/primitives/test_literal_overflow_03.sol:2:13-28"]
 	contracts -> contract
 	contract -> var [label="variable"]
 	diagnostics -> diagnostic [label="Debug"]
 	diagnostics -> diagnostic_6 [label="Error"]
-	diagnostics -> diagnostic_7 [label="Warning"]
 }

+ 0 - 2
tests/contract_testcases/substrate/primitives/test_literal_overflow_07.dot

@@ -3,10 +3,8 @@ strict digraph "tests/contract_testcases/substrate/primitives/test_literal_overf
 	var [label="variable foo\nvisibility internal\ntests/contract_testcases/substrate/primitives/test_literal_overflow_07.sol:2:13-30"]
 	diagnostic [label="found contract ‘test’\nlevel Debug\ntests/contract_testcases/substrate/primitives/test_literal_overflow_07.sol:1:1-15"]
 	diagnostic_6 [label="negative literal -130 not allowed for unsigned type ‘uint8’\nlevel Error\ntests/contract_testcases/substrate/primitives/test_literal_overflow_07.sol:2:25-26"]
-	diagnostic_7 [label="storage variable ‘foo‘ has been assigned, but never read\nlevel Warning\ntests/contract_testcases/substrate/primitives/test_literal_overflow_07.sol:2:13-30"]
 	contracts -> contract
 	contract -> var [label="variable"]
 	diagnostics -> diagnostic [label="Debug"]
 	diagnostics -> diagnostic_6 [label="Error"]
-	diagnostics -> diagnostic_7 [label="Warning"]
 }

+ 0 - 2
tests/contract_testcases/substrate/primitives/test_literal_overflow_08.dot

@@ -3,10 +3,8 @@ strict digraph "tests/contract_testcases/substrate/primitives/test_literal_overf
 	var [label="variable foo\nvisibility internal\ntests/contract_testcases/substrate/primitives/test_literal_overflow_08.sol:2:13-46"]
 	diagnostic [label="found contract ‘test’\nlevel Debug\ntests/contract_testcases/substrate/primitives/test_literal_overflow_08.sol:1:1-15"]
 	diagnostic_6 [label="literal 18446744073709551616 is too large to fit into type ‘int64’\nlevel Error\ntests/contract_testcases/substrate/primitives/test_literal_overflow_08.sol:2:25-46"]
-	diagnostic_7 [label="storage variable ‘foo‘ has been assigned, but never read\nlevel Warning\ntests/contract_testcases/substrate/primitives/test_literal_overflow_08.sol:2:13-46"]
 	contracts -> contract
 	contract -> var [label="variable"]
 	diagnostics -> diagnostic [label="Debug"]
 	diagnostics -> diagnostic_6 [label="Error"]
-	diagnostics -> diagnostic_7 [label="Warning"]
 }

+ 0 - 2
tests/contract_testcases/substrate/primitives/test_literal_overflow_09.dot

@@ -3,10 +3,8 @@ strict digraph "tests/contract_testcases/substrate/primitives/test_literal_overf
 	var [label="variable foo\nvisibility internal\ntests/contract_testcases/substrate/primitives/test_literal_overflow_09.sol:2:13-34"]
 	diagnostic [label="found contract ‘test’\nlevel Debug\ntests/contract_testcases/substrate/primitives/test_literal_overflow_09.sol:1:1-15"]
 	diagnostic_6 [label="hex literal 0xf12233 must be 8 digits for type ‘bytes4’\nlevel Error\ntests/contract_testcases/substrate/primitives/test_literal_overflow_09.sol:2:26-34"]
-	diagnostic_7 [label="storage variable ‘foo‘ has been assigned, but never read\nlevel Warning\ntests/contract_testcases/substrate/primitives/test_literal_overflow_09.sol:2:13-34"]
 	contracts -> contract
 	contract -> var [label="variable"]
 	diagnostics -> diagnostic [label="Debug"]
 	diagnostics -> diagnostic_6 [label="Error"]
-	diagnostics -> diagnostic_7 [label="Warning"]
 }

+ 0 - 2
tests/contract_testcases/substrate/primitives/test_literal_overflow_10.dot

@@ -3,10 +3,8 @@ strict digraph "tests/contract_testcases/substrate/primitives/test_literal_overf
 	var [label="variable foo\nvisibility internal\ntests/contract_testcases/substrate/primitives/test_literal_overflow_10.sol:2:13-38"]
 	diagnostic [label="found contract ‘test’\nlevel Debug\ntests/contract_testcases/substrate/primitives/test_literal_overflow_10.sol:1:1-15"]
 	diagnostic_6 [label="hex literal 0x0122334455 must be 8 digits for type ‘bytes4’\nlevel Error\ntests/contract_testcases/substrate/primitives/test_literal_overflow_10.sol:2:26-38"]
-	diagnostic_7 [label="storage variable ‘foo‘ has been assigned, but never read\nlevel Warning\ntests/contract_testcases/substrate/primitives/test_literal_overflow_10.sol:2:13-38"]
 	contracts -> contract
 	contract -> var [label="variable"]
 	diagnostics -> diagnostic [label="Debug"]
 	diagnostics -> diagnostic_6 [label="Error"]
-	diagnostics -> diagnostic_7 [label="Warning"]
 }

+ 0 - 2
tests/contract_testcases/substrate/strings/string_escape.dot

@@ -6,7 +6,6 @@ strict digraph "tests/contract_testcases/substrate/strings/string_escape.sol" {
 	number_literal [label="uint32 literal: 0\ntests/contract_testcases/substrate/strings/string_escape.sol:4:32-36"]
 	diagnostic [label="found contract ‘c’\nlevel Debug\ntests/contract_testcases/substrate/strings/string_escape.sol:2:9-20"]
 	diagnostic_8 [label="\x escape should be followed by two hex digits\nlevel Error\ntests/contract_testcases/substrate/strings/string_escape.sol:4:33-34"]
-	diagnostic_9 [label="local variable ‘f‘ has been assigned, but never read\nlevel Warning\ntests/contract_testcases/substrate/strings/string_escape.sol:4:28-29"]
 	contracts -> contract
 	contract -> foo [label="function"]
 	foo -> var_decl [label="body"]
@@ -14,5 +13,4 @@ strict digraph "tests/contract_testcases/substrate/strings/string_escape.sol" {
 	alloc_array -> number_literal [label="length"]
 	diagnostics -> diagnostic [label="Debug"]
 	diagnostics -> diagnostic_8 [label="Error"]
-	diagnostics -> diagnostic_9 [label="Warning"]
 }

+ 0 - 2
tests/contract_testcases/substrate/strings/string_escape_01.dot

@@ -6,7 +6,6 @@ strict digraph "tests/contract_testcases/substrate/strings/string_escape_01.sol"
 	number_literal [label="uint32 literal: 0\ntests/contract_testcases/substrate/strings/string_escape_01.sol:4:32-38"]
 	diagnostic [label="found contract ‘c’\nlevel Debug\ntests/contract_testcases/substrate/strings/string_escape_01.sol:2:9-20"]
 	diagnostic_8 [label="\x escape should be followed by two hex digits\nlevel Error\ntests/contract_testcases/substrate/strings/string_escape_01.sol:4:33-36"]
-	diagnostic_9 [label="local variable ‘f‘ has been assigned, but never read\nlevel Warning\ntests/contract_testcases/substrate/strings/string_escape_01.sol:4:28-29"]
 	contracts -> contract
 	contract -> foo [label="function"]
 	foo -> var_decl [label="body"]
@@ -14,5 +13,4 @@ strict digraph "tests/contract_testcases/substrate/strings/string_escape_01.sol"
 	alloc_array -> number_literal [label="length"]
 	diagnostics -> diagnostic [label="Debug"]
 	diagnostics -> diagnostic_8 [label="Error"]
-	diagnostics -> diagnostic_9 [label="Warning"]
 }

+ 0 - 2
tests/contract_testcases/substrate/strings/string_escape_02.dot

@@ -6,7 +6,6 @@ strict digraph "tests/contract_testcases/substrate/strings/string_escape_02.sol"
 	number_literal [label="uint32 literal: 0\ntests/contract_testcases/substrate/strings/string_escape_02.sol:4:32-42"]
 	diagnostic [label="found contract ‘c’\nlevel Debug\ntests/contract_testcases/substrate/strings/string_escape_02.sol:2:9-20"]
 	diagnostic_8 [label="\x escape should be followed by two hex digits\nlevel Error\ntests/contract_testcases/substrate/strings/string_escape_02.sol:4:33-37"]
-	diagnostic_9 [label="local variable ‘f‘ has been assigned, but never read\nlevel Warning\ntests/contract_testcases/substrate/strings/string_escape_02.sol:4:28-29"]
 	contracts -> contract
 	contract -> foo [label="function"]
 	foo -> var_decl [label="body"]
@@ -14,5 +13,4 @@ strict digraph "tests/contract_testcases/substrate/strings/string_escape_02.sol"
 	alloc_array -> number_literal [label="length"]
 	diagnostics -> diagnostic [label="Debug"]
 	diagnostics -> diagnostic_8 [label="Error"]
-	diagnostics -> diagnostic_9 [label="Warning"]
 }

+ 0 - 2
tests/contract_testcases/substrate/strings/string_escape_03.dot

@@ -6,7 +6,6 @@ strict digraph "tests/contract_testcases/substrate/strings/string_escape_03.sol"
 	number_literal [label="uint32 literal: 0\ntests/contract_testcases/substrate/strings/string_escape_03.sol:4:32-36"]
 	diagnostic [label="found contract ‘c’\nlevel Debug\ntests/contract_testcases/substrate/strings/string_escape_03.sol:2:9-20"]
 	diagnostic_8 [label="\u escape should be followed by four hex digits\nlevel Error\ntests/contract_testcases/substrate/strings/string_escape_03.sol:4:33-34"]
-	diagnostic_9 [label="local variable ‘f‘ has been assigned, but never read\nlevel Warning\ntests/contract_testcases/substrate/strings/string_escape_03.sol:4:28-29"]
 	contracts -> contract
 	contract -> foo [label="function"]
 	foo -> var_decl [label="body"]
@@ -14,5 +13,4 @@ strict digraph "tests/contract_testcases/substrate/strings/string_escape_03.sol"
 	alloc_array -> number_literal [label="length"]
 	diagnostics -> diagnostic [label="Debug"]
 	diagnostics -> diagnostic_8 [label="Error"]
-	diagnostics -> diagnostic_9 [label="Warning"]
 }

+ 0 - 2
tests/contract_testcases/substrate/strings/string_escape_04.dot

@@ -6,7 +6,6 @@ strict digraph "tests/contract_testcases/substrate/strings/string_escape_04.sol"
 	number_literal [label="uint32 literal: 6\ntests/contract_testcases/substrate/strings/string_escape_04.sol:4:32-48"]
 	diagnostic [label="found contract ‘c’\nlevel Debug\ntests/contract_testcases/substrate/strings/string_escape_04.sol:2:9-20"]
 	diagnostic_8 [label="\u escape should be followed by four hex digits\nlevel Error\ntests/contract_testcases/substrate/strings/string_escape_04.sol:4:33-37"]
-	diagnostic_9 [label="local variable ‘f‘ has been assigned, but never read\nlevel Warning\ntests/contract_testcases/substrate/strings/string_escape_04.sol:4:28-29"]
 	contracts -> contract
 	contract -> foo [label="function"]
 	foo -> var_decl [label="body"]
@@ -14,5 +13,4 @@ strict digraph "tests/contract_testcases/substrate/strings/string_escape_04.sol"
 	alloc_array -> number_literal [label="length"]
 	diagnostics -> diagnostic [label="Debug"]
 	diagnostics -> diagnostic_8 [label="Error"]
-	diagnostics -> diagnostic_9 [label="Warning"]
 }

+ 0 - 2
tests/contract_testcases/substrate/strings/string_escape_05.dot

@@ -6,7 +6,6 @@ strict digraph "tests/contract_testcases/substrate/strings/string_escape_05.sol"
 	number_literal [label="uint32 literal: 1\ntests/contract_testcases/substrate/strings/string_escape_05.sol:4:32-40"]
 	diagnostic [label="found contract ‘c’\nlevel Debug\ntests/contract_testcases/substrate/strings/string_escape_05.sol:2:9-20"]
 	diagnostic_8 [label="\u escape should be followed by four hex digits\nlevel Error\ntests/contract_testcases/substrate/strings/string_escape_05.sol:4:33-36"]
-	diagnostic_9 [label="local variable ‘f‘ has been assigned, but never read\nlevel Warning\ntests/contract_testcases/substrate/strings/string_escape_05.sol:4:28-29"]
 	contracts -> contract
 	contract -> foo [label="function"]
 	foo -> var_decl [label="body"]
@@ -14,5 +13,4 @@ strict digraph "tests/contract_testcases/substrate/strings/string_escape_05.sol"
 	alloc_array -> number_literal [label="length"]
 	diagnostics -> diagnostic [label="Debug"]
 	diagnostics -> diagnostic_8 [label="Error"]
-	diagnostics -> diagnostic_9 [label="Warning"]
 }

+ 0 - 2
tests/contract_testcases/substrate/tags/event_tag.dot

@@ -1,8 +1,6 @@
 strict digraph "tests/contract_testcases/substrate/tags/event_tag.sol" {
 	x [label="name:x\ntests/contract_testcases/substrate/tags/event_tag.sol:3:15-16\nfield name:f ty:uint32 indexed:no"]
 	diagnostic [label="tag ‘@param’ missing parameter name\nlevel Error\ntests/contract_testcases/substrate/tags/event_tag.sol:2:14-19"]
-	diagnostic_6 [label="event ‘x‘ has never been emitted\nlevel Warning\ntests/contract_testcases/substrate/tags/event_tag.sol:3:15-16"]
 	events -> x
 	diagnostics -> diagnostic [label="Error"]
-	diagnostics -> diagnostic_6 [label="Warning"]
 }

+ 0 - 2
tests/contract_testcases/substrate/tags/event_tag_01.dot

@@ -1,8 +1,6 @@
 strict digraph "tests/contract_testcases/substrate/tags/event_tag_01.sol" {
 	x [label="name:x\ntests/contract_testcases/substrate/tags/event_tag_01.sol:3:15-16\nfield name:f ty:uint32 indexed:no"]
 	diagnostic [label="tag ‘@param’ no field ‘g’\nlevel Error\ntests/contract_testcases/substrate/tags/event_tag_01.sol:2:20-21"]
-	diagnostic_6 [label="event ‘x‘ has never been emitted\nlevel Warning\ntests/contract_testcases/substrate/tags/event_tag_01.sol:3:15-16"]
 	events -> x
 	diagnostics -> diagnostic [label="Error"]
-	diagnostics -> diagnostic_6 [label="Warning"]
 }

+ 0 - 2
tests/contract_testcases/substrate/tags/event_tag_02.dot

@@ -2,9 +2,7 @@ strict digraph "tests/contract_testcases/substrate/tags/event_tag_02.sol" {
 	x [label="name:x\ntests/contract_testcases/substrate/tags/event_tag_02.sol:4:15-16\nfield name:f ty:uint32 indexed:no"]
 	tags [label="param: asdad"]
 	diagnostic [label="duplicate tag ‘@param’ for ‘f’\nlevel Error\ntests/contract_testcases/substrate/tags/event_tag_02.sol:3:14-19"]
-	diagnostic_7 [label="event ‘x‘ has never been emitted\nlevel Warning\ntests/contract_testcases/substrate/tags/event_tag_02.sol:4:15-16"]
 	events -> x
 	x -> tags [label="tags"]
 	diagnostics -> diagnostic [label="Error"]
-	diagnostics -> diagnostic_7 [label="Warning"]
 }

+ 0 - 2
tests/contract_testcases/substrate/tags/functions_01.dot

@@ -5,12 +5,10 @@ strict digraph "tests/contract_testcases/substrate/tags/functions_01.sol" {
 	parameters [label="parameters\nint256 f"]
 	diagnostic [label="found contract ‘c’\nlevel Debug\ntests/contract_testcases/substrate/tags/functions_01.sol:2:9-20"]
 	diagnostic_7 [label="tag ‘@param’ no field ‘g’\nlevel Error\ntests/contract_testcases/substrate/tags/functions_01.sol:4:24-25"]
-	diagnostic_8 [label="function parameter ‘f‘ has never been read\nlevel Warning\ntests/contract_testcases/substrate/tags/functions_01.sol:5:30-31"]
 	contracts -> contract
 	contract -> foo [label="function"]
 	foo -> tags [label="tags"]
 	foo -> parameters [label="parameters"]
 	diagnostics -> diagnostic [label="Debug"]
 	diagnostics -> diagnostic_7 [label="Error"]
-	diagnostics -> diagnostic_8 [label="Warning"]
 }

+ 0 - 2
tests/contract_testcases/substrate/tags/functions_02.dot

@@ -5,12 +5,10 @@ strict digraph "tests/contract_testcases/substrate/tags/functions_02.sol" {
 	parameters [label="parameters\nint256 f"]
 	diagnostic [label="found contract ‘c’\nlevel Debug\ntests/contract_testcases/substrate/tags/functions_02.sol:2:9-20"]
 	diagnostic_7 [label="duplicate tag ‘@param’ for ‘f’\nlevel Error\ntests/contract_testcases/substrate/tags/functions_02.sol:5:15-20"]
-	diagnostic_8 [label="function parameter ‘f‘ has never been read\nlevel Warning\ntests/contract_testcases/substrate/tags/functions_02.sol:7:30-31"]
 	contracts -> contract
 	contract -> foo [label="function"]
 	foo -> tags [label="tags"]
 	foo -> parameters [label="parameters"]
 	diagnostics -> diagnostic [label="Debug"]
 	diagnostics -> diagnostic_7 [label="Error"]
-	diagnostics -> diagnostic_8 [label="Warning"]
 }

+ 0 - 4
tests/contract_testcases/substrate/tags/functions_05.dot

@@ -4,13 +4,9 @@ strict digraph "tests/contract_testcases/substrate/tags/functions_05.sol" {
 	returns [label="returns\nint256 a\nbool b"]
 	diagnostic [label="found contract ‘c’\nlevel Debug\ntests/contract_testcases/substrate/tags/functions_05.sol:2:9-20"]
 	diagnostic_6 [label="tag ‘@return’ missing parameter name\nlevel Error\ntests/contract_testcases/substrate/tags/functions_05.sol:3:24"]
-	diagnostic_7 [label="return variable ‘a‘ has never been assigned\nlevel Warning\ntests/contract_testcases/substrate/tags/functions_05.sol:4:48-49"]
-	diagnostic_8 [label="return variable ‘b‘ has never been assigned\nlevel Warning\ntests/contract_testcases/substrate/tags/functions_05.sol:4:56-57"]
 	contracts -> contract
 	contract -> foo [label="function"]
 	foo -> returns [label="returns"]
 	diagnostics -> diagnostic [label="Debug"]
 	diagnostics -> diagnostic_6 [label="Error"]
-	diagnostics -> diagnostic_7 [label="Warning"]
-	diagnostics -> diagnostic_8 [label="Warning"]
 }

+ 0 - 4
tests/contract_testcases/substrate/tags/functions_06.dot

@@ -5,14 +5,10 @@ strict digraph "tests/contract_testcases/substrate/tags/functions_06.sol" {
 	returns [label="returns\nint256 a\nbool b"]
 	diagnostic [label="found contract ‘c’\nlevel Debug\ntests/contract_testcases/substrate/tags/functions_06.sol:2:9-20"]
 	diagnostic_7 [label="duplicate tag ‘@return’ for ‘a’\nlevel Error\ntests/contract_testcases/substrate/tags/functions_06.sol:4:18-24"]
-	diagnostic_8 [label="return variable ‘a‘ has never been assigned\nlevel Warning\ntests/contract_testcases/substrate/tags/functions_06.sol:5:48-49"]
-	diagnostic_9 [label="return variable ‘b‘ has never been assigned\nlevel Warning\ntests/contract_testcases/substrate/tags/functions_06.sol:5:56-57"]
 	contracts -> contract
 	contract -> foo [label="function"]
 	foo -> tags [label="tags"]
 	foo -> returns [label="returns"]
 	diagnostics -> diagnostic [label="Debug"]
 	diagnostics -> diagnostic_7 [label="Error"]
-	diagnostics -> diagnostic_8 [label="Warning"]
-	diagnostics -> diagnostic_9 [label="Warning"]
 }

+ 0 - 4
tests/contract_testcases/substrate/tags/functions_07.dot

@@ -4,13 +4,9 @@ strict digraph "tests/contract_testcases/substrate/tags/functions_07.sol" {
 	returns [label="returns\nint256 a\nbool b"]
 	diagnostic [label="found contract ‘c’\nlevel Debug\ntests/contract_testcases/substrate/tags/functions_07.sol:2:9-20"]
 	diagnostic_6 [label="missing contract for tag ‘@inheritdoc’\nlevel Error\ntests/contract_testcases/substrate/tags/functions_07.sol:3:18-28"]
-	diagnostic_7 [label="return variable ‘a‘ has never been assigned\nlevel Warning\ntests/contract_testcases/substrate/tags/functions_07.sol:4:48-49"]
-	diagnostic_8 [label="return variable ‘b‘ has never been assigned\nlevel Warning\ntests/contract_testcases/substrate/tags/functions_07.sol:4:56-57"]
 	contracts -> contract
 	contract -> foo [label="function"]
 	foo -> returns [label="returns"]
 	diagnostics -> diagnostic [label="Debug"]
 	diagnostics -> diagnostic_6 [label="Error"]
-	diagnostics -> diagnostic_7 [label="Warning"]
-	diagnostics -> diagnostic_8 [label="Warning"]
 }

+ 0 - 4
tests/contract_testcases/substrate/tags/functions_08.dot

@@ -4,13 +4,9 @@ strict digraph "tests/contract_testcases/substrate/tags/functions_08.sol" {
 	returns [label="returns\nint256 a\nbool b"]
 	diagnostic [label="found contract ‘c’\nlevel Debug\ntests/contract_testcases/substrate/tags/functions_08.sol:2:9-20"]
 	diagnostic_6 [label="base contract ‘b’ not found in tag ‘@inheritdoc’\nlevel Error\ntests/contract_testcases/substrate/tags/functions_08.sol:3:29-30"]
-	diagnostic_7 [label="return variable ‘a‘ has never been assigned\nlevel Warning\ntests/contract_testcases/substrate/tags/functions_08.sol:4:48-49"]
-	diagnostic_8 [label="return variable ‘b‘ has never been assigned\nlevel Warning\ntests/contract_testcases/substrate/tags/functions_08.sol:4:56-57"]
 	contracts -> contract
 	contract -> foo [label="function"]
 	foo -> returns [label="returns"]
 	diagnostics -> diagnostic [label="Debug"]
 	diagnostics -> diagnostic_6 [label="Error"]
-	diagnostics -> diagnostic_7 [label="Warning"]
-	diagnostics -> diagnostic_8 [label="Warning"]
 }

+ 0 - 2
tests/contract_testcases/substrate/tags/variables.dot

@@ -3,10 +3,8 @@ strict digraph "tests/contract_testcases/substrate/tags/variables.sol" {
 	var [label="variable x\nvisibility internal\ntests/contract_testcases/substrate/tags/variables.sol:4:13-18"]
 	diagnostic [label="found contract ‘c’\nlevel Debug\ntests/contract_testcases/substrate/tags/variables.sol:2:9-20"]
 	diagnostic_6 [label="tag ‘@param’ is not valid for state variable\nlevel Error\ntests/contract_testcases/substrate/tags/variables.sol:3:18-23"]
-	diagnostic_7 [label="storage variable ‘x‘ has never been used\nlevel Warning\ntests/contract_testcases/substrate/tags/variables.sol:4:13-18"]
 	contracts -> contract
 	contract -> var [label="variable"]
 	diagnostics -> diagnostic [label="Debug"]
 	diagnostics -> diagnostic_6 [label="Error"]
-	diagnostics -> diagnostic_7 [label="Warning"]
 }

+ 0 - 6
tests/contract_testcases/substrate/value/external_call_value.dot

@@ -11,9 +11,6 @@ strict digraph "tests/contract_testcases/substrate/value/external_call_value.sol
 	diagnostic [label="found contract ‘a’\nlevel Debug\ntests/contract_testcases/substrate/value/external_call_value.sol:2:9-20"]
 	diagnostic_12 [label="found contract ‘b’\nlevel Debug\ntests/contract_testcases/substrate/value/external_call_value.sol:8:9-20"]
 	diagnostic_13 [label="‘foo’ not a valid call parameter\nlevel Error\ntests/contract_testcases/substrate/value/external_call_value.sol:4:24-30"]
-	diagnostic_14 [label="function parameter ‘l‘ has never been read\nlevel Warning\ntests/contract_testcases/substrate/value/external_call_value.sol:11:33-34"]
-	diagnostic_15 [label="local variable ‘f‘ has been assigned, but never read\nlevel Warning\ntests/contract_testcases/substrate/value/external_call_value.sol:12:19-20"]
-	diagnostic_16 [label="storage variable ‘x‘ has never been used\nlevel Warning\ntests/contract_testcases/substrate/value/external_call_value.sol:9:13-18"]
 	contracts -> contract
 	contract -> test [label="function"]
 	test -> parameters [label="parameters"]
@@ -26,7 +23,4 @@ strict digraph "tests/contract_testcases/substrate/value/external_call_value.sol
 	diagnostics -> diagnostic [label="Debug"]
 	diagnostics -> diagnostic_12 [label="Debug"]
 	diagnostics -> diagnostic_13 [label="Error"]
-	diagnostics -> diagnostic_14 [label="Warning"]
-	diagnostics -> diagnostic_15 [label="Warning"]
-	diagnostics -> diagnostic_16 [label="Warning"]
 }

+ 0 - 6
tests/contract_testcases/substrate/value/external_call_value_01.dot

@@ -11,9 +11,6 @@ strict digraph "tests/contract_testcases/substrate/value/external_call_value_01.
 	diagnostic [label="found contract ‘a’\nlevel Debug\ntests/contract_testcases/substrate/value/external_call_value_01.sol:2:9-20"]
 	diagnostic_12 [label="found contract ‘b’\nlevel Debug\ntests/contract_testcases/substrate/value/external_call_value_01.sol:8:9-20"]
 	diagnostic_13 [label="‘foo’ not a valid call parameter\nlevel Error\ntests/contract_testcases/substrate/value/external_call_value_01.sol:4:24-30"]
-	diagnostic_14 [label="function parameter ‘l‘ has never been read\nlevel Warning\ntests/contract_testcases/substrate/value/external_call_value_01.sol:11:33-34"]
-	diagnostic_15 [label="local variable ‘f‘ has been assigned, but never read\nlevel Warning\ntests/contract_testcases/substrate/value/external_call_value_01.sol:12:19-20"]
-	diagnostic_16 [label="storage variable ‘x‘ has never been used\nlevel Warning\ntests/contract_testcases/substrate/value/external_call_value_01.sol:9:13-18"]
 	contracts -> contract
 	contract -> test [label="function"]
 	test -> parameters [label="parameters"]
@@ -26,7 +23,4 @@ strict digraph "tests/contract_testcases/substrate/value/external_call_value_01.
 	diagnostics -> diagnostic [label="Debug"]
 	diagnostics -> diagnostic_12 [label="Debug"]
 	diagnostics -> diagnostic_13 [label="Error"]
-	diagnostics -> diagnostic_14 [label="Warning"]
-	diagnostics -> diagnostic_15 [label="Warning"]
-	diagnostics -> diagnostic_16 [label="Warning"]
 }

+ 0 - 6
tests/contract_testcases/substrate/value/external_call_value_02.dot

@@ -11,9 +11,6 @@ strict digraph "tests/contract_testcases/substrate/value/external_call_value_02.
 	diagnostic [label="found contract ‘a’\nlevel Debug\ntests/contract_testcases/substrate/value/external_call_value_02.sol:2:9-20"]
 	diagnostic_12 [label="found contract ‘b’\nlevel Debug\ntests/contract_testcases/substrate/value/external_call_value_02.sol:8:9-20"]
 	diagnostic_13 [label="‘salt’ not valid for external calls\nlevel Error\ntests/contract_testcases/substrate/value/external_call_value_02.sol:4:24-31"]
-	diagnostic_14 [label="function parameter ‘l‘ has never been read\nlevel Warning\ntests/contract_testcases/substrate/value/external_call_value_02.sol:11:33-34"]
-	diagnostic_15 [label="local variable ‘f‘ has been assigned, but never read\nlevel Warning\ntests/contract_testcases/substrate/value/external_call_value_02.sol:12:19-20"]
-	diagnostic_16 [label="storage variable ‘x‘ has never been used\nlevel Warning\ntests/contract_testcases/substrate/value/external_call_value_02.sol:9:13-18"]
 	contracts -> contract
 	contract -> test [label="function"]
 	test -> parameters [label="parameters"]
@@ -26,7 +23,4 @@ strict digraph "tests/contract_testcases/substrate/value/external_call_value_02.
 	diagnostics -> diagnostic [label="Debug"]
 	diagnostics -> diagnostic_12 [label="Debug"]
 	diagnostics -> diagnostic_13 [label="Error"]
-	diagnostics -> diagnostic_14 [label="Warning"]
-	diagnostics -> diagnostic_15 [label="Warning"]
-	diagnostics -> diagnostic_16 [label="Warning"]
 }

+ 0 - 6
tests/contract_testcases/substrate/value/external_call_value_03.dot

@@ -12,9 +12,6 @@ strict digraph "tests/contract_testcases/substrate/value/external_call_value_03.
 	diagnostic_12 [label="found contract ‘b’\nlevel Debug\ntests/contract_testcases/substrate/value/external_call_value_03.sol:8:9-20"]
 	diagnostic_13 [label="‘value’ specified multiple times\nlevel Error\ntests/contract_testcases/substrate/value/external_call_value_03.sol:4:34-42"]
 	note [label="location of previous declaration of ‘value’\ntests/contract_testcases/substrate/value/external_call_value_03.sol:4:24-32"]
-	diagnostic_15 [label="function parameter ‘l‘ has never been read\nlevel Warning\ntests/contract_testcases/substrate/value/external_call_value_03.sol:11:33-34"]
-	diagnostic_16 [label="local variable ‘f‘ has been assigned, but never read\nlevel Warning\ntests/contract_testcases/substrate/value/external_call_value_03.sol:12:19-20"]
-	diagnostic_17 [label="storage variable ‘x‘ has never been used\nlevel Warning\ntests/contract_testcases/substrate/value/external_call_value_03.sol:9:13-18"]
 	contracts -> contract
 	contract -> test [label="function"]
 	test -> parameters [label="parameters"]
@@ -28,7 +25,4 @@ strict digraph "tests/contract_testcases/substrate/value/external_call_value_03.
 	diagnostics -> diagnostic_12 [label="Debug"]
 	diagnostics -> diagnostic_13 [label="Error"]
 	diagnostic_13 -> note [label="note"]
-	diagnostics -> diagnostic_15 [label="Warning"]
-	diagnostics -> diagnostic_16 [label="Warning"]
-	diagnostics -> diagnostic_17 [label="Warning"]
 }

+ 0 - 6
tests/contract_testcases/substrate/value/external_call_value_04.dot

@@ -12,9 +12,6 @@ strict digraph "tests/contract_testcases/substrate/value/external_call_value_04.
 	diagnostic_12 [label="found contract ‘b’\nlevel Debug\ntests/contract_testcases/substrate/value/external_call_value_04.sol:8:9-20"]
 	diagnostic_13 [label="‘value’ specified multiple times\nlevel Error\ntests/contract_testcases/substrate/value/external_call_value_04.sol:4:24-32"]
 	note [label="location of previous declaration of ‘value’\ntests/contract_testcases/substrate/value/external_call_value_04.sol:4:34-42"]
-	diagnostic_15 [label="function parameter ‘l‘ has never been read\nlevel Warning\ntests/contract_testcases/substrate/value/external_call_value_04.sol:11:33-34"]
-	diagnostic_16 [label="local variable ‘f‘ has been assigned, but never read\nlevel Warning\ntests/contract_testcases/substrate/value/external_call_value_04.sol:12:19-20"]
-	diagnostic_17 [label="storage variable ‘x‘ has never been used\nlevel Warning\ntests/contract_testcases/substrate/value/external_call_value_04.sol:9:13-18"]
 	contracts -> contract
 	contract -> test [label="function"]
 	test -> parameters [label="parameters"]
@@ -28,7 +25,4 @@ strict digraph "tests/contract_testcases/substrate/value/external_call_value_04.
 	diagnostics -> diagnostic_12 [label="Debug"]
 	diagnostics -> diagnostic_13 [label="Error"]
 	diagnostic_13 -> note [label="note"]
-	diagnostics -> diagnostic_15 [label="Warning"]
-	diagnostics -> diagnostic_16 [label="Warning"]
-	diagnostics -> diagnostic_17 [label="Warning"]
 }

Неке датотеке нису приказане због велике количине промена