coffeelint
Version:
Lint your CoffeeScript
43 lines (34 loc) • 1.41 kB
text/coffeescript
any = (arr, test) -> arr.reduce ((res, elt) -> res or test elt), false
module.exports = class NoUnnecessaryFatArrows
rule:
name: 'no_unnecessary_fat_arrows'
level: 'warn'
message: 'Unnecessary fat arrow'
description: """
Disallows defining functions with fat arrows when `this`
is not used within the function.
"""
lintAST: (node, ) ->
node
undefined
lintNode: (node) ->
if ( node) and (not node)
error = .createError
lineNumber: node.locationData.first_line + 1
.push error
node.eachChild (child) => child
isCode: (node) -> .getNodeName(node) is 'Code'
isFatArrowCode: (node) -> and node.bound
isValue: (node) -> .getNodeName(node) is 'Value'
isThis: (node) =>
and node.base.value is 'this'
needsFatArrow: (node) =>
and (
any(node.params, (param) => param.contains()?) or
node.body.contains()? or
node.body.contains((child) =>
unless .getNodeName(child)
child.isSuper? and child.isSuper
else
and )?
)