function validate( node ) {
		var requirePath;
		var filename;
		var resolved;
		var parts;
		var dir;
		var msg;

		if ( node.callee.name === 'require' ) {
			requirePath = node.arguments[ 0 ].value;
			if ( isString( requirePath ) ) {
				filename = context.getFilename();
				dir = dirname( filename );
				if ( startsWith( requirePath, '.' ) ) {
					requirePath = path.resolve( dir, requirePath );
				}
				resolved = tryResolve( requirePath, dir );
				parts = path.parse( requirePath );

				// If the path cannot be resolved, we decide whether to ignore the error or whether to report it...
				if ( resolved instanceof Error ) {
					// Ignore error for Node.js native add-ons since they may not have been built yet...
					if ( parts.ext === '.node' ) {
						return;
					}
					// Ignore error for internal requires in fenced code blocks of Markdown files as the package's implementation may not yet be available...
					if ( filename === '<text>' && startsWith( requirePath, '@stdlib' ) ) {
						return;
					}
					return report( node, 'cannot resolve module: "'+requirePath+'"' );
				}
				resolved = path.parse( resolved );
				if ( resolved.name === parts.name ) {
					// Path denotes a file or internal module...
					if ( parts.ext && !contains( whitelist, parts.ext ) ) {
						msg = 'require statement of file does not end with one of the whitelisted file extensions (' + whitelist.join( ',' ) + '). Value: '+ requirePath;
						report( node, msg );
					} else if (
						resolved.ext && !parts.ext &&
						!contains( resolved.dir, parts.name )
					) {
						msg = 'require statement of file is missing a file extension. Value: '+ requirePath;
						report( node, msg );
					}
				}
			}
		}
	}
Checks whether a `require` statement of a file ends with a whitelisted file extension.

@private
@param {ASTNode} node - node to examine
@returns {void}