willowtreeapps / wist

A linter for BrightScript
Apache License 2.0
43 stars 11 forks source link

Add rule: no boolean type coersion #97

Open cdthompson opened 6 years ago

cdthompson commented 6 years ago

boolean type coersion is inconsistent. A rule to detect this would be helpful.

Motivation:

Brightscript Debugger> a = invalid

Brightscript Debugger> if a: print "hi": end if
Type Mismatch. (runtime error &h18) in $LIVECOMPILE(8)

Brightscript Debugger> a = "true"

Brightscript Debugger> if a: print "hi": end if
Type Mismatch. (runtime error &h18) in $LIVECOMPILE(10)

Brightscript Debugger> a = true

Brightscript Debugger> if a: print "hi": end if
hi

Brightscript Debugger> a = 1

Brightscript Debugger> if a: print "hi": end if
hi

Improved style allows for invalid without crashes (though string vs. boolean still crashes)

Brightscript Debugger> a = invalid

Brightscript Debugger> if a = true: print "hi": end if

Brightscript Debugger> a = "true"

Brightscript Debugger> if a = true: print "hi": end if
Type Mismatch. (runtime error &h18) in $LIVECOMPILE(18)

Brightscript Debugger> a = 1

Brightscript Debugger> if a = true: print "hi": end if
hi
nishtahir commented 6 years ago

Looks like this is something we should check as part of the main parser. Similar to how we check for duplicate function definitions. With limited information - we might only be able to do this for some types.