मैं अपने कंपाइलर की शिकायत करने के लिए उपयोग किया जाता हूं जब मैं एक चर नाम पर टाइपो की तरह कुछ बेवकूफ करता हूं, लेकिन जावास्क्रिप्ट को इस पास को देने की आदत है।
क्या जावास्क्रिप्ट के लिए कोई स्थिर विश्लेषण उपकरण हैं?
मैं अपने कंपाइलर की शिकायत करने के लिए उपयोग किया जाता हूं जब मैं एक चर नाम पर टाइपो की तरह कुछ बेवकूफ करता हूं, लेकिन जावास्क्रिप्ट को इस पास को देने की आदत है।
क्या जावास्क्रिप्ट के लिए कोई स्थिर विश्लेषण उपकरण हैं?
जवाबों:
मैं इस बात से सहमत हूं कि JSLint शुरू करने के लिए सबसे अच्छी जगह है। ध्यान दें कि जावास्क्रिप्ट लिंट JSLint से अलग है । मैं JSure की जाँच करने का भी सुझाव देता हूँ, जो कि मेरे सीमित परीक्षण में दोनों में से बेहतर था, हालाँकि कार्यान्वयन में कुछ खुरदुरे किनारों के साथ- Intel Mac संस्करण मेरे लिए स्टार्टअप पर क्रैश हो गया, हालाँकि PowerPC संस्करण इंटेल पर भी ठीक चला, और लिनक्स संस्करण के रूप में अच्छी तरह से भाग गया। (डेवलपर, बर्क ड्यूरक ने कहा कि जब यह तय हो गया तो वह मेरे पास वापस आ गया, लेकिन मैंने उससे नहीं सुना।)
जावास्क्रिप्ट स्टैटिक विश्लेषण से उतनी उम्मीद न करें, जितना आपको एक अच्छे सी चेकर से मिलता है। जैसा कि दुरक ने मुझसे कहा, "जावास्क्रिप्ट के गतिशील प्रकृति के कारण कोई भी गैर-तुच्छ विश्लेषण बहुत मुश्किल है।"
(एक और भी अधिक अस्पष्ट मैक-केवल बग, इस बार JSLint के कोनफैब्यूलेटर विजेट के साथ: विजेट पर एक BBEdit दस्तावेज़ आइकन खींचकर दस्तावेज़ को ट्रैश में ले जाता है। डेवलपर, डगलस क्रॉकफ़ोर्ड, ने मैक पर विजेट की कोशिश नहीं की थी।)
10 अगस्त 2009: आज स्टैटिक एनालिसिस सिम्पोजियम में , साइमन होल्म जेन्सेन ने TAJS: टाइप एनालाइज़र फॉर जावास्क्रिप्ट पर एक पेपर प्रस्तुत किया , जो एंडर्स मोलर और पीटर थिएमैन के साथ लिखा गया था। कागज में उपरोक्त उपकरणों का उल्लेख नहीं है, लेकिन जेन्सेन ने मुझे बताया कि वह उनमें से कुछ को देखता था और प्रभावित नहीं होता था। इस गर्मियों में TAJS का कोड कुछ समय के लिए उपलब्ध होना चाहिए।
अद्यतन उत्तर, 2017: हां। ESLint का उपयोग करें। http://eslint.org
के अलावा JSLint (पहले से ही में उल्लेख किया फ्लैश शेरिडन का जवाब ) और बंद संकलक (पहले में उल्लेख किया awhyte का जवाब ) मैं है भी चलने से लाभ का एक बहुत कुछ मिल गया है JSHint और पीएचपी CodeSniffer । 2012 तक, सभी चार उपकरण मुक्त स्रोत हैं और उनके पीछे एक बड़ा और सक्रिय डेवलपर समुदाय है। वे जिस तरह के चेक करते हैं, उनमें से प्रत्येक थोड़ा अलग होता है (और मुझे लगता है, पूरक):
JSLint को डिजाइन किया गया था, और अभी भी डगलस क्रॉकफोर्ड का व्यक्तिगत लाइनिंग उपकरण है। यह एक महान डिफ़ॉल्ट नियम के साथ जहाज करता है - क्रॉकफोर्ड का स्वयं, लगातार अपडेट किया जाता है क्योंकि वह जावास्क्रिप्ट और इसके नुकसान के बारे में सीखना जारी रखता है । जेएसएलआईएनट की राय बहुत अधिक है और इसे आम तौर पर एक अच्छी चीज के रूप में देखा जाता है। इस प्रकार (जानबूझकर) एक सीमित राशि है जिसे आप व्यक्तिगत नियमों को कॉन्फ़िगर या अक्षम करने के लिए कर सकते हैं। लेकिन इससे JSLint को विरासत कोड में लागू करना कठिन हो सकता है।
JSHint , JSLint से बहुत मिलता-जुलता है (वास्तव में यह JSLint कांटा के रूप में जीवन शुरू किया था ), लेकिन कमांड लाइन विकल्प या फ़ाइल के माध्यम से JSLint के सभी चेक को कॉन्फ़िगर या अक्षम करना आसान / संभव है ।.jshintrc
मुझे विशेष रूप से पसंद है कि मैं JSHint को एक फ़ाइल में सभी त्रुटियों की रिपोर्ट करने के लिए कह सकता हूं , भले ही सैकड़ों त्रुटियां हों। इसके विपरीत, हालांकि JSLint के पास एक maxerr
कॉन्फ़िगरेशन विकल्प है, यह आम तौर पर उन फ़ाइलों को संसाधित करने का प्रयास करते समय अपेक्षाकृत जल्दी बाहर निकलता है जिनमें बड़ी संख्या में त्रुटियां होती हैं।
इसमें क्लोजर कंपाइलर बेहद उपयोगी है, अगर कोड क्लोजर के साथ संकलित नहीं होगा , तो आप बहुत निश्चित रूप से कह सकते हैं कि कोड किसी मूलभूत तरीके से गहराई से लगाया गया है। क्लोजर संकलन संभवतः निकटतम चीज है जो जेएस दुनिया में "इंटरप्रेटर" सिंटैक्स चेक की तरह है php -l
याruby -c
क्लोजर आपको संभावित मुद्दों जैसे कि लापता पैरामीटर और अघोषित या पुनर्परिभाषित चर के बारे में चेतावनी देता है । यदि आप ऐसी चेतावनियों को नहीं देख रहे हैं, जिसकी आप अपेक्षा करते हैं, तो बंद करने के विकल्प के साथ चेतावनी को बढ़ाकर चेतावनी स्तर बढ़ाएँ--warning_level VERBOSE
PHP CodeSniffer जावास्क्रिप्ट को PHP और CSS को भी पार्स कर सकता है । कई अलग-अलग कोडिंग मानकों वाले कोडस्निफर जहाज, ( phpcs -i
उन्हें देखने के लिए कहते हैं) जिसमें जावास्क्रिप्ट कोड के लिए कई उपयोगी सूँघने शामिल हैं जिनमें इनलाइन नियंत्रण संरचनाओं और शानदार फ़्लिपस्पेस के खिलाफ चेक शामिल हैं ।
पीएचपी कोडस्निफर में उपलब्ध जावास्क्रिप्ट स्निफ की एक सूची संस्करण 1.3.6 के रूप में दी गई है और यहां एक कस्टम नियम है जो आपको उन सभी को एक साथ चलाने की अनुमति देगा। कस्टम नियमों का उपयोग करना, उन नियमों को चुनना और चुनना आसान है जिन्हें आप लागू करना चाहते हैं। और यदि आप किसी विशेष "हाउस स्टाइल" को लागू करना चाहते हैं, तो आप अपने स्वयं के स्निफ भी लिख सकते हैं, जो बॉक्स से बाहर समर्थित नहीं है। Afaik CodeSniffer यहां वर्णित चार का एकमात्र उपकरण है जो नए स्थिर विश्लेषण नियमों के अनुकूलन और निर्माण का समर्थन करता है। एक चेतावनी हालांकि: कोडस्निफर भी बताए गए किसी भी उपकरण का सबसे धीमा चल रहा है।
Google का "बंद" जेएस संकलक विन्यास-चेतावनी और संकलन-समय पर त्रुटियों का उत्पादन करता है। यह निश्चित रूप से गलत वर्तनी वाले चर और तरीके, प्लस एरिटी गलतियों को ढूंढता है। यदि आप JsDoc को क्लोजर तरीके से लिखने के लिए तैयार हैं, तो यह टाइप जानकारी के साथ भी बहुत कुछ कर सकता है।
YUI "कंप्रेसर" उपकरण चेतावनी भी उत्पन्न कर सकता है, लेकिन अभी तक इसकी कोशिश नहीं की है।
मुझे ग्रहण पर बनी अप्टाना आईडीई के साथ ज्यादा कुछ नहीं मिला है, लेकिन अन्य लोग इसे पसंद करते हैं। जेएस आईडीई की स्टैक ओवरफ्लो चर्चा देखें।
IntelliJ IDE, जो अंतिम बार मैंने जाँच नहीं की है, में फ्रिकिन का उत्कृष्ट JS समर्थन है। यह आपके द्वारा टाइप किए गए, और अधिक प्रकार के गलत संस्करण और विधियों का पता लगाएगा। यह स्वतः पूर्ण हो गया है, भी।
सारांश में, JSLint, JSHint, प्लेटो, ESLint, Google क्लोजर-लाइनर उपलब्ध उपकरण हैं। विंडोज के लिए Google क्लोजर-लाइनर को आज़माते समय मुझे इंस्टॉलेशन समस्याओं का सामना करना पड़ा। लेकिन, यह वेब पेज पर उल्लेख करता है कि विंडोज के लिए इसका समर्थन प्रयोगात्मक है। मैंने एक और उपकरण ढूंढा और आजमाया जो अच्छी तरह से काम करता है। यहाँ इसके लिए लिंक है: http://esprima.org/
इसके अलावा, यह उपकरण एस्प्रिमा: https://github.com/ariya/esprima के लिए गीथब लिंक है
आप इस विकी में जावास्क्रिप्ट स्थिर कोड विश्लेषण के लिए कुछ उपकरण देख सकते हैं ।
विकी में एक उपकरण, लेकिन इस पोस्ट में उल्लेख नहीं किया गया है, डीपस्कैन है । इसका फोकस लिंटर की कॉन्वेंटिंग के बजाय रनटाइम एरर और क्वॉलिटी इश्यू ढूंढना है। इसमें टाइपस्क्रिप्ट, रिएक्ट और वी.यू.जे भी शामिल हैं।
आप इसे अपने GitHub प्रोजेक्ट के लिए आज़मा सकते हैं।
मैंने ESlint की कोशिश की और इसे अच्छा पाया..आप वहां भी कस्टम नियम जोड़ सकते हैं..जहाँ github repo है: https://github.com/nzakas/eslint और यहाँ इसका परिचय है: http: // www। nczonline.net/blog/2013/07/16/introducing-eslint/
सामान्य प्रयोजन सूची की तुलना में अधिक सुरक्षा को सुरक्षा / बी 2 जी / जावास्क्रिप्ट कोड विश्लेषण में मोज़िला विकी पर पाया जा सकता है
इस दस्तावेज़ का उद्देश्य जावास्क्रिप्ट कोड विश्लेषण उपकरणों को इकट्ठा करना है जो कि मोज़िला परियोजनाओं में आने या आंतरिक उपयोग के लिए उपयुक्त हैं।
इसके अलावा कम से कम एक वाणिज्यिक उत्पाद है जो सुरक्षा विश्लेषण करता है: बर्प को नई जावास्क्रिप्ट विश्लेषण क्षमताएं मिलती हैं
बर्प की नवीनतम रिलीज़ में जावास्क्रिप्ट कोड के स्थिर विश्लेषण के लिए एक नया इंजन शामिल है। यह बर्प स्कैनर को नई कमजोरियों की एक श्रृंखला की रिपोर्ट करने में सक्षम बनाता है, जिसमें शामिल हैं:
- DOM- आधारित XSS
- जावास्क्रिप्ट इंजेक्शन
- क्लाइंट-साइड SQL इंजेक्शन
- WebSocket अपहरण
- स्थानीय फ़ाइल पथ हेरफेर
- DOM- आधारित ओपन रिडायरेक्शन
- कुकी हेरफेर
- अजाक्स अनुरोध हैडर हेरफेर
- डोम-आधारित सेवा से वंचित
- वेब संदेश में हेरफेर
- HTML5 संग्रहण हेरफेर
वाणिज्यिक दायरे में, आवरण स्थैतिक विश्लेषण , संस्करण 7.7 (मध्य 2015) के रूप में जावास्क्रिप्ट के विश्लेषण का समर्थन करता है। टाइपोस के बारे में आपकी विशिष्ट पूछताछ के बारे में, नवीनतम रिलीज़ (8.0, 2016 की शुरुआत) में प्रदर्शित होने वाली मेरी पालतू परियोजना प्रोग्राम तत्वों के नाम से टाइपोस ढूंढती है।
प्रोजेक्ट के मुख्य डेवलपर के रूप में, कृपया मेरे बेशर्म प्लग को स्वीकार करें: हालांकि अभी तक परिपक्व सी / सी ++ विश्लेषण के रूप में परिपक्व नहीं है , लेकिन कवरेज के जावास्क्रिप्ट विश्लेषण में एक ही इंजन के अधिकांश हिस्से हैं, जिसमें कम मूल्य के साथ उच्च-मूल्य के दोषों को खोजने पर ध्यान केंद्रित किया गया है। झूठी सकारात्मक दोष रिपोर्ट की दर। हम सामान्य प्रोग्रामिंग त्रुटियों को खोजने के अलावा, जावास्क्रिप्ट (और अन्य भाषाओं) में सुरक्षा दोषों पर अपना ध्यान केंद्रित कर रहे हैं।
अब, यहां कुछ टाइपो मिलते हैं (सटीक टाइपो को पाठक के लिए एक अभ्यास के रूप में छोड़ दिया जाता है, इस बात पर जोर देने के लिए कि इन्हें कितनी आसानी से अनदेखा किया जा सकता है):
merge.js: (स्थिर लिंक) (नवीनतम संशोधन)
आदेश-संकुल-query.js: (स्थिर लिंक) (नवीनतम संशोधन)
श्रृंखला-पाई-परीक्षण। js: (स्थिर लिंक) (नवीनतम संशोधन)
outline_case.js: (स्थिर लिंक) (नवीनतम संशोधन)
मुझे इस तरह की चीज़ के लिए Jslint पसंद है ...
प्रवाह एनोटेशन के साथ और बिना स्थिर विश्लेषण करता है।
यदि आपको एनोटेशन की आवश्यकता है, तो सिंटैक्स टाइपस्क्रिप्ट के लिए अनुकूल है ।
के साथ पैकेज स्थापित करें :
npm install --global flow-bin
कुछ टूलींग भी है। पर एक नज़र डालें घूंट-flowtype और शायद SublimeLinter प्रवाह
JSAnalyse अभी कोडप्लेक्स पर प्रकाशित हुआ है। यह एक उपकरण है जो जावास्क्रिप्ट फ़ाइलों के बीच निर्भरता का विश्लेषण करता है। आप अनुमत आश्रितों और जेएसएनालिसिस जांचों को भी परिभाषित कर सकते हैं कि परिभाषित नियम पूरे हुए हैं या नहीं। यह बड़ी परियोजनाओं में भी जावास्क्रिप्ट निर्भरता के बारे में नज़र रखने की अनुमति देता है और एक स्वच्छ वास्तुकला है।
JSAnalyse को कमांड लाइन टूल के रूप में निष्पादित किया जा सकता है या विज़ुअल स्टूडियो लेयर डायग्राम के माध्यम से कॉन्फ़िगर किया जा सकता है। बिल्ड में एकीकृत करना भी आसान है। गेटेड चेक-इन से आप निर्भरता को नियंत्रण में रख सकते हैं।
हमारे SD ECMAScript क्लोन क्लोन बड़े जावास्क्रिप्ट स्रोत कोड आधारों पर डुप्लिकेट कोड की सटीक और निकट-मिस प्रतियां खोजने के लिए एक उपकरण है।
यह पता लगाने में मार्गदर्शन करने के लिए भाषा सिंटैक्स का उपयोग करता है, इसलिए यह प्रारूप परिवर्तन, सम्मिलित / हटाए गए टिप्पणियों, नामांकित चर और यहां तक कि कुछ सम्मिलित / हटाए गए बयानों के बावजूद क्लोन प्राप्त करेगा।
साइट में Google के क्लोजर लाइब्रेरी पर एक नमूना CloneDR रन है।
पूर्ण प्रकटीकरण, मैं इसके पीछे हूं: http://www.toptensoftware.com/minime, जो मिनिफिकेशन, ऑबफ्यूजेशन और लिंट स्टाइल चेक का एक उचित सेट करता है।