如何在代码中找到CoffeeScript 1.9.0的更改案例?

时间:2015-03-21 19:36:19

标签: parameters error-handling coffeescript

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个关于此的链接:

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

以上内容将记录需要@的每个变量的文件路径,行号,列号和变量名称。