/* * Copyright (c) Meta Platforms, Inc. and affiliates. * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. */ use std::fmt::Write; use insta::{assert_snapshot, glob}; use miette::{NamedSource, Report}; use react_hermes_parser::parse; use react_semantic_analysis::{analyze, AnalyzeOptions}; #[test] fn fixtures() { glob!("fixtures/**.js", |path| { println!("fixture {}", path.to_str().unwrap()); let input = std::fs::read_to_string(path).unwrap(); let ast = parse(&input, path.to_str().unwrap()).unwrap(); let mut analysis = analyze( &ast, AnalyzeOptions { globals: vec![ "Array".to_string(), "Boolean".to_string(), "console".to_string(), "global".to_string(), "Math".to_string(), "Number".to_string(), "setInterval".to_string(), "setTimeout".to_string(), "String".to_string(), ], }, ); let mut output = String::new(); writeln!(&mut output, "{:#?}", analysis.debug()).unwrap(); let diagnostics = analysis.diagnostics(); for diagnostic in diagnostics { writeln!(&mut output, "{:#?}", diagnostic).unwrap(); println!( "{:?}", Report::new(diagnostic) .with_source_code(NamedSource::new(path.to_string_lossy(), input.clone())) ); } assert_snapshot!(format!("Input:\n{input}\n\nAnalysis:\n{output}")); }); }