coffeelint-multiple-callback
Version:
Coffeelint rule that checks for callbacks being called multiple times
234 lines (176 loc) • 3.07 kB
text/coffeescript
some_require = require('./thing')()
caller = ()->
return
caller2 = (cb)-> # HIT
return
caller2()
# var defs to prevent undefined errors
stuff = {}
async = require 'async'
exports.getPoolConnection = (good_callback) ->
# min=0 max=0
stuff.asdf.getConnection (err, connection) ->
# min=0 max=0
if err
# min=0 max=0
good_callback err
# min=1 max=1, okay
return
# min=1 max=0
good_callback null, connection
# min=2 max=1, okay
return
# min=2 max=1, okay
return
exports.getBadPoolConnection = (bad_callback) ->
# min=0 max=0
stuff.getConnection (err, connection) ->
# min=0 max=0
if err
# min=0 max=0
bad_callback err
# min=1 max=1
# min=1 max=1
bad_callback null, connection # HIT
# min=2 max=2 BAD
return
# min=2 max=1, BAD
return
badFunc = (err, a_cb)->
a_cb err
a_cb err # HIT
return
badFunc2 = (err, a_cb)->
a_cb err
a_cb err # HIT
return
badFunc()
badFunc3 = (cb)-> # HIT
return
badFunc3()
goodIf = (err, cb)->
if err
cb err
else
cb null
return
goodIf()
goodIf2 = (err, cb)->
if err
cb err
return
cb null
return
goodIf2()
bad = (cb)->
cb()
cb() # HIT
cb()
cb()
cb()
return
bad()
badIf = (err, cb)->
if err
cb err
cb null # HIT
return
badIf()
# when 'CodeFragment', 'Base', 'Block', 'Literal', 'Undefined', 'Null', 'Bool', 'Return', 'Value', 'Comment', 'Call', 'Extends', 'Access' ,'Index', 'Range', 'Slice', 'Obj', 'Arr', 'Class', 'Assign', 'Code', 'Param', 'Splat', 'Expansion', 'While', 'Op', 'In', 'Try', 'Throw' ,'Existence', 'Parens', 'For', 'Switch', 'If'
goodSwitch = (thing, cb)->
switch thing
when 1
cb 1
when 2
cb 2
when 3
cb 3
when 4
cb 4
when 5,6
cb 5
else
cb 9
return
goodSwitch()
badSwitch = (thing, cb)->
switch thing
when 1
cb 1
when 2
cb 2 # HIT
when 3
cb 3
when 4
cb 4
when 5,6
cb 5
else
cb 9
cb 8
return
badSwitch()
# TODO: this fails. put effort into fixing it....
#factorial = (n) ->
# if n < 0
# return 0
#
# if n is 0 or n is 1
# return 1
#
# return n * factorial(n - 1)
six = 6
class A
one: 1
: 2
three = 3
= 4
five()
six
9
constructor: (bad_cb)-> # HIT
return
methodOne: (bad_cb2)-> # HIT
return 1
: (bad_cb3)-> # HIT
return 2
methodThree = (bad_cb4)-> # HIT
return 3
= (bad_cb5)-> # HIT
return 4
class B extends A
constructor: () ->
super 'B'
return
goodTry = (cb)->
a = 0
try
a = 1 # all of this
catch e
a = 2 # all of this
cb()
return
finally
a = 3 # all of this
a = 4
cb()
return
goodTry()
badTry = (bad_cb)->
try
bad_cb()
catch e
stuff()
return
bad_cb() # HIT
return
badTry()
goodFunc = (cb)->
someFunc cb, 123
return
class A
class B extends A
thing: (callback)->
# superb callback
super callback
return