Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@ bumpalo = "3.12.0"
compact_str = "0.6.1"
miette = "5.5.0"
rayon = "1.6.1"
rustc-hash = "1.1.0"
serde = "1.0.152"
serde_json = "1.0.93"
thiserror = "1.0.38"
Expand Down
26 changes: 2 additions & 24 deletions crates/oxc_ast/src/ast/js.rs
Original file line number Diff line number Diff line change
Expand Up @@ -3,17 +3,8 @@ use std::fmt::Display;
use oxc_allocator::{Box, Vec};
use serde::Serialize;

use super::{
AssignmentOperator, BigintLiteral, BinaryOperator, BooleanLiteral, Decorator,
ImportOrExportKind, JSXElement, JSXFragment, LogicalOperator, NullLiteral, NumberLiteral,
RegExpLiteral, StringLiteral, TSAbstractMethodDefinition, TSAbstractPropertyDefinition,
TSAccessibility, TSAsExpression, TSClassImplements, TSEnumDeclaration, TSExportAssignment,
TSImportEqualsDeclaration, TSIndexSignature, TSInstantiationExpression, TSInterfaceDeclaration,
TSModuleDeclaration, TSNamespaceExportDeclaration, TSNonNullExpression, TSTypeAliasDeclaration,
TSTypeAnnotation, TSTypeAssertion, TSTypeParameterDeclaration, TSTypeParameterInstantiation,
UnaryOperator, UpdateOperator,
};
use crate::{Atom, Node, SourceType};
#[allow(clippy::wildcard_imports)]
use crate::{ast::*, Atom, Node, SourceType};

#[derive(Debug, PartialEq, Hash)]
pub struct Program<'a> {
Expand Down Expand Up @@ -912,7 +903,6 @@ pub struct VariableDeclarator<'a> {
pub kind: VariableDeclarationKind,
pub id: BindingPattern<'a>,
pub init: Option<Expression<'a>>,
#[serde(skip_serializing_if = "crate::is_false")]
pub definite: bool,
}

Expand Down Expand Up @@ -1124,7 +1114,6 @@ pub struct BindingPattern<'a> {
pub kind: BindingPatternKind<'a>,
#[serde(skip_serializing_if = "Option::is_none")]
pub type_annotation: Option<TSTypeAnnotation<'a>>,
#[serde(skip_serializing_if = "crate::is_false")]
pub optional: bool,
}

Expand Down Expand Up @@ -1205,7 +1194,6 @@ pub struct Function<'a> {
pub params: FormalParameters<'a>,
#[serde(skip_serializing_if = "Option::is_none")]
pub body: Option<Box<'a, FunctionBody<'a>>>,
#[serde(skip_serializing_if = "crate::is_false")]
pub declare: bool,
#[serde(skip_serializing_if = "Option::is_none")]
pub type_parameters: Option<Box<'a, TSTypeParameterDeclaration<'a>>>,
Expand Down Expand Up @@ -1262,7 +1250,6 @@ pub struct FormalParameter<'a> {
pub pattern: BindingPattern<'a>,
#[serde(skip_serializing_if = "Option::is_none")]
pub accessibility: Option<TSAccessibility>,
#[serde(skip_serializing_if = "crate::is_false")]
pub readonly: bool,
#[serde(skip_serializing_if = "Option::is_none")]
pub decorators: Option<Vec<'a, Decorator<'a>>>,
Expand Down Expand Up @@ -1341,11 +1328,9 @@ pub struct Class<'a> {
pub super_type_parameters: Option<Box<'a, TSTypeParameterInstantiation<'a>>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub implements: Option<Vec<'a, Box<'a, TSClassImplements<'a>>>>,
#[serde(skip_serializing_if = "crate::is_false")]
pub r#abstract: bool,
#[serde(skip_serializing_if = "Option::is_none")]
pub decorators: Option<Vec<'a, Decorator<'a>>>,
#[serde(skip_serializing_if = "crate::is_false")]
pub declare: bool,
}

Expand Down Expand Up @@ -1461,9 +1446,7 @@ pub struct MethodDefinition<'a> {
pub kind: MethodDefinitionKind,
pub computed: bool,
pub r#static: bool,
#[serde(skip_serializing_if = "crate::is_false")]
pub r#override: bool,
#[serde(skip_serializing_if = "crate::is_false")]
pub optional: bool,
#[serde(skip_serializing_if = "Option::is_none")]
pub accessibility: Option<TSAccessibility>,
Expand All @@ -1481,15 +1464,10 @@ pub struct PropertyDefinition<'a> {
pub value: Option<Expression<'a>>,
pub computed: bool,
pub r#static: bool,
#[serde(skip_serializing_if = "crate::is_false")]
pub declare: bool,
#[serde(skip_serializing_if = "crate::is_false")]
pub r#override: bool,
#[serde(skip_serializing_if = "crate::is_false")]
pub optional: bool,
#[serde(skip_serializing_if = "crate::is_false")]
pub definite: bool,
#[serde(skip_serializing_if = "crate::is_false")]
pub readonly: bool,
#[serde(skip_serializing_if = "Option::is_none")]
pub type_annotation: Option<TSTypeAnnotation<'a>>,
Expand Down
2 changes: 1 addition & 1 deletion crates/oxc_ast/src/ast/jsdoc.rs
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

use serde::Serialize;

use crate::{Node, TSType};
use crate::{ast::TSType, Node};

#[derive(Debug, Serialize, PartialEq, Hash)]
#[serde(tag = "type", rename_all = "camelCase")]
Expand Down
3 changes: 2 additions & 1 deletion crates/oxc_ast/src/ast/jsx.rs
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,8 @@
use oxc_allocator::{Box, Vec};
use serde::Serialize;

use crate::{Atom, Expression, Node, StringLiteral, TSTypeParameterInstantiation};
#[allow(clippy::wildcard_imports)]
use crate::{ast::*, Atom, Node};

// 1.2 JSX Elements

Expand Down
8 changes: 2 additions & 6 deletions crates/oxc_ast/src/ast/ts.rs
Original file line number Diff line number Diff line change
Expand Up @@ -3,12 +3,8 @@
use oxc_allocator::{Box, Vec};
use serde::Serialize;

use crate::{
Atom, BigintLiteral, BindingIdentifier, BooleanLiteral, Expression, FormalParameters,
IdentifierName, JSDocNullableType, JSDocUnknownType, MethodDefinition, Node, NullLiteral,
NumberLiteral, PropertyDefinition, PropertyKey, RegExpLiteral, Statement, StringLiteral,
TemplateElement, TemplateLiteral, UnaryExpression,
};
#[allow(clippy::wildcard_imports)]
use crate::{ast::*, Atom, Node};

#[allow(clippy::trivially_copy_pass_by_ref)]
#[must_use]
Expand Down
11 changes: 7 additions & 4 deletions crates/oxc_ast/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -11,13 +11,13 @@ pub mod ast_builder;
pub mod context;
pub mod node;
pub mod source_type;
pub mod syntax_directed_operations;

pub use num_bigint::BigUint;

pub use self::ast::*;
pub use self::ast_builder::*;
pub use self::node::*;
pub use self::source_type::*;
pub use crate::ast_builder::*;
pub use crate::node::*;
pub use crate::source_type::*;

pub type Atom = compact_str::CompactString;

Expand Down Expand Up @@ -47,6 +47,9 @@ pub type Atom = compact_str::CompactString;
#[test]
fn no_bloat_enum_sizes() {
use std::mem::size_of;

#[allow(clippy::wildcard_imports)]
use crate::ast::*;
assert_eq!(size_of::<Statement>(), 16);
assert_eq!(size_of::<Expression>(), 16);
assert_eq!(size_of::<Declaration>(), 16);
Expand Down
3 changes: 2 additions & 1 deletion crates/oxc_ast/src/node.rs
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,8 @@ use std::{

use serde::Serialize;

use crate::{context::Context, Argument, AssignmentTarget, AssignmentTargetPattern, BindingPattern, BindingPatternKind, ClassElement, Declaration, ExportDefaultDeclarationKind, Expression, ForStatementInit, ImportAttributeKey, JSXElementName, MemberExpression, ModuleExportName, ObjectPatternProperty, ObjectProperty, PropertyKey, PropertyValue, SimpleAssignmentTarget, Statement, TSModuleDeclarationName, TSSignature, TSType};
#[allow(clippy::wildcard_imports)]
use crate::{ast::*, context::Context};

pub type Span = Range<usize>;

Expand Down
12 changes: 12 additions & 0 deletions crates/oxc_ast/src/source_type.rs
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,8 @@ use std::path::Path;

use thiserror::Error;

use crate::context::Context;

#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
pub struct SourceType {
/// JavaScript or TypeScript, default JavaScript
Expand Down Expand Up @@ -51,6 +53,16 @@ impl Default for SourceType {
pub const VALID_EXTENSIONS: [&str; 8] = ["js", "mjs", "cjs", "jsx", "ts", "mts", "cts", "tsx"];

impl SourceType {
#[must_use]
pub fn default_context(&self) -> Context {
let ctx = Context::default().and_ambient(self.is_typescript_definition());
match self.module_kind {
ModuleKind::Script => ctx,
// for [top-level-await](https://tc39.es/proposal-top-level-await/)
ModuleKind::Module => ctx.and_await(true),
}
}

#[must_use]
pub fn builder() -> SourceTypeBuilder {
SourceTypeBuilder::default()
Expand Down
Loading