diff options
author | Bartek IwaĆczuk <biwanczuk@gmail.com> | 2020-07-31 16:59:22 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-07-31 16:59:22 +0200 |
commit | b718e6ff53156a0aae486e570ce7c9cb8a3b822a (patch) | |
tree | 6930f093a20466f4333e24eda2cd059807a36314 /cli/swc_util.rs | |
parent | 4afb4b6e46de2ed536a3c9828d70d7799b5b6d03 (diff) |
upgrade: deno_lint, dprint, swc (#6928)
This commit upgrades:
deno_lint 0.1.20
dprint-plugin-typescript 0.25.0
swc_ecmascript 0.1.0
SWC is no longer reexported from dprint nor deno_lint.
Diffstat (limited to 'cli/swc_util.rs')
-rw-r--r-- | cli/swc_util.rs | 202 |
1 files changed, 92 insertions, 110 deletions
diff --git a/cli/swc_util.rs b/cli/swc_util.rs index d79f7cccb..e83a2ce18 100644 --- a/cli/swc_util.rs +++ b/cli/swc_util.rs @@ -1,40 +1,38 @@ // Copyright 2018-2020 the Deno authors. All rights reserved. MIT license. use crate::msg::MediaType; -use crate::swc_common; -use crate::swc_common::comments::Comments; -use crate::swc_common::errors::Diagnostic; -use crate::swc_common::errors::DiagnosticBuilder; -use crate::swc_common::errors::Emitter; -use crate::swc_common::errors::Handler; -use crate::swc_common::errors::HandlerFlags; -use crate::swc_common::FileName; -use crate::swc_common::Globals; -use crate::swc_common::SourceMap; -use crate::swc_common::Span; -use crate::swc_ecma_ast; -use crate::swc_ecma_ast::Program; -use crate::swc_ecma_parser::lexer::Lexer; -use crate::swc_ecma_parser::EsConfig; -use crate::swc_ecma_parser::JscTarget; -use crate::swc_ecma_parser::Parser; -use crate::swc_ecma_parser::SourceFileInput; -use crate::swc_ecma_parser::Syntax; -use crate::swc_ecma_parser::TsConfig; -use crate::swc_ecma_visit::FoldWith; use deno_core::ErrBox; use std::error::Error; use std::fmt; use std::sync::Arc; use std::sync::RwLock; use swc_common::chain; -use swc_ecma_codegen::text_writer::JsWriter; -use swc_ecma_codegen::Node; -use swc_ecma_transforms::fixer; -use swc_ecma_transforms::typescript; +use swc_common::comments::SingleThreadedComments; +use swc_common::errors::Diagnostic; +use swc_common::errors::DiagnosticBuilder; +use swc_common::errors::Emitter; +use swc_common::errors::Handler; +use swc_common::errors::HandlerFlags; +use swc_common::FileName; +use swc_common::Globals; +use swc_common::SourceMap; +use swc_common::Span; +use swc_ecmascript::ast::Program; +use swc_ecmascript::codegen::text_writer::JsWriter; +use swc_ecmascript::codegen::Node; +use swc_ecmascript::parser::lexer::Lexer; +use swc_ecmascript::parser::EsConfig; +use swc_ecmascript::parser::JscTarget; +use swc_ecmascript::parser::Parser; +use swc_ecmascript::parser::StringInput; +use swc_ecmascript::parser::Syntax; +use swc_ecmascript::parser::TsConfig; +use swc_ecmascript::transforms::fixer; +use swc_ecmascript::transforms::typescript; +use swc_ecmascript::visit::FoldWith; struct DummyHandler; -impl swc_ecma_codegen::Handlers for DummyHandler {} +impl swc_ecmascript::codegen::Handlers for DummyHandler {} fn get_default_es_config() -> EsConfig { let mut config = EsConfig::default(); @@ -147,7 +145,7 @@ pub struct AstParser { pub buffered_error: SwcErrorBuffer, pub source_map: Arc<SourceMap>, pub handler: Handler, - pub comments: Comments, + pub comments: SingleThreadedComments, pub globals: Globals, } @@ -168,46 +166,38 @@ impl AstParser { buffered_error, source_map: Arc::new(SourceMap::default()), handler, - comments: Comments::default(), + comments: SingleThreadedComments::default(), globals: Globals::new(), } } - pub fn parse_module<F, R>( + pub fn parse_module( &self, file_name: &str, media_type: MediaType, source_code: &str, - callback: F, - ) -> R - where - F: FnOnce(Result<swc_ecma_ast::Module, SwcDiagnosticBuffer>) -> R, - { - swc_common::GLOBALS.set(&self.globals, || { - let swc_source_file = self.source_map.new_source_file( - FileName::Custom(file_name.to_string()), - source_code.to_string(), - ); - - let buffered_err = self.buffered_error.clone(); - let syntax = get_syntax_for_media_type(media_type); - - let lexer = Lexer::new( - syntax, - JscTarget::Es2019, - SourceFileInput::from(&*swc_source_file), - Some(&self.comments), - ); - - let mut parser = Parser::new_from(lexer); - - let parse_result = parser.parse_module().map_err(move |err| { - let mut diagnostic = err.into_diagnostic(&self.handler); - diagnostic.emit(); - SwcDiagnosticBuffer::from_swc_error(buffered_err, self) - }); - - callback(parse_result) + ) -> Result<swc_ecmascript::ast::Module, SwcDiagnosticBuffer> { + let swc_source_file = self.source_map.new_source_file( + FileName::Custom(file_name.to_string()), + source_code.to_string(), + ); + + let buffered_err = self.buffered_error.clone(); + let syntax = get_syntax_for_media_type(media_type); + + let lexer = Lexer::new( + syntax, + JscTarget::Es2019, + StringInput::from(&*swc_source_file), + Some(&self.comments), + ); + + let mut parser = Parser::new_from(lexer); + + parser.parse_module().map_err(move |err| { + let mut diagnostic = err.into_diagnostic(&self.handler); + diagnostic.emit(); + SwcDiagnosticBuffer::from_swc_error(buffered_err, self) }) } @@ -217,48 +207,47 @@ impl AstParser { media_type: MediaType, source_code: &str, ) -> Result<String, ErrBox> { - self.parse_module(file_name, media_type, source_code, |parse_result| { - let module = parse_result?; - let program = Program::Module(module); - let mut compiler_pass = chain!(typescript::strip(), fixer()); - let program = swc_ecma_transforms::util::COMMENTS - .set(&self.comments, || program.fold_with(&mut compiler_pass)); - - let mut src_map_buf = vec![]; + let parse_result = self.parse_module(file_name, media_type, source_code); + let module = parse_result?; + let program = Program::Module(module); + let mut compiler_pass = + chain!(typescript::strip(), fixer(Some(&self.comments))); + let program = program.fold_with(&mut compiler_pass); + + let mut src_map_buf = vec![]; + let mut buf = vec![]; + { + let handlers = Box::new(DummyHandler); + let writer = Box::new(JsWriter::new( + self.source_map.clone(), + "\n", + &mut buf, + Some(&mut src_map_buf), + )); + let config = swc_ecmascript::codegen::Config { minify: false }; + let mut emitter = swc_ecmascript::codegen::Emitter { + cfg: config, + comments: Some(&self.comments), + cm: self.source_map.clone(), + wr: writer, + handlers, + }; + program.emit_with(&mut emitter)?; + } + let mut src = String::from_utf8(buf).map_err(ErrBox::from)?; + { let mut buf = vec![]; - { - let handlers = Box::new(DummyHandler); - let writer = Box::new(JsWriter::new( - self.source_map.clone(), - "\n", - &mut buf, - Some(&mut src_map_buf), - )); - let config = swc_ecma_codegen::Config { minify: false }; - let mut emitter = swc_ecma_codegen::Emitter { - cfg: config, - comments: Some(&self.comments), - cm: self.source_map.clone(), - wr: writer, - handlers, - }; - program.emit_with(&mut emitter)?; - } - let mut src = String::from_utf8(buf).map_err(ErrBox::from)?; - { - let mut buf = vec![]; - self - .source_map - .build_source_map_from(&mut src_map_buf, None) - .to_writer(&mut buf)?; - let map = String::from_utf8(buf)?; - - src.push_str("//# sourceMappingURL=data:application/json;base64,"); - let encoded_map = base64::encode(map.as_bytes()); - src.push_str(&encoded_map); - } - Ok(src) - }) + self + .source_map + .build_source_map_from(&mut src_map_buf, None) + .to_writer(&mut buf)?; + let map = String::from_utf8(buf)?; + + src.push_str("//# sourceMappingURL=data:application/json;base64,"); + let encoded_map = base64::encode(map.as_bytes()); + src.push_str(&encoded_map); + } + Ok(src) } pub fn get_span_location(&self, span: Span) -> swc_common::Loc { @@ -269,16 +258,9 @@ impl AstParser { &self, span: Span, ) -> Vec<swc_common::comments::Comment> { - let maybe_comments = self.comments.take_leading_comments(span.lo()); - - if let Some(comments) = maybe_comments { - // clone the comments and put them back in map - let to_return = comments.clone(); - self.comments.add_leading(span.lo(), comments); - to_return - } else { - vec![] - } + self + .comments + .with_leading(span.lo(), |comments| comments.to_vec()) } } |