valid_describe_callback

package
v0.5.3 Latest Latest
Warning

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

Go to latest
Published: May 14, 2026 License: MIT Imports: 4 Imported by: 0

Documentation

Index

Constants

This section is empty.

Variables

View Source
var ValidDescribeCallbackRule = rule.Rule{
	Name: "jest/valid-describe-callback",
	Run: func(ctx rule.RuleContext, options any) rule.RuleListeners {
		return rule.RuleListeners{
			ast.KindCallExpression: func(node *ast.Node) {
				jestFnCall := utils.ParseJestFnCall(node, ctx)
				if jestFnCall == nil || jestFnCall.Kind != utils.JestFnTypeDescribe {
					return
				}

				argumentLength := len(node.AsCallExpression().Arguments.Nodes)

				switch argumentLength {
				case 0:
					ctx.ReportNode(node, buildErrorNameAndCallbackMessage())
				case 1:
					ctx.ReportNode(node.AsCallExpression().Arguments.Nodes[0], buildErrorNameAndCallbackMessage())
				default:
					switch node.AsCallExpression().Arguments.Nodes[1].Kind {
					case ast.KindArrowFunction:
						{
							arrowFuncExpression := node.AsCallExpression().Arguments.Nodes[1]
							if ast.IsAsyncFunction(arrowFuncExpression) {
								ctx.ReportNode(arrowFuncExpression, buildErrorNoAsyncDescribeCallbackMessage())
							}

							arrowFn := arrowFuncExpression.AsArrowFunction()
							if !slices.Contains(jestFnCall.Members, "each") && len(arrowFn.Parameters.Nodes) > 0 {
								ctx.ReportNode(arrowFn.Parameters.Nodes[0], buildErrorUnexpectedDescribeArgumentMessage())
							}

							body := arrowFn.Body
							if body != nil {
								if body.Kind == ast.KindBlock {
									if ret := findFirstReturnStatement(body.AsBlock().Statements.Nodes); ret != nil {
										ctx.ReportNode(ret, buildErrorUnexpectedReturnInDescribeMessage())
									}
								} else {

									ctx.ReportNode(body, buildErrorUnexpectedReturnInDescribeMessage())
								}
							}
						}
					case ast.KindFunctionExpression:
						{
							funcExpression := node.AsCallExpression().Arguments.Nodes[1]
							if ast.IsAsyncFunction(funcExpression) {
								ctx.ReportNode(funcExpression, buildErrorNoAsyncDescribeCallbackMessage())
							}

							if !slices.Contains(jestFnCall.Members, "each") && len(funcExpression.AsFunctionExpression().Parameters.Nodes) > 0 {
								ctx.ReportNode(funcExpression.AsFunctionExpression().Parameters.Nodes[0], buildErrorUnexpectedDescribeArgumentMessage())
							}

							body := funcExpression.AsFunctionExpression().Body
							if body != nil {
								returnStatement := findFirstReturnStatement(body.AsBlock().Statements.Nodes)
								if returnStatement != nil {
									ctx.ReportNode(returnStatement, buildErrorUnexpectedReturnInDescribeMessage())
								}
							}
						}
					default:
						ctx.ReportNode(node.AsCallExpression().Arguments.Nodes[1], buildErrorSecondArgumentMustBeFunctionMessage())
					}
				}
			},
		}
	},
}

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