TL; DR:有没有办法识别违反CoffeeScript的@foo
参数命名的新1.9.0行为?它现在是非法的,并且不会引起警告/错误,在函数中使用裸foo
变量。
在CoffeeScript的1.9.0版本中声明:
更改了内部编译器变量生成的策略 名。请注意,这意味着
@example
函数参数为no 在函数体中作为裸example
变量可用的时间更长。
这意味着
class Animal
constructor: (@name) ->
console.log name
..会失败,默默地。即上述内容不会打印出新动物的名字。
新的正确解决方案是:
class Animal
constructor: (@name) ->
console.log @name
CoffeeLint没有抓住这一点。是否有任何已知的特技用于查找现在非法的裸参数使用?也许在生成的javascript上运行一个漂亮的脚本?
以下是2个关于此的链接:
答案 0 :(得分:3)
最简单的方法是使用较旧的coffee
版本。
如果不可能,您可以编译每个源文件,并通过eslint
检查no-undef
规则来运行该文件。您可以使用以下bash脚本执行此操作:
#!/bin/bash
FILES=$@
# https://nodejs.org/api/globals.html
# Object.keys(global).concat(['__dirname', '__filename']).join(',')
DEFINED_GLOBALS='ArrayBuffer,Int8Array,Uint8Array,Uint8ClampedArray,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array,DataView,global,process,GLOBAL,root,Buffer,setTimeout,setInterval,clearTimeout,clearInterval,setImmediate,clearImmediate,console,module,require,__dirname,__filename'
function compile() {
./node_modules/.bin/coffee --print $1
}
function lint() {
# checks only for undefined variables except DEFINED_GLOBALS
./node_modules/.bin/eslint\
--stdin --no-color\
--global $DEFINED_GLOBALS\
--reset --rule 'no-undef: [true]'
}
function main() {
for file in $FILES; do
local problems=`compile $file | lint`
if [[ $problems ]]; then
echo -e "=== $file\n$problems\n\n"
fi
done
}
main
将其另存为check.sh
并按以下方式运行:
chmod u+x ./check.sh
npm install coffee-script eslint
find . -name "*.coffee" | xargs ./check.sh
答案 1 :(得分:1)
我已经制作了一个CoffeeScript编译器的mod,console.error
每次出现错误@
:https://api.jquery.com/slice/
安装它:
npm install lydell/coffee-script#1.8-at-params-warn
要检查文件是否缺少@
,请运行以下示例:
./node_modules/.bin/coffee -p file-to-check.coffee >/dev/null
以上内容将记录需要@
的每个变量的文件路径,行号,列号和变量名称。