Bir değişken adı üzerinde yazım hatası gibi aptalca bir şey yaptığımda derleyicimin şikayet etmesine alışkınım, ancak JavaScript'in bunu geçmesine izin verme alışkanlığı var.
JavaScript için herhangi bir statik analiz aracı var mı?
Bir değişken adı üzerinde yazım hatası gibi aptalca bir şey yaptığımda derleyicimin şikayet etmesine alışkınım, ancak JavaScript'in bunu geçmesine izin verme alışkanlığı var.
JavaScript için herhangi bir statik analiz aracı var mı?
Yanıtlar:
JSLint'in başlamak için en iyi yer olduğuna katılıyorum. JavaScript Lint'in JSLint'ten farklı olduğunu unutmayın . JSure'a göz atmanızı da öneririm , benim sınırlı her ikisinden de daha iyi sonuç veren , ancak uygulamada bazı var — Intel Mac sürümü benim için başlangıçta çöktü, ancak PowerPC sürümü Intel'de bile iyi çalışıyordu. ve Linux sürümü de iyi çalıştı. (Geliştirici Berke Durak, bu düzeltildiğinde bana geri döneceğini söyledi, ancak ondan haber alamadım.)
İyi bir C denetleyicisinden elde ettiğiniz kadar JavaScript statik analizinden beklemeyin. Durak'ın bana söylediği gibi, "Javascript'in dinamik yapısı nedeniyle önemsiz olmayan herhangi bir analiz çok zordur."
(Bu kez JSLint'in Konfabulator widget'ıyla ilgili, daha da belirsiz olan Mac'e özgü başka bir hata: BBEdit belgesi simgesini widget'a sürüklemek, dokümanı çöp kutusuna taşır. Geliştirici Douglas Crockford, widget'ı bir Mac'te denememişti.)
10 Ağustos 2009: Bugün Statik Analiz Sempozyumunda Simon Holm Jensen , Anders Møller ve Peter Thiemann ile yazılan , TAJS: JavaScript için Tip Analizcisi üzerine bir makale sundu . Gazete yukarıdaki araçlardan bahsetmiyor, ancak Jensen bana bazılarına baktığını ve etkilenmediğini söyledi. TAJS kodunun bu yaz bir ara mevcut olması gerekir.
GÜNCEL CEVAP, 2017: Evet. ESLint kullanın. http://eslint.org
Ek olarak jslint (zaten bahsedilen Flaş Sheridan'ın cevap ) ve Kapanış derleyici (daha önce belirtilen awhyte cevabı ben de çalışmasını yararına bir sürü aldık) genel JSHint ve PHP CodeSniffer . 2012 itibariyle, dört aracın tümü ücretsiz açık kaynaklıdır ve arkasında büyük ve aktif bir geliştirici topluluğu vardır. Her biri yaptıkları kontrol türleri açısından biraz farklı (ve bence tamamlayıcı):
JSLint , Douglas Crockford'un kişisel linting aracı olarak tasarlandı ve hala öyle. Bir ile gemileri büyük bir varsayılan kural takım - Crockford en, kendi sürekli güncellenen o kadar öğrenmeye devam JavaScript ve tuzaklar hakkında. JSLint oldukça kararlı ve bu genellikle iyi bir şey olarak görülüyor. Bu nedenle , bireysel kuralları yapılandırmak veya devre dışı bırakmak için yapabileceğiniz (kasıtlı olarak) sınırlı bir miktar vardır . Ancak bu, JSLint'in eski koda uygulanmasını zorlaştırabilir.
JSHint , JSLint'e çok benzer (aslında JSLint fork olarak başladı ), ancak JSLint'in tüm kontrollerini komut satırı seçenekleri veya bir dosya aracılığıyla yapılandırmak veya devre dışı bırakmak daha kolay / mümkündür..jshintrc
.
JSHint'e yüzlerce hata olsa bile bir dosyadaki tüm hataları rapor etmesini söyleyebilirim . Aksine, JSLint'in bir maxerr
yapılandırma seçeneği olmasına rağmen , çok sayıda hata içeren dosyaları işlemeye çalışırken genellikle nispeten erken kurtarır.
Kapatma derleyici kod ise, bu son derece yararlıdır olmaz Kapanması ile derlemek, çok kesin eminler kod adı geçen edebilirsiniz edilir derinden bazı temel yönler hortumlu. Kapanış derlemesi, muhtemelen JS dünyasında, "yorumlayıcı" sözdizimi kontrolüne en yakın şeydir php -l
veyaruby -c
Closure ayrıca , eksik parametreler ve bildirilmemiş veya yeniden tanımlanmış değişkenler gibi olası sorunlar hakkında sizi uyarır . Beklediğiniz uyarıları görmüyorsanız, bir seçenekle Kapatmayı çağırarak uyarı düzeyini artırmayı deneyin.--warning_level VERBOSE
PHP CodeSniffer , JavaScript'in yanı sıra PHP ve CSS'yi ayrıştırabilir . CodeSniffer, satır içi kontrol yapılarına ve gereksiz boşluklaraphpcs -i
karşı kontroller de dahil olmak üzere JavaScript kodu için birçok yararlı koklama içeren birkaç farklı kodlama standardıyla birlikte gelir ( bunları görmek için) .
Burada, 1.3.6 sürümünden itibaren PHP CodeSniffer'da bulunan JavaScript koklamalarının bir listesi ve burada hepsini aynı anda çalıştırmanıza izin verecek özel bir kural seti verilmiştir. Özel kural kümelerini kullanarak, uygulamak istediğiniz kuralları seçmek ve seçmek kolaydır . Ayrıca , kutunun dışında desteklenmeyen belirli bir "ev tarzını" uygulamak istiyorsanız , kendi koklamalarınızı bile yazabilirsiniz . Afaik CodeSniffer, yeni statik analiz kurallarının özelleştirilmesini ve oluşturulmasını destekleyen, burada bahsedilen dört araçtan tek araçtır. Yine de bir uyarı: CodeSniffer, bahsedilen araçların herhangi birinin en yavaş çalışmasıdır.
Google'ın "Closure" JS derleyicisi , derleme sırasında yapılandırılabilir uyarılar ve hatalar üretir. Kesinlikle yanlış yazılmış değişkenleri ve yöntemleri ve artik hataları bulur. JsDoc'u Kapanış yolu ile yazmaya istekliysen, bu tür bilgileriyle de çok şey yapabilir.
YUI "Compressor" aracı da uyarılar üretebilir, ancak henüz denememiştir.
Eclipse üzerine kurulu Aptana IDE ile pek şansım olmadı, ama diğer insanlar bundan hoşlanıyor. JS IDE'lerin Stack Overflow tartışmasına bakın.
Son kontrol ettiğimde ücretsiz olmayan IntelliJ IDE, mükemmel JS desteğine sahip. Siz yazarken yanlış yazılmış değişkenleri ve yöntemleri ve daha fazlasını algılar ve vurgular. Otomatik tamamlama da var.
Özet olarak, JSLint, JSHint, Plato, ESLint, Google Closure-Linter mevcut araçlardır. Windows için Google Closure-Linter'ı denerken kurulum sorunları ile karşılaştım. Ancak, web sayfasında Windows desteğinin deneysel olduğunu belirtiyor. İyi çalışan başka bir araç buldum ve denedim. İşte bunun bağlantısı: http://esprima.org/
Ayrıca, bu Esprima aracının github bağlantısıdır: https://github.com/ariya/esprima
Bu Wiki'de JavaScript statik kod analizi için bazı araçlar görebilirsiniz .
Wiki'deki, ancak bu yazıda bahsedilmeyen bir araç DeepScan'dir . Odak noktası, linterlerin kodlama kuralları yerine çalışma zamanı hatalarını ve kalite sorunlarını bulmaktır. Aynı zamanda TypeScript, React ve Vue.js'yi de kapsar.
GitHub projeniz için deneyebilirsiniz.
ESlint'i denedim ve iyi buldum ... oraya özel kurallar da ekleyebilirsiniz ... İşte github deposu: https://github.com/nzakas/eslint ve işte bunun girişi: http: // www. nczonline.net/blog/2013/07/16/introducing-eslint/
Genel amaçlı listeden daha fazla güvenlik odaklı, Security / B2G / JavaScript kod analizinde Mozilla Wiki'de bulunabilir.
Bu belgenin amacı, gelecekteki Mozilla projelerine dahil edilmeye veya dahili kullanıma uygun JavaScript kod analiz araçlarını toplamaktır.
Ayrıca güvenlik analizi yapan en az bir ticari ürün var: Burp yeni JavaScript analiz yetenekleri elde ediyor
Burp'un son sürümü, JavaScript kodunun statik analizi için yeni bir motor içerir. Bu, Burp Tarayıcının aşağıdakiler dahil bir dizi yeni güvenlik açığını bildirmesini sağlar:
- DOM tabanlı XSS
- JavaScript yerleştirme
- İstemci tarafı SQL enjeksiyonu
- WebSocket korsanlığı
- Yerel dosya yolu manipülasyonu
- DOM tabanlı açık yeniden yönlendirme
- Çerez manipülasyonu
- Ajax istek başlığı işleme
- DOM tabanlı hizmet reddi
- Web mesajı işleme
- HTML5 depolama yönetimi
Ticari alanda Coverity Static Analysis , 7.7 sürümünden (2015 ortası) itibaren JavaScript analizini destekler. Yazım hatalarıyla ilgili özel sorunuzla ilgili olarak, en son sürümde (8.0, 2016 başı ) görünen evcil hayvan projem program öğelerinin adlarında yazım hataları buluyor .
Projedeki önemli bir geliştirici olarak lütfen utanmaz eklentimi kabul edin: Henüz saygı duyulan C / C ++ analizi kadar olgun olmamasına rağmen , Coverity'nin JavaScript analizi, aynı motoru paylaşıyor ve aynı odak noktası, düşük değerli kusurları bulmaya da odaklanıyor. yanlış pozitif kusur raporlarının oranı. Genel programlama hatalarını bulmanın yanı sıra JavaScript'te (ve diğer dillerde) güvenlik kusurlarını bulmaya odaklanıyoruz.
Şimdi, bulduğu bazı yazım hataları (bunların ne kadar kolay göz ardı edilebileceğini vurgulamak için okuyucu için bir alıştırma olarak bırakılan tam yazım hatası):
merge.js: (kararlı bağlantı) (en son revizyon)
komutlar-paketleri-query.js: (kararlı bağlantı) (en son revizyon)
series-pie-tests.js: (kararlı bağlantı) (en son revizyon)
anahat_case.js: (kararlı bağlantı) (en son revizyon)
Flow , açıklamalar içeren ve içermeyen statik analiz yapar.
Ek açıklamalara ihtiyacınız varsa sözdizimi TypeScript ile uyumludur .
Paketi şununla kurun :
npm install --global flow-bin
Ayrıca bazı aletler de var. Yutak akış tipine ve belki de SublimeLinter akışına bir göz atın
JSAnalyse, codeplex'te yayınlandı. Javascript dosyaları arasındaki bağımlılıkları analiz eden bir araçtır. İzin verilen bağımlılıkları bile tanımlayabilirsiniz ve JSAnalysis, tanımlanan kuralların yerine getirilip getirilmediğini kontrol eder. Bu, büyük projelerde bile javascript bağımlılıklarını takip etmenizi ve temiz bir mimariye sahip olmayı sağlar.
JSAnalyse, bir komut satırı aracı olarak yürütülebilir veya Visual Studio Katman Diyagramı aracılığıyla yapılandırılabilir. Ayrıca yapıya entegre etmek de kolaydır. Geçitli check-in'ler ile bağımlılıkları kontrol altında tutabilirsiniz.
Bizim SD ECMAScript CloneDR büyük JavaScript kaynak kod üsleri arasında kesin yinelenen kod ve atlatılan kopyalarını bulmak için bir araçtır.
Algılamayı yönlendirmek için dil sözdizimini kullanır, bu nedenle biçim değişikliklerine, eklenen / silinen yorumlara, yeniden adlandırılmış değişkenlere ve hatta bazı eklenen / silinen ifadelere rağmen klonları bulacaktır.
Sitede, Google'ın Closure kitaplığında çalıştırılan örnek bir CloneDR var.
Tam açıklama, bunun arkasındayım: http://www.toptensoftware.com/minime , küçültme, şaşırtma ve makul bir tiftik tarzı kontroller seti.