ฉันจะค้นหากรณีของ CoffeeScript 1.9.0 ที่ทำลายการเปลี่ยนแปลงในโค้ดของฉันได้อย่างไร

TL; DR: มีวิธีใดบ้างในการระบุการละเมิดพฤติกรรม 1.9.0 ใหม่ของ CoffeeScript สำหรับการตั้งชื่อพารามิเตอร์ @foo ขณะนี้เป็นสิ่งผิดกฎหมาย และไม่ก่อให้เกิดคำเตือน/ข้อผิดพลาด ในการใช้ตัวแปร foo เปล่าในฟังก์ชัน

ใน CoffeeScript เวอร์ชัน 1.9.0 ระบุไว้:

เปลี่ยนกลยุทธ์สำหรับการสร้างชื่อตัวแปรคอมไพเลอร์ภายใน โปรดทราบว่านี่หมายความว่าพารามิเตอร์ฟังก์ชัน @example จะไม่สามารถใช้เป็นตัวแปร example เปล่าภายในเนื้อหาของฟังก์ชันได้อีกต่อไป

นี่หมายความว่า

class Animal
  constructor: (@name) ->
    console.log name

..จะล้มเหลวอย่างเงียบๆ กล่าวคือข้างต้นจะไม่พิมพ์ชื่อสัตว์ตัวใหม่

วิธีแก้ไขใหม่ที่ถูกต้องคือ:

class Animal
  constructor: (@name) ->
    console.log @name

CoffeeLint ไม่เข้าใจสิ่งนี้ มีการแสดงความสามารถใด ๆ ในการค้นหาการใช้พารามิเตอร์เปลือยที่ผิดกฎหมายในขณะนี้หรือไม่? อาจเป็นสคริปต์ที่ดีที่ทำงานบนจาวาสคริปต์ที่สร้างขึ้นใช่ไหม

นี่คือ 2 ลิงค์เกี่ยวกับเรื่องนี้:


person backspaces    schedule 21.03.2015    source แหล่งที่มา


คำตอบ (2)


สิ่งที่ง่ายที่สุดคือใช้ coffee เวอร์ชันเก่ากว่า

ในกรณีที่เป็นไปไม่ได้ คุณสามารถคอมไพล์ไฟล์ต้นฉบับทุกไฟล์และเรียกใช้ผ่าน eslint ตรวจสอบกฎ no-undef คุณสามารถทำได้ด้วยสคริปต์ทุบตีต่อไปนี้:

#!/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
person Aleksei Zabrodskii    schedule 24.03.2015
comment
นั่นเป็นแนวคิดที่ดี โดยพื้นฐานแล้วให้จับได้ว่าข้อผิดพลาดจะเกิดขึ้นที่ใด ฉันไม่ได้ใช้สิ่งนั้น แต่ฉันเขียนสคริปต์ทุบตีแทนเพื่อค้นหาตำแหน่งทั้งหมดที่เมธอดใช้สไตล์ @param จากนั้นพบ 4 ตำแหน่งที่ฉันใช้พารามิเตอร์เปล่า แต่ถ้าฉันพบปัญหาเพิ่มเติม ฉันจะลองความคิดของคุณ ขอบคุณ! - person backspaces; 24.03.2015
comment
โปรดทราบว่าฉันได้ย้ายจาก CoffeeScript ไปเป็น es6/jspm แล้ว โคตรจะชอบเลย - person backspaces; 30.08.2015

ฉันได้สร้าง mod ของคอมไพเลอร์ CoffeeScript ที่ console.errors แต่ละครั้งที่คุณพลาด @: https://github.com/lydell/coffee-script/tree/1.8-at-params-warn

วิธีติดตั้ง:

npm install lydell/coffee-script#1.8-at-params-warn

หากต้องการตรวจสอบไฟล์ว่า @s หายไป ให้เรียกใช้ตัวอย่าง:

./node_modules/.bin/coffee -p file-to-check.coffee >/dev/null

ข้อมูลข้างต้นจะบันทึกเส้นทางไฟล์ หมายเลขบรรทัด หมายเลขคอลัมน์ และชื่อตัวแปรสำหรับตัวแปรแต่ละตัวที่ต้องการ @

person lydell    schedule 30.08.2015