lib/rules/indent.js
function checkIndentInFunctionBlock(node) {

		// Search first caller in chain.
		// Ex.:
		//
		// Models <- Identifier
		//   .User
		//   .find()
		//   .exec(function() {
		//   // function body
		// });
		//
		// Looks for 'Models'
		var calleeNode = node.parent; // FunctionExpression
		var indent;

		if (calleeNode.parent &&
			(calleeNode.parent.type === "Property" ||
			calleeNode.parent.type === "ArrayExpression")) {
			// If function is part of array or object, comma can be put at left
			indent = getNodeIndent(calleeNode, false, false);
		} else {
			// If function is standalone, simple calculate indent
			indent = getNodeIndent(calleeNode);
		}

		if (calleeNode.parent.type === "CallExpression") {
			var calleeParent = calleeNode.parent;

			if (calleeNode.type !== "FunctionExpression" && calleeNode.type !== "ArrowFunctionExpression") {
				if (calleeParent && calleeParent.loc.start.line < node.loc.start.line) {
					indent = getNodeIndent(calleeParent);
				}
			} else {
				if (isArgBeforeCalleeNodeMultiline(calleeNode) &&
					calleeParent.callee.loc.start.line === calleeParent.callee.loc.end.line && !isNodeFirstInLine(calleeNode)) {
					indent = getNodeIndent(calleeParent);
				}
			}
		}

		// function body indent should be indent + indent size
		indent += indentSize;

		// check if the node is inside a variable
		var parentVarNode = getVariableDeclaratorNode(node);
		if (parentVarNode && isNodeInVarOnTop(node, parentVarNode)) {
			indent += indentSize * options.VariableDeclarator[parentVarNode.parent.kind];
		}

		if (node.body.length > 0) {
			checkNodesIndent(node.body, indent);
		}

		checkLastNodeLineIndent(node, indent - indentSize);
	}
function checkIndentInFunctionBlock(node) {

		// Search first caller in chain.
		// Ex.:
		//
		// Models <- Identifier
		//   .User
		//   .find()
		//   .exec(function() {
		//   // function body
		// });
		//
		// Looks for 'Models'
		var calleeNode = node.parent; // FunctionExpression
		var indent;

		if (calleeNode.parent &&
			(calleeNode.parent.type === "Property" ||
			calleeNode.parent.type === "ArrayExpression")) {
			// If function is part of array or object, comma can be put at left
			indent = getNodeIndent(calleeNode, false, false);
		} else {
			// If function is standalone, simple calculate indent
			indent = getNodeIndent(calleeNode);
		}

		if (calleeNode.parent.type === "CallExpression") {
			var calleeParent = calleeNode.parent;

			if (calleeNode.type !== "FunctionExpression" && calleeNode.type !== "ArrowFunctionExpression") {
				if (calleeParent && calleeParent.loc.start.line < node.loc.start.line) {
					indent = getNodeIndent(calleeParent);
				}
			} else {
				if (isArgBeforeCalleeNodeMultiline(calleeNode) &&
					calleeParent.callee.loc.start.line === calleeParent.callee.loc.end.line && !isNodeFirstInLine(calleeNode)) {
					indent = getNodeIndent(calleeParent);
				}
			}
		}

		// function body indent should be indent + indent size
		indent += indentSize;

		// check if the node is inside a variable
		var parentVarNode = getVariableDeclaratorNode(node);
		if (parentVarNode && isNodeInVarOnTop(node, parentVarNode)) {
			indent += indentSize * options.VariableDeclarator[parentVarNode.parent.kind];
		}

		if (node.body.length > 0) {
			checkNodesIndent(node.body, indent);
		}

		checkLastNodeLineIndent(node, indent - indentSize);
	}
Check indent for function block content
@param {ASTNode} node node to examine
@returns {void}