Jestem przyzwyczajony do tego, że mój kompilator narzeka, kiedy robię coś głupiego, na przykład literówkę w nazwie zmiennej, ale JavaScript ma zwyczaj pozwalać na to.
Czy są jakieś narzędzia do analizy statycznej JavaScript?
Jestem przyzwyczajony do tego, że mój kompilator narzeka, kiedy robię coś głupiego, na przykład literówkę w nazwie zmiennej, ale JavaScript ma zwyczaj pozwalać na to.
Czy są jakieś narzędzia do analizy statycznej JavaScript?
Odpowiedzi:
Zgadzam się, że JSLint to najlepsze miejsce do rozpoczęcia. Należy pamiętać, że JavaScript Lint różni się od JSLint . Sugerowałbym również wypróbowanie JSure , która w moich ograniczonych testach wypadła lepiej niż którekolwiek z nich, chociaż z pewnymi nierównymi krawędziami implementacji - wersja Intel Mac uległa awarii podczas uruchamiania, chociaż wersja PowerPC działała dobrze nawet na Intelu, a wersja dla Linuxa również działała dobrze. (Deweloper, Berke Durak, powiedział, że skontaktuje się ze mną, kiedy to zostanie naprawione, ale nie miałem od niego wiadomości.)
Nie oczekuj od analizy statycznej JavaScript tyle, ile od dobrego narzędzia do sprawdzania języka C. Jak powiedział mi Durak, „każda nietrywialna analiza jest bardzo trudna ze względu na dynamiczną naturę JavaScript”.
(Kolejny, jeszcze bardziej niejasny błąd dotyczący tylko komputerów Mac, tym razem z widżetem Konfabulator JSLint: Przeciągnięcie ikony dokumentu BBEdit na widżet przenosi dokument do kosza. Deweloper, Douglas Crockford, nie wypróbował widżetu na komputerze Mac.)
10 sierpnia 2009: Dziś na sympozjum poświęconym analizie statycznej Simon Holm Jensen przedstawił artykuł na temat TAJS: Type Analyzer for JavaScript , napisany wspólnie z Andersem Møllerem i Peterem Thiemannem. Artykuł nie wspomina o powyższych narzędziach, ale Jensen powiedział mi, że przyjrzał się niektórym z nich i nie był pod wrażeniem. Kod do TAJS powinien być dostępny kiedyś tego lata.
źródło
ZAKTUALIZOWANA ODPOWIEDŹ, 2017: Tak. Użyj ESLint. http://eslint.org
Oprócz JSLint (już wspomnianego w odpowiedzi Flash Sheridana ) i kompilatora Closure (wcześniej wspomnianego w odpowiedzi awhyte ), również wiele korzyści przyniosło mi uruchomienie JSHint i PHP CodeSniffer . Od 2012 roku wszystkie cztery narzędzia są darmowe i mają otwarte oprogramowanie, a za nimi stoi duża i aktywna społeczność programistów. Każdy z nich jest nieco inny (i myślę, że się uzupełniają) pod względem rodzajów kontroli, które wykonują:
JSLint został zaprojektowany jako osobiste narzędzie do szarpania Douglasa Crockforda . Jest dostarczany z doskonałym domyślnym zestawem reguł - własnym, Crockforda, stale aktualizowanym, gdy nadal poznaje JavaScript i jego pułapki. JSLint jest bardzo uparty i jest to ogólnie postrzegane jako dobra rzecz. W związku z tym istnieje (celowo) ograniczona ilość, którą możesz zrobić, aby skonfigurować lub wyłączyć poszczególne reguły. Ale może to utrudnić zastosowanie JSLint do starszego kodu.
JSHint jest bardzo podobny do JSLint (w rzeczywistości rozpoczął życie jako rozwidlenie JSLint), ale jest łatwiej / można skonfigurować lub wyłączyć wszystkie kontrole JSLint za pomocą opcji wiersza poleceń lub za pośrednictwem
.jshintrc
pliku .Szczególnie podoba mi się to, że mogę powiedzieć JSHint, aby zgłosił wszystkie błędy w pliku, nawet jeśli są setki błędów. Z drugiej strony, chociaż JSLint ma
maxerr
opcję konfiguracyjną, generalnie radzi sobie stosunkowo wcześnie podczas próby przetwarzania plików zawierających dużą liczbę błędów.Kompilator Closure jest niezwykle przydatny, ponieważ jeśli kod nie skompiluje się z Closure, możesz mieć pewność, że ten kod jest głęboko zawężony w pewien fundamentalny sposób. Kompilacja zamykająca jest prawdopodobnie najbliższą rzeczą w świecie JS do sprawdzenia składni "interpretera", takiego jak
php -l
lubruby -c
Zamknięcie ostrzega również o potencjalnych problemach, takich jak brakujące parametry i niezadeklarowane lub przedefiniowane zmienne. Jeśli nie widzisz ostrzeżeń, których się spodziewasz, spróbuj zwiększyć poziom ostrzeżenia, wywołując Closure z opcją
--warning_level VERBOSE
PHP CodeSniffer może analizować JavaScript, a także PHP i CSS. CodeSniffer jest dostarczany z kilkoma różnymi standardami kodowania (powiedzmy,
phpcs -i
aby je zobaczyć), które obejmują wiele przydatnych funkcji wykrywania kodu JavaScript, w tym sprawdzanie wbudowanych struktur kontrolnych i zbędnych białych znaków .Oto lista sniffów JavaScript dostępnych w PHP CodeSniffer od wersji 1.3.6, a tutaj jest niestandardowy zestaw reguł, który pozwoli Ci uruchomić je wszystkie naraz. Korzystając z niestandardowych zestawów reguł, łatwo jest wybrać i wybrać reguły, które chcesz zastosować. Możesz nawet napisać własne węszenie, jeśli chcesz narzucić określony „styl domowy”, który nie jest obsługiwany po wyjęciu z pudełka. Afaik CodeSniffer jest jedynym narzędziem spośród czterech wymienionych tutaj, które obsługuje dostosowywanie i tworzenie nowych reguł analizy statycznej. Jedno zastrzeżenie: CodeSniffer jest również najwolniejszym z wymienionych narzędzi.
źródło
Kompilator JS firmy Google „Closure” generuje konfigurowalne ostrzeżenia i błędy w czasie kompilacji. Na pewno znajduje błędne zmienne i metody, a także błędy liczbowe. Jeśli chcesz napisać JsDoc w sposób Closure, może to również zrobić wiele z informacjami o typie.
Narzędzie "Kompresor" YUI może również generować ostrzeżenia, ale jeszcze go nie wypróbowałem.
Nie miałem dużo szczęścia z Aptana IDE, zbudowanym na Eclipse, ale innym ludziom się to podoba. Zobacz omówienie przepełnienia stosu w środowiskach JS IDE.
IntelliJ IDE, które ostatnio nie było darmowe, ma świetną obsługę JS. Wykrywa i wyróżnia błędnie napisane zmienne i metody podczas pisania, i nie tylko. Ma też autouzupełnianie.
źródło
Podsumowując, JSLint, JSHint, Plato, ESLint, Google Closure-Linter to dostępne narzędzia. Napotkałem problemy z instalacją podczas wypróbowywania Google Closure-Linter dla Windows. Ale wspomina na stronie internetowej, że jego obsługa systemu Windows jest eksperymentalna. Znalazłem i wypróbowałem inne narzędzie, które działa dobrze. Oto link do tego: http://esprima.org/
Jest to również link na github do narzędzia Esprima: https://github.com/ariya/esprima
źródło
Na tej Wiki można zobaczyć narzędzia do analizy statycznego kodu JavaScript .
Narzędziem na Wiki, o którym nie wspomniano w tym poście, jest DeepScan . Skupia się na wyszukiwaniu błędów w czasie wykonywania i problemów z jakością, a nie konwencji kodowania linters. Obejmuje również TypeScript, React i Vue.js.
Możesz to wypróbować w swoim projekcie GitHub.
źródło
Wypróbowałem ESlint i okazało się, że jest dobry… możesz tam również dodać własne reguły… Oto repozytorium github: https://github.com/nzakas/eslint, a tutaj jest wprowadzenie do niego: http: // www. nczonline.net/blog/2013/07/16/introducing-eslint/
źródło
Bardziej skoncentrowany na bezpieczeństwie niż lista ogólnego przeznaczenia można znaleźć na Mozilla Wiki pod adresem Security / B2G / JavaScript code analysis
Istnieje również co najmniej jeden produkt komercyjny, który przeprowadza analizę bezpieczeństwa: Burp otrzymuje nowe możliwości analizy JavaScript
źródło
W dziedzinie komercyjnej, Coverity Static Analysis obsługuje analizę JavaScript od wersji 7.7 (połowa 2015). Jeśli chodzi o twoje konkretne zapytanie dotyczące literówek, mój projekt dla zwierząt, który pojawił się w najnowszej wersji (8.0, początek 2016 r.) , Znajduje literówki w nazwach elementów programu.
Jako główny programista projektu, zaakceptuj moją bezwstydną wtyczkę: choć nie jest jeszcze tak dojrzała, jak czczona analiza C / C ++ Coverity JavaScript firmy Coverity ma wiele wspólnego z tym samym silnikiem, z takim samym naciskiem na znajdowanie defektów o dużej wartości z niską odsetek fałszywie pozytywnych zgłoszeń defektów. Coraz większy nacisk kładziemy na znajdowanie błędów bezpieczeństwa w JavaScript (i innych językach), a także na znajdowaniu ogólnych błędów programistycznych.
Teraz, oto kilka znalezionych literówek (dokładna literówka pozostawiona jako ćwiczenie dla czytelnika, aby podkreślić, jak łatwo można je przeoczyć):
merge.js: (stabilny link) (najnowsza wersja)
commands-packages-query.js: (stabilny link) (najnowsza wersja)
series-pie-tests.js: (stabilny link) (najnowsza wersja)
outline_case.js: (stabilny link) (najnowsza wersja)
źródło
Lubię Jslint za tego typu rzeczy ...
źródło
Flow wykonuje analizę statyczną z adnotacjami i bez.
Jeśli potrzebujesz adnotacji, składnia jest zgodna z TypeScript .
Zainstaluj pakiet za pomocą:
Jest też trochę narzędzi. Przyjrzyj się typowi gulp-flowtype i być może SublimeLinter-flow
źródło
JSAnalyse zostało właśnie opublikowane w witrynie codeplex. Jest to narzędzie analizujące zależności między plikami javascript. Można nawet zdefiniować dozwolone zależności, a narzędzie JSAnalysis sprawdza, czy zdefiniowane reguły są spełnione, czy nie. Pozwala to na śledzenie zależności javascript nawet w dużych projektach i ma czystą architekturę.
JSAnalyse można uruchomić jako narzędzie wiersza poleceń lub skonfigurować za pomocą Visual Studio Layer Diagramm. Jest również łatwy do zintegrowania z kompilacją. Dzięki bramkowanym odprawom możesz zachować zależności pod kontrolą.
http://jsanalyse.codeplex.com/
źródło
Nasz SD ECMAScript CloneDR to narzędzie do znajdowania dokładnych i prawie zaginionych kopii duplikatów kodu w dużych bazach kodu źródłowego JavaScript.
Używa składni języka do kierowania wykrywaniem, więc znajdzie klony pomimo zmian formatu, wstawionych / usuniętych komentarzy, zmienionych nazw zmiennych, a nawet niektórych wstawionych / usuniętych instrukcji.
Witryna zawiera przykładowy CloneDR uruchomiony w bibliotece Google Closure.
źródło
Pełne ujawnienie, za tym stoję: http://www.toptensoftware.com/minime, który wykonuje minifikację, zaciemnianie i rozsądny zestaw sprawdzeń w stylu kłaczków.
źródło