mirror of
https://github.com/danbulant/oxc
synced 2026-05-19 12:19:15 +00:00
refactor(ast, ast_codegen): use generate_derive for implementing GetSpan and GetSpanMut traits. (#4735)
This commit is contained in:
parent
579b797cc5
commit
2218340f2b
11 changed files with 2615 additions and 2556 deletions
File diff suppressed because it is too large
Load diff
|
|
@ -38,7 +38,7 @@ use super::{inherit_variants, js::*, literal::*, ts::*};
|
|||
/// See: [JSX Syntax](https://facebook.github.io/jsx/)
|
||||
#[ast(visit)]
|
||||
#[derive(Debug, Hash)]
|
||||
#[generate_derive(CloneIn)]
|
||||
#[generate_derive(CloneIn, GetSpan, GetSpanMut)]
|
||||
#[cfg_attr(feature = "serialize", derive(Serialize, Tsify))]
|
||||
#[serde(tag = "type", rename_all = "camelCase")]
|
||||
pub struct JSXElement<'a> {
|
||||
|
|
@ -66,7 +66,7 @@ pub struct JSXElement<'a> {
|
|||
/// ```
|
||||
#[ast(visit)]
|
||||
#[derive(Debug, Hash)]
|
||||
#[generate_derive(CloneIn)]
|
||||
#[generate_derive(CloneIn, GetSpan, GetSpanMut)]
|
||||
#[cfg_attr(feature = "serialize", derive(Serialize, Tsify))]
|
||||
#[serde(tag = "type", rename_all = "camelCase")]
|
||||
pub struct JSXOpeningElement<'a> {
|
||||
|
|
@ -92,7 +92,7 @@ pub struct JSXOpeningElement<'a> {
|
|||
/// Closing tag in a [`JSXElement`]. Not all JSX elements have a closing tag.
|
||||
#[ast(visit)]
|
||||
#[derive(Debug, Hash)]
|
||||
#[generate_derive(CloneIn)]
|
||||
#[generate_derive(CloneIn, GetSpan, GetSpanMut)]
|
||||
#[cfg_attr(feature = "serialize", derive(Serialize, Tsify))]
|
||||
#[serde(tag = "type")]
|
||||
pub struct JSXClosingElement<'a> {
|
||||
|
|
@ -111,7 +111,7 @@ pub struct JSXClosingElement<'a> {
|
|||
/// See: [`React.Fragment`](https://react.dev/reference/react/Fragment)
|
||||
#[ast(visit)]
|
||||
#[derive(Debug, Hash)]
|
||||
#[generate_derive(CloneIn)]
|
||||
#[generate_derive(CloneIn, GetSpan, GetSpanMut)]
|
||||
#[cfg_attr(feature = "serialize", derive(Serialize, Tsify))]
|
||||
#[serde(tag = "type", rename_all = "camelCase")]
|
||||
pub struct JSXFragment<'a> {
|
||||
|
|
@ -125,7 +125,7 @@ pub struct JSXFragment<'a> {
|
|||
/// JSX Opening Fragment (`<>`)
|
||||
#[ast]
|
||||
#[derive(Debug, Hash)]
|
||||
#[generate_derive(CloneIn)]
|
||||
#[generate_derive(CloneIn, GetSpan, GetSpanMut)]
|
||||
#[cfg_attr(feature = "serialize", derive(Serialize, Tsify))]
|
||||
#[serde(tag = "type")]
|
||||
pub struct JSXOpeningFragment {
|
||||
|
|
@ -136,7 +136,7 @@ pub struct JSXOpeningFragment {
|
|||
/// JSX Closing Fragment (`</>`)
|
||||
#[ast]
|
||||
#[derive(Debug, Hash)]
|
||||
#[generate_derive(CloneIn)]
|
||||
#[generate_derive(CloneIn, GetSpan, GetSpanMut)]
|
||||
#[cfg_attr(feature = "serialize", derive(Serialize, Tsify))]
|
||||
#[serde(tag = "type")]
|
||||
pub struct JSXClosingFragment {
|
||||
|
|
@ -147,7 +147,7 @@ pub struct JSXClosingFragment {
|
|||
/// JSX Element Name
|
||||
#[ast(visit)]
|
||||
#[derive(Debug, Hash)]
|
||||
#[generate_derive(CloneIn)]
|
||||
#[generate_derive(CloneIn, GetSpan, GetSpanMut)]
|
||||
#[cfg_attr(feature = "serialize", derive(Serialize, Tsify))]
|
||||
#[serde(untagged)]
|
||||
pub enum JSXElementName<'a> {
|
||||
|
|
@ -168,7 +168,7 @@ pub enum JSXElementName<'a> {
|
|||
/// ```
|
||||
#[ast(visit)]
|
||||
#[derive(Debug, Hash)]
|
||||
#[generate_derive(CloneIn)]
|
||||
#[generate_derive(CloneIn, GetSpan, GetSpanMut)]
|
||||
#[cfg_attr(feature = "serialize", derive(Serialize, Tsify))]
|
||||
#[serde(tag = "type")]
|
||||
pub struct JSXNamespacedName<'a> {
|
||||
|
|
@ -197,7 +197,7 @@ pub struct JSXNamespacedName<'a> {
|
|||
/// [`member expression`]: JSXMemberExpressionObject::MemberExpression
|
||||
#[ast(visit)]
|
||||
#[derive(Debug, Hash)]
|
||||
#[generate_derive(CloneIn)]
|
||||
#[generate_derive(CloneIn, GetSpan, GetSpanMut)]
|
||||
#[cfg_attr(feature = "serialize", derive(Serialize, Tsify))]
|
||||
#[serde(tag = "type")]
|
||||
pub struct JSXMemberExpression<'a> {
|
||||
|
|
@ -211,7 +211,7 @@ pub struct JSXMemberExpression<'a> {
|
|||
|
||||
#[ast(visit)]
|
||||
#[derive(Debug, Hash)]
|
||||
#[generate_derive(CloneIn)]
|
||||
#[generate_derive(CloneIn, GetSpan, GetSpanMut)]
|
||||
#[cfg_attr(feature = "serialize", derive(Serialize, Tsify))]
|
||||
#[serde(untagged)]
|
||||
pub enum JSXMemberExpressionObject<'a> {
|
||||
|
|
@ -234,7 +234,7 @@ pub enum JSXMemberExpressionObject<'a> {
|
|||
/// ```
|
||||
#[ast(visit)]
|
||||
#[derive(Debug, Hash)]
|
||||
#[generate_derive(CloneIn)]
|
||||
#[generate_derive(CloneIn, GetSpan, GetSpanMut)]
|
||||
#[cfg_attr(feature = "serialize", derive(Serialize, Tsify))]
|
||||
#[serde(tag = "type")]
|
||||
pub struct JSXExpressionContainer<'a> {
|
||||
|
|
@ -252,7 +252,7 @@ inherit_variants! {
|
|||
/// [`ast` module docs]: `super`
|
||||
#[ast(visit)]
|
||||
#[derive(Debug, Hash)]
|
||||
#[generate_derive(CloneIn)]
|
||||
#[generate_derive(CloneIn, GetSpan, GetSpanMut)]
|
||||
#[cfg_attr(feature = "serialize", derive(Serialize, Tsify))]
|
||||
#[serde(untagged)]
|
||||
pub enum JSXExpression<'a> {
|
||||
|
|
@ -265,7 +265,7 @@ pub enum JSXExpression<'a> {
|
|||
/// An empty JSX expression (`{}`)
|
||||
#[ast(visit)]
|
||||
#[derive(Debug, Hash)]
|
||||
#[generate_derive(CloneIn)]
|
||||
#[generate_derive(CloneIn, GetSpan, GetSpanMut)]
|
||||
#[cfg_attr(feature = "serialize", derive(Serialize, Tsify))]
|
||||
#[serde(tag = "type")]
|
||||
pub struct JSXEmptyExpression {
|
||||
|
|
@ -278,7 +278,7 @@ pub struct JSXEmptyExpression {
|
|||
/// JSX Attributes
|
||||
#[ast(visit)]
|
||||
#[derive(Debug, Hash)]
|
||||
#[generate_derive(CloneIn)]
|
||||
#[generate_derive(CloneIn, GetSpan, GetSpanMut)]
|
||||
#[cfg_attr(feature = "serialize", derive(Serialize, Tsify))]
|
||||
#[serde(untagged)]
|
||||
pub enum JSXAttributeItem<'a> {
|
||||
|
|
@ -295,7 +295,7 @@ pub enum JSXAttributeItem<'a> {
|
|||
/// // name ^^^ ^^^^ value
|
||||
#[ast(visit)]
|
||||
#[derive(Debug, Hash)]
|
||||
#[generate_derive(CloneIn)]
|
||||
#[generate_derive(CloneIn, GetSpan, GetSpanMut)]
|
||||
#[cfg_attr(feature = "serialize", derive(Serialize, Tsify))]
|
||||
#[serde(tag = "type")]
|
||||
pub struct JSXAttribute<'a> {
|
||||
|
|
@ -314,7 +314,7 @@ pub struct JSXAttribute<'a> {
|
|||
/// ```
|
||||
#[ast(visit)]
|
||||
#[derive(Debug, Hash)]
|
||||
#[generate_derive(CloneIn)]
|
||||
#[generate_derive(CloneIn, GetSpan, GetSpanMut)]
|
||||
#[cfg_attr(feature = "serialize", derive(Serialize, Tsify))]
|
||||
#[serde(tag = "type")]
|
||||
pub struct JSXSpreadAttribute<'a> {
|
||||
|
|
@ -328,7 +328,7 @@ pub struct JSXSpreadAttribute<'a> {
|
|||
/// Part of a [`JSXAttribute`].
|
||||
#[ast(visit)]
|
||||
#[derive(Debug, Hash)]
|
||||
#[generate_derive(CloneIn)]
|
||||
#[generate_derive(CloneIn, GetSpan, GetSpanMut)]
|
||||
#[cfg_attr(feature = "serialize", derive(Serialize, Tsify))]
|
||||
#[serde(untagged)]
|
||||
pub enum JSXAttributeName<'a> {
|
||||
|
|
@ -341,7 +341,7 @@ pub enum JSXAttributeName<'a> {
|
|||
/// Part of a [`JSXAttribute`].
|
||||
#[ast(visit)]
|
||||
#[derive(Debug, Hash)]
|
||||
#[generate_derive(CloneIn)]
|
||||
#[generate_derive(CloneIn, GetSpan, GetSpanMut)]
|
||||
#[cfg_attr(feature = "serialize", derive(Serialize, Tsify))]
|
||||
#[serde(untagged)]
|
||||
pub enum JSXAttributeValue<'a> {
|
||||
|
|
@ -358,7 +358,7 @@ pub enum JSXAttributeValue<'a> {
|
|||
/// [`IdentifierName`]: super::IdentifierName
|
||||
#[ast(visit)]
|
||||
#[derive(Debug, Hash)]
|
||||
#[generate_derive(CloneIn)]
|
||||
#[generate_derive(CloneIn, GetSpan, GetSpanMut)]
|
||||
#[cfg_attr(feature = "serialize", derive(Serialize, Tsify))]
|
||||
#[serde(tag = "type")]
|
||||
pub struct JSXIdentifier<'a> {
|
||||
|
|
@ -374,7 +374,7 @@ pub struct JSXIdentifier<'a> {
|
|||
/// Part of a [`JSXElement`].
|
||||
#[ast(visit)]
|
||||
#[derive(Debug, Hash)]
|
||||
#[generate_derive(CloneIn)]
|
||||
#[generate_derive(CloneIn, GetSpan, GetSpanMut)]
|
||||
#[cfg_attr(feature = "serialize", derive(Serialize, Tsify))]
|
||||
#[serde(untagged)]
|
||||
pub enum JSXChild<'a> {
|
||||
|
|
@ -395,7 +395,7 @@ pub enum JSXChild<'a> {
|
|||
/// Variant of [`JSXChild`] that represents an object spread (`{...expression}`).
|
||||
#[ast(visit)]
|
||||
#[derive(Debug, Hash)]
|
||||
#[generate_derive(CloneIn)]
|
||||
#[generate_derive(CloneIn, GetSpan, GetSpanMut)]
|
||||
#[cfg_attr(feature = "serialize", derive(Serialize, Tsify))]
|
||||
#[serde(tag = "type")]
|
||||
pub struct JSXSpreadChild<'a> {
|
||||
|
|
@ -416,7 +416,7 @@ pub struct JSXSpreadChild<'a> {
|
|||
/// ```
|
||||
#[ast(visit)]
|
||||
#[derive(Debug, Hash)]
|
||||
#[generate_derive(CloneIn)]
|
||||
#[generate_derive(CloneIn, GetSpan, GetSpanMut)]
|
||||
#[cfg_attr(feature = "serialize", derive(Serialize, Tsify))]
|
||||
#[serde(tag = "type")]
|
||||
pub struct JSXText<'a> {
|
||||
|
|
|
|||
|
|
@ -23,7 +23,7 @@ use tsify::Tsify;
|
|||
/// <https://tc39.es/ecma262/#prod-BooleanLiteral>
|
||||
#[ast(visit)]
|
||||
#[derive(Debug, Clone, Hash)]
|
||||
#[generate_derive(CloneIn)]
|
||||
#[generate_derive(CloneIn, GetSpan, GetSpanMut)]
|
||||
#[cfg_attr(feature = "serialize", derive(Serialize, Tsify))]
|
||||
#[serde(tag = "type")]
|
||||
pub struct BooleanLiteral {
|
||||
|
|
@ -37,7 +37,7 @@ pub struct BooleanLiteral {
|
|||
/// <https://tc39.es/ecma262/#sec-null-literals>
|
||||
#[ast(visit)]
|
||||
#[derive(Debug, Clone)]
|
||||
#[generate_derive(CloneIn)]
|
||||
#[generate_derive(CloneIn, GetSpan, GetSpanMut)]
|
||||
#[cfg_attr(feature = "serialize", derive(Serialize, Tsify))]
|
||||
#[serde(tag = "type")]
|
||||
pub struct NullLiteral {
|
||||
|
|
@ -50,7 +50,7 @@ pub struct NullLiteral {
|
|||
/// <https://tc39.es/ecma262/#sec-literals-numeric-literals>
|
||||
#[ast(visit)]
|
||||
#[derive(Debug, Clone)]
|
||||
#[generate_derive(CloneIn)]
|
||||
#[generate_derive(CloneIn, GetSpan, GetSpanMut)]
|
||||
#[cfg_attr(feature = "serialize", derive(Serialize, Tsify))]
|
||||
#[serde(tag = "type")]
|
||||
pub struct NumericLiteral<'a> {
|
||||
|
|
@ -68,7 +68,7 @@ pub struct NumericLiteral<'a> {
|
|||
/// BigInt literal
|
||||
#[ast(visit)]
|
||||
#[derive(Debug, Clone, Hash)]
|
||||
#[generate_derive(CloneIn)]
|
||||
#[generate_derive(CloneIn, GetSpan, GetSpanMut)]
|
||||
#[cfg_attr(feature = "serialize", derive(Serialize, Tsify))]
|
||||
#[serde(tag = "type")]
|
||||
pub struct BigIntLiteral<'a> {
|
||||
|
|
@ -86,7 +86,7 @@ pub struct BigIntLiteral<'a> {
|
|||
/// <https://tc39.es/ecma262/#sec-literals-regular-expression-literals>
|
||||
#[ast(visit)]
|
||||
#[derive(Debug, Clone, Hash)]
|
||||
#[generate_derive(CloneIn)]
|
||||
#[generate_derive(CloneIn, GetSpan, GetSpanMut)]
|
||||
#[cfg_attr(feature = "serialize", derive(Serialize, Tsify))]
|
||||
#[serde(tag = "type")]
|
||||
pub struct RegExpLiteral<'a> {
|
||||
|
|
@ -103,7 +103,7 @@ pub struct RegExpLiteral<'a> {
|
|||
/// <https://tc39.es/ecma262/multipage/text-processing.html#sec-regexp-regular-expression-objects>
|
||||
#[ast]
|
||||
#[derive(Debug, Clone, Hash)]
|
||||
#[generate_derive(CloneIn)]
|
||||
#[generate_derive(CloneIn, GetSpan, GetSpanMut)]
|
||||
#[cfg_attr(feature = "serialize", derive(Serialize, Tsify))]
|
||||
pub struct RegExp<'a> {
|
||||
/// The regex pattern between the slashes
|
||||
|
|
@ -114,7 +114,7 @@ pub struct RegExp<'a> {
|
|||
|
||||
#[ast]
|
||||
#[derive(Debug, Clone, Hash)]
|
||||
#[generate_derive(CloneIn)]
|
||||
#[generate_derive(CloneIn, GetSpan, GetSpanMut)]
|
||||
#[cfg_attr(feature = "serialize", derive(Serialize, Tsify))]
|
||||
pub struct EmptyObject;
|
||||
|
||||
|
|
@ -123,7 +123,7 @@ pub struct EmptyObject;
|
|||
/// <https://tc39.es/ecma262/#sec-literals-string-literals>
|
||||
#[ast(visit)]
|
||||
#[derive(Debug, Clone, Hash)]
|
||||
#[generate_derive(CloneIn)]
|
||||
#[generate_derive(CloneIn, GetSpan, GetSpanMut)]
|
||||
#[cfg_attr(feature = "serialize", derive(Serialize, Tsify))]
|
||||
#[serde(tag = "type")]
|
||||
pub struct StringLiteral<'a> {
|
||||
|
|
|
|||
|
|
@ -35,7 +35,7 @@ export interface TSIndexSignatureName extends Span {
|
|||
|
||||
#[ast(visit)]
|
||||
#[derive(Debug, Hash)]
|
||||
#[generate_derive(CloneIn)]
|
||||
#[generate_derive(CloneIn, GetSpan, GetSpanMut)]
|
||||
#[cfg_attr(feature = "serialize", derive(Serialize, Tsify))]
|
||||
#[serde(tag = "type", rename_all = "camelCase")]
|
||||
pub struct TSThisParameter<'a> {
|
||||
|
|
@ -65,7 +65,7 @@ pub struct TSThisParameter<'a> {
|
|||
#[ast(visit)]
|
||||
#[scope]
|
||||
#[derive(Debug)]
|
||||
#[generate_derive(CloneIn)]
|
||||
#[generate_derive(CloneIn, GetSpan, GetSpanMut)]
|
||||
#[cfg_attr(feature = "serialize", derive(Serialize, Tsify))]
|
||||
#[serde(tag = "type")]
|
||||
pub struct TSEnumDeclaration<'a> {
|
||||
|
|
@ -94,7 +94,7 @@ pub struct TSEnumDeclaration<'a> {
|
|||
/// ```
|
||||
#[ast(visit)]
|
||||
#[derive(Debug, Hash)]
|
||||
#[generate_derive(CloneIn)]
|
||||
#[generate_derive(CloneIn, GetSpan, GetSpanMut)]
|
||||
#[cfg_attr(feature = "serialize", derive(Serialize, Tsify))]
|
||||
#[serde(tag = "type")]
|
||||
pub struct TSEnumMember<'a> {
|
||||
|
|
@ -112,7 +112,7 @@ inherit_variants! {
|
|||
/// [`ast` module docs]: `super`
|
||||
#[ast(visit)]
|
||||
#[derive(Debug, Hash)]
|
||||
#[generate_derive(CloneIn)]
|
||||
#[generate_derive(CloneIn, GetSpan, GetSpanMut)]
|
||||
#[cfg_attr(feature = "serialize", derive(Serialize, Tsify))]
|
||||
#[serde(untagged)]
|
||||
pub enum TSEnumMemberName<'a> {
|
||||
|
|
@ -141,7 +141,7 @@ pub enum TSEnumMemberName<'a> {
|
|||
/// ```
|
||||
#[ast(visit)]
|
||||
#[derive(Debug, Hash)]
|
||||
#[generate_derive(CloneIn)]
|
||||
#[generate_derive(CloneIn, GetSpan, GetSpanMut)]
|
||||
#[cfg_attr(feature = "serialize", derive(Serialize, Tsify))]
|
||||
#[serde(tag = "type", rename_all = "camelCase")]
|
||||
pub struct TSTypeAnnotation<'a> {
|
||||
|
|
@ -167,7 +167,7 @@ pub struct TSTypeAnnotation<'a> {
|
|||
/// ```
|
||||
#[ast(visit)]
|
||||
#[derive(Debug, Hash)]
|
||||
#[generate_derive(CloneIn)]
|
||||
#[generate_derive(CloneIn, GetSpan, GetSpanMut)]
|
||||
#[cfg_attr(feature = "serialize", derive(Serialize, Tsify))]
|
||||
#[serde(tag = "type", rename_all = "camelCase")]
|
||||
pub struct TSLiteralType<'a> {
|
||||
|
|
@ -178,7 +178,7 @@ pub struct TSLiteralType<'a> {
|
|||
|
||||
#[ast(visit)]
|
||||
#[derive(Debug, Hash)]
|
||||
#[generate_derive(CloneIn)]
|
||||
#[generate_derive(CloneIn, GetSpan, GetSpanMut)]
|
||||
#[cfg_attr(feature = "serialize", derive(Serialize, Tsify))]
|
||||
#[serde(untagged, rename_all = "camelCase")]
|
||||
pub enum TSLiteral<'a> {
|
||||
|
|
@ -198,7 +198,7 @@ pub enum TSLiteral<'a> {
|
|||
/// expressions.
|
||||
#[ast(visit)]
|
||||
#[derive(Debug, Hash)]
|
||||
#[generate_derive(CloneIn)]
|
||||
#[generate_derive(CloneIn, GetSpan, GetSpanMut)]
|
||||
#[cfg_attr(feature = "serialize", derive(Serialize, Tsify))]
|
||||
#[serde(untagged, rename_all = "camelCase")]
|
||||
pub enum TSType<'a> {
|
||||
|
|
@ -303,7 +303,7 @@ pub use match_ts_type;
|
|||
#[ast(visit)]
|
||||
#[scope]
|
||||
#[derive(Debug)]
|
||||
#[generate_derive(CloneIn)]
|
||||
#[generate_derive(CloneIn, GetSpan, GetSpanMut)]
|
||||
#[cfg_attr(feature = "serialize", derive(Serialize, Tsify))]
|
||||
#[serde(tag = "type", rename_all = "camelCase")]
|
||||
pub struct TSConditionalType<'a> {
|
||||
|
|
@ -327,7 +327,7 @@ pub struct TSConditionalType<'a> {
|
|||
/// <https://www.typescriptlang.org/docs/handbook/typescript-in-5-minutes-func.html#unions>
|
||||
#[ast(visit)]
|
||||
#[derive(Debug, Hash)]
|
||||
#[generate_derive(CloneIn)]
|
||||
#[generate_derive(CloneIn, GetSpan, GetSpanMut)]
|
||||
#[cfg_attr(feature = "serialize", derive(Serialize, Tsify))]
|
||||
#[serde(tag = "type")]
|
||||
pub struct TSUnionType<'a> {
|
||||
|
|
@ -341,7 +341,7 @@ pub struct TSUnionType<'a> {
|
|||
/// <https://www.typescriptlang.org/docs/handbook/2/objects.html#intersection-types>
|
||||
#[ast(visit)]
|
||||
#[derive(Debug, Hash)]
|
||||
#[generate_derive(CloneIn)]
|
||||
#[generate_derive(CloneIn, GetSpan, GetSpanMut)]
|
||||
#[cfg_attr(feature = "serialize", derive(Serialize, Tsify))]
|
||||
#[serde(tag = "type")]
|
||||
pub struct TSIntersectionType<'a> {
|
||||
|
|
@ -352,7 +352,7 @@ pub struct TSIntersectionType<'a> {
|
|||
|
||||
#[ast(visit)]
|
||||
#[derive(Debug, Hash)]
|
||||
#[generate_derive(CloneIn)]
|
||||
#[generate_derive(CloneIn, GetSpan, GetSpanMut)]
|
||||
#[cfg_attr(feature = "serialize", derive(Serialize, Tsify))]
|
||||
#[serde(tag = "type")]
|
||||
pub struct TSParenthesizedType<'a> {
|
||||
|
|
@ -371,7 +371,7 @@ pub struct TSParenthesizedType<'a> {
|
|||
/// <https://www.typescriptlang.org/docs/handbook/2/keyof-types.html>
|
||||
#[ast(visit)]
|
||||
#[derive(Debug, Hash)]
|
||||
#[generate_derive(CloneIn)]
|
||||
#[generate_derive(CloneIn, GetSpan, GetSpanMut)]
|
||||
#[cfg_attr(feature = "serialize", derive(Serialize, Tsify))]
|
||||
#[serde(tag = "type", rename_all = "camelCase")]
|
||||
pub struct TSTypeOperator<'a> {
|
||||
|
|
@ -383,7 +383,7 @@ pub struct TSTypeOperator<'a> {
|
|||
|
||||
#[ast]
|
||||
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
|
||||
#[generate_derive(CloneIn)]
|
||||
#[generate_derive(CloneIn, GetSpan, GetSpanMut)]
|
||||
#[cfg_attr(feature = "serialize", derive(Serialize, Tsify))]
|
||||
#[serde(rename_all = "camelCase")]
|
||||
pub enum TSTypeOperatorOperator {
|
||||
|
|
@ -405,7 +405,7 @@ pub enum TSTypeOperatorOperator {
|
|||
/// <https://www.typescriptlang.org/docs/handbook/2/objects.html#the-array-type>
|
||||
#[ast(visit)]
|
||||
#[derive(Debug, Hash)]
|
||||
#[generate_derive(CloneIn)]
|
||||
#[generate_derive(CloneIn, GetSpan, GetSpanMut)]
|
||||
#[cfg_attr(feature = "serialize", derive(Serialize, Tsify))]
|
||||
#[serde(tag = "type", rename_all = "camelCase")]
|
||||
pub struct TSArrayType<'a> {
|
||||
|
|
@ -427,7 +427,7 @@ pub struct TSArrayType<'a> {
|
|||
/// <https://www.typescriptlang.org/docs/handbook/2/indexed-access-types.html#handbook-content>
|
||||
#[ast(visit)]
|
||||
#[derive(Debug, Hash)]
|
||||
#[generate_derive(CloneIn)]
|
||||
#[generate_derive(CloneIn, GetSpan, GetSpanMut)]
|
||||
#[cfg_attr(feature = "serialize", derive(Serialize, Tsify))]
|
||||
#[serde(tag = "type", rename_all = "camelCase")]
|
||||
pub struct TSIndexedAccessType<'a> {
|
||||
|
|
@ -448,7 +448,7 @@ pub struct TSIndexedAccessType<'a> {
|
|||
/// <https://www.typescriptlang.org/docs/handbook/2/objects.html#tuple-types>
|
||||
#[ast(visit)]
|
||||
#[derive(Debug, Hash)]
|
||||
#[generate_derive(CloneIn)]
|
||||
#[generate_derive(CloneIn, GetSpan, GetSpanMut)]
|
||||
#[cfg_attr(feature = "serialize", derive(Serialize, Tsify))]
|
||||
#[serde(tag = "type", rename_all = "camelCase")]
|
||||
pub struct TSTupleType<'a> {
|
||||
|
|
@ -459,7 +459,7 @@ pub struct TSTupleType<'a> {
|
|||
|
||||
#[ast(visit)]
|
||||
#[derive(Debug, Hash)]
|
||||
#[generate_derive(CloneIn)]
|
||||
#[generate_derive(CloneIn, GetSpan, GetSpanMut)]
|
||||
#[cfg_attr(feature = "serialize", derive(Serialize, Tsify))]
|
||||
#[serde(tag = "type", rename_all = "camelCase")]
|
||||
pub struct TSNamedTupleMember<'a> {
|
||||
|
|
@ -472,7 +472,7 @@ pub struct TSNamedTupleMember<'a> {
|
|||
|
||||
#[ast(visit)]
|
||||
#[derive(Debug, Hash)]
|
||||
#[generate_derive(CloneIn)]
|
||||
#[generate_derive(CloneIn, GetSpan, GetSpanMut)]
|
||||
#[cfg_attr(feature = "serialize", derive(Serialize, Tsify))]
|
||||
#[serde(tag = "type", rename_all = "camelCase")]
|
||||
pub struct TSOptionalType<'a> {
|
||||
|
|
@ -483,7 +483,7 @@ pub struct TSOptionalType<'a> {
|
|||
|
||||
#[ast(visit)]
|
||||
#[derive(Debug, Hash)]
|
||||
#[generate_derive(CloneIn)]
|
||||
#[generate_derive(CloneIn, GetSpan, GetSpanMut)]
|
||||
#[cfg_attr(feature = "serialize", derive(Serialize, Tsify))]
|
||||
#[serde(tag = "type", rename_all = "camelCase")]
|
||||
pub struct TSRestType<'a> {
|
||||
|
|
@ -502,7 +502,7 @@ inherit_variants! {
|
|||
/// [`ast` module docs]: `super`
|
||||
#[ast(visit)]
|
||||
#[derive(Debug, Hash)]
|
||||
#[generate_derive(CloneIn)]
|
||||
#[generate_derive(CloneIn, GetSpan, GetSpanMut)]
|
||||
#[cfg_attr(feature = "serialize", derive(Serialize, Tsify))]
|
||||
#[serde(untagged, rename_all = "camelCase")]
|
||||
pub enum TSTupleElement<'a> {
|
||||
|
|
@ -517,7 +517,7 @@ pub enum TSTupleElement<'a> {
|
|||
|
||||
#[ast(visit)]
|
||||
#[derive(Debug, Hash)]
|
||||
#[generate_derive(CloneIn)]
|
||||
#[generate_derive(CloneIn, GetSpan, GetSpanMut)]
|
||||
#[cfg_attr(feature = "serialize", derive(Serialize, Tsify))]
|
||||
#[serde(tag = "type")]
|
||||
pub struct TSAnyKeyword {
|
||||
|
|
@ -527,7 +527,7 @@ pub struct TSAnyKeyword {
|
|||
|
||||
#[ast(visit)]
|
||||
#[derive(Debug, Hash)]
|
||||
#[generate_derive(CloneIn)]
|
||||
#[generate_derive(CloneIn, GetSpan, GetSpanMut)]
|
||||
#[cfg_attr(feature = "serialize", derive(Serialize, Tsify))]
|
||||
#[serde(tag = "type")]
|
||||
pub struct TSStringKeyword {
|
||||
|
|
@ -537,7 +537,7 @@ pub struct TSStringKeyword {
|
|||
|
||||
#[ast(visit)]
|
||||
#[derive(Debug, Hash)]
|
||||
#[generate_derive(CloneIn)]
|
||||
#[generate_derive(CloneIn, GetSpan, GetSpanMut)]
|
||||
#[cfg_attr(feature = "serialize", derive(Serialize, Tsify))]
|
||||
#[serde(tag = "type")]
|
||||
pub struct TSBooleanKeyword {
|
||||
|
|
@ -547,7 +547,7 @@ pub struct TSBooleanKeyword {
|
|||
|
||||
#[ast(visit)]
|
||||
#[derive(Debug, Hash)]
|
||||
#[generate_derive(CloneIn)]
|
||||
#[generate_derive(CloneIn, GetSpan, GetSpanMut)]
|
||||
#[cfg_attr(feature = "serialize", derive(Serialize, Tsify))]
|
||||
#[serde(tag = "type")]
|
||||
pub struct TSNumberKeyword {
|
||||
|
|
@ -557,7 +557,7 @@ pub struct TSNumberKeyword {
|
|||
|
||||
#[ast(visit)]
|
||||
#[derive(Debug, Hash)]
|
||||
#[generate_derive(CloneIn)]
|
||||
#[generate_derive(CloneIn, GetSpan, GetSpanMut)]
|
||||
#[cfg_attr(feature = "serialize", derive(Serialize, Tsify))]
|
||||
#[serde(tag = "type")]
|
||||
pub struct TSNeverKeyword {
|
||||
|
|
@ -568,7 +568,7 @@ pub struct TSNeverKeyword {
|
|||
/// `type Uppercase<T extends character> = intrinsic;`
|
||||
#[ast(visit)]
|
||||
#[derive(Debug, Hash)]
|
||||
#[generate_derive(CloneIn)]
|
||||
#[generate_derive(CloneIn, GetSpan, GetSpanMut)]
|
||||
#[cfg_attr(feature = "serialize", derive(Serialize, Tsify))]
|
||||
#[serde(tag = "type")]
|
||||
pub struct TSIntrinsicKeyword {
|
||||
|
|
@ -578,7 +578,7 @@ pub struct TSIntrinsicKeyword {
|
|||
|
||||
#[ast(visit)]
|
||||
#[derive(Debug, Hash)]
|
||||
#[generate_derive(CloneIn)]
|
||||
#[generate_derive(CloneIn, GetSpan, GetSpanMut)]
|
||||
#[cfg_attr(feature = "serialize", derive(Serialize, Tsify))]
|
||||
#[serde(tag = "type")]
|
||||
pub struct TSUnknownKeyword {
|
||||
|
|
@ -588,7 +588,7 @@ pub struct TSUnknownKeyword {
|
|||
|
||||
#[ast(visit)]
|
||||
#[derive(Debug, Hash)]
|
||||
#[generate_derive(CloneIn)]
|
||||
#[generate_derive(CloneIn, GetSpan, GetSpanMut)]
|
||||
#[cfg_attr(feature = "serialize", derive(Serialize, Tsify))]
|
||||
#[serde(tag = "type")]
|
||||
pub struct TSNullKeyword {
|
||||
|
|
@ -598,7 +598,7 @@ pub struct TSNullKeyword {
|
|||
|
||||
#[ast(visit)]
|
||||
#[derive(Debug, Hash)]
|
||||
#[generate_derive(CloneIn)]
|
||||
#[generate_derive(CloneIn, GetSpan, GetSpanMut)]
|
||||
#[cfg_attr(feature = "serialize", derive(Serialize, Tsify))]
|
||||
#[serde(tag = "type")]
|
||||
pub struct TSUndefinedKeyword {
|
||||
|
|
@ -608,7 +608,7 @@ pub struct TSUndefinedKeyword {
|
|||
|
||||
#[ast(visit)]
|
||||
#[derive(Debug, Hash)]
|
||||
#[generate_derive(CloneIn)]
|
||||
#[generate_derive(CloneIn, GetSpan, GetSpanMut)]
|
||||
#[cfg_attr(feature = "serialize", derive(Serialize, Tsify))]
|
||||
#[serde(tag = "type")]
|
||||
pub struct TSVoidKeyword {
|
||||
|
|
@ -618,7 +618,7 @@ pub struct TSVoidKeyword {
|
|||
|
||||
#[ast(visit)]
|
||||
#[derive(Debug, Hash)]
|
||||
#[generate_derive(CloneIn)]
|
||||
#[generate_derive(CloneIn, GetSpan, GetSpanMut)]
|
||||
#[cfg_attr(feature = "serialize", derive(Serialize, Tsify))]
|
||||
#[serde(tag = "type")]
|
||||
pub struct TSSymbolKeyword {
|
||||
|
|
@ -628,7 +628,7 @@ pub struct TSSymbolKeyword {
|
|||
|
||||
#[ast(visit)]
|
||||
#[derive(Debug, Hash)]
|
||||
#[generate_derive(CloneIn)]
|
||||
#[generate_derive(CloneIn, GetSpan, GetSpanMut)]
|
||||
#[cfg_attr(feature = "serialize", derive(Serialize, Tsify))]
|
||||
#[serde(tag = "type")]
|
||||
pub struct TSThisType {
|
||||
|
|
@ -638,7 +638,7 @@ pub struct TSThisType {
|
|||
|
||||
#[ast(visit)]
|
||||
#[derive(Debug, Hash)]
|
||||
#[generate_derive(CloneIn)]
|
||||
#[generate_derive(CloneIn, GetSpan, GetSpanMut)]
|
||||
#[cfg_attr(feature = "serialize", derive(Serialize, Tsify))]
|
||||
#[serde(tag = "type")]
|
||||
pub struct TSObjectKeyword {
|
||||
|
|
@ -648,7 +648,7 @@ pub struct TSObjectKeyword {
|
|||
|
||||
#[ast(visit)]
|
||||
#[derive(Debug, Hash)]
|
||||
#[generate_derive(CloneIn)]
|
||||
#[generate_derive(CloneIn, GetSpan, GetSpanMut)]
|
||||
#[cfg_attr(feature = "serialize", derive(Serialize, Tsify))]
|
||||
#[serde(tag = "type")]
|
||||
pub struct TSBigIntKeyword {
|
||||
|
|
@ -661,7 +661,7 @@ pub struct TSBigIntKeyword {
|
|||
/// type E = D.c.b.a;
|
||||
#[ast(visit)]
|
||||
#[derive(Debug, Hash)]
|
||||
#[generate_derive(CloneIn)]
|
||||
#[generate_derive(CloneIn, GetSpan, GetSpanMut)]
|
||||
#[cfg_attr(feature = "serialize", derive(Serialize, Tsify))]
|
||||
#[serde(tag = "type", rename_all = "camelCase")]
|
||||
pub struct TSTypeReference<'a> {
|
||||
|
|
@ -676,7 +676,7 @@ pub struct TSTypeReference<'a> {
|
|||
/// NamespaceName . IdentifierReference
|
||||
#[ast(visit)]
|
||||
#[derive(Debug, Hash)]
|
||||
#[generate_derive(CloneIn)]
|
||||
#[generate_derive(CloneIn, GetSpan, GetSpanMut)]
|
||||
#[cfg_attr(feature = "serialize", derive(Serialize, Tsify))]
|
||||
#[serde(untagged)]
|
||||
pub enum TSTypeName<'a> {
|
||||
|
|
@ -695,7 +695,7 @@ pub use match_ts_type_name;
|
|||
|
||||
#[ast(visit)]
|
||||
#[derive(Debug, Hash)]
|
||||
#[generate_derive(CloneIn)]
|
||||
#[generate_derive(CloneIn, GetSpan, GetSpanMut)]
|
||||
#[cfg_attr(feature = "serialize", derive(Serialize, Tsify))]
|
||||
#[serde(tag = "type", rename_all = "camelCase")]
|
||||
pub struct TSQualifiedName<'a> {
|
||||
|
|
@ -707,7 +707,7 @@ pub struct TSQualifiedName<'a> {
|
|||
|
||||
#[ast(visit)]
|
||||
#[derive(Debug, Hash)]
|
||||
#[generate_derive(CloneIn)]
|
||||
#[generate_derive(CloneIn, GetSpan, GetSpanMut)]
|
||||
#[cfg_attr(feature = "serialize", derive(Serialize, Tsify))]
|
||||
#[serde(tag = "type", rename_all = "camelCase")]
|
||||
pub struct TSTypeParameterInstantiation<'a> {
|
||||
|
|
@ -718,7 +718,7 @@ pub struct TSTypeParameterInstantiation<'a> {
|
|||
|
||||
#[ast(visit)]
|
||||
#[derive(Debug, Hash)]
|
||||
#[generate_derive(CloneIn)]
|
||||
#[generate_derive(CloneIn, GetSpan, GetSpanMut)]
|
||||
#[cfg_attr(feature = "serialize", derive(Serialize, Tsify))]
|
||||
#[serde(tag = "type", rename_all = "camelCase")]
|
||||
pub struct TSTypeParameter<'a> {
|
||||
|
|
@ -734,7 +734,7 @@ pub struct TSTypeParameter<'a> {
|
|||
|
||||
#[ast(visit)]
|
||||
#[derive(Debug, Hash)]
|
||||
#[generate_derive(CloneIn)]
|
||||
#[generate_derive(CloneIn, GetSpan, GetSpanMut)]
|
||||
#[cfg_attr(feature = "serialize", derive(Serialize, Tsify))]
|
||||
#[serde(tag = "type", rename_all = "camelCase")]
|
||||
pub struct TSTypeParameterDeclaration<'a> {
|
||||
|
|
@ -746,7 +746,7 @@ pub struct TSTypeParameterDeclaration<'a> {
|
|||
#[ast(visit)]
|
||||
#[scope]
|
||||
#[derive(Debug)]
|
||||
#[generate_derive(CloneIn)]
|
||||
#[generate_derive(CloneIn, GetSpan, GetSpanMut)]
|
||||
#[cfg_attr(feature = "serialize", derive(Serialize, Tsify))]
|
||||
#[serde(tag = "type", rename_all = "camelCase")]
|
||||
pub struct TSTypeAliasDeclaration<'a> {
|
||||
|
|
@ -762,7 +762,7 @@ pub struct TSTypeAliasDeclaration<'a> {
|
|||
|
||||
#[ast]
|
||||
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
|
||||
#[generate_derive(CloneIn)]
|
||||
#[generate_derive(CloneIn, GetSpan, GetSpanMut)]
|
||||
#[cfg_attr(feature = "serialize", derive(Serialize, Tsify))]
|
||||
#[serde(rename_all = "camelCase")]
|
||||
pub enum TSAccessibility {
|
||||
|
|
@ -773,7 +773,7 @@ pub enum TSAccessibility {
|
|||
|
||||
#[ast(visit)]
|
||||
#[derive(Debug, Hash)]
|
||||
#[generate_derive(CloneIn)]
|
||||
#[generate_derive(CloneIn, GetSpan, GetSpanMut)]
|
||||
#[cfg_attr(feature = "serialize", derive(Serialize, Tsify))]
|
||||
#[serde(tag = "type", rename_all = "camelCase")]
|
||||
pub struct TSClassImplements<'a> {
|
||||
|
|
@ -789,7 +789,7 @@ pub struct TSClassImplements<'a> {
|
|||
#[ast(visit)]
|
||||
#[scope]
|
||||
#[derive(Debug)]
|
||||
#[generate_derive(CloneIn)]
|
||||
#[generate_derive(CloneIn, GetSpan, GetSpanMut)]
|
||||
#[cfg_attr(feature = "serialize", derive(Serialize, Tsify))]
|
||||
#[serde(tag = "type", rename_all = "camelCase")]
|
||||
pub struct TSInterfaceDeclaration<'a> {
|
||||
|
|
@ -807,7 +807,7 @@ pub struct TSInterfaceDeclaration<'a> {
|
|||
|
||||
#[ast(visit)]
|
||||
#[derive(Debug, Hash)]
|
||||
#[generate_derive(CloneIn)]
|
||||
#[generate_derive(CloneIn, GetSpan, GetSpanMut)]
|
||||
#[cfg_attr(feature = "serialize", derive(Serialize, Tsify))]
|
||||
#[serde(tag = "type", rename_all = "camelCase")]
|
||||
pub struct TSInterfaceBody<'a> {
|
||||
|
|
@ -818,7 +818,7 @@ pub struct TSInterfaceBody<'a> {
|
|||
|
||||
#[ast(visit)]
|
||||
#[derive(Debug, Hash)]
|
||||
#[generate_derive(CloneIn)]
|
||||
#[generate_derive(CloneIn, GetSpan, GetSpanMut)]
|
||||
#[cfg_attr(feature = "serialize", derive(Serialize, Tsify))]
|
||||
#[serde(tag = "type", rename_all = "camelCase")]
|
||||
pub struct TSPropertySignature<'a> {
|
||||
|
|
@ -833,7 +833,7 @@ pub struct TSPropertySignature<'a> {
|
|||
|
||||
#[ast(visit)]
|
||||
#[derive(Debug, Hash)]
|
||||
#[generate_derive(CloneIn)]
|
||||
#[generate_derive(CloneIn, GetSpan, GetSpanMut)]
|
||||
#[cfg_attr(feature = "serialize", derive(Serialize, Tsify))]
|
||||
#[serde(untagged, rename_all = "camelCase")]
|
||||
pub enum TSSignature<'a> {
|
||||
|
|
@ -857,7 +857,7 @@ pub enum TSSignature<'a> {
|
|||
/// ```
|
||||
#[ast(visit)]
|
||||
#[derive(Debug, Hash)]
|
||||
#[generate_derive(CloneIn)]
|
||||
#[generate_derive(CloneIn, GetSpan, GetSpanMut)]
|
||||
#[cfg_attr(feature = "serialize", derive(Serialize, Tsify))]
|
||||
#[serde(tag = "type", rename_all = "camelCase")]
|
||||
pub struct TSIndexSignature<'a> {
|
||||
|
|
@ -870,7 +870,7 @@ pub struct TSIndexSignature<'a> {
|
|||
|
||||
#[ast(visit)]
|
||||
#[derive(Debug, Hash)]
|
||||
#[generate_derive(CloneIn)]
|
||||
#[generate_derive(CloneIn, GetSpan, GetSpanMut)]
|
||||
#[cfg_attr(feature = "serialize", derive(Serialize, Tsify))]
|
||||
#[serde(tag = "type", rename_all = "camelCase")]
|
||||
pub struct TSCallSignatureDeclaration<'a> {
|
||||
|
|
@ -884,7 +884,7 @@ pub struct TSCallSignatureDeclaration<'a> {
|
|||
|
||||
#[ast]
|
||||
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
|
||||
#[generate_derive(CloneIn)]
|
||||
#[generate_derive(CloneIn, GetSpan, GetSpanMut)]
|
||||
#[cfg_attr(feature = "serialize", derive(Serialize, Tsify))]
|
||||
#[serde(rename_all = "camelCase")]
|
||||
pub enum TSMethodSignatureKind {
|
||||
|
|
@ -896,7 +896,7 @@ pub enum TSMethodSignatureKind {
|
|||
#[ast(visit)]
|
||||
#[scope]
|
||||
#[derive(Debug)]
|
||||
#[generate_derive(CloneIn)]
|
||||
#[generate_derive(CloneIn, GetSpan, GetSpanMut)]
|
||||
#[cfg_attr(feature = "serialize", derive(Serialize, Tsify))]
|
||||
#[serde(tag = "type", rename_all = "camelCase")]
|
||||
pub struct TSMethodSignature<'a> {
|
||||
|
|
@ -916,7 +916,7 @@ pub struct TSMethodSignature<'a> {
|
|||
#[ast(visit)]
|
||||
#[scope]
|
||||
#[derive(Debug)]
|
||||
#[generate_derive(CloneIn)]
|
||||
#[generate_derive(CloneIn, GetSpan, GetSpanMut)]
|
||||
#[cfg_attr(feature = "serialize", derive(Serialize, Tsify))]
|
||||
#[serde(tag = "type", rename_all = "camelCase")]
|
||||
pub struct TSConstructSignatureDeclaration<'a> {
|
||||
|
|
@ -930,7 +930,7 @@ pub struct TSConstructSignatureDeclaration<'a> {
|
|||
|
||||
#[ast(visit)]
|
||||
#[derive(Debug, Hash)]
|
||||
#[generate_derive(CloneIn)]
|
||||
#[generate_derive(CloneIn, GetSpan, GetSpanMut)]
|
||||
#[cfg_attr(feature = "serialize", derive(Serialize))]
|
||||
#[serde(tag = "type", rename = "Identifier", rename_all = "camelCase")]
|
||||
pub struct TSIndexSignatureName<'a> {
|
||||
|
|
@ -942,7 +942,7 @@ pub struct TSIndexSignatureName<'a> {
|
|||
|
||||
#[ast(visit)]
|
||||
#[derive(Debug, Hash)]
|
||||
#[generate_derive(CloneIn)]
|
||||
#[generate_derive(CloneIn, GetSpan, GetSpanMut)]
|
||||
#[cfg_attr(feature = "serialize", derive(Serialize, Tsify))]
|
||||
#[serde(tag = "type", rename_all = "camelCase")]
|
||||
pub struct TSInterfaceHeritage<'a> {
|
||||
|
|
@ -954,7 +954,7 @@ pub struct TSInterfaceHeritage<'a> {
|
|||
|
||||
#[ast(visit)]
|
||||
#[derive(Debug, Hash)]
|
||||
#[generate_derive(CloneIn)]
|
||||
#[generate_derive(CloneIn, GetSpan, GetSpanMut)]
|
||||
#[cfg_attr(feature = "serialize", derive(Serialize, Tsify))]
|
||||
#[serde(tag = "type", rename_all = "camelCase")]
|
||||
pub struct TSTypePredicate<'a> {
|
||||
|
|
@ -967,7 +967,7 @@ pub struct TSTypePredicate<'a> {
|
|||
|
||||
#[ast(visit)]
|
||||
#[derive(Debug, Hash)]
|
||||
#[generate_derive(CloneIn)]
|
||||
#[generate_derive(CloneIn, GetSpan, GetSpanMut)]
|
||||
#[cfg_attr(feature = "serialize", derive(Serialize, Tsify))]
|
||||
#[serde(untagged, rename_all = "camelCase")]
|
||||
pub enum TSTypePredicateName<'a> {
|
||||
|
|
@ -981,7 +981,7 @@ pub enum TSTypePredicateName<'a> {
|
|||
strict_if(self.body.as_ref().is_some_and(TSModuleDeclarationBody::is_strict)),
|
||||
)]
|
||||
#[derive(Debug)]
|
||||
#[generate_derive(CloneIn)]
|
||||
#[generate_derive(CloneIn, GetSpan, GetSpanMut)]
|
||||
#[cfg_attr(feature = "serialize", derive(Serialize, Tsify))]
|
||||
#[serde(tag = "type", rename_all = "camelCase")]
|
||||
pub struct TSModuleDeclaration<'a> {
|
||||
|
|
@ -1006,7 +1006,7 @@ pub struct TSModuleDeclaration<'a> {
|
|||
|
||||
#[ast]
|
||||
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
|
||||
#[generate_derive(CloneIn)]
|
||||
#[generate_derive(CloneIn, GetSpan, GetSpanMut)]
|
||||
#[cfg_attr(feature = "serialize", derive(Serialize, Tsify))]
|
||||
#[serde(rename_all = "camelCase")]
|
||||
pub enum TSModuleDeclarationKind {
|
||||
|
|
@ -1023,7 +1023,7 @@ impl TSModuleDeclarationKind {
|
|||
|
||||
#[ast(visit)]
|
||||
#[derive(Debug, Hash)]
|
||||
#[generate_derive(CloneIn)]
|
||||
#[generate_derive(CloneIn, GetSpan, GetSpanMut)]
|
||||
#[cfg_attr(feature = "serialize", derive(Serialize, Tsify))]
|
||||
#[serde(untagged)]
|
||||
pub enum TSModuleDeclarationName<'a> {
|
||||
|
|
@ -1033,7 +1033,7 @@ pub enum TSModuleDeclarationName<'a> {
|
|||
|
||||
#[ast(visit)]
|
||||
#[derive(Debug, Hash)]
|
||||
#[generate_derive(CloneIn)]
|
||||
#[generate_derive(CloneIn, GetSpan, GetSpanMut)]
|
||||
#[cfg_attr(feature = "serialize", derive(Serialize, Tsify))]
|
||||
#[serde(untagged)]
|
||||
pub enum TSModuleDeclarationBody<'a> {
|
||||
|
|
@ -1044,7 +1044,7 @@ pub enum TSModuleDeclarationBody<'a> {
|
|||
// See serializer in serialize.rs
|
||||
#[ast(visit)]
|
||||
#[derive(Debug, Hash)]
|
||||
#[generate_derive(CloneIn)]
|
||||
#[generate_derive(CloneIn, GetSpan, GetSpanMut)]
|
||||
#[cfg_attr(feature = "serialize", derive(Tsify))]
|
||||
#[serde(tag = "type", rename_all = "camelCase")]
|
||||
pub struct TSModuleBlock<'a> {
|
||||
|
|
@ -1057,7 +1057,7 @@ pub struct TSModuleBlock<'a> {
|
|||
|
||||
#[ast(visit)]
|
||||
#[derive(Debug, Hash)]
|
||||
#[generate_derive(CloneIn)]
|
||||
#[generate_derive(CloneIn, GetSpan, GetSpanMut)]
|
||||
#[cfg_attr(feature = "serialize", derive(Serialize, Tsify))]
|
||||
#[serde(tag = "type", rename_all = "camelCase")]
|
||||
pub struct TSTypeLiteral<'a> {
|
||||
|
|
@ -1068,7 +1068,7 @@ pub struct TSTypeLiteral<'a> {
|
|||
|
||||
#[ast(visit)]
|
||||
#[derive(Debug, Hash)]
|
||||
#[generate_derive(CloneIn)]
|
||||
#[generate_derive(CloneIn, GetSpan, GetSpanMut)]
|
||||
#[cfg_attr(feature = "serialize", derive(Serialize, Tsify))]
|
||||
#[serde(tag = "type", rename_all = "camelCase")]
|
||||
pub struct TSInferType<'a> {
|
||||
|
|
@ -1079,7 +1079,7 @@ pub struct TSInferType<'a> {
|
|||
|
||||
#[ast(visit)]
|
||||
#[derive(Debug, Hash)]
|
||||
#[generate_derive(CloneIn)]
|
||||
#[generate_derive(CloneIn, GetSpan, GetSpanMut)]
|
||||
#[cfg_attr(feature = "serialize", derive(Serialize, Tsify))]
|
||||
#[serde(tag = "type", rename_all = "camelCase")]
|
||||
pub struct TSTypeQuery<'a> {
|
||||
|
|
@ -1097,7 +1097,7 @@ inherit_variants! {
|
|||
/// [`ast` module docs]: `super`
|
||||
#[ast(visit)]
|
||||
#[derive(Debug, Hash)]
|
||||
#[generate_derive(CloneIn)]
|
||||
#[generate_derive(CloneIn, GetSpan, GetSpanMut)]
|
||||
#[cfg_attr(feature = "serialize", derive(Serialize, Tsify))]
|
||||
#[serde(untagged)]
|
||||
pub enum TSTypeQueryExprName<'a> {
|
||||
|
|
@ -1109,7 +1109,7 @@ pub enum TSTypeQueryExprName<'a> {
|
|||
|
||||
#[ast(visit)]
|
||||
#[derive(Debug, Hash)]
|
||||
#[generate_derive(CloneIn)]
|
||||
#[generate_derive(CloneIn, GetSpan, GetSpanMut)]
|
||||
#[cfg_attr(feature = "serialize", derive(Serialize, Tsify))]
|
||||
#[serde(tag = "type", rename_all = "camelCase")]
|
||||
pub struct TSImportType<'a> {
|
||||
|
|
@ -1124,7 +1124,7 @@ pub struct TSImportType<'a> {
|
|||
|
||||
#[ast(visit)]
|
||||
#[derive(Debug, Hash)]
|
||||
#[generate_derive(CloneIn)]
|
||||
#[generate_derive(CloneIn, GetSpan, GetSpanMut)]
|
||||
#[cfg_attr(feature = "serialize", derive(Serialize, Tsify))]
|
||||
#[serde(tag = "type", rename_all = "camelCase")]
|
||||
pub struct TSImportAttributes<'a> {
|
||||
|
|
@ -1136,7 +1136,7 @@ pub struct TSImportAttributes<'a> {
|
|||
|
||||
#[ast(visit)]
|
||||
#[derive(Debug, Hash)]
|
||||
#[generate_derive(CloneIn)]
|
||||
#[generate_derive(CloneIn, GetSpan, GetSpanMut)]
|
||||
#[cfg_attr(feature = "serialize", derive(Serialize, Tsify))]
|
||||
#[serde(tag = "type", rename_all = "camelCase")]
|
||||
pub struct TSImportAttribute<'a> {
|
||||
|
|
@ -1148,7 +1148,7 @@ pub struct TSImportAttribute<'a> {
|
|||
|
||||
#[ast(visit)]
|
||||
#[derive(Debug, Hash)]
|
||||
#[generate_derive(CloneIn)]
|
||||
#[generate_derive(CloneIn, GetSpan, GetSpanMut)]
|
||||
#[cfg_attr(feature = "serialize", derive(Serialize, Tsify))]
|
||||
#[serde(untagged)]
|
||||
pub enum TSImportAttributeName<'a> {
|
||||
|
|
@ -1158,7 +1158,7 @@ pub enum TSImportAttributeName<'a> {
|
|||
|
||||
#[ast(visit)]
|
||||
#[derive(Debug, Hash)]
|
||||
#[generate_derive(CloneIn)]
|
||||
#[generate_derive(CloneIn, GetSpan, GetSpanMut)]
|
||||
#[cfg_attr(feature = "serialize", derive(Serialize, Tsify))]
|
||||
#[serde(tag = "type", rename_all = "camelCase")]
|
||||
pub struct TSFunctionType<'a> {
|
||||
|
|
@ -1172,7 +1172,7 @@ pub struct TSFunctionType<'a> {
|
|||
|
||||
#[ast(visit)]
|
||||
#[derive(Debug, Hash)]
|
||||
#[generate_derive(CloneIn)]
|
||||
#[generate_derive(CloneIn, GetSpan, GetSpanMut)]
|
||||
#[cfg_attr(feature = "serialize", derive(Serialize, Tsify))]
|
||||
#[serde(tag = "type", rename_all = "camelCase")]
|
||||
pub struct TSConstructorType<'a> {
|
||||
|
|
@ -1187,7 +1187,7 @@ pub struct TSConstructorType<'a> {
|
|||
#[ast(visit)]
|
||||
#[scope]
|
||||
#[derive(Debug)]
|
||||
#[generate_derive(CloneIn)]
|
||||
#[generate_derive(CloneIn, GetSpan, GetSpanMut)]
|
||||
#[cfg_attr(feature = "serialize", derive(Serialize, Tsify))]
|
||||
#[serde(tag = "type", rename_all = "camelCase")]
|
||||
pub struct TSMappedType<'a> {
|
||||
|
|
@ -1203,7 +1203,7 @@ pub struct TSMappedType<'a> {
|
|||
|
||||
#[ast]
|
||||
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
|
||||
#[generate_derive(CloneIn)]
|
||||
#[generate_derive(CloneIn, GetSpan, GetSpanMut)]
|
||||
#[cfg_attr(feature = "serialize", derive(Serialize, Tsify))]
|
||||
#[serde(rename_all = "camelCase")]
|
||||
pub enum TSMappedTypeModifierOperator {
|
||||
|
|
@ -1217,7 +1217,7 @@ pub enum TSMappedTypeModifierOperator {
|
|||
|
||||
#[ast(visit)]
|
||||
#[derive(Debug, Hash)]
|
||||
#[generate_derive(CloneIn)]
|
||||
#[generate_derive(CloneIn, GetSpan, GetSpanMut)]
|
||||
#[cfg_attr(feature = "serialize", derive(Serialize, Tsify))]
|
||||
#[serde(tag = "type", rename_all = "camelCase")]
|
||||
pub struct TSTemplateLiteralType<'a> {
|
||||
|
|
@ -1229,7 +1229,7 @@ pub struct TSTemplateLiteralType<'a> {
|
|||
|
||||
#[ast(visit)]
|
||||
#[derive(Debug, Hash)]
|
||||
#[generate_derive(CloneIn)]
|
||||
#[generate_derive(CloneIn, GetSpan, GetSpanMut)]
|
||||
#[cfg_attr(feature = "serialize", derive(Serialize, Tsify))]
|
||||
#[serde(tag = "type", rename_all = "camelCase")]
|
||||
pub struct TSAsExpression<'a> {
|
||||
|
|
@ -1241,7 +1241,7 @@ pub struct TSAsExpression<'a> {
|
|||
|
||||
#[ast(visit)]
|
||||
#[derive(Debug, Hash)]
|
||||
#[generate_derive(CloneIn)]
|
||||
#[generate_derive(CloneIn, GetSpan, GetSpanMut)]
|
||||
#[cfg_attr(feature = "serialize", derive(Serialize, Tsify))]
|
||||
#[serde(tag = "type", rename_all = "camelCase")]
|
||||
pub struct TSSatisfiesExpression<'a> {
|
||||
|
|
@ -1253,7 +1253,7 @@ pub struct TSSatisfiesExpression<'a> {
|
|||
|
||||
#[ast(visit)]
|
||||
#[derive(Debug, Hash)]
|
||||
#[generate_derive(CloneIn)]
|
||||
#[generate_derive(CloneIn, GetSpan, GetSpanMut)]
|
||||
#[cfg_attr(feature = "serialize", derive(Serialize, Tsify))]
|
||||
#[serde(tag = "type", rename_all = "camelCase")]
|
||||
pub struct TSTypeAssertion<'a> {
|
||||
|
|
@ -1265,7 +1265,7 @@ pub struct TSTypeAssertion<'a> {
|
|||
|
||||
#[ast(visit)]
|
||||
#[derive(Debug, Hash)]
|
||||
#[generate_derive(CloneIn)]
|
||||
#[generate_derive(CloneIn, GetSpan, GetSpanMut)]
|
||||
#[cfg_attr(feature = "serialize", derive(Serialize, Tsify))]
|
||||
#[serde(tag = "type", rename_all = "camelCase")]
|
||||
pub struct TSImportEqualsDeclaration<'a> {
|
||||
|
|
@ -1284,7 +1284,7 @@ inherit_variants! {
|
|||
/// [`ast` module docs]: `super`
|
||||
#[ast(visit)]
|
||||
#[derive(Debug, Hash)]
|
||||
#[generate_derive(CloneIn)]
|
||||
#[generate_derive(CloneIn, GetSpan, GetSpanMut)]
|
||||
#[cfg_attr(feature = "serialize", derive(Serialize, Tsify))]
|
||||
#[serde(untagged, rename_all = "camelCase")]
|
||||
pub enum TSModuleReference<'a> {
|
||||
|
|
@ -1296,7 +1296,7 @@ pub enum TSModuleReference<'a> {
|
|||
|
||||
#[ast(visit)]
|
||||
#[derive(Debug, Hash)]
|
||||
#[generate_derive(CloneIn)]
|
||||
#[generate_derive(CloneIn, GetSpan, GetSpanMut)]
|
||||
#[cfg_attr(feature = "serialize", derive(Serialize, Tsify))]
|
||||
#[serde(tag = "type", rename_all = "camelCase")]
|
||||
pub struct TSExternalModuleReference<'a> {
|
||||
|
|
@ -1307,7 +1307,7 @@ pub struct TSExternalModuleReference<'a> {
|
|||
|
||||
#[ast(visit)]
|
||||
#[derive(Debug, Hash)]
|
||||
#[generate_derive(CloneIn)]
|
||||
#[generate_derive(CloneIn, GetSpan, GetSpanMut)]
|
||||
#[cfg_attr(feature = "serialize", derive(Serialize, Tsify))]
|
||||
#[serde(tag = "type", rename_all = "camelCase")]
|
||||
pub struct TSNonNullExpression<'a> {
|
||||
|
|
@ -1342,7 +1342,7 @@ pub struct TSNonNullExpression<'a> {
|
|||
/// [`CallExpression`]: crate::ast::js::CallExpression
|
||||
#[ast(visit)]
|
||||
#[derive(Debug, Hash)]
|
||||
#[generate_derive(CloneIn)]
|
||||
#[generate_derive(CloneIn, GetSpan, GetSpanMut)]
|
||||
#[cfg_attr(feature = "serialize", derive(Serialize, Tsify))]
|
||||
#[serde(tag = "type", rename_all = "camelCase")]
|
||||
pub struct Decorator<'a> {
|
||||
|
|
@ -1356,7 +1356,7 @@ pub struct Decorator<'a> {
|
|||
/// `export = foo`
|
||||
#[ast(visit)]
|
||||
#[derive(Debug, Hash)]
|
||||
#[generate_derive(CloneIn)]
|
||||
#[generate_derive(CloneIn, GetSpan, GetSpanMut)]
|
||||
#[cfg_attr(feature = "serialize", derive(Serialize, Tsify))]
|
||||
#[serde(tag = "type", rename_all = "camelCase")]
|
||||
pub struct TSExportAssignment<'a> {
|
||||
|
|
@ -1370,7 +1370,7 @@ pub struct TSExportAssignment<'a> {
|
|||
/// `export as namespace foo`
|
||||
#[ast(visit)]
|
||||
#[derive(Debug, Hash)]
|
||||
#[generate_derive(CloneIn)]
|
||||
#[generate_derive(CloneIn, GetSpan, GetSpanMut)]
|
||||
#[cfg_attr(feature = "serialize", derive(Serialize, Tsify))]
|
||||
#[serde(tag = "type", rename_all = "camelCase")]
|
||||
pub struct TSNamespaceExportDeclaration<'a> {
|
||||
|
|
@ -1381,7 +1381,7 @@ pub struct TSNamespaceExportDeclaration<'a> {
|
|||
|
||||
#[ast(visit)]
|
||||
#[derive(Debug, Hash)]
|
||||
#[generate_derive(CloneIn)]
|
||||
#[generate_derive(CloneIn, GetSpan, GetSpanMut)]
|
||||
#[cfg_attr(feature = "serialize", derive(Serialize, Tsify))]
|
||||
#[serde(tag = "type", rename_all = "camelCase")]
|
||||
pub struct TSInstantiationExpression<'a> {
|
||||
|
|
@ -1394,7 +1394,7 @@ pub struct TSInstantiationExpression<'a> {
|
|||
/// See [TypeScript - Type-Only Imports and Exports](https://www.typescriptlang.org/docs/handbook/release-notes/typescript-3-8.html)
|
||||
#[ast]
|
||||
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
|
||||
#[generate_derive(CloneIn)]
|
||||
#[generate_derive(CloneIn, GetSpan, GetSpanMut)]
|
||||
#[cfg_attr(feature = "serialize", derive(Serialize, Tsify))]
|
||||
#[serde(rename_all = "camelCase")]
|
||||
pub enum ImportOrExportKind {
|
||||
|
|
@ -1409,7 +1409,7 @@ pub enum ImportOrExportKind {
|
|||
/// `type foo = ty?` or `type foo = ?ty`
|
||||
#[ast(visit)]
|
||||
#[derive(Debug, Hash)]
|
||||
#[generate_derive(CloneIn)]
|
||||
#[generate_derive(CloneIn, GetSpan, GetSpanMut)]
|
||||
#[cfg_attr(feature = "serialize", derive(Serialize, Tsify))]
|
||||
#[serde(tag = "type", rename_all = "camelCase")]
|
||||
pub struct JSDocNullableType<'a> {
|
||||
|
|
@ -1423,7 +1423,7 @@ pub struct JSDocNullableType<'a> {
|
|||
/// `type foo = ty!` or `type foo = !ty`
|
||||
#[ast(visit)]
|
||||
#[derive(Debug, Hash)]
|
||||
#[generate_derive(CloneIn)]
|
||||
#[generate_derive(CloneIn, GetSpan, GetSpanMut)]
|
||||
#[cfg_attr(feature = "serialize", derive(Serialize, Tsify))]
|
||||
#[serde(tag = "type", rename_all = "camelCase")]
|
||||
pub struct JSDocNonNullableType<'a> {
|
||||
|
|
@ -1435,7 +1435,7 @@ pub struct JSDocNonNullableType<'a> {
|
|||
|
||||
#[ast(visit)]
|
||||
#[derive(Debug, Hash)]
|
||||
#[generate_derive(CloneIn)]
|
||||
#[generate_derive(CloneIn, GetSpan, GetSpanMut)]
|
||||
#[cfg_attr(feature = "serialize", derive(Serialize, Tsify))]
|
||||
#[serde(tag = "type", rename_all = "camelCase")]
|
||||
pub struct JSDocUnknownType {
|
||||
|
|
|
|||
2196
crates/oxc_ast/src/generated/derive_get_span.rs
Normal file
2196
crates/oxc_ast/src/generated/derive_get_span.rs
Normal file
File diff suppressed because it is too large
Load diff
File diff suppressed because it is too large
Load diff
|
|
@ -42,7 +42,8 @@ mod generated {
|
|||
pub mod ast_builder;
|
||||
pub mod ast_kind;
|
||||
pub mod derive_clone_in;
|
||||
pub mod span;
|
||||
pub mod derive_get_span;
|
||||
pub mod derive_get_span_mut;
|
||||
pub mod visit;
|
||||
pub mod visit_mut;
|
||||
}
|
||||
|
|
|
|||
161
tasks/ast_codegen/src/generators/derive_get_span.rs
Normal file
161
tasks/ast_codegen/src/generators/derive_get_span.rs
Normal file
|
|
@ -0,0 +1,161 @@
|
|||
use proc_macro2::TokenStream;
|
||||
use quote::{format_ident, quote};
|
||||
use syn::{Generics, Ident, Type};
|
||||
|
||||
use crate::{
|
||||
output,
|
||||
schema::{EnumDef, GetGenerics, StructDef, ToType, TypeDef},
|
||||
util::ToIdent,
|
||||
Generator, GeneratorOutput, LateCtx,
|
||||
};
|
||||
|
||||
use super::{define_generator, generated_header};
|
||||
|
||||
define_generator! {
|
||||
pub struct DeriveGetSpan;
|
||||
}
|
||||
|
||||
define_generator! {
|
||||
pub struct DeriveGetSpanMut;
|
||||
}
|
||||
|
||||
impl Generator for DeriveGetSpan {
|
||||
fn name(&self) -> &'static str {
|
||||
stringify!(DeriveGetSpan)
|
||||
}
|
||||
|
||||
fn generate(&mut self, ctx: &LateCtx) -> GeneratorOutput {
|
||||
GeneratorOutput::Stream((
|
||||
output(crate::AST_CRATE, "derive_get_span.rs"),
|
||||
derive::<false>(ctx),
|
||||
))
|
||||
}
|
||||
}
|
||||
|
||||
impl Generator for DeriveGetSpanMut {
|
||||
fn name(&self) -> &'static str {
|
||||
stringify!(DeriveGetSpanMut)
|
||||
}
|
||||
|
||||
fn generate(&mut self, ctx: &LateCtx) -> GeneratorOutput {
|
||||
GeneratorOutput::Stream((
|
||||
output(crate::AST_CRATE, "derive_get_span_mut.rs"),
|
||||
derive::<true>(ctx),
|
||||
))
|
||||
}
|
||||
}
|
||||
|
||||
fn derive<const MUT: bool>(ctx: &LateCtx) -> TokenStream {
|
||||
let (self_type, trait_ident, method_ident, result_type) = if MUT {
|
||||
(
|
||||
quote!(&mut self),
|
||||
format_ident!("GetSpanMut"),
|
||||
format_ident!("span_mut"),
|
||||
quote!(&mut Span),
|
||||
)
|
||||
} else {
|
||||
(quote!(&self), format_ident!("GetSpan"), format_ident!("span"), quote!(Span))
|
||||
};
|
||||
let inline = quote!(#[inline]);
|
||||
|
||||
let derive_enum = |it: &EnumDef| {
|
||||
let generics = it.generics();
|
||||
let typ = it.to_type();
|
||||
impl_trait(
|
||||
&trait_ident,
|
||||
&method_ident,
|
||||
&generics,
|
||||
&typ,
|
||||
&self_type,
|
||||
&result_type,
|
||||
None,
|
||||
&derive_enum(it, &method_ident),
|
||||
)
|
||||
};
|
||||
|
||||
let derive_struct = |it: &StructDef| {
|
||||
let generics = it.generics();
|
||||
let typ = it.to_type();
|
||||
impl_trait(
|
||||
&trait_ident,
|
||||
&method_ident,
|
||||
&generics,
|
||||
&typ,
|
||||
&self_type,
|
||||
&result_type,
|
||||
Some(&inline),
|
||||
&derive_struct::<MUT>(it, &method_ident),
|
||||
)
|
||||
};
|
||||
let impls: Vec<TokenStream> = ctx
|
||||
.schema
|
||||
.definitions
|
||||
.iter()
|
||||
.filter(|def| def.visitable())
|
||||
.map(|def| match &def {
|
||||
TypeDef::Enum(it) => derive_enum(it),
|
||||
TypeDef::Struct(it) => derive_struct(it),
|
||||
})
|
||||
.collect();
|
||||
|
||||
let header = generated_header!();
|
||||
|
||||
quote! {
|
||||
#header
|
||||
insert!("#![allow(clippy::match_same_arms)]");
|
||||
endl!();
|
||||
|
||||
use oxc_span::{#trait_ident, Span};
|
||||
endl!();
|
||||
use crate::ast::*;
|
||||
|
||||
#(#impls)*
|
||||
}
|
||||
}
|
||||
|
||||
fn derive_enum(def: &EnumDef, method: &Ident) -> TokenStream {
|
||||
let matches = def.all_variants().map(|var| {
|
||||
let ident = var.ident();
|
||||
quote!(Self :: #ident(it) => it.#method())
|
||||
});
|
||||
|
||||
quote! {
|
||||
match self {
|
||||
#(#matches),*
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fn derive_struct<const MUT: bool>(def: &StructDef, method: &Ident) -> TokenStream {
|
||||
let inner_span_hint = def.fields.iter().find(|it| it.markers.span);
|
||||
if let Some(span_field) = inner_span_hint {
|
||||
let ident = span_field.name.as_ref().map(ToIdent::to_ident).unwrap();
|
||||
quote!(self.#ident.#method())
|
||||
} else if MUT {
|
||||
quote!(&mut self.span)
|
||||
} else {
|
||||
quote!(self.span)
|
||||
}
|
||||
}
|
||||
|
||||
#[allow(clippy::too_many_arguments)]
|
||||
fn impl_trait(
|
||||
trait_ident: &Ident,
|
||||
method_ident: &Ident,
|
||||
generics: &Option<Generics>,
|
||||
target_type: &Type,
|
||||
self_: &TokenStream,
|
||||
result_type: &TokenStream,
|
||||
inline: Option<&TokenStream>,
|
||||
body: &TokenStream,
|
||||
) -> TokenStream {
|
||||
quote! {
|
||||
endl!();
|
||||
impl #generics #trait_ident for #target_type {
|
||||
#inline
|
||||
fn #method_ident(#self_) -> #result_type {
|
||||
#body
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -1,111 +0,0 @@
|
|||
use proc_macro2::TokenStream;
|
||||
use quote::quote;
|
||||
|
||||
use crate::{
|
||||
output,
|
||||
schema::{EnumDef, GetGenerics, StructDef, ToType, TypeDef},
|
||||
util::ToIdent,
|
||||
Generator, GeneratorOutput, LateCtx,
|
||||
};
|
||||
|
||||
use super::{define_generator, generated_header};
|
||||
|
||||
define_generator! {
|
||||
pub struct ImplGetSpanGenerator;
|
||||
}
|
||||
|
||||
impl Generator for ImplGetSpanGenerator {
|
||||
fn name(&self) -> &'static str {
|
||||
stringify!(ImplGetSpanGenerator)
|
||||
}
|
||||
|
||||
fn generate(&mut self, ctx: &LateCtx) -> GeneratorOutput {
|
||||
let impls: Vec<TokenStream> = ctx
|
||||
.schema
|
||||
.definitions
|
||||
.iter()
|
||||
.filter(|def| def.visitable())
|
||||
.map(|def| match &def {
|
||||
TypeDef::Enum(it) => impl_enum(it),
|
||||
TypeDef::Struct(it) => impl_struct(it),
|
||||
})
|
||||
.collect();
|
||||
|
||||
let header = generated_header!();
|
||||
|
||||
GeneratorOutput::Stream((
|
||||
output(crate::AST_CRATE, "span.rs"),
|
||||
quote! {
|
||||
#header
|
||||
insert!("#![allow(clippy::match_same_arms)]");
|
||||
endl!();
|
||||
|
||||
use crate::ast::*;
|
||||
use oxc_span::{GetSpan, GetSpanMut, Span};
|
||||
|
||||
#(#impls)*
|
||||
},
|
||||
))
|
||||
}
|
||||
}
|
||||
|
||||
fn impl_enum(def: &EnumDef) -> TokenStream {
|
||||
let typ = def.to_type();
|
||||
let generics = &def.generics();
|
||||
let (matches, matches_mut): (Vec<TokenStream>, Vec<TokenStream>) = def
|
||||
.all_variants()
|
||||
.map(|var| {
|
||||
let ident = var.ident();
|
||||
(quote!(Self :: #ident(it) => it.span()), quote!(Self :: #ident(it) => it.span_mut()))
|
||||
})
|
||||
.unzip();
|
||||
|
||||
quote! {
|
||||
endl!();
|
||||
impl #generics GetSpan for #typ {
|
||||
fn span(&self) -> Span {
|
||||
match self {
|
||||
#(#matches),*
|
||||
}
|
||||
}
|
||||
}
|
||||
endl!();
|
||||
|
||||
impl #generics GetSpanMut for #typ {
|
||||
fn span_mut(&mut self) -> &mut Span {
|
||||
match self {
|
||||
#(#matches_mut),*
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fn impl_struct(def: &StructDef) -> TokenStream {
|
||||
let typ = def.to_type();
|
||||
let generics = &def.generics();
|
||||
let inner_span_hint = def.fields.iter().find(|it| it.markers.span);
|
||||
let (span, span_mut) = if let Some(span_field) = inner_span_hint {
|
||||
let ident = span_field.name.as_ref().map(ToIdent::to_ident).unwrap();
|
||||
(quote!(self.#ident.span()), quote!(self.#ident.span_mut()))
|
||||
} else {
|
||||
(quote!(self.span), quote!(&mut self.span))
|
||||
};
|
||||
quote! {
|
||||
endl!();
|
||||
impl #generics GetSpan for #typ {
|
||||
#[inline]
|
||||
fn span(&self) -> Span {
|
||||
#span
|
||||
}
|
||||
}
|
||||
endl!();
|
||||
|
||||
impl #generics GetSpanMut for #typ {
|
||||
#[inline]
|
||||
fn span_mut(&mut self) -> &mut Span {
|
||||
#span_mut
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -2,7 +2,7 @@ mod assert_layouts;
|
|||
mod ast_builder;
|
||||
mod ast_kind;
|
||||
mod derive_clone_in;
|
||||
mod impl_get_span;
|
||||
mod derive_get_span;
|
||||
mod visit;
|
||||
|
||||
/// Inserts a newline in the `TokenStream`.
|
||||
|
|
@ -45,7 +45,7 @@ pub use assert_layouts::AssertLayouts;
|
|||
pub use ast_builder::AstBuilderGenerator;
|
||||
pub use ast_kind::AstKindGenerator;
|
||||
pub use derive_clone_in::DeriveCloneIn;
|
||||
pub use impl_get_span::ImplGetSpanGenerator;
|
||||
pub use derive_get_span::{DeriveGetSpan, DeriveGetSpanMut};
|
||||
pub use visit::{VisitGenerator, VisitMutGenerator};
|
||||
|
||||
use crate::{GeneratorOutput, LateCtx};
|
||||
|
|
|
|||
|
|
@ -16,16 +16,14 @@ mod util;
|
|||
|
||||
use fmt::{cargo_fmt, pprint};
|
||||
use generators::{
|
||||
AssertLayouts, AstBuilderGenerator, AstKindGenerator, DeriveCloneIn, Generator, VisitGenerator,
|
||||
VisitMutGenerator,
|
||||
AssertLayouts, AstBuilderGenerator, AstKindGenerator, DeriveCloneIn, DeriveGetSpan,
|
||||
DeriveGetSpanMut, Generator, VisitGenerator, VisitMutGenerator,
|
||||
};
|
||||
use passes::{CalcLayout, Linker, Pass};
|
||||
use rust_ast::AstRef;
|
||||
use schema::{lower_ast_types, Schema, TypeDef};
|
||||
use util::{write_all_to, NormalizeError};
|
||||
|
||||
use crate::generators::ImplGetSpanGenerator;
|
||||
|
||||
static SOURCE_PATHS: &[&str] = &[
|
||||
"oxc_ast/src/ast/literal.rs",
|
||||
"oxc_ast/src/ast/js.rs",
|
||||
|
|
@ -298,7 +296,8 @@ fn main() -> std::result::Result<(), Box<dyn std::error::Error>> {
|
|||
.gen(AstKindGenerator)
|
||||
.gen(AstBuilderGenerator)
|
||||
.gen(DeriveCloneIn)
|
||||
.gen(ImplGetSpanGenerator)
|
||||
.gen(DeriveGetSpan)
|
||||
.gen(DeriveGetSpanMut)
|
||||
.gen(VisitGenerator)
|
||||
.gen(VisitMutGenerator)
|
||||
.generate()?;
|
||||
|
|
|
|||
Loading…
Reference in a new issue