no_console

package
v0.3.2 Latest Latest
Warning

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

Go to latest
Published: Mar 24, 2026 License: MIT Imports: 3 Imported by: 0

Documentation

Index

Constants

This section is empty.

Variables

View Source
var NoConsoleRule = rule.Rule{
	Name: "no-console",
	Run: func(ctx rule.RuleContext, options any) rule.RuleListeners {
		opts := parseOptions(options)

		reportIfConsole := func(node *ast.Node, consoleIdent *ast.Node, propertyName string) {

			if opts.isAllowed(propertyName) {
				return
			}

			if ctx.TypeChecker != nil {
				symbol := ctx.TypeChecker.GetSymbolAtLocation(consoleIdent)
				if symbol != nil {
					for _, declaration := range symbol.Declarations {
						declarationSourceFile := ast.GetSourceFileOfNode(declaration)
						if declarationSourceFile != nil && declarationSourceFile == ctx.SourceFile {
							return
						}
					}
				}
			}

			ctx.ReportNode(node, rule.RuleMessage{
				Id:          "unexpected",
				Description: "Unexpected console statement.",
			})
		}

		return rule.RuleListeners{

			ast.KindPropertyAccessExpression: func(node *ast.Node) {
				propAccess := node.AsPropertyAccessExpression()
				if propAccess == nil {
					return
				}

				if propAccess.Expression.Kind != ast.KindIdentifier {
					return
				}

				objectName := propAccess.Expression.AsIdentifier().Text
				if objectName != "console" {
					return
				}

				propertyName := propAccess.Name().Text()
				reportIfConsole(node, propAccess.Expression, propertyName)
			},

			ast.KindElementAccessExpression: func(node *ast.Node) {
				elemAccess := node.AsElementAccessExpression()
				if elemAccess == nil {
					return
				}

				if elemAccess.Expression.Kind != ast.KindIdentifier {
					return
				}

				objectName := elemAccess.Expression.AsIdentifier().Text
				if objectName != "console" {
					return
				}

				// Try to get static property name for allow-list check.
				// Dynamic access (e.g., console[foo]) is always reported since
				// we can't prove it's in the allow list.
				var propertyName string
				if elemAccess.ArgumentExpression != nil {
					switch elemAccess.ArgumentExpression.Kind {
					case ast.KindStringLiteral:
						propertyName = elemAccess.ArgumentExpression.AsStringLiteral().Text
					case ast.KindNoSubstitutionTemplateLiteral:
						propertyName = elemAccess.ArgumentExpression.AsNoSubstitutionTemplateLiteral().Text
					}
				}

				reportIfConsole(node, elemAccess.Expression, propertyName)
			},
		}
	},
}

https://eslint.org/docs/latest/rules/no-console

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