function main( context ) {
	var scope = context.getScope();

	/**
	* Reports the error message.
	*
	* @private
	* @param {ASTNode} node - node to report
	* @param {string} type - node type
	*/
	function report( node, type ) {
		var message;

		if ( type === 'Literal' ) {
			message = 'Using the built-in global `BigInt` literal syntax is not allowed; use `@stdlib/bigint/ctor` instead.';
		} else if ( type === 'CallExpression' ) {
			message = 'Using the built-in global `BigInt` constructor is not allowed; use `@stdlib/bigint/ctor` instead.';
		}
		context.report({
			'node': node,
			'message': message
		});
	}

	/**
	* Validates a BigInt literal.
	*
	* @private
	* @param {ASTNode} node - node to examine
	*/
	function validateBigIntLiteral( node ) {
		if ( node.bigint ) {
			report( node, 'Literal' );
		}
	}

	/**
	* Validates a BigInt constructor.
	*
	* @private
	* @param {ASTNode} node - node to examine
	*/
	function validateBigIntConstructor( node ) {
		if (
			node.callee &&
			node.callee.type === 'Identifier' &&
			node.callee.name === 'BigInt'
		) {
			if ( isImportedBigInt( scope ) ) {
				return;
			}
			report( node, 'CallExpression' );
		}
	}

	return {
		'Literal': validateBigIntLiteral,
		'CallExpression': validateBigIntConstructor
	};
}
Rule for disallowing the use of the built-in global `BigInt` literal syntax and constructor.

@param {Object} context - ESLint context
@returns {Object} validators