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