ฉันคุ้นเคยกับการที่คอมไพเลอร์บ่นเมื่อฉันทำอะไรโง่ ๆ เช่นการพิมพ์ชื่อตัวแปรผิด แต่ JavaScript มีนิสัยที่จะปล่อยให้สิ่งนี้ผ่านไป
มีเครื่องมือวิเคราะห์แบบคงที่สำหรับ JavaScript หรือไม่?
ฉันคุ้นเคยกับการที่คอมไพเลอร์บ่นเมื่อฉันทำอะไรโง่ ๆ เช่นการพิมพ์ชื่อตัวแปรผิด แต่ JavaScript มีนิสัยที่จะปล่อยให้สิ่งนี้ผ่านไป
มีเครื่องมือวิเคราะห์แบบคงที่สำหรับ JavaScript หรือไม่?
คำตอบ:
ฉันยอมรับว่า JSLint เป็นจุดเริ่มต้นที่ดีที่สุด โปรดทราบว่าJavaScript ผ้าสำลีแตกต่างจากJSLint ฉันขอแนะนำให้ตรวจสอบJSureซึ่งในการทดสอบแบบ จำกัด ของฉันทำได้ดีกว่าอย่างใดอย่างหนึ่งแม้ว่าจะมีขอบที่หยาบในการใช้งานก็ตาม - เวอร์ชัน Intel Mac เกิดข้อผิดพลาดในการเริ่มต้นสำหรับฉันแม้ว่าเวอร์ชัน PowerPC จะทำงานได้ดีแม้ใน Intel ก็ตาม และเวอร์ชัน Linux ก็ทำงานได้ดีเช่นกัน (ผู้พัฒนา Berke Durak กล่าวว่าเขาจะติดต่อกลับมาหาฉันเมื่อได้รับการแก้ไขแล้ว แต่ฉันไม่ได้รับการติดต่อจากเขา)
อย่าคาดหวังจากการวิเคราะห์แบบคงที่ของ JavaScript มากเท่าที่คุณจะได้รับจากตัวตรวจสอบ C ที่ดี ดังที่ Durak บอกกับฉันว่า“ การวิเคราะห์ที่ไม่สำคัญใด ๆ นั้นยากมากเนื่องจากลักษณะไดนามิกของ Javascript”
(ข้อผิดพลาดอื่น ๆ ที่คลุมเครือสำหรับ Mac เท่านั้นคราวนี้ด้วยวิดเจ็ต Konfabulator ของ JSLint: การลากไอคอนเอกสาร BBEdit ไปยังวิดเจ็ตจะย้ายเอกสารไปที่ถังขยะนักพัฒนา Douglas Crockford ไม่ได้ลองใช้วิดเจ็ตบน Mac)
10 สิงหาคม 2552: วันนี้ในการประชุมวิชาการวิเคราะห์แบบคงที่ Simon Holm Jensen ได้นำเสนอบทความเกี่ยวกับTAJS: Type Analyzer สำหรับ JavaScriptเขียนโดย Anders Møllerและ Peter Thiemann กระดาษไม่ได้กล่าวถึงเครื่องมือข้างต้น แต่ Jensen บอกฉันว่าเขาดูบางชิ้นแล้วไม่ประทับใจ รหัสสำหรับ TAJS ควรมีให้ในช่วงฤดูร้อนนี้
คำตอบที่อัปเดต 2017: ใช่ ใช้ ESLint http://eslint.org
นอกจากนี้ในการJSLint (ดังกล่าวแล้วในคำตอบแฟลชเชอริแดน ) และคอมไพเลอร์ปิด (ดังกล่าวก่อนหน้านี้ในคำตอบของ awhyte ) ฉันได้ยังมีอากาศมากได้รับประโยชน์จากการทำงานJSHintและPHP CodeSniffer ในปี 2012 เครื่องมือทั้งสี่เป็นโอเพ่นซอร์สฟรีและมีชุมชนนักพัฒนาขนาดใหญ่และกระตือรือร้นอยู่เบื้องหลังเครื่องมือเหล่านี้ แต่ละอย่างแตกต่างกันเล็กน้อย (และฉันคิดว่าเสริมกัน) ในประเภทของการตรวจสอบที่ดำเนินการ:
JSLintได้รับการออกแบบให้เป็นและยังคงเป็นเครื่องมือตัดขุยส่วนตัวของ Douglas Crockford มันมาพร้อมกับชุดกฎเริ่มต้นที่ยอดเยี่ยม - ของ Crockford เองซึ่งได้รับการอัปเดตอย่างต่อเนื่องในขณะที่เขายังคงเรียนรู้เกี่ยวกับ JavaScript และข้อผิดพลาดของมัน JSLint มีความเห็นเป็นอย่างมากและโดยทั่วไปแล้วสิ่งนี้ถูกมองว่าเป็นสิ่งที่ดี ดังนั้นจึงมี (โดยเจตนา) จำนวน จำกัด ที่คุณสามารถทำได้เพื่อกำหนดค่าหรือปิดใช้งานกฎแต่ละข้อ แต่อาจทำให้ยากที่จะใช้ JSLint กับรหัสเดิม
JSHintจะคล้ายกับ JSLint (ในความเป็นจริงมันเริ่มต้นชีวิตเป็น JSLint ส้อม) แต่มันเป็นเรื่องง่าย / ไปได้ที่จะกำหนดค่าหรือปิดใช้งานทั้งหมดของการตรวจสอบ JSLint ผ่านทางเลือกบรรทัดคำสั่งหรือผ่านทางไฟล์.jshintrc
โดยเฉพาะอย่างยิ่งผมเหมือนที่ผมสามารถบอก JSHint เพื่อรายงานทั้งหมดของข้อผิดพลาดในแฟ้มแม้ว่าจะมีหลายร้อยข้อผิดพลาด ในทางตรงกันข้ามแม้ว่า JSLint จะมีmaxerr
ตัวเลือกการกำหนดค่า แต่โดยทั่วไปจะประกันตัวค่อนข้างเร็วเมื่อพยายามประมวลผลไฟล์ที่มีข้อผิดพลาดจำนวนมาก
คอมไพเลอร์การปิดมีประโยชน์อย่างยิ่งหากโค้ดไม่รวบรวมด้วยการปิดคุณจะรู้สึกได้ว่าโค้ดดังกล่าวถูกบีบอย่างลึกซึ้งในลักษณะพื้นฐานบางประการ การรวบรวมการปิดอาจเป็นสิ่งที่ใกล้เคียงที่สุดที่มีอยู่ในโลก JS สำหรับการตรวจสอบไวยากรณ์ "ล่าม" เช่นphp -l
หรือruby -c
การปิดยังเตือนคุณเกี่ยวกับปัญหาที่อาจเกิดขึ้นเช่นพารามิเตอร์ที่ขาดหายไปและตัวแปรที่ไม่ได้ประกาศหรือกำหนดใหม่ หากคุณไม่เห็นคำเตือนที่คุณคาดหวังให้ลองเพิ่มระดับการเตือนโดยเรียกใช้การปิดด้วยตัวเลือก--warning_level VERBOSE
PHP CodeSniffer สามารถแยกวิเคราะห์ JavaScriptเช่นเดียวกับ PHP และ CSS เรือ CodeSniffer กับหลายมาตรฐานการเข้ารหัสที่แตกต่างกัน (พูดphpcs -i
จะเห็นพวกเขา) ซึ่งรวมถึง sniffs ที่มีประโยชน์มากมายสำหรับโค้ด JavaScript รวมทั้งการตรวจสอบกับโครงสร้างการควบคุมแบบอินไลน์และช่องว่างฟุ่มเฟือย
นี่คือรายการ sniffs JavaScript ที่มีอยู่ใน PHP CodeSniffer ในเวอร์ชัน 1.3.6 และนี่คือชุดกฎที่กำหนดเองที่จะช่วยให้คุณสามารถเรียกใช้ทั้งหมดได้ในครั้งเดียว การใช้ชุดกฎที่กำหนดเองทำให้ง่ายต่อการเลือกและเลือกกฎที่คุณต้องการใช้ และคุณยังสามารถเขียนกลิ่นของคุณเองได้หากต้องการบังคับใช้ "สไตล์บ้าน" ที่ไม่ได้รับการสนับสนุนนอกกรอบ Afaik CodeSniffer เป็นเครื่องมือเดียวในสี่ตัวที่กล่าวถึงในที่นี้ที่สนับสนุนการปรับแต่งและการสร้างกฎการวิเคราะห์แบบคงที่ใหม่ ข้อแม้ประการหนึ่ง: CodeSniffer ยังเป็นเครื่องมือที่ทำงานช้าที่สุดที่กล่าวถึง
คอมไพเลอร์ JS "ปิด" ของ Googleสร้างคำเตือนและข้อผิดพลาดที่กำหนดค่าได้ในเวลาคอมไพล์ พบตัวแปรและวิธีการที่สะกดผิดอย่างแน่นอนรวมถึงข้อผิดพลาดของ arity หากคุณยินดีที่จะเขียน JsDoc วิธีปิดก็สามารถทำข้อมูลประเภทต่างๆได้มากเช่นกัน
เครื่องมือ "Compressor" ของ YUI สามารถสร้างคำเตือนได้เช่นกัน แต่ยังไม่ได้ลองใช้
ฉันไม่ค่อยมีโชคกับ Aptana IDE ที่สร้างขึ้นจาก Eclipse แต่คนอื่นชอบ ดูการอภิปราย Stack Overflow ของ JS IDE
IntelliJ IDE ซึ่งไม่ฟรีล่าสุดที่ฉันตรวจสอบมีการสนับสนุน JS ที่ยอดเยี่ยมของ frickin จะตรวจจับและไฮไลต์ตัวแปรและวิธีการที่สะกดผิดขณะที่คุณพิมพ์และอื่น ๆ มีการเติมข้อความอัตโนมัติด้วย
โดยสรุป JSLint, JSHint, Plato, ESLint, Google Closure-Linter เป็นเครื่องมือที่มีอยู่ ฉันประสบปัญหาในการติดตั้งขณะลองใช้ Google Closure-Linter สำหรับ Windows แต่มีการกล่าวถึงในหน้าเว็บว่าการสนับสนุนสำหรับ Windows เป็นการทดลอง ฉันพบและลองใช้เครื่องมืออื่นที่ใช้งานได้ดี นี่คือลิงค์สำหรับมัน: http://esprima.org/
นอกจากนี้นี่คือลิงก์ github สำหรับเครื่องมือ Esprima: https://github.com/ariya/esprima
คุณสามารถดูเครื่องมือบางอย่างสำหรับการวิเคราะห์โค้ดแบบคงที่ JavaScript ได้ในWikiนี้
เครื่องมือในวิกิพีเดีย แต่ไม่ได้กล่าวถึงในบทความนี้เป็นDeepScan จุดเน้นคือการค้นหาข้อผิดพลาดรันไทม์และปัญหาด้านคุณภาพมากกว่าการเขียนโค้ดของ linters นอกจากนี้ยังครอบคลุมถึง TypeScript, React และ Vue.js
คุณสามารถทดลองใช้กับโครงการ GitHub ของคุณ
ฉันลองใช้ ESlint และพบว่าดี.. คุณยังสามารถเพิ่มกฎที่กำหนดเองได้ที่นั่น. นี่คือ github repo: https://github.com/nzakas/eslintและนี่คือคำแนะนำ: http: // www. nczonline.net/blog/2013/07/16/introducing-eslint/
ความปลอดภัยที่เน้นมากกว่ารายการวัตถุประสงค์ทั่วไปสามารถพบได้ใน Mozilla Wiki ที่การวิเคราะห์โค้ด Security / B2G / JavaScript
เอกสารนี้มีวัตถุประสงค์เพื่อรวบรวมเครื่องมือวิเคราะห์โค้ด JavaScript ที่เหมาะสำหรับรวมไว้ในโครงการ Mozilla ที่กำลังจะมาถึงหรือใช้งานภายใน
นอกจากนี้ยังมีผลิตภัณฑ์เชิงพาณิชย์อย่างน้อยหนึ่งผลิตภัณฑ์ที่วิเคราะห์ความปลอดภัย: Burp ได้รับความสามารถในการวิเคราะห์ JavaScript ใหม่
Burp รุ่นล่าสุดมีเอ็นจิ้นใหม่สำหรับการวิเคราะห์โค้ด JavaScript แบบคงที่ สิ่งนี้ทำให้ Burp Scanner สามารถรายงานช่องโหว่ใหม่ ๆ ได้แก่ :
- XSS ที่ใช้ DOM
- การฉีด JavaScript
- การฉีด SQL ฝั่งไคลเอ็นต์
- WebSocket หักหลัง
- การจัดการเส้นทางไฟล์ในเครื่อง
- การเปลี่ยนเส้นทางแบบเปิดตาม DOM
- การจัดการคุกกี้
- การจัดการส่วนหัวของคำขอ Ajax
- การปฏิเสธการให้บริการโดยใช้ DOM
- การจัดการข้อความเว็บ
- การจัดการการจัดเก็บ HTML5
ในขอบเขตการค้าCoverity Static Analysisรองรับการวิเคราะห์ JavaScript ตั้งแต่เวอร์ชัน 7.7 (กลางปี 2015) เกี่ยวกับคำถามเฉพาะของคุณเกี่ยวกับการพิมพ์ผิดโครงการสัตว์เลี้ยงของฉันที่ปรากฏในรุ่นล่าสุด (8.0 ต้นปี 2016) พบการพิมพ์ผิดในชื่อองค์ประกอบของโปรแกรม
ในฐานะผู้พัฒนาหลักในโครงการโปรดยอมรับปลั๊กไร้ยางอายของฉัน: แม้ว่าจะยังไม่โตเต็มที่เท่าการวิเคราะห์ C / C ++ ที่ได้รับการยกย่อง แต่การวิเคราะห์ JavaScript ของ Coverity ก็ใช้เอนจิ้นเดียวกันส่วนใหญ่โดยเน้นที่การค้นหาข้อบกพร่องที่มีมูลค่าสูงในระดับต่ำ อัตรารายงานข้อบกพร่องที่เป็นบวกเท็จ เรากำลังให้ความสำคัญกับการค้นหาข้อบกพร่องด้านความปลอดภัยใน JavaScript (และภาษาอื่น ๆ ) นอกเหนือจากการค้นหาข้อผิดพลาดในการเขียนโปรแกรมทั่วไป
ต่อไปนี้เป็นข้อผิดพลาดบางประการที่พบ (การพิมพ์ผิดถูกทิ้งไว้เป็นแบบฝึกหัดสำหรับผู้อ่านเพื่อเน้นว่าสามารถมองข้ามสิ่งเหล่านี้ได้ง่ายเพียงใด):
merge.js: (ลิงก์ที่เสถียร) (แก้ไขล่าสุด)
คำสั่ง -Package-query.js: (ลิงค์ที่เสถียร) (การแก้ไขล่าสุด)
series-pie-tests.js: (ลิงก์ที่เสถียร) (แก้ไขล่าสุด)
outline_case.js: (ลิงก์ที่เสถียร) (แก้ไขล่าสุด)
ฉันชอบJslintสำหรับสิ่งนี้ ...
Flowทำการวิเคราะห์แบบคงที่โดยมีและไม่มีคำอธิบายประกอบ
หากคุณต้องการคำอธิบายประกอบไวยากรณ์คือเข้ากันได้กับtypescript
ติดตั้งแพ็คเกจด้วย:
npm install --global flow-bin
นอกจากนี้ยังมีเครื่องมือบางอย่าง ลองดูที่gulp-flowtypeและบางทีSublimeLinter-flow
JSAnalyse เพิ่งเผยแพร่บน codeplex เป็นเครื่องมือที่วิเคราะห์การอ้างอิงระหว่างไฟล์จาวาสคริปต์ คุณยังสามารถกำหนดการอ้างอิงที่อนุญาตและ JSAnalysis ตรวจสอบว่าเป็นไปตามกฎที่กำหนดไว้หรือไม่ ที่ช่วยให้ติดตามเกี่ยวกับการพึ่งพาจาวาสคริปต์แม้ในโครงการขนาดใหญ่และมีสถาปัตยกรรมที่สะอาดตา
JSAnalyse สามารถดำเนินการเป็นเครื่องมือบรรทัดคำสั่งหรือกำหนดค่าผ่าน Visual Studio Layer Diagramm นอกจากนี้ยังง่ายต่อการรวมเข้ากับบิลด์ ด้วยการเช็คอินแบบ gated คุณสามารถควบคุมการอ้างอิงได้
SD ECMAScript CloneDRของเราเป็นเครื่องมือในการค้นหาสำเนาที่แน่นอนและใกล้พลาดของรหัสที่ซ้ำกันในฐานซอร์สโค้ด JavaScript ขนาดใหญ่
มันใช้ไวยากรณ์ของภาษาเพื่อเป็นแนวทางในการตรวจจับดังนั้นมันจะพบโคลนแม้ว่าจะมีการเปลี่ยนแปลงรูปแบบความคิดเห็นที่แทรก / ลบตัวแปรที่เปลี่ยนชื่อและแม้แต่คำสั่งแทรก / ลบบางส่วน
ไซต์นี้มี CloneDR ตัวอย่างที่รันบนไลบรารีการปิดของ Google
การเปิดเผยข้อมูลทั้งหมดฉันอยู่เบื้องหลังสิ่งนี้: http://www.toptensoftware.com/minimeซึ่งทำการลดขนาดการทำให้ยุ่งเหยิงและการตรวจสอบลักษณะผ้าสำลีที่สมเหตุสมผล