prefer_es6_class

package
v0.16.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Apr 22, 2026 License: MIT, MIT Imports: 5 Imported by: 0

Documentation

Index

Constants

This section is empty.

Variables

View Source
var PreferEs6ClassRule = rule.Rule{
	Name: "react/prefer-es6-class",
	Run: func(ctx rule.RuleContext, options any) rule.RuleListeners {
		mode := parseMode(options)
		pragma := reactutil.GetReactPragma(ctx.Settings)
		createClass := reactutil.GetReactCreateClass(ctx.Settings)

		listeners := rule.RuleListeners{}

		if mode == "always" {
			listeners[ast.KindObjectLiteralExpression] = func(node *ast.Node) {
				parent := skipParenParent(node)
				if parent == nil {
					return
				}
				// ESLint's `isES5Component` gate is `node.parent.callee` —
				// any parent node kind that exposes a `.callee` property.
				// In ESTree that is both CallExpression AND NewExpression,
				// so `new createReactClass({...})` also reports.
				var callee *ast.Node
				var arguments *ast.NodeList
				switch parent.Kind {
				case ast.KindCallExpression:
					call := parent.AsCallExpression()
					callee = call.Expression
					arguments = call.Arguments
				case ast.KindNewExpression:
					newExpr := parent.AsNewExpression()
					callee = newExpr.Expression
					arguments = newExpr.Arguments
				default:
					return
				}
				if !isCreateClassCallee(callee, pragma, createClass) {
					return
				}

				if !containsArg(arguments, node) {
					return
				}
				ctx.ReportNode(node, rule.RuleMessage{
					Id:          "shouldUseES6Class",
					Description: "Component should use es6 class instead of createClass",
				})
			}
		}

		if mode == "never" {

			listeners[ast.KindClassDeclaration] = func(node *ast.Node) {
				if !reactutil.ExtendsReactComponent(node, pragma) {
					return
				}

				classStart := classKeywordStart(ctx.SourceFile.Text(), node)
				ctx.ReportRange(core.NewTextRange(classStart, node.End()), rule.RuleMessage{
					Id:          "shouldUseCreateClass",
					Description: "Component should use createClass instead of es6 class",
				})
			}
		}

		return listeners
	},
}

Functions

This section is empty.

Types

This section is empty.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL