mirror of
https://github.com/danbulant/oxc
synced 2026-05-24 12:21:58 +00:00
parent
6c1388df55
commit
f0029d5310
4 changed files with 41 additions and 37 deletions
|
|
@ -1,7 +1,7 @@
|
|||
//! ECMAScript Minifier
|
||||
|
||||
mod compressor;
|
||||
// mod mangler;
|
||||
mod mangler;
|
||||
mod printer;
|
||||
|
||||
use oxc_allocator::Allocator;
|
||||
|
|
@ -10,7 +10,7 @@ use oxc_span::SourceType;
|
|||
|
||||
pub use crate::{
|
||||
compressor::{CompressOptions, Compressor},
|
||||
// mangler::ManglerBuilder,
|
||||
mangler::ManglerBuilder,
|
||||
printer::{Printer, PrinterOptions},
|
||||
};
|
||||
|
||||
|
|
@ -43,11 +43,11 @@ impl<'a> Minifier<'a> {
|
|||
let ret = Parser::new(&allocator, self.source_text, self.source_type).parse();
|
||||
let program = allocator.alloc(ret.program);
|
||||
Compressor::new(&allocator, self.options.compress).build(program);
|
||||
let printer = Printer::new(self.source_text.len(), self.options.print);
|
||||
// if self.options.mangle {
|
||||
// let mangler = ManglerBuilder::new(self.source_text, self.source_type).build(program);
|
||||
// printer.with_mangler(mangler);
|
||||
// }
|
||||
let mut printer = Printer::new(self.source_text.len(), self.options.print);
|
||||
if self.options.mangle {
|
||||
let mangler = ManglerBuilder::new(self.source_text, self.source_type).build(program);
|
||||
printer.with_mangler(mangler);
|
||||
}
|
||||
printer.build(program)
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
use itertools::Itertools;
|
||||
#[allow(clippy::wildcard_imports)]
|
||||
use oxc_hir::hir::*;
|
||||
use oxc_hir::Visit;
|
||||
use oxc_ast::ast::*;
|
||||
use oxc_ast::Visit;
|
||||
use oxc_index::{index_vec, IndexVec};
|
||||
use oxc_semantic::{Reference, ReferenceFlag, ReferenceId, SemanticBuilder, SymbolId, SymbolTable};
|
||||
use oxc_span::{Atom, SourceType};
|
||||
|
|
@ -78,15 +78,14 @@ impl<'a> Visit<'a> for ManglerBuilder<'a> {
|
|||
self.semantic.leave_scope();
|
||||
}
|
||||
|
||||
fn visit_binding_identifier(
|
||||
&mut self,
|
||||
ident: &'a BindingIdentifier,
|
||||
includes: SymbolFlags,
|
||||
excludes: SymbolFlags,
|
||||
) {
|
||||
let symbol_id =
|
||||
self.semantic.declare_symbol_for_mangler(ident.span, &ident.name, includes, excludes);
|
||||
ident.symbol_id.replace(symbol_id);
|
||||
fn visit_binding_identifier(&mut self, ident: &'a BindingIdentifier) {
|
||||
let symbol_id = self.semantic.declare_symbol_for_mangler(
|
||||
ident.span,
|
||||
&ident.name,
|
||||
/* TODO: add symbol flags */ SymbolFlags::empty(),
|
||||
/* TODO: add symbol flags */ SymbolFlags::empty(),
|
||||
);
|
||||
ident.symbol_id.replace(Some(symbol_id));
|
||||
}
|
||||
|
||||
fn visit_identifier_reference(&mut self, ident: &'a IdentifierReference) {
|
||||
|
|
@ -97,7 +96,7 @@ impl<'a> Visit<'a> for ManglerBuilder<'a> {
|
|||
ReferenceFlag::read(),
|
||||
);
|
||||
let reference_id = self.semantic.declare_reference(reference);
|
||||
ident.reference_id.replace(reference_id);
|
||||
ident.reference_id.replace(Some(reference_id));
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -775,12 +775,14 @@ impl<'a> GenExpr for Expression<'a> {
|
|||
|
||||
impl Gen for IdentifierReference {
|
||||
fn gen(&self, p: &mut Printer, ctx: Context) {
|
||||
// if let Some(mangler) = &p.mangler {
|
||||
// if let Some(name) = mangler.get_reference_name(self.reference_id.clone().into_inner()) {
|
||||
// p.print_str(name.clone().as_bytes());
|
||||
// return;
|
||||
// }
|
||||
// }
|
||||
if let Some(mangler) = &p.mangler {
|
||||
if let Some(reference_id) = self.reference_id.clone().into_inner() {
|
||||
if let Some(name) = mangler.get_reference_name(reference_id) {
|
||||
p.print_str(name.clone().as_bytes());
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
p.print_str(self.name.as_bytes());
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -27,7 +27,7 @@ use self::{
|
|||
gen::{Gen, GenExpr},
|
||||
operator::Operator,
|
||||
};
|
||||
// use crate::mangler::Mangler;
|
||||
use crate::mangler::Mangler;
|
||||
|
||||
#[derive(Debug, Default, Clone, Copy)]
|
||||
pub struct PrinterOptions;
|
||||
|
|
@ -35,7 +35,8 @@ pub struct PrinterOptions;
|
|||
pub struct Printer {
|
||||
options: PrinterOptions,
|
||||
|
||||
// mangler: Option<Mangler>,
|
||||
mangler: Option<Mangler>,
|
||||
|
||||
/// Output Code
|
||||
code: Vec<u8>,
|
||||
|
||||
|
|
@ -70,7 +71,7 @@ impl Printer {
|
|||
let capacity = source_len / 2;
|
||||
Self {
|
||||
options,
|
||||
// mangler: None,
|
||||
mangler: None,
|
||||
code: Vec::with_capacity(capacity),
|
||||
needs_semicolon: false,
|
||||
need_space_before_dot: 0,
|
||||
|
|
@ -83,9 +84,9 @@ impl Printer {
|
|||
}
|
||||
}
|
||||
|
||||
// pub fn with_mangler(&mut self, mangler: Mangler) {
|
||||
// self.mangler = Some(mangler);
|
||||
// }
|
||||
pub fn with_mangler(&mut self, mangler: Mangler) {
|
||||
self.mangler = Some(mangler);
|
||||
}
|
||||
|
||||
pub fn build(mut self, program: &Program<'_>) -> String {
|
||||
program.gen(&mut self, Context::default());
|
||||
|
|
@ -245,13 +246,15 @@ impl Printer {
|
|||
}
|
||||
}
|
||||
|
||||
fn print_symbol(&mut self, _symbol_id: Option<SymbolId>, fallback: &Atom) {
|
||||
// if let Some(mangler) = &self.mangler {
|
||||
// let name = mangler.get_symbol_name(symbol_id);
|
||||
// self.print_str(name.clone().as_bytes());
|
||||
// } else {
|
||||
fn print_symbol(&mut self, symbol_id: Option<SymbolId>, fallback: &Atom) {
|
||||
if let Some(mangler) = &self.mangler {
|
||||
if let Some(symbol_id) = symbol_id {
|
||||
let name = mangler.get_symbol_name(symbol_id);
|
||||
self.print_str(name.clone().as_bytes());
|
||||
return;
|
||||
}
|
||||
}
|
||||
self.print_str(fallback.as_bytes());
|
||||
// }
|
||||
}
|
||||
|
||||
fn wrap<F: FnMut(&mut Self)>(&mut self, wrap: bool, mut f: F) {
|
||||
|
|
|
|||
Loading…
Reference in a new issue