UNPKG

eslint-codemod-utils

Version:

A collection of AST helper functions for more complex ESLint rule fixes.

256 lines (255 loc) 6.59 kB
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>;