Dovolím si přihodit odkaz na návod, jak spustit takovou validaci z příkazové řádky, třeba v rámci continuous integration: http://www.tomas-dvorak.cz/clanky/jshint-a-spousteni-validace-javascriptu-z-prikazove-radky . Třeba to někomu pomůže zaintegrovat do vývojového procesu.
Názory k článku
Kontrola JavaScriptu s JSLint a JSHint
Re: Validace z příkazové řádky
celé vláknoTahat kvoli tomuto JRE na server mi nepride ako najlepsi napad. Predpokladam, ze navod vznikol este v dobe, ked nebol v kurze Node.js, ktory sa predsalen hodi na server viac.
Re: Validace z příkazové řádky
celé vláknoNn, naopak sem nemel potrebu pouzivat node.js kdyz jre pouzivam pro kvanta jinych veci v ramci CI. Navic cely projekt nam bezi na jave, proste ji mame vsude :) Ale pokud nekdo nalinkujete implementaci pro debian v node.js, rad se priucim ;)
Re: Validace z příkazové řádky
celé vláknoUh, reagoval som prehnane rychlo a nedoslo mi, ze aj serverove aplikacie sa pisu v Jave. Dopleteny zo vsetkych tych dynamickych jazykov.
coffee
celé vláknoNo tak jsem zkusil prohnat výsledek z CoffeScriptu přes JSLint a JSHint na vzorový kód "square = (x) -> x * x"
Přes JSHint prošel ok, ale JSLint opravdu hází věci typu:
- Expected exactly one space between 'function' and '('."
- Expected 'return' at column 5, not column 3.
Bližší mi zůstane asi JSHint
:-)) - titulek musí být alespoň 4 znaky
celé vláknoJavaSlint :-D
Validace v kurzu
celé vláknoAutor JSLintu o svém "čístém" JavaScriptu, který ten program vynucuje, napsal dokonce celou knihu, jmenuje se to JavaScript: The Good Parts. Myslím v článku o tom zmínka není.
Jinak, tenhle přístup má asi něco do sebe, například v Google Go se projevuje v podobě nástroje gofmt, což je automatický formátovač kódu, jazyk tím má definovaný "jediný správný" způsob odsazování atd.
zeon.js
celé vláknoZa zminku urcite stoji i Zeon.js (zeonjs.com). Je to kompletne v JavaScriptu napsany parser, generuje AST a provadi nad nim analyzu kodu. Velice pokrocily nastroj. Dokaze provadet analyzu real-time pri psani kodu. Reparsuje kod po kazde zmene pritom odezva je okamzita.
viac zdrojovych suborov
celé vláknoako kontrolovat cez JSLint kod, ked je rozdeleny do viacerych zdrojovych suborov?
Re: viac zdrojovych suborov
celé vláknoiterovat pres vsechny *.js soubory a nad kazdym z nich spustit kontrolu?
Re: viac zdrojovych suborov
celé vláknoproblem je, ze pri kontrole JSLint napise, ze nepozna nejaku funkciu, ale ta je pritom dostupna v dalsom subore...
jedine riesenie zatial vidim v docasnom zluceni vsetkych suborov kvoli kontrole... (prip. v ignorovani takych chybovych hlaseni)
Re: Kontrola JavaScriptu s JSLint a JSHint
celé vláknoDíky za tip na JSHint, JSLint jsem přestal používat proto, že autor do něj začal cpát svoje představy o jediném správném zápisu kódu a znechutilo mě prodírat se kupou nepodstatných hlášek, jako "Expected exactly one space between ')' and 'event'".
chyba?
celé vláknoif (a = b)
{
...
}
ale ono to neni chyba proste priradím do premennej "a" hodnotu premnnej "b" a premennú "a" potom testujem či má hodnotu true
Re: chyba?
celé vláknoAno, máte pravdu. Proto jsem slovo 'chyba' dal do uvozovek, aby se to nebralo doslova.
Re: chyba?
celé vláknoZato je to krasne krypticky kod, az pak budete hledat chybu, takovy zapis v pohode prehlednete. Proto se pred tim obecne varuje ;)
eval
celé vláknoNetvrdím, že používať eval je správne, ale argument "a to ani nemluvíme o možných bezpečnostních rizicích, spojených s neošetřeným vstupem funkce eval()" je v spojení s Javascriptom úplná hlúposť. Javascript beží u klienta, teda mi umožňuje spustiť akýkoľvek kód alebo bežiaci kód akokoľvek modifikovať. Bez ohľadu na to, či tam eval mám, alebo nie.
Re: eval
celé vláknoTo se asi týká případu, kdy hodnota přijde jako GET parametr (tedy potenciálně od útočníka, který poslal oběti odkaz), projde skrz server, kde se dostane do řetězce určeného pro eval() a na straně klienta se vykoná jako JavaScript a má stejná práva jako kód z dané domény (přestože pochází z jiné, od útočníka).
Re: eval
celé vláknoAk je programátor taký idiot, že Javascriptový kód pchá do query stringu, je to rovnako deravé, či sa použije, alebo nepoužije eval.