Herhangi bir JavaScript statik analiz aracı var mı? [kapalı]


110

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ı?


1
şimdi bir günlük typcript sizin arkadaşınız - javascript örtük tür kontrolünü destekliyor ve% 100 gitmek istiyorsanız jsdoc3 veya google kapanış ek açıklamaları yazabilirsiniz ve buradan türler çıkaracaktır. Vscode veya webstorm gibi editörler kutudan çıktığı gibi destekliyor: github.com/Microsoft/TypeScript/wiki/…
kanserbero

Yanıtlar:


49

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.


2
@UpTheCreek: JSLint GitHub'da mevcuttur.
Dave Swersky

@Dave oh doğru, bu harika :)
UpTheCreek

5
TAJS için kaynak kodu artık mevcut.
Rich Dougherty

57

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 maxerryapı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 -lveyaruby -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.


2
JavaScript kodu için kopyala-yapıştır tespiti artık CPD aracılığıyla kullanılabilir. Bildiğim kadarıyla bu, JavaScript için ilk sağlam açık kaynak kod kopyalama aracıdır! pmd.sourceforge.net ve ayrıca "JavaScript için CPD benzeri bir araç var mı?" sorusuna bakın. stackoverflow.com/a/13745190/55478
Noah Sussman

20

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.


11

Ö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


7

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.



4

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

4

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)




2

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.

http://jsanalyse.codeplex.com/


1

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.


bunu henüz deneyen oldu mu? Herhangi bir indirme veya sipariş düğmesi bulunamadı ...
Sven Hecht

... Ocak 2011'den beri ... CloneDR for JavaScript'in (veya birkaç başka dilde) birlikte oynayabileceğiniz bir eval kopyasını almak için kullanabileceğiniz bir indirme bağlantısı var.
Ira Baxter

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.