eslint-codemod-utils
Version:
A collection of AST helper functions for more complex ESLint rule fixes.
256 lines (255 loc) • 6.59 kB
TypeScript
import { AST_TOKEN_TYPES, TSESTree as ESTree } from '@typescript-eslint/types';
import type { Loose, StringableASTNode, StringableASTNodeFn, WithoutType } from './types';
export declare const whiteSpace: (loc?: ESTree.SourceLocation) => string;
export declare const comments: (comments?: Loose<ESTree.Comment>[]) => {
comments: (({
type: AST_TOKEN_TYPES.Block;
value: string;
} & {
loc?: ({
start: {
line: number;
column: number;
} & {};
end: {
line: number;
column: number;
} & {};
} & {}) | undefined;
range?: readonly number[] | undefined;
}) | ({
type: AST_TOKEN_TYPES.Line;
value: string;
} & {
loc?: ({
start: {
line: number;
column: number;
} & {};
end: {
line: number;
column: number;
} & {};
} & {}) | undefined;
range?: readonly number[] | undefined;
}))[];
toString: () => string;
};
export declare const comment: ({ value, type, loc, ...other }: Loose<ESTree.Comment>) => {
value: string;
type: AST_TOKEN_TYPES.Block | AST_TOKEN_TYPES.Line;
toString: () => string;
range?: readonly number[] | undefined;
} | {
value: string;
type: AST_TOKEN_TYPES.Block | AST_TOKEN_TYPES.Line;
toString: () => string;
range?: readonly number[] | undefined;
};
/**
* __JSXIdentifier__
*
* @param param Takes a string or the shape of a {ESTree.JSXIdentifier} node
* @returns {ESTree.JSXIdentifier} node
*/
export declare const jsxIdentifier: (param: WithoutType<ESTree.JSXIdentifier> | string) => StringableASTNode<ESTree.JSXIdentifier>;
/**
* __JSXOpeningFragment__
*
* @example
* ```ts
* <>hello</>
* ^^
* ```
*/
export declare const jsxOpeningFragment: StringableASTNodeFn<ESTree.JSXOpeningFragment>;
/**
* __JSXClosingFragment__
*
* @example
* ```ts
* <>hello</>
* ^^
* ```
*/
export declare const jsxClosingFragment: StringableASTNodeFn<ESTree.JSXClosingFragment>;
/**
* __JSXFragment__
*
* @example
* ```ts
* <>hello</>
* ^^^^^^^^^^
* ```
*/
export declare const jsxFragment: StringableASTNodeFn<ESTree.JSXFragment>;
/**
* __JSXSpreadChild__
*
* @example
* ```ts
* <>{...child}</>
* ^^^^^^^^^^
* ```
*/
export declare const jsxSpreadChild: StringableASTNodeFn<ESTree.JSXSpreadChild>;
export declare const jsxMemberExpression: StringableASTNodeFn<ESTree.JSXMemberExpression>;
/**
* __JSXElement__
*
* @example
*
* Usage
* ```
* import { jsxElement, jsxOpeningElement, jsxClosingElement, identifier } from 'eslint-codemod-utils'
*
* const modalName = identifier({ name: 'Modal' })
* const modal = jsxElement({
* openingElement: jsxOpeningElement({ name: modalName, selfClosing: false }),
* closingElement: jsxClosingElement({ name: modalName }),
* })
* ```
*
* @example
*
* Produces
* ```js
* <Modal></Modal>
* ```
*
* @returns {JSXElement}
*/
export declare const jsxElement: StringableASTNodeFn<ESTree.JSXElement>;
/**
* __JSXSpreadAttribute__
*
* @example Usage
*
* ```js
* import { jsxSpreadAttribute, identifier } from 'eslint-codemod-utils'
*
* const spreadAttr = jsxSpreadAttribute({
* argument: identifier({ name: 'spread' })
* })
* ```
* @example
*
* ```js
* // Produces a spread attribute
* <div {...spread}>
* ⌃⌃⌃⌃⌃⌃⌃⌃⌃⌃⌃
* ```
*
* @returns {ESTree.JSXSpreadAttribute}
*/
export declare const jsxSpreadAttribute: StringableASTNodeFn<ESTree.JSXSpreadAttribute>;
/**
* __JSXOpeningElement__
*
* Note: `leadingComments` is a parser-added extension (ESLint attaches it to
* the node during traversal). It's not part of `TSESTree.JSXOpeningElement`,
* but the library has historically supported rendering it so that lint fixers
* can preserve documentation comments on the opening tag. We accept it as an
* optional extra input field and render it before the opening tag.
*/
export declare const jsxOpeningElement: ({ name, attributes, selfClosing, leadingComments, ...other }: WithoutType<ESTree.JSXOpeningElement> & {
leadingComments?: (({
type: AST_TOKEN_TYPES.Block;
value: string;
} & {
loc?: ({
start: {
line: number;
column: number;
} & {};
end: {
line: number;
column: number;
} & {};
} & {}) | undefined;
range?: readonly number[] | undefined;
}) | ({
type: AST_TOKEN_TYPES.Line;
value: string;
} & {
loc?: ({
start: {
line: number;
column: number;
} & {};
end: {
line: number;
column: number;
} & {};
} & {}) | undefined;
range?: readonly number[] | undefined;
}))[] | undefined;
}) => StringableASTNode<ESTree.JSXOpeningElement>;
/**
* __JSXClosingElement__
*
* @example
*
* ```js
* // The below jsx div is a closing element.
* // A closing element is expected to match a valid opening element of the same name
* </div>
* ```
*
* @returns {ESTree.JSXClosingElement}
*/
export declare const jsxClosingElement: StringableASTNodeFn<ESTree.JSXClosingElement>;
/**
* __JSXText__
*
* @example
*
* ```js
* // In the below jsx, the string, "hello world" is considered JSXText.
* // JSXText can be a any number, boolean, or string value.
* <div>hello world</div>
* ```
*
* @returns {ESTree.JSXText}
*/
export declare const jsxText: StringableASTNodeFn<ESTree.JSXText>;
/**
* __JSXEmptyExpression__
*
* @example
*
* ```tsx
* <SomeJSX attribute={} />
* ^^
* ```
*
* @returns {ESTree.JSXEmptyExpression}
*/
export declare const jsxEmptyExpression: StringableASTNodeFn<ESTree.JSXEmptyExpression>;
/**
* __JSXExpressionContainer__
*
* @example
*
* ```tsx
* <SomeJSX attribute={someValue} />
* ^^^^^^^^^^^
* ```
*
* @returns {ESTree.JSXExpressionContainer}
*/
export declare const jsxExpressionContainer: StringableASTNodeFn<ESTree.JSXExpressionContainer>;
/**
* __JSXAttribute__
*
* @example
*
* ```js
* // In the below jsx, `a`, `b` and `c` reflect different valid
* // jsx attributes. There values can come in many forms.
* <div a={10} b="string" c={object} />
* ```
*
* @returns {JSXAttribute}
*/
export declare const jsxAttribute: StringableASTNodeFn<ESTree.JSXAttribute>;