mirror of
https://github.com/denoland/deno.git
synced 2024-12-25 16:49:18 -05:00
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.
This commit is contained in:
parent
4afb4b6e46
commit
b718e6ff53
22 changed files with 290 additions and 326 deletions
69
Cargo.lock
generated
69
Cargo.lock
generated
|
@ -384,6 +384,7 @@ dependencies = [
|
|||
"deno_lint",
|
||||
"dissimilar",
|
||||
"dlopen",
|
||||
"dprint-plugin-typescript",
|
||||
"futures",
|
||||
"fwdansi",
|
||||
"http",
|
||||
|
@ -406,8 +407,8 @@ dependencies = [
|
|||
"serde_derive",
|
||||
"serde_json",
|
||||
"sourcemap",
|
||||
"swc_ecma_codegen",
|
||||
"swc_ecma_transforms",
|
||||
"swc_common",
|
||||
"swc_ecmascript",
|
||||
"sys-info",
|
||||
"tempfile",
|
||||
"termcolor",
|
||||
|
@ -445,16 +446,16 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "deno_lint"
|
||||
version = "0.1.19"
|
||||
version = "0.1.20"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "fbdf386c931a0c09550f80ea3ac6c59e115d3e8c2cffb5e196d4cda1aeff690c"
|
||||
checksum = "97e2a1067a263cd8cbf75d115c253a152263f67da33711eaafce48132068c1b8"
|
||||
dependencies = [
|
||||
"dprint-plugin-typescript",
|
||||
"lazy_static",
|
||||
"log 0.4.11",
|
||||
"regex",
|
||||
"swc_atoms",
|
||||
"swc_ecma_visit",
|
||||
"swc_common",
|
||||
"swc_ecmascript",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
|
@ -523,16 +524,15 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "dprint-plugin-typescript"
|
||||
version = "0.24.0"
|
||||
version = "0.25.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "afab3ed9d8240f14f68e05ccf200dd6034a8bb55fcf0e945f775030d0fca78fa"
|
||||
checksum = "41224324bd4b71daccb03fd971c38939999cd3115cd705cfb4d44b930cc91dc7"
|
||||
dependencies = [
|
||||
"dprint-core",
|
||||
"serde",
|
||||
"serde_json",
|
||||
"swc_common",
|
||||
"swc_ecma_ast",
|
||||
"swc_ecma_parser",
|
||||
"swc_ecmascript",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
|
@ -2188,14 +2188,12 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "swc_common"
|
||||
version = "0.7.0"
|
||||
version = "0.8.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "f6dfaba645cbfc03f574d154f800952e27f0176d91e24a7c9d3917f1afde7d12"
|
||||
checksum = "1063f58571575abc923955abdca528e007cd5a8036dcb9cdbd6c81754590c49a"
|
||||
dependencies = [
|
||||
"ast_node",
|
||||
"atty",
|
||||
"cfg-if",
|
||||
"dashmap",
|
||||
"either",
|
||||
"from_variant",
|
||||
"fxhash",
|
||||
|
@ -2204,17 +2202,15 @@ dependencies = [
|
|||
"scoped-tls 1.0.0",
|
||||
"serde",
|
||||
"sourcemap",
|
||||
"string_cache",
|
||||
"swc_visit",
|
||||
"termcolor",
|
||||
"unicode-width",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "swc_ecma_ast"
|
||||
version = "0.26.0"
|
||||
version = "0.27.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "9dcdd53f72ccc81568bcf789f9aeaa065588705ab46113e9f6ba4014f8829f5d"
|
||||
checksum = "f4d07502831a92f8f0825fc35821ef02a6f47fa348f2b9f73366948517a2648b"
|
||||
dependencies = [
|
||||
"enum_kind",
|
||||
"is-macro",
|
||||
|
@ -2227,9 +2223,9 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "swc_ecma_codegen"
|
||||
version = "0.29.1"
|
||||
version = "0.30.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "8d48467780147af9075def6d7c75198af57e1b74ad28e8508850974be785f8cd"
|
||||
checksum = "ebcf7baf25a6263cd03b5d53bfebf933a37aecf98290bf1ecd044f7d484a60ee"
|
||||
dependencies = [
|
||||
"bitflags",
|
||||
"num-bigint",
|
||||
|
@ -2255,16 +2251,15 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "swc_ecma_parser"
|
||||
version = "0.31.0"
|
||||
version = "0.32.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "9226cca2e6d482ffe48be00b83c9745b9e574d6d5833e1e3735837a502784af9"
|
||||
checksum = "666f4248ee286eac1037d4427ed802f16da131f4eba3f83f2a44f0c3cd84411c"
|
||||
dependencies = [
|
||||
"either",
|
||||
"enum_kind",
|
||||
"fxhash",
|
||||
"log 0.4.11",
|
||||
"num-bigint",
|
||||
"once_cell",
|
||||
"regex",
|
||||
"serde",
|
||||
"smallvec 1.4.1",
|
||||
"swc_atoms",
|
||||
|
@ -2290,9 +2285,9 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "swc_ecma_transforms"
|
||||
version = "0.16.0"
|
||||
version = "0.17.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "f37a55159354623098b9a54893d26c655109833df807d846c54e34103a349a4f"
|
||||
checksum = "55eb1141303c30c832ad86c91bd993ed5de543bafd8130e1cf0078bc52258dba"
|
||||
dependencies = [
|
||||
"Inflector",
|
||||
"arrayvec",
|
||||
|
@ -2320,25 +2315,24 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "swc_ecma_utils"
|
||||
version = "0.15.0"
|
||||
version = "0.16.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "229c983a8e263edaf1b8ec5b79d92664d158303cc1fa4bff93690b6a2585e668"
|
||||
checksum = "9d43744f8636967eadeae9902597e6f6919f9c23700cc731188795ecaece365d"
|
||||
dependencies = [
|
||||
"once_cell",
|
||||
"scoped-tls 1.0.0",
|
||||
"swc_atoms",
|
||||
"swc_common",
|
||||
"swc_ecma_ast",
|
||||
"swc_ecma_parser",
|
||||
"swc_ecma_visit",
|
||||
"unicode-xid 0.2.1",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "swc_ecma_visit"
|
||||
version = "0.11.0"
|
||||
version = "0.12.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "9516e5e423776d9ee88628b0caef0bcdab1aacf3e33469b7fc4fdfb9aa7e1617"
|
||||
checksum = "a89d1b439c0db9a3df486c32dbd6754c0d0f6a9cef5b8d9f2bf4c46698ffcf12"
|
||||
dependencies = [
|
||||
"num-bigint",
|
||||
"swc_atoms",
|
||||
|
@ -2347,6 +2341,19 @@ dependencies = [
|
|||
"swc_visit",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "swc_ecmascript"
|
||||
version = "0.1.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "2bc49662be9e1203d7d95a84468a5f982bf5a7d7f6b02d19b2121f63a3ad4841"
|
||||
dependencies = [
|
||||
"swc_ecma_ast",
|
||||
"swc_ecma_codegen",
|
||||
"swc_ecma_parser",
|
||||
"swc_ecma_transforms",
|
||||
"swc_ecma_visit",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "swc_macros_common"
|
||||
version = "0.3.1"
|
||||
|
|
|
@ -23,7 +23,7 @@ winapi = "0.3.8"
|
|||
|
||||
[dependencies]
|
||||
deno_core = { path = "../core", version = "0.50.0" }
|
||||
deno_lint = "0.1.19"
|
||||
deno_lint = "0.1.20"
|
||||
|
||||
atty = "0.2.14"
|
||||
base64 = "0.12.2"
|
||||
|
@ -32,6 +32,7 @@ byteorder = "1.3.4"
|
|||
clap = "2.33.1"
|
||||
dissimilar = "1.0.2"
|
||||
dlopen = "0.1.8"
|
||||
dprint-plugin-typescript = "0.25.0"
|
||||
futures = "0.3.5"
|
||||
http = "0.2.1"
|
||||
idna = "0.2.0"
|
||||
|
@ -50,8 +51,8 @@ serde_derive = "1.0.112"
|
|||
serde_json = { version = "1.0.55", features = [ "preserve_order" ] }
|
||||
sys-info = "0.7.0"
|
||||
sourcemap = "6.0.0"
|
||||
swc_ecma_transforms = "=0.16.0"
|
||||
swc_ecma_codegen = "=0.29.1"
|
||||
swc_common = { version = "=0.8.0", features = ["sourcemap"] }
|
||||
swc_ecmascript = { version = "=0.1.0", features = ["codegen", "parser", "transforms", "visit"] }
|
||||
tempfile = "3.1.0"
|
||||
termcolor = "1.1.0"
|
||||
tokio = { version = "0.2.22", features = ["full"] }
|
||||
|
|
|
@ -5,9 +5,8 @@ use crate::doc::display::{
|
|||
display_method, display_optional, display_readonly, display_static,
|
||||
SliceDisplayer,
|
||||
};
|
||||
use crate::swc_common::Spanned;
|
||||
use crate::swc_ecma_ast;
|
||||
use serde::Serialize;
|
||||
use swc_common::Spanned;
|
||||
|
||||
use super::function::function_to_function_def;
|
||||
use super::function::FunctionDef;
|
||||
|
@ -31,7 +30,7 @@ use std::fmt::{Display, Formatter, Result as FmtResult};
|
|||
#[serde(rename_all = "camelCase")]
|
||||
pub struct ClassConstructorDef {
|
||||
pub js_doc: Option<String>,
|
||||
pub accessibility: Option<swc_ecma_ast::Accessibility>,
|
||||
pub accessibility: Option<swc_ecmascript::ast::Accessibility>,
|
||||
pub name: String,
|
||||
pub params: Vec<ParamDef>,
|
||||
pub location: Location,
|
||||
|
@ -55,7 +54,7 @@ pub struct ClassPropertyDef {
|
|||
pub js_doc: Option<String>,
|
||||
pub ts_type: Option<TsTypeDef>,
|
||||
pub readonly: bool,
|
||||
pub accessibility: Option<swc_ecma_ast::Accessibility>,
|
||||
pub accessibility: Option<swc_ecmascript::ast::Accessibility>,
|
||||
pub optional: bool,
|
||||
pub is_abstract: bool,
|
||||
pub is_static: bool,
|
||||
|
@ -109,12 +108,12 @@ impl Display for ClassIndexSignatureDef {
|
|||
#[serde(rename_all = "camelCase")]
|
||||
pub struct ClassMethodDef {
|
||||
pub js_doc: Option<String>,
|
||||
pub accessibility: Option<swc_ecma_ast::Accessibility>,
|
||||
pub accessibility: Option<swc_ecmascript::ast::Accessibility>,
|
||||
pub optional: bool,
|
||||
pub is_abstract: bool,
|
||||
pub is_static: bool,
|
||||
pub name: String,
|
||||
pub kind: swc_ecma_ast::MethodKind,
|
||||
pub kind: swc_ecmascript::ast::MethodKind,
|
||||
pub function_def: FunctionDef,
|
||||
pub location: Location,
|
||||
}
|
||||
|
@ -158,7 +157,7 @@ pub struct ClassDef {
|
|||
|
||||
pub fn class_to_class_def(
|
||||
doc_parser: &DocParser,
|
||||
class: &swc_ecma_ast::Class,
|
||||
class: &swc_ecmascript::ast::Class,
|
||||
) -> ClassDef {
|
||||
let mut constructors = vec![];
|
||||
let mut methods = vec![];
|
||||
|
@ -167,7 +166,7 @@ pub fn class_to_class_def(
|
|||
|
||||
let extends: Option<String> = match &class.super_class {
|
||||
Some(boxed) => {
|
||||
use crate::swc_ecma_ast::Expr;
|
||||
use swc_ecmascript::ast::Expr;
|
||||
let expr: &Expr = &**boxed;
|
||||
match expr {
|
||||
Expr::Ident(ident) => Some(ident.sym.to_string()),
|
||||
|
@ -184,7 +183,7 @@ pub fn class_to_class_def(
|
|||
.collect::<Vec<TsTypeDef>>();
|
||||
|
||||
for member in &class.body {
|
||||
use crate::swc_ecma_ast::ClassMember::*;
|
||||
use swc_ecmascript::ast::ClassMember::*;
|
||||
|
||||
match member {
|
||||
Constructor(ctor) => {
|
||||
|
@ -197,7 +196,7 @@ pub fn class_to_class_def(
|
|||
let mut params = vec![];
|
||||
|
||||
for param in &ctor.params {
|
||||
use crate::swc_ecma_ast::ParamOrTsParamProp::*;
|
||||
use swc_ecmascript::ast::ParamOrTsParamProp::*;
|
||||
|
||||
let param_def = match param {
|
||||
Param(param) => pat_to_param_def(
|
||||
|
@ -205,7 +204,7 @@ pub fn class_to_class_def(
|
|||
Some(&doc_parser.ast_parser.source_map),
|
||||
),
|
||||
TsParamProp(ts_param_prop) => {
|
||||
use swc_ecma_ast::TsParamPropParam;
|
||||
use swc_ecmascript::ast::TsParamPropParam;
|
||||
|
||||
match &ts_param_prop.param {
|
||||
TsParamPropParam::Ident(ident) => ident_to_param_def(
|
||||
|
@ -331,7 +330,7 @@ pub fn class_to_class_def(
|
|||
|
||||
pub fn get_doc_for_class_decl(
|
||||
doc_parser: &DocParser,
|
||||
class_decl: &swc_ecma_ast::ClassDecl,
|
||||
class_decl: &swc_ecmascript::ast::ClassDecl,
|
||||
) -> (String, ClassDef) {
|
||||
let class_name = class_decl.ident.sym.to_string();
|
||||
let class_def = class_to_class_def(doc_parser, &class_decl.class);
|
||||
|
|
|
@ -1,6 +1,5 @@
|
|||
// Copyright 2018-2020 the Deno authors. All rights reserved. MIT license.
|
||||
use crate::colors;
|
||||
use crate::swc_ecma_ast;
|
||||
use std::fmt::{Display, Formatter, Result};
|
||||
|
||||
pub(crate) struct Indent(pub i64);
|
||||
|
@ -50,13 +49,13 @@ pub(crate) fn display_abstract(is_abstract: bool) -> impl Display {
|
|||
}
|
||||
|
||||
pub(crate) fn display_accessibility(
|
||||
accessibility: Option<swc_ecma_ast::Accessibility>,
|
||||
accessibility: Option<swc_ecmascript::ast::Accessibility>,
|
||||
) -> impl Display {
|
||||
colors::magenta(
|
||||
match accessibility.unwrap_or(swc_ecma_ast::Accessibility::Public) {
|
||||
swc_ecma_ast::Accessibility::Public => "",
|
||||
swc_ecma_ast::Accessibility::Protected => "protected ",
|
||||
swc_ecma_ast::Accessibility::Private => "private ",
|
||||
match accessibility.unwrap_or(swc_ecmascript::ast::Accessibility::Public) {
|
||||
swc_ecmascript::ast::Accessibility::Public => "",
|
||||
swc_ecmascript::ast::Accessibility::Protected => "protected ",
|
||||
swc_ecmascript::ast::Accessibility::Private => "private ",
|
||||
},
|
||||
)
|
||||
}
|
||||
|
@ -69,10 +68,12 @@ pub(crate) fn display_generator(is_generator: bool) -> impl Display {
|
|||
colors::magenta(if is_generator { "*" } else { "" })
|
||||
}
|
||||
|
||||
pub(crate) fn display_method(method: swc_ecma_ast::MethodKind) -> impl Display {
|
||||
pub(crate) fn display_method(
|
||||
method: swc_ecmascript::ast::MethodKind,
|
||||
) -> impl Display {
|
||||
colors::magenta(match method {
|
||||
swc_ecma_ast::MethodKind::Getter => "get ",
|
||||
swc_ecma_ast::MethodKind::Setter => "set ",
|
||||
swc_ecmascript::ast::MethodKind::Getter => "get ",
|
||||
swc_ecmascript::ast::MethodKind::Setter => "set ",
|
||||
_ => "",
|
||||
})
|
||||
}
|
||||
|
|
|
@ -1,5 +1,4 @@
|
|||
// Copyright 2018-2020 the Deno authors. All rights reserved. MIT license.
|
||||
use crate::swc_ecma_ast;
|
||||
use serde::Serialize;
|
||||
|
||||
use super::parser::DocParser;
|
||||
|
@ -18,13 +17,13 @@ pub struct EnumDef {
|
|||
|
||||
pub fn get_doc_for_ts_enum_decl(
|
||||
_doc_parser: &DocParser,
|
||||
enum_decl: &swc_ecma_ast::TsEnumDecl,
|
||||
enum_decl: &swc_ecmascript::ast::TsEnumDecl,
|
||||
) -> (String, EnumDef) {
|
||||
let enum_name = enum_decl.id.sym.to_string();
|
||||
let mut members = vec![];
|
||||
|
||||
for enum_member in &enum_decl.members {
|
||||
use crate::swc_ecma_ast::TsEnumMemberId::*;
|
||||
use swc_ecmascript::ast::TsEnumMemberId::*;
|
||||
|
||||
let member_name = match &enum_member.id {
|
||||
Ident(ident) => ident.sym.to_string(),
|
||||
|
|
|
@ -6,7 +6,6 @@ use super::ts_type::TsTypeDef;
|
|||
use super::ts_type_param::maybe_type_param_decl_to_type_param_defs;
|
||||
use super::ts_type_param::TsTypeParamDef;
|
||||
use super::ParamDef;
|
||||
use crate::swc_ecma_ast;
|
||||
use serde::Serialize;
|
||||
|
||||
#[derive(Debug, Serialize, Clone)]
|
||||
|
@ -22,7 +21,7 @@ pub struct FunctionDef {
|
|||
|
||||
pub fn function_to_function_def(
|
||||
doc_parser: &DocParser,
|
||||
function: &swc_ecma_ast::Function,
|
||||
function: &swc_ecmascript::ast::Function,
|
||||
) -> FunctionDef {
|
||||
let mut params = vec![];
|
||||
|
||||
|
@ -51,7 +50,7 @@ pub fn function_to_function_def(
|
|||
|
||||
pub fn get_doc_for_fn_decl(
|
||||
doc_parser: &DocParser,
|
||||
fn_decl: &swc_ecma_ast::FnDecl,
|
||||
fn_decl: &swc_ecmascript::ast::FnDecl,
|
||||
) -> (String, FunctionDef) {
|
||||
let name = fn_decl.ident.sym.to_string();
|
||||
let fn_def = function_to_function_def(&doc_parser, &fn_decl.function);
|
||||
|
|
|
@ -1,7 +1,6 @@
|
|||
// Copyright 2018-2020 the Deno authors. All rights reserved. MIT license.
|
||||
use crate::colors;
|
||||
use crate::doc::display::{display_optional, display_readonly, SliceDisplayer};
|
||||
use crate::swc_ecma_ast;
|
||||
use serde::Serialize;
|
||||
|
||||
use super::params::ts_fn_param_to_param_def;
|
||||
|
@ -115,9 +114,9 @@ pub struct InterfaceDef {
|
|||
pub type_params: Vec<TsTypeParamDef>,
|
||||
}
|
||||
|
||||
pub fn expr_to_name(expr: &swc_ecma_ast::Expr) -> String {
|
||||
use crate::swc_ecma_ast::Expr::*;
|
||||
use crate::swc_ecma_ast::ExprOrSuper::*;
|
||||
pub fn expr_to_name(expr: &swc_ecmascript::ast::Expr) -> String {
|
||||
use swc_ecmascript::ast::Expr::*;
|
||||
use swc_ecmascript::ast::ExprOrSuper::*;
|
||||
|
||||
match expr {
|
||||
Ident(ident) => ident.sym.to_string(),
|
||||
|
@ -135,7 +134,7 @@ pub fn expr_to_name(expr: &swc_ecma_ast::Expr) -> String {
|
|||
|
||||
pub fn get_doc_for_ts_interface_decl(
|
||||
doc_parser: &DocParser,
|
||||
interface_decl: &swc_ecma_ast::TsInterfaceDecl,
|
||||
interface_decl: &swc_ecmascript::ast::TsInterfaceDecl,
|
||||
) -> (String, InterfaceDef) {
|
||||
let interface_name = interface_decl.id.sym.to_string();
|
||||
|
||||
|
@ -145,7 +144,7 @@ pub fn get_doc_for_ts_interface_decl(
|
|||
let mut index_signatures = vec![];
|
||||
|
||||
for type_element in &interface_decl.body.body {
|
||||
use crate::swc_ecma_ast::TsTypeElement::*;
|
||||
use swc_ecmascript::ast::TsTypeElement::*;
|
||||
|
||||
match &type_element {
|
||||
TsMethodSignature(ts_method_sig) => {
|
||||
|
|
|
@ -1,6 +1,5 @@
|
|||
// Copyright 2018-2020 the Deno authors. All rights reserved. MIT license.
|
||||
use crate::swc_common::Spanned;
|
||||
use crate::swc_ecma_ast;
|
||||
use swc_common::Spanned;
|
||||
|
||||
use super::parser::DocParser;
|
||||
use super::DocNode;
|
||||
|
@ -8,10 +7,10 @@ use super::DocNodeKind;
|
|||
|
||||
pub fn get_doc_node_for_export_decl(
|
||||
doc_parser: &DocParser,
|
||||
export_decl: &swc_ecma_ast::ExportDecl,
|
||||
export_decl: &swc_ecmascript::ast::ExportDecl,
|
||||
) -> DocNode {
|
||||
let export_span = export_decl.span();
|
||||
use crate::swc_ecma_ast::Decl;
|
||||
use swc_ecmascript::ast::Decl;
|
||||
|
||||
let js_doc = doc_parser.js_doc_for_span(export_span);
|
||||
let location = doc_parser.ast_parser.get_span_location(export_span).into();
|
||||
|
|
|
@ -1,5 +1,4 @@
|
|||
// Copyright 2018-2020 the Deno authors. All rights reserved. MIT license.
|
||||
use crate::swc_ecma_ast;
|
||||
use serde::Serialize;
|
||||
|
||||
use super::parser::DocParser;
|
||||
|
@ -13,7 +12,7 @@ pub struct NamespaceDef {
|
|||
|
||||
pub fn get_doc_for_ts_namespace_decl(
|
||||
doc_parser: &DocParser,
|
||||
ts_namespace_decl: &swc_ecma_ast::TsNamespaceDecl,
|
||||
ts_namespace_decl: &swc_ecmascript::ast::TsNamespaceDecl,
|
||||
) -> DocNode {
|
||||
let js_doc = doc_parser.js_doc_for_span(ts_namespace_decl.span);
|
||||
let location = doc_parser
|
||||
|
@ -22,7 +21,7 @@ pub fn get_doc_for_ts_namespace_decl(
|
|||
.into();
|
||||
let namespace_name = ts_namespace_decl.id.sym.to_string();
|
||||
|
||||
use crate::swc_ecma_ast::TsNamespaceBody::*;
|
||||
use swc_ecmascript::ast::TsNamespaceBody::*;
|
||||
|
||||
let elements = match &*ts_namespace_decl.body {
|
||||
TsModuleBlock(ts_module_block) => {
|
||||
|
@ -52,16 +51,16 @@ pub fn get_doc_for_ts_namespace_decl(
|
|||
|
||||
pub fn get_doc_for_ts_module(
|
||||
doc_parser: &DocParser,
|
||||
ts_module_decl: &swc_ecma_ast::TsModuleDecl,
|
||||
ts_module_decl: &swc_ecmascript::ast::TsModuleDecl,
|
||||
) -> (String, NamespaceDef) {
|
||||
use crate::swc_ecma_ast::TsModuleName;
|
||||
use swc_ecmascript::ast::TsModuleName;
|
||||
let namespace_name = match &ts_module_decl.id {
|
||||
TsModuleName::Ident(ident) => ident.sym.to_string(),
|
||||
TsModuleName::Str(str_) => str_.value.to_string(),
|
||||
};
|
||||
|
||||
let elements = if let Some(body) = &ts_module_decl.body {
|
||||
use crate::swc_ecma_ast::TsNamespaceBody::*;
|
||||
use swc_ecmascript::ast::TsNamespaceBody::*;
|
||||
|
||||
match &body {
|
||||
TsModuleBlock(ts_module_block) => {
|
||||
|
|
|
@ -1,5 +1,4 @@
|
|||
// Copyright 2018-2020 the Deno authors. All rights reserved. MIT license.
|
||||
use crate::swc_common;
|
||||
use serde::Serialize;
|
||||
|
||||
#[derive(Debug, PartialEq, Serialize, Clone)]
|
||||
|
@ -23,7 +22,7 @@ pub struct Location {
|
|||
|
||||
impl Into<Location> for swc_common::Loc {
|
||||
fn into(self) -> Location {
|
||||
use crate::swc_common::FileName::*;
|
||||
use swc_common::FileName::*;
|
||||
|
||||
let filename = match &self.file.name {
|
||||
Real(path_buf) => path_buf.to_string_lossy().to_string(),
|
||||
|
|
|
@ -1,11 +1,10 @@
|
|||
// Copyright 2018-2020 the Deno authors. All rights reserved. MIT license.
|
||||
use super::display::{display_optional, SliceDisplayer};
|
||||
use super::ts_type::{ts_type_ann_to_def, TsTypeDef};
|
||||
use crate::swc_common::SourceMap;
|
||||
use crate::swc_ecma_ast;
|
||||
use crate::swc_ecma_ast::{ObjectPatProp, Pat, TsFnParam};
|
||||
use serde::Serialize;
|
||||
use std::fmt::{Display, Formatter, Result as FmtResult};
|
||||
use swc_common::SourceMap;
|
||||
use swc_ecmascript::ast::{ObjectPatProp, Pat, TsFnParam};
|
||||
|
||||
#[derive(Debug, Serialize, Clone)]
|
||||
#[serde(rename_all = "camelCase")]
|
||||
|
@ -146,7 +145,7 @@ impl Display for ObjectPatPropDef {
|
|||
}
|
||||
|
||||
pub fn ident_to_param_def(
|
||||
ident: &swc_ecma_ast::Ident,
|
||||
ident: &swc_ecmascript::ast::Ident,
|
||||
_source_map: Option<&SourceMap>,
|
||||
) -> ParamDef {
|
||||
let ts_type = ident.type_ann.as_ref().map(|rt| ts_type_ann_to_def(rt));
|
||||
|
@ -159,7 +158,7 @@ pub fn ident_to_param_def(
|
|||
}
|
||||
|
||||
fn rest_pat_to_param_def(
|
||||
rest_pat: &swc_ecma_ast::RestPat,
|
||||
rest_pat: &swc_ecmascript::ast::RestPat,
|
||||
source_map: Option<&SourceMap>,
|
||||
) -> ParamDef {
|
||||
let ts_type = rest_pat.type_ann.as_ref().map(|rt| ts_type_ann_to_def(rt));
|
||||
|
@ -190,7 +189,7 @@ fn object_pat_prop_to_def(
|
|||
}
|
||||
|
||||
fn object_pat_to_param_def(
|
||||
object_pat: &swc_ecma_ast::ObjectPat,
|
||||
object_pat: &swc_ecmascript::ast::ObjectPat,
|
||||
source_map: Option<&SourceMap>,
|
||||
) -> ParamDef {
|
||||
let props = object_pat
|
||||
|
@ -211,7 +210,7 @@ fn object_pat_to_param_def(
|
|||
}
|
||||
|
||||
fn array_pat_to_param_def(
|
||||
array_pat: &swc_ecma_ast::ArrayPat,
|
||||
array_pat: &swc_ecmascript::ast::ArrayPat,
|
||||
source_map: Option<&SourceMap>,
|
||||
) -> ParamDef {
|
||||
let elements = array_pat
|
||||
|
@ -229,7 +228,7 @@ fn array_pat_to_param_def(
|
|||
}
|
||||
|
||||
pub fn assign_pat_to_param_def(
|
||||
assign_pat: &swc_ecma_ast::AssignPat,
|
||||
assign_pat: &swc_ecmascript::ast::AssignPat,
|
||||
source_map: Option<&SourceMap>,
|
||||
) -> ParamDef {
|
||||
let ts_type = assign_pat
|
||||
|
@ -245,7 +244,7 @@ pub fn assign_pat_to_param_def(
|
|||
}
|
||||
|
||||
pub fn pat_to_param_def(
|
||||
pat: &swc_ecma_ast::Pat,
|
||||
pat: &swc_ecmascript::ast::Pat,
|
||||
source_map: Option<&SourceMap>,
|
||||
) -> ParamDef {
|
||||
match pat {
|
||||
|
@ -259,7 +258,7 @@ pub fn pat_to_param_def(
|
|||
}
|
||||
|
||||
pub fn ts_fn_param_to_param_def(
|
||||
ts_fn_param: &swc_ecma_ast::TsFnParam,
|
||||
ts_fn_param: &swc_ecmascript::ast::TsFnParam,
|
||||
source_map: Option<&SourceMap>,
|
||||
) -> ParamDef {
|
||||
match ts_fn_param {
|
||||
|
@ -275,10 +274,10 @@ pub fn ts_fn_param_to_param_def(
|
|||
}
|
||||
|
||||
pub fn prop_name_to_string(
|
||||
prop_name: &swc_ecma_ast::PropName,
|
||||
prop_name: &swc_ecmascript::ast::PropName,
|
||||
source_map: Option<&SourceMap>,
|
||||
) -> String {
|
||||
use crate::swc_ecma_ast::PropName;
|
||||
use swc_ecmascript::ast::PropName;
|
||||
match prop_name {
|
||||
PropName::Ident(ident) => ident.sym.to_string(),
|
||||
PropName::Str(str_) => str_.value.to_string(),
|
||||
|
|
|
@ -1,15 +1,14 @@
|
|||
// Copyright 2018-2020 the Deno authors. All rights reserved. MIT license.
|
||||
use crate::file_fetcher::map_file_extension;
|
||||
use crate::op_error::OpError;
|
||||
use crate::swc_common::comments::CommentKind;
|
||||
use crate::swc_common::Span;
|
||||
use crate::swc_ecma_ast;
|
||||
use crate::swc_ecma_ast::Decl;
|
||||
use crate::swc_ecma_ast::DefaultDecl;
|
||||
use crate::swc_ecma_ast::ModuleDecl;
|
||||
use crate::swc_ecma_ast::Stmt;
|
||||
use crate::swc_util::AstParser;
|
||||
use crate::swc_util::SwcDiagnosticBuffer;
|
||||
use swc_common::comments::CommentKind;
|
||||
use swc_common::Span;
|
||||
use swc_ecmascript::ast::Decl;
|
||||
use swc_ecmascript::ast::DefaultDecl;
|
||||
use swc_ecmascript::ast::ModuleDecl;
|
||||
use swc_ecmascript::ast::Stmt;
|
||||
|
||||
use deno_core::ErrBox;
|
||||
use deno_core::ModuleSpecifier;
|
||||
|
@ -62,22 +61,18 @@ impl DocParser {
|
|||
source_code: &str,
|
||||
) -> Result<ModuleDoc, SwcDiagnosticBuffer> {
|
||||
let media_type = map_file_extension(&PathBuf::from(file_name));
|
||||
self.ast_parser.parse_module(
|
||||
file_name,
|
||||
media_type,
|
||||
source_code,
|
||||
|parse_result| {
|
||||
let module = parse_result?;
|
||||
let doc_entries =
|
||||
self.get_doc_nodes_for_module_body(module.body.clone());
|
||||
let reexports = self.get_reexports_for_module_body(module.body);
|
||||
let module_doc = ModuleDoc {
|
||||
definitions: doc_entries,
|
||||
reexports,
|
||||
};
|
||||
Ok(module_doc)
|
||||
},
|
||||
)
|
||||
let parse_result =
|
||||
self
|
||||
.ast_parser
|
||||
.parse_module(file_name, media_type, source_code);
|
||||
let module = parse_result?;
|
||||
let doc_entries = self.get_doc_nodes_for_module_body(module.body.clone());
|
||||
let reexports = self.get_reexports_for_module_body(module.body);
|
||||
let module_doc = ModuleDoc {
|
||||
definitions: doc_entries,
|
||||
reexports,
|
||||
};
|
||||
Ok(module_doc)
|
||||
}
|
||||
|
||||
pub async fn parse(&self, file_name: &str) -> Result<Vec<DocNode>, ErrBox> {
|
||||
|
@ -452,14 +447,14 @@ impl DocParser {
|
|||
|
||||
pub fn get_reexports_for_module_body(
|
||||
&self,
|
||||
module_body: Vec<swc_ecma_ast::ModuleItem>,
|
||||
module_body: Vec<swc_ecmascript::ast::ModuleItem>,
|
||||
) -> Vec<node::Reexport> {
|
||||
use swc_ecma_ast::ExportSpecifier::*;
|
||||
use swc_ecmascript::ast::ExportSpecifier::*;
|
||||
|
||||
let mut reexports: Vec<node::Reexport> = vec![];
|
||||
|
||||
for node in module_body.iter() {
|
||||
if let swc_ecma_ast::ModuleItem::ModuleDecl(module_decl) = node {
|
||||
if let swc_ecmascript::ast::ModuleItem::ModuleDecl(module_decl) = node {
|
||||
let r = match module_decl {
|
||||
ModuleDecl::ExportNamed(named_export) => {
|
||||
if let Some(src) = &named_export.src {
|
||||
|
@ -513,16 +508,16 @@ impl DocParser {
|
|||
|
||||
pub fn get_doc_nodes_for_module_body(
|
||||
&self,
|
||||
module_body: Vec<swc_ecma_ast::ModuleItem>,
|
||||
module_body: Vec<swc_ecmascript::ast::ModuleItem>,
|
||||
) -> Vec<DocNode> {
|
||||
let mut doc_entries: Vec<DocNode> = vec![];
|
||||
for node in module_body.iter() {
|
||||
match node {
|
||||
swc_ecma_ast::ModuleItem::ModuleDecl(module_decl) => {
|
||||
swc_ecmascript::ast::ModuleItem::ModuleDecl(module_decl) => {
|
||||
doc_entries
|
||||
.extend(self.get_doc_nodes_for_module_exports(module_decl));
|
||||
}
|
||||
swc_ecma_ast::ModuleItem::Stmt(stmt) => {
|
||||
swc_ecmascript::ast::ModuleItem::Stmt(stmt) => {
|
||||
if let Some(doc_node) = self.get_doc_node_for_stmt(stmt) {
|
||||
doc_entries.push(doc_node);
|
||||
}
|
||||
|
|
|
@ -16,7 +16,6 @@ use crate::doc::display::{
|
|||
display_abstract, display_async, display_generator, Indent, SliceDisplayer,
|
||||
};
|
||||
use crate::doc::DocNodeKind;
|
||||
use crate::swc_ecma_ast;
|
||||
use std::fmt::{Display, Formatter, Result as FmtResult};
|
||||
|
||||
pub struct DocPrinter<'a> {
|
||||
|
@ -193,8 +192,8 @@ impl<'a> DocPrinter<'a> {
|
|||
self.private
|
||||
|| node
|
||||
.accessibility
|
||||
.unwrap_or(swc_ecma_ast::Accessibility::Public)
|
||||
!= swc_ecma_ast::Accessibility::Private
|
||||
.unwrap_or(swc_ecmascript::ast::Accessibility::Public)
|
||||
!= swc_ecmascript::ast::Accessibility::Private
|
||||
}) {
|
||||
writeln!(w, "{}{}", Indent(1), node,)?;
|
||||
if let Some(js_doc) = &node.js_doc {
|
||||
|
@ -208,8 +207,8 @@ impl<'a> DocPrinter<'a> {
|
|||
self.private
|
||||
|| node
|
||||
.accessibility
|
||||
.unwrap_or(swc_ecma_ast::Accessibility::Public)
|
||||
!= swc_ecma_ast::Accessibility::Private
|
||||
.unwrap_or(swc_ecmascript::ast::Accessibility::Public)
|
||||
!= swc_ecmascript::ast::Accessibility::Private
|
||||
}) {
|
||||
writeln!(w, "{}{}", Indent(1), node,)?;
|
||||
if let Some(js_doc) = &node.js_doc {
|
||||
|
@ -454,9 +453,9 @@ impl<'a> DocPrinter<'a> {
|
|||
"{}{} {}",
|
||||
Indent(indent),
|
||||
colors::magenta(match variable_def.kind {
|
||||
swc_ecma_ast::VarDeclKind::Const => "const",
|
||||
swc_ecma_ast::VarDeclKind::Let => "let",
|
||||
swc_ecma_ast::VarDeclKind::Var => "var",
|
||||
swc_ecmascript::ast::VarDeclKind::Const => "const",
|
||||
swc_ecmascript::ast::VarDeclKind::Let => "let",
|
||||
swc_ecmascript::ast::VarDeclKind::Var => "var",
|
||||
}),
|
||||
colors::bold(&node.name),
|
||||
)?;
|
||||
|
|
|
@ -7,16 +7,15 @@ use super::ts_type_param::TsTypeParamDef;
|
|||
use super::ParamDef;
|
||||
use crate::colors;
|
||||
use crate::doc;
|
||||
use crate::swc_ecma_ast;
|
||||
use crate::swc_ecma_ast::{
|
||||
use serde::Serialize;
|
||||
use std::fmt::{Display, Formatter, Result as FmtResult};
|
||||
use swc_ecmascript::ast::{
|
||||
TsArrayType, TsConditionalType, TsExprWithTypeArgs, TsFnOrConstructorType,
|
||||
TsIndexedAccessType, TsKeywordType, TsLit, TsLitType, TsOptionalType,
|
||||
TsParenthesizedType, TsRestType, TsThisType, TsTupleType, TsType, TsTypeAnn,
|
||||
TsTypeLit, TsTypeOperator, TsTypeParamInstantiation, TsTypeQuery, TsTypeRef,
|
||||
TsUnionOrIntersectionType,
|
||||
};
|
||||
use serde::Serialize;
|
||||
use std::fmt::{Display, Formatter, Result as FmtResult};
|
||||
|
||||
// pub enum TsType {
|
||||
// * TsKeywordType(TsKeywordType),
|
||||
|
@ -129,7 +128,7 @@ impl Into<TsTypeDef> for &TsTupleType {
|
|||
|
||||
impl Into<TsTypeDef> for &TsUnionOrIntersectionType {
|
||||
fn into(self) -> TsTypeDef {
|
||||
use crate::swc_ecma_ast::TsUnionOrIntersectionType::*;
|
||||
use swc_ecmascript::ast::TsUnionOrIntersectionType::*;
|
||||
|
||||
match self {
|
||||
TsUnionType(union_type) => {
|
||||
|
@ -168,7 +167,7 @@ impl Into<TsTypeDef> for &TsUnionOrIntersectionType {
|
|||
|
||||
impl Into<TsTypeDef> for &TsKeywordType {
|
||||
fn into(self) -> TsTypeDef {
|
||||
use crate::swc_ecma_ast::TsKeywordTypeKind::*;
|
||||
use swc_ecmascript::ast::TsKeywordTypeKind::*;
|
||||
|
||||
let keyword_str = match self.kind {
|
||||
TsAnyKeyword => "any",
|
||||
|
@ -258,9 +257,9 @@ impl Into<TsTypeDef> for &TsThisType {
|
|||
}
|
||||
|
||||
pub fn ts_entity_name_to_name(
|
||||
entity_name: &swc_ecma_ast::TsEntityName,
|
||||
entity_name: &swc_ecmascript::ast::TsEntityName,
|
||||
) -> String {
|
||||
use crate::swc_ecma_ast::TsEntityName::*;
|
||||
use swc_ecmascript::ast::TsEntityName::*;
|
||||
|
||||
match entity_name {
|
||||
Ident(ident) => ident.sym.to_string(),
|
||||
|
@ -274,7 +273,7 @@ pub fn ts_entity_name_to_name(
|
|||
|
||||
impl Into<TsTypeDef> for &TsTypeQuery {
|
||||
fn into(self) -> TsTypeDef {
|
||||
use crate::swc_ecma_ast::TsTypeQueryExpr::*;
|
||||
use swc_ecmascript::ast::TsTypeQueryExpr::*;
|
||||
|
||||
let type_name = match &self.expr_name {
|
||||
TsEntityName(entity_name) => ts_entity_name_to_name(&*entity_name),
|
||||
|
@ -374,7 +373,7 @@ impl Into<TsTypeDef> for &TsTypeLit {
|
|||
let mut index_signatures = vec![];
|
||||
|
||||
for type_element in &self.members {
|
||||
use crate::swc_ecma_ast::TsTypeElement::*;
|
||||
use swc_ecmascript::ast::TsTypeElement::*;
|
||||
|
||||
match &type_element {
|
||||
TsMethodSignature(ts_method_sig) => {
|
||||
|
@ -511,7 +510,7 @@ impl Into<TsTypeDef> for &TsConditionalType {
|
|||
|
||||
impl Into<TsTypeDef> for &TsFnOrConstructorType {
|
||||
fn into(self) -> TsTypeDef {
|
||||
use crate::swc_ecma_ast::TsFnOrConstructorType::*;
|
||||
use swc_ecmascript::ast::TsFnOrConstructorType::*;
|
||||
|
||||
let fn_def = match self {
|
||||
TsFnType(ts_fn_type) => {
|
||||
|
@ -563,7 +562,7 @@ impl Into<TsTypeDef> for &TsFnOrConstructorType {
|
|||
|
||||
impl Into<TsTypeDef> for &TsType {
|
||||
fn into(self) -> TsTypeDef {
|
||||
use crate::swc_ecma_ast::TsType::*;
|
||||
use swc_ecmascript::ast::TsType::*;
|
||||
|
||||
match self {
|
||||
TsKeywordType(ref keyword_type) => keyword_type.into(),
|
||||
|
@ -829,7 +828,7 @@ pub struct TsTypeDef {
|
|||
}
|
||||
|
||||
pub fn ts_type_ann_to_def(type_ann: &TsTypeAnn) -> TsTypeDef {
|
||||
use crate::swc_ecma_ast::TsType::*;
|
||||
use swc_ecmascript::ast::TsType::*;
|
||||
|
||||
match &*type_ann.type_ann {
|
||||
TsKeywordType(keyword_type) => keyword_type.into(),
|
||||
|
|
|
@ -1,9 +1,9 @@
|
|||
// Copyright 2018-2020 the Deno authors. All rights reserved. MIT license.
|
||||
use super::ts_type::TsTypeDef;
|
||||
use crate::swc_ecma_ast::TsTypeParam;
|
||||
use crate::swc_ecma_ast::TsTypeParamDecl;
|
||||
use serde::Serialize;
|
||||
use std::fmt::{Display, Formatter, Result as FmtResult};
|
||||
use swc_ecmascript::ast::TsTypeParam;
|
||||
use swc_ecmascript::ast::TsTypeParamDecl;
|
||||
|
||||
#[derive(Debug, Serialize, Clone)]
|
||||
#[serde(rename_all = "camelCase")]
|
||||
|
|
|
@ -3,7 +3,6 @@ use super::parser::DocParser;
|
|||
use super::ts_type::TsTypeDef;
|
||||
use super::ts_type_param::maybe_type_param_decl_to_type_param_defs;
|
||||
use super::ts_type_param::TsTypeParamDef;
|
||||
use crate::swc_ecma_ast;
|
||||
use serde::Serialize;
|
||||
|
||||
#[derive(Debug, Serialize, Clone)]
|
||||
|
@ -15,7 +14,7 @@ pub struct TypeAliasDef {
|
|||
|
||||
pub fn get_doc_for_ts_type_alias_decl(
|
||||
_doc_parser: &DocParser,
|
||||
type_alias_decl: &swc_ecma_ast::TsTypeAliasDecl,
|
||||
type_alias_decl: &swc_ecmascript::ast::TsTypeAliasDecl,
|
||||
) -> (String, TypeAliasDef) {
|
||||
let alias_name = type_alias_decl.id.sym.to_string();
|
||||
let ts_type = type_alias_decl.type_ann.as_ref().into();
|
||||
|
|
|
@ -1,5 +1,4 @@
|
|||
// Copyright 2018-2020 the Deno authors. All rights reserved. MIT license.
|
||||
use crate::swc_ecma_ast;
|
||||
use serde::Serialize;
|
||||
|
||||
use super::ts_type::ts_type_ann_to_def;
|
||||
|
@ -9,23 +8,23 @@ use super::ts_type::TsTypeDef;
|
|||
#[serde(rename_all = "camelCase")]
|
||||
pub struct VariableDef {
|
||||
pub ts_type: Option<TsTypeDef>,
|
||||
pub kind: swc_ecma_ast::VarDeclKind,
|
||||
pub kind: swc_ecmascript::ast::VarDeclKind,
|
||||
}
|
||||
|
||||
// TODO: change this function to return Vec<(String, VariableDef)> as single
|
||||
// var declaration can have multiple declarators
|
||||
pub fn get_doc_for_var_decl(
|
||||
var_decl: &swc_ecma_ast::VarDecl,
|
||||
var_decl: &swc_ecmascript::ast::VarDecl,
|
||||
) -> (String, VariableDef) {
|
||||
assert!(!var_decl.decls.is_empty());
|
||||
let var_declarator = var_decl.decls.get(0).unwrap();
|
||||
let var_name = match &var_declarator.name {
|
||||
swc_ecma_ast::Pat::Ident(ident) => ident.sym.to_string(),
|
||||
swc_ecmascript::ast::Pat::Ident(ident) => ident.sym.to_string(),
|
||||
_ => "<TODO>".to_string(),
|
||||
};
|
||||
|
||||
let maybe_ts_type = match &var_declarator.name {
|
||||
swc_ecma_ast::Pat::Ident(ident) => {
|
||||
swc_ecmascript::ast::Pat::Ident(ident) => {
|
||||
ident.type_ann.as_ref().map(|rt| ts_type_ann_to_def(rt))
|
||||
}
|
||||
_ => None,
|
||||
|
|
|
@ -9,10 +9,10 @@
|
|||
|
||||
use crate::colors;
|
||||
use crate::diff::diff;
|
||||
use crate::dprint_plugin_typescript as dprint;
|
||||
use crate::fs::files_in_subtree;
|
||||
use crate::op_error::OpError;
|
||||
use deno_core::ErrBox;
|
||||
use dprint_plugin_typescript as dprint;
|
||||
use std::fs;
|
||||
use std::io::stdin;
|
||||
use std::io::stdout;
|
||||
|
|
|
@ -12,7 +12,6 @@ use crate::file_fetcher::map_file_extension;
|
|||
use crate::fmt::collect_files;
|
||||
use crate::fmt::run_parallelized;
|
||||
use crate::fmt_errors;
|
||||
use crate::swc_ecma_parser::Syntax;
|
||||
use crate::swc_util;
|
||||
use deno_core::ErrBox;
|
||||
use deno_lint::diagnostic::LintDiagnostic;
|
||||
|
@ -24,6 +23,7 @@ use std::fs;
|
|||
use std::path::PathBuf;
|
||||
use std::sync::atomic::{AtomicUsize, Ordering};
|
||||
use std::sync::{Arc, Mutex};
|
||||
use swc_ecmascript::parser::Syntax;
|
||||
|
||||
pub async fn lint_files(args: Vec<String>) -> Result<(), ErrBox> {
|
||||
let target_files = collect_files(args)?;
|
||||
|
|
|
@ -67,12 +67,6 @@ pub mod version;
|
|||
mod web_worker;
|
||||
pub mod worker;
|
||||
|
||||
pub use deno_lint::dprint_plugin_typescript;
|
||||
pub use deno_lint::swc_common;
|
||||
pub use deno_lint::swc_ecma_ast;
|
||||
pub use deno_lint::swc_ecma_parser;
|
||||
pub use deno_lint::swc_ecma_visit;
|
||||
|
||||
use crate::doc::parser::DocFileLoader;
|
||||
use crate::file_fetcher::SourceFile;
|
||||
use crate::file_fetcher::SourceFileFetcher;
|
||||
|
|
190
cli/swc_util.rs
190
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(),
|
||||
);
|
||||
) -> 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 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 lexer = Lexer::new(
|
||||
syntax,
|
||||
JscTarget::Es2019,
|
||||
StringInput::from(&*swc_source_file),
|
||||
Some(&self.comments),
|
||||
);
|
||||
|
||||
let mut parser = Parser::new_from(lexer);
|
||||
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)
|
||||
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 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 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)?;
|
||||
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)
|
||||
})
|
||||
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())
|
||||
}
|
||||
}
|
||||
|
||||
|
|
124
cli/tsc.rs
124
cli/tsc.rs
|
@ -19,12 +19,6 @@ use crate::permissions::Permissions;
|
|||
use crate::source_maps::SourceMapGetter;
|
||||
use crate::startup_data;
|
||||
use crate::state::State;
|
||||
use crate::swc_common::comments::CommentKind;
|
||||
use crate::swc_common::Span;
|
||||
use crate::swc_ecma_ast;
|
||||
use crate::swc_ecma_visit;
|
||||
use crate::swc_ecma_visit::Node;
|
||||
use crate::swc_ecma_visit::Visit;
|
||||
use crate::swc_util::AstParser;
|
||||
use crate::swc_util::SwcDiagnosticBuffer;
|
||||
use crate::version;
|
||||
|
@ -57,6 +51,10 @@ use std::sync::atomic::Ordering;
|
|||
use std::sync::Arc;
|
||||
use std::sync::Mutex;
|
||||
use std::task::Poll;
|
||||
use swc_common::comments::CommentKind;
|
||||
use swc_common::Span;
|
||||
use swc_ecmascript::visit::Node;
|
||||
use swc_ecmascript::visit::Visit;
|
||||
use url::Url;
|
||||
|
||||
pub const AVAILABLE_LIBS: &[&str] = &[
|
||||
|
@ -1262,7 +1260,7 @@ struct DependencyVisitor {
|
|||
impl Visit for DependencyVisitor {
|
||||
fn visit_import_decl(
|
||||
&mut self,
|
||||
import_decl: &swc_ecma_ast::ImportDecl,
|
||||
import_decl: &swc_ecmascript::ast::ImportDecl,
|
||||
_parent: &dyn Node,
|
||||
) {
|
||||
let src_str = import_decl.src.value.to_string();
|
||||
|
@ -1275,7 +1273,7 @@ impl Visit for DependencyVisitor {
|
|||
|
||||
fn visit_named_export(
|
||||
&mut self,
|
||||
named_export: &swc_ecma_ast::NamedExport,
|
||||
named_export: &swc_ecmascript::ast::NamedExport,
|
||||
_parent: &dyn Node,
|
||||
) {
|
||||
if let Some(src) = &named_export.src {
|
||||
|
@ -1290,7 +1288,7 @@ impl Visit for DependencyVisitor {
|
|||
|
||||
fn visit_export_all(
|
||||
&mut self,
|
||||
export_all: &swc_ecma_ast::ExportAll,
|
||||
export_all: &swc_ecmascript::ast::ExportAll,
|
||||
_parent: &dyn Node,
|
||||
) {
|
||||
let src_str = export_all.src.value.to_string();
|
||||
|
@ -1303,7 +1301,7 @@ impl Visit for DependencyVisitor {
|
|||
|
||||
fn visit_ts_import_type(
|
||||
&mut self,
|
||||
ts_import_type: &swc_ecma_ast::TsImportType,
|
||||
ts_import_type: &swc_ecmascript::ast::TsImportType,
|
||||
_parent: &dyn Node,
|
||||
) {
|
||||
// TODO(bartlomieju): possibly add separate DependencyKind
|
||||
|
@ -1317,13 +1315,13 @@ impl Visit for DependencyVisitor {
|
|||
|
||||
fn visit_call_expr(
|
||||
&mut self,
|
||||
call_expr: &swc_ecma_ast::CallExpr,
|
||||
call_expr: &swc_ecmascript::ast::CallExpr,
|
||||
parent: &dyn Node,
|
||||
) {
|
||||
use swc_ecma_ast::Expr::*;
|
||||
use swc_ecma_ast::ExprOrSuper::*;
|
||||
use swc_ecmascript::ast::Expr::*;
|
||||
use swc_ecmascript::ast::ExprOrSuper::*;
|
||||
|
||||
swc_ecma_visit::visit_call_expr(self, call_expr, parent);
|
||||
swc_ecmascript::visit::visit_call_expr(self, call_expr, parent);
|
||||
let boxed_expr = match call_expr.callee.clone() {
|
||||
Super(_) => return,
|
||||
Expr(boxed) => boxed,
|
||||
|
@ -1341,7 +1339,7 @@ impl Visit for DependencyVisitor {
|
|||
if let Some(arg) = call_expr.args.get(0) {
|
||||
match &*arg.expr {
|
||||
Lit(lit) => {
|
||||
if let swc_ecma_ast::Lit::Str(str_) = lit {
|
||||
if let swc_ecmascript::ast::Lit::Str(str_) = lit {
|
||||
let src_str = str_.value.to_string();
|
||||
self.dependencies.push(DependencyDescriptor {
|
||||
specifier: src_str,
|
||||
|
@ -1389,61 +1387,59 @@ pub fn pre_process_file(
|
|||
analyze_dynamic_imports: bool,
|
||||
) -> Result<(Vec<ImportDesc>, Vec<TsReferenceDesc>), SwcDiagnosticBuffer> {
|
||||
let parser = AstParser::default();
|
||||
parser.parse_module(file_name, media_type, source_code, |parse_result| {
|
||||
let module = parse_result?;
|
||||
let mut collector = DependencyVisitor {
|
||||
dependencies: vec![],
|
||||
};
|
||||
let module_span = module.span;
|
||||
collector.visit_module(&module, &module);
|
||||
let parse_result = parser.parse_module(file_name, media_type, source_code);
|
||||
let module = parse_result?;
|
||||
let mut collector = DependencyVisitor {
|
||||
dependencies: vec![],
|
||||
};
|
||||
let module_span = module.span;
|
||||
collector.visit_module(&module, &module);
|
||||
|
||||
let dependency_descriptors = collector.dependencies;
|
||||
let dependency_descriptors = collector.dependencies;
|
||||
|
||||
// for each import check if there's relevant @deno-types directive
|
||||
let imports = dependency_descriptors
|
||||
.iter()
|
||||
.filter(|desc| {
|
||||
if analyze_dynamic_imports {
|
||||
return true;
|
||||
}
|
||||
|
||||
desc.kind != DependencyKind::DynamicImport
|
||||
})
|
||||
.map(|desc| {
|
||||
let location = parser.get_span_location(desc.span);
|
||||
let deno_types = get_deno_types(&parser, desc.span);
|
||||
ImportDesc {
|
||||
specifier: desc.specifier.to_string(),
|
||||
deno_types,
|
||||
location: location.into(),
|
||||
}
|
||||
})
|
||||
.collect();
|
||||
|
||||
// analyze comment from beginning of the file and find TS directives
|
||||
let comments = parser
|
||||
.comments
|
||||
.take_leading_comments(module_span.lo())
|
||||
.unwrap_or_else(Vec::new);
|
||||
|
||||
let mut references = vec![];
|
||||
for comment in comments {
|
||||
if comment.kind != CommentKind::Line {
|
||||
continue;
|
||||
// for each import check if there's relevant @deno-types directive
|
||||
let imports = dependency_descriptors
|
||||
.iter()
|
||||
.filter(|desc| {
|
||||
if analyze_dynamic_imports {
|
||||
return true;
|
||||
}
|
||||
|
||||
let text = comment.text.to_string();
|
||||
if let Some((kind, specifier)) = parse_ts_reference(text.trim()) {
|
||||
let location = parser.get_span_location(comment.span);
|
||||
references.push(TsReferenceDesc {
|
||||
kind,
|
||||
specifier,
|
||||
location: location.into(),
|
||||
});
|
||||
desc.kind != DependencyKind::DynamicImport
|
||||
})
|
||||
.map(|desc| {
|
||||
let location = parser.get_span_location(desc.span);
|
||||
let deno_types = get_deno_types(&parser, desc.span);
|
||||
ImportDesc {
|
||||
specifier: desc.specifier.to_string(),
|
||||
deno_types,
|
||||
location: location.into(),
|
||||
}
|
||||
})
|
||||
.collect();
|
||||
|
||||
// analyze comment from beginning of the file and find TS directives
|
||||
let comments = parser
|
||||
.comments
|
||||
.with_leading(module_span.lo(), |cmts| cmts.to_vec());
|
||||
|
||||
let mut references = vec![];
|
||||
for comment in comments {
|
||||
if comment.kind != CommentKind::Line {
|
||||
continue;
|
||||
}
|
||||
Ok((imports, references))
|
||||
})
|
||||
|
||||
let text = comment.text.to_string();
|
||||
if let Some((kind, specifier)) = parse_ts_reference(text.trim()) {
|
||||
let location = parser.get_span_location(comment.span);
|
||||
references.push(TsReferenceDesc {
|
||||
kind,
|
||||
specifier,
|
||||
location: location.into(),
|
||||
});
|
||||
}
|
||||
}
|
||||
Ok((imports, references))
|
||||
}
|
||||
|
||||
fn get_deno_types(parser: &AstParser, span: Span) -> Option<String> {
|
||||
|
|
Loading…
Reference in a new issue