mirror of
https://github.com/danbulant/oxc
synced 2026-05-21 21:29:01 +00:00
fix(parser,semantic): make semantic own Trivias (#711)
closes #708 Making the parser return Rc<Trivias> is not a good API, and ideally `Semantic` should just own `Trivias` so it can process or mutate it.
This commit is contained in:
parent
9714e46a02
commit
2f48bdf26f
14 changed files with 21 additions and 26 deletions
|
|
@ -167,7 +167,7 @@ impl IsolatedLintHandler {
|
|||
|
||||
let program = allocator.alloc(ret.program);
|
||||
let semantic_ret = SemanticBuilder::new(&source_text, source_type)
|
||||
.with_trivias(&ret.trivias)
|
||||
.with_trivias(ret.trivias)
|
||||
.with_check_syntax_error(true)
|
||||
.with_module_record_builder(true)
|
||||
.build(program);
|
||||
|
|
|
|||
|
|
@ -33,7 +33,7 @@ fn main() {
|
|||
|
||||
let program = allocator.alloc(ret.program);
|
||||
let semantic_ret =
|
||||
SemanticBuilder::new(&source_text, source_type).with_trivias(&ret.trivias).build(program);
|
||||
SemanticBuilder::new(&source_text, source_type).with_trivias(ret.trivias).build(program);
|
||||
|
||||
let mut errors: Vec<oxc_diagnostics::Error> = vec![];
|
||||
|
||||
|
|
|
|||
|
|
@ -135,7 +135,7 @@ impl Tester {
|
|||
assert!(ret.errors.is_empty(), "{:?}", &ret.errors);
|
||||
let program = allocator.alloc(ret.program);
|
||||
let semantic_ret = SemanticBuilder::new(source_text, source_type)
|
||||
.with_trivias(&ret.trivias)
|
||||
.with_trivias(ret.trivias)
|
||||
.with_module_record_builder(true)
|
||||
.build(program);
|
||||
assert!(semantic_ret.errors.is_empty(), "{:?}", &semantic_ret.errors);
|
||||
|
|
|
|||
|
|
@ -1,5 +1,3 @@
|
|||
use std::rc::Rc;
|
||||
|
||||
use oxc_ast::Trivias;
|
||||
use oxc_span::Span;
|
||||
|
||||
|
|
@ -9,8 +7,8 @@ pub struct TriviaBuilder {
|
|||
}
|
||||
|
||||
impl TriviaBuilder {
|
||||
pub fn build(self) -> Rc<Trivias> {
|
||||
Rc::new(self.trivias)
|
||||
pub fn build(self) -> Trivias {
|
||||
self.trivias
|
||||
}
|
||||
|
||||
pub fn add_single_line_comment(&mut self, start: u32, end: u32) {
|
||||
|
|
|
|||
|
|
@ -73,8 +73,6 @@ mod ts;
|
|||
mod diagnostics;
|
||||
mod lexer;
|
||||
|
||||
use std::rc::Rc;
|
||||
|
||||
use context::{Context, StatementContext};
|
||||
use oxc_allocator::Allocator;
|
||||
use oxc_ast::{ast::Program, AstBuilder, Trivias};
|
||||
|
|
@ -94,7 +92,7 @@ use crate::{
|
|||
pub struct ParserReturn<'a> {
|
||||
pub program: Program<'a>,
|
||||
pub errors: Vec<Error>,
|
||||
pub trivias: Rc<Trivias>,
|
||||
pub trivias: Trivias,
|
||||
pub panicked: bool,
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -22,7 +22,7 @@ fn main() {
|
|||
|
||||
let program = allocator.alloc(ret.program);
|
||||
let semantic_ret =
|
||||
SemanticBuilder::new(&source_text, source_type).with_trivias(&ret.trivias).build(program);
|
||||
SemanticBuilder::new(&source_text, source_type).with_trivias(ret.trivias).build(program);
|
||||
|
||||
let adapter = Adapter::new(Rc::new(semantic_ret.semantic), vec![Some("index".to_string())]);
|
||||
|
||||
|
|
|
|||
|
|
@ -17,7 +17,7 @@ fn run_query<T: for<'de> serde::Deserialize<'de> + std::cmp::Ord>(
|
|||
let ret = Parser::new(&allocator, code, source_type).parse();
|
||||
let program = allocator.alloc(ret.program);
|
||||
let semantic_ret =
|
||||
SemanticBuilder::new(code, source_type).with_trivias(&ret.trivias).build(program);
|
||||
SemanticBuilder::new(code, source_type).with_trivias(ret.trivias).build(program);
|
||||
|
||||
let adapter = Adapter {
|
||||
path_components: vec![Some("index".to_string())],
|
||||
|
|
@ -199,7 +199,7 @@ fn test_invariants() {
|
|||
let ret = Parser::new(&allocator, source_text, source_type).parse();
|
||||
let program = allocator.alloc(ret.program);
|
||||
let semantic_ret =
|
||||
SemanticBuilder::new(source_text, source_type).with_trivias(&ret.trivias).build(program);
|
||||
SemanticBuilder::new(source_text, source_type).with_trivias(ret.trivias).build(program);
|
||||
|
||||
let adapter = Adapter { path_components: vec![], semantic: Rc::new(semantic_ret.semantic) };
|
||||
check_adapter_invariants(schema(), &adapter);
|
||||
|
|
|
|||
|
|
@ -106,9 +106,10 @@ impl<'a> SemanticBuilder<'a> {
|
|||
}
|
||||
|
||||
#[must_use]
|
||||
pub fn with_trivias(mut self, trivias: &Rc<Trivias>) -> Self {
|
||||
self.trivias = Rc::clone(trivias);
|
||||
self.jsdoc = JSDocBuilder::new(self.source_text, trivias);
|
||||
pub fn with_trivias(mut self, trivias: Trivias) -> Self {
|
||||
let trivias = Rc::new(trivias);
|
||||
self.trivias = Rc::clone(&trivias);
|
||||
self.jsdoc = JSDocBuilder::new(self.source_text, &trivias);
|
||||
self
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -83,7 +83,7 @@ mod test {
|
|||
let ret = Parser::new(allocator, source_text, source_type).parse();
|
||||
let program = allocator.alloc(ret.program);
|
||||
let semantic = SemanticBuilder::new(source_text, source_type)
|
||||
.with_trivias(&ret.trivias)
|
||||
.with_trivias(ret.trivias)
|
||||
.build(program)
|
||||
.semantic;
|
||||
let jsdoc = semantic.jsdoc();
|
||||
|
|
|
|||
|
|
@ -18,7 +18,7 @@ mod module_record_tests {
|
|||
let ret = Parser::new(&allocator, source_text, source_type).parse();
|
||||
let program = allocator.alloc(ret.program);
|
||||
let semantic_ret = SemanticBuilder::new(source_text, source_type)
|
||||
.with_trivias(&ret.trivias)
|
||||
.with_trivias(ret.trivias)
|
||||
.with_module_record_builder(true)
|
||||
.build(program);
|
||||
semantic_ret.semantic.module_record
|
||||
|
|
|
|||
|
|
@ -85,7 +85,7 @@ impl SemanticTester {
|
|||
let program = self.allocator.alloc(parse.program);
|
||||
let semantic_ret = SemanticBuilder::new(self.source_text, self.source_type)
|
||||
.with_check_syntax_error(true)
|
||||
.with_trivias(&parse.trivias)
|
||||
.with_trivias(parse.trivias)
|
||||
.with_module_record_builder(self.use_module_record_builder)
|
||||
.build(program);
|
||||
|
||||
|
|
|
|||
|
|
@ -173,15 +173,13 @@ impl Oxc {
|
|||
|
||||
if run_options.syntax() && !run_options.lint() {
|
||||
let semantic_ret = SemanticBuilder::new(source_text, source_type)
|
||||
.with_trivias(&ret.trivias)
|
||||
.with_trivias(ret.trivias)
|
||||
.with_check_syntax_error(true)
|
||||
.build(program);
|
||||
self.save_diagnostics(semantic_ret.errors);
|
||||
}
|
||||
|
||||
if run_options.lint() {
|
||||
} else if run_options.lint() {
|
||||
let semantic_ret = SemanticBuilder::new(source_text, source_type)
|
||||
.with_trivias(&ret.trivias)
|
||||
.with_trivias(ret.trivias)
|
||||
.with_check_syntax_error(true)
|
||||
.build(program);
|
||||
self.save_diagnostics(semantic_ret.errors);
|
||||
|
|
|
|||
|
|
@ -238,7 +238,7 @@ impl IsolatedLintHandler {
|
|||
|
||||
let program = allocator.alloc(ret.program);
|
||||
let semantic_ret = SemanticBuilder::new(&source_text, source_type)
|
||||
.with_trivias(&ret.trivias)
|
||||
.with_trivias(ret.trivias)
|
||||
.with_check_syntax_error(true)
|
||||
.build(program);
|
||||
|
||||
|
|
|
|||
|
|
@ -281,7 +281,7 @@ pub trait Case: Sized + Sync + Send + UnwindSafe {
|
|||
|
||||
let program = allocator.alloc(parser_ret.program);
|
||||
let semantic_ret = SemanticBuilder::new(source_text, source_type)
|
||||
.with_trivias(&parser_ret.trivias)
|
||||
.with_trivias(parser_ret.trivias)
|
||||
.with_module_record_builder(true)
|
||||
.with_check_syntax_error(true)
|
||||
.build(program);
|
||||
|
|
|
|||
Loading…
Reference in a new issue