jslintrb 0.3.0 → 0.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/CHANGELOG.rdoc +3 -0
- data/Manifest.txt +11 -0
- data/README.rdoc +9 -10
- data/Rakefile +18 -0
- data/bin/jslintrb +0 -218
- data/lib/jslintrb/fulljslint.js +174 -143
- data/lib/jslintrb/jslintrb.js +9 -2
- data/lib/jslintrb/jslintrb.wk +52 -0
- data/lib/jslintrb.rb +3 -0
- metadata +68 -25
- data/bin/jslintrb~ +0 -223
- data/lib/jslintrb/json2.js +0 -479
- data/test/helper.rb +0 -10
- data/test/test_jslintrb.rb +0 -7
data/lib/jslintrb/fulljslint.js
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
// jslint.js
|
2
|
-
// 2010-
|
2
|
+
// 2010-03-12
|
3
3
|
|
4
4
|
/*
|
5
5
|
Copyright (c) 2002 Douglas Crockford (www.JSLint.com)
|
@@ -159,45 +159,46 @@ SOFTWARE.
|
|
159
159
|
URL, Web, Window, XMLDOM, XMLHttpRequest, "\\", a, abbr, acronym,
|
160
160
|
addEventListener, address, adsafe, alert, aliceblue, animator,
|
161
161
|
antiquewhite, appleScript, applet, apply, approved, aqua, aquamarine,
|
162
|
-
area, arguments, arity, autocomplete, azure, b,
|
163
|
-
|
164
|
-
"background-position", "background-repeat", base,
|
165
|
-
bisque, bitwise, black, blanchedalmond, block,
|
166
|
-
blueviolet, blur, body, border, "border-bottom",
|
167
|
-
"border-bottom-
|
168
|
-
"border-
|
169
|
-
"border-left-
|
170
|
-
"border-right-
|
171
|
-
"border-
|
172
|
-
"border-top-width", "border-width", bottom, br,
|
173
|
-
burlywood, button, bytesToUIString, c, cadetblue, call,
|
174
|
-
canvas, cap, caption, "caption-side", cases, center,
|
175
|
-
character, chartreuse, chocolate, chooseColor,
|
176
|
-
cite, clear, clearInterval, clearTimeout,
|
177
|
-
closed, closure, cm, code, col, colgroup,
|
178
|
-
|
179
|
-
convertPathToPlatform, coral, cornflowerblue,
|
180
|
-
"counter-increment", "counter-reset", create, crimson, css,
|
181
|
-
cyan, d, darkblue, darkcyan, darkgoldenrod, darkgray, darkgreen,
|
162
|
+
area, arguments, arity, article, aside, audio, autocomplete, azure, b,
|
163
|
+
background, "background-attachment", "background-color",
|
164
|
+
"background-image", "background-position", "background-repeat", base,
|
165
|
+
bdo, beep, beige, big, bisque, bitwise, black, blanchedalmond, block,
|
166
|
+
blockquote, blue, blueviolet, blur, body, border, "border-bottom",
|
167
|
+
"border-bottom-color", "border-bottom-style", "border-bottom-width",
|
168
|
+
"border-collapse", "border-color", "border-left", "border-left-color",
|
169
|
+
"border-left-style", "border-left-width", "border-right",
|
170
|
+
"border-right-color", "border-right-style", "border-right-width",
|
171
|
+
"border-spacing", "border-style", "border-top", "border-top-color",
|
172
|
+
"border-top-style", "border-top-width", "border-width", bottom, br,
|
173
|
+
brown, browser, burlywood, button, bytesToUIString, c, cadetblue, call,
|
174
|
+
callee, caller, canvas, cap, caption, "caption-side", cases, center,
|
175
|
+
charAt, charCodeAt, character, chartreuse, chocolate, chooseColor,
|
176
|
+
chooseFile, chooseFolder, cite, clear, clearInterval, clearTimeout,
|
177
|
+
clip, close, closeWidget, closed, closure, cm, code, col, colgroup,
|
178
|
+
color, command, comment, condition, confirm, console, constructor,
|
179
|
+
content, convertPathToHFS, convertPathToPlatform, coral, cornflowerblue,
|
180
|
+
cornsilk, "counter-increment", "counter-reset", create, crimson, css,
|
181
|
+
cursor, cyan, d, darkblue, darkcyan, darkgoldenrod, darkgray, darkgreen,
|
182
182
|
darkkhaki, darkmagenta, darkolivegreen, darkorange, darkorchid, darkred,
|
183
183
|
darksalmon, darkseagreen, darkslateblue, darkslategray, darkturquoise,
|
184
|
-
darkviolet, data, dd, debug, decodeURI, decodeURIComponent,
|
185
|
-
deepskyblue, defaultStatus, defineClass, del, deserialize,
|
186
|
-
|
187
|
-
dodgerblue, dt, edition, else, em, embed,
|
188
|
-
encodeURI, encodeURIComponent, entityify, eqeqeq,
|
189
|
-
event, evidence, evil, ex, exception, exec, exps,
|
190
|
-
|
191
|
-
|
192
|
-
"font-
|
193
|
-
|
194
|
-
|
195
|
-
|
196
|
-
|
197
|
-
|
198
|
-
|
199
|
-
|
200
|
-
|
184
|
+
darkviolet, data, datalist, dd, debug, decodeURI, decodeURIComponent,
|
185
|
+
deeppink, deepskyblue, defaultStatus, defineClass, del, deserialize,
|
186
|
+
details, devel, dfn, dialog, dimension, dimgray, dir, direction,
|
187
|
+
display, div, dl, document, dodgerblue, dt, edition, else, em, embed,
|
188
|
+
empty, "empty-cells", encodeURI, encodeURIComponent, entityify, eqeqeq,
|
189
|
+
errors, escape, eval, event, evidence, evil, ex, exception, exec, exps,
|
190
|
+
fieldset, figure, filesystem, firebrick, first, float, floor,
|
191
|
+
floralwhite, focus, focusWidget, font, "font-face", "font-family",
|
192
|
+
"font-size", "font-size-adjust", "font-stretch", "font-style",
|
193
|
+
"font-variant", "font-weight", footer, forestgreen, forin, form,
|
194
|
+
fragment, frame, frames, frameset, from, fromCharCode, fuchsia, fud,
|
195
|
+
funct, function, functions, g, gainsboro, gc, getComputedStyle,
|
196
|
+
ghostwhite, global, globals, gold, goldenrod, gray, green, greenyellow,
|
197
|
+
h1, h2, h3, h4, h5, h6, hasOwnProperty, head, header, height, help,
|
198
|
+
hgroup, history, honeydew, hotpink, hr, html, i, iTunes, id, identifier,
|
199
|
+
iframe, img, immed, implieds, in, include, indent, indexOf, indianred,
|
200
|
+
indigo, init, input, ins, isAlpha, isApplicationRunning, isDigit,
|
201
|
+
isFinite, isNaN, ivory, join, jslint, json, kbd, keygen, khaki,
|
201
202
|
konfabulatorVersion, label, labelled, lang, last, lavender,
|
202
203
|
lavenderblush, lawngreen, laxbreak, lbp, led, left, legend,
|
203
204
|
lemonchiffon, length, "letter-spacing", li, lib, lightblue, lightcoral,
|
@@ -207,41 +208,42 @@ SOFTWARE.
|
|
207
208
|
"list-style", "list-style-image", "list-style-position",
|
208
209
|
"list-style-type", load, loadClass, location, log, m, magenta, map,
|
209
210
|
margin, "margin-bottom", "margin-left", "margin-right", "margin-top",
|
210
|
-
"marker-offset", maroon, match, "max-height", "max-width", maxerr,
|
211
|
-
md5, media, mediumaquamarine, mediumblue, mediumorchid,
|
212
|
-
mediumseagreen, mediumslateblue, mediumspringgreen,
|
213
|
-
mediumvioletred, member, menu, message, meta,
|
214
|
-
"min-height", "min-width", mintcream, mistyrose, mm,
|
215
|
-
moveTo, name, navajowhite, navigator, navy, new,
|
216
|
-
nomen, noscript, nud, object, ol, oldlace, olive,
|
217
|
-
onbeforeunload, onblur, onerror, onevar, onfocus, onload,
|
218
|
-
onunload, opacity, open, openURL, opener, opera, optgroup,
|
219
|
-
orange, orangered, orchid, outer, outline, "outline-color",
|
220
|
-
"outline-style", "outline-width",
|
221
|
-
p, padding, "padding-bottom", "padding-left",
|
222
|
-
"padding-top", page, "page-break-after",
|
223
|
-
palegoldenrod, palegreen, paleturquoise,
|
224
|
-
param, parent, parseFloat, parseInt,
|
225
|
-
|
226
|
-
|
227
|
-
|
228
|
-
|
229
|
-
|
230
|
-
|
231
|
-
|
232
|
-
|
233
|
-
|
234
|
-
|
235
|
-
|
236
|
-
|
237
|
-
|
211
|
+
mark, "marker-offset", maroon, match, "max-height", "max-width", maxerr,
|
212
|
+
maxlen, md5, media, mediumaquamarine, mediumblue, mediumorchid,
|
213
|
+
mediumpurple, mediumseagreen, mediumslateblue, mediumspringgreen,
|
214
|
+
mediumturquoise, mediumvioletred, member, menu, message, meta, meter,
|
215
|
+
midnightblue, "min-height", "min-width", mintcream, mistyrose, mm,
|
216
|
+
moccasin, moveBy, moveTo, name, nav, navajowhite, navigator, navy, new,
|
217
|
+
newcap, noframes, nomen, noscript, nud, object, ol, oldlace, olive,
|
218
|
+
olivedrab, on, onbeforeunload, onblur, onerror, onevar, onfocus, onload,
|
219
|
+
onresize, onunload, opacity, open, openURL, opener, opera, optgroup,
|
220
|
+
option, orange, orangered, orchid, outer, outline, "outline-color",
|
221
|
+
"outline-style", "outline-width", output, overflow, "overflow-x",
|
222
|
+
"overflow-y", p, padding, "padding-bottom", "padding-left",
|
223
|
+
"padding-right", "padding-top", page, "page-break-after",
|
224
|
+
"page-break-before", palegoldenrod, palegreen, paleturquoise,
|
225
|
+
palevioletred, papayawhip, param, parent, parseFloat, parseInt,
|
226
|
+
passfail, pc, peachpuff, peru, pink, play, plum, plusplus, pop,
|
227
|
+
popupMenu, position, powderblue, pre, predef, preferenceGroups,
|
228
|
+
preferences, print, progress, prompt, prototype, pt, purple, push, px,
|
229
|
+
q, quit, quotes, random, range, raw, reach, readFile, readUrl, reason,
|
230
|
+
red, regexp, reloadWidget, removeEventListener, replace, report,
|
231
|
+
reserved, resizeBy, resizeTo, resolvePath, resumeUpdates, rhino, right,
|
232
|
+
rosybrown, royalblue, rp, rt, ruby, runCommand, runCommandInBg,
|
233
|
+
saddlebrown, safe, salmon, samp, sandybrown, saveAs, savePreferences,
|
234
|
+
screen, script, scroll, scrollBy, scrollTo, seagreen, seal, search,
|
235
|
+
seashell, section, select, serialize, setInterval, setTimeout, shift,
|
236
|
+
showWidgetPreferences, sidebar, sienna, silver, skyblue, slateblue,
|
237
|
+
slategray, sleep, slice, small, snow, sort, source, span, spawn, speak,
|
238
|
+
split, springgreen, src, stack, status, steelblue, strict, strong, style,
|
239
|
+
styleproperty, sub, substr, sup, supplant, suppressUpdates, sync,
|
238
240
|
system, table, "table-layout", tan, tbody, td, teal, tellWidget, test,
|
239
241
|
"text-align", "text-decoration", "text-indent", "text-shadow",
|
240
|
-
"text-transform", textarea, tfoot, th, thead, thistle, title,
|
242
|
+
"text-transform", textarea, tfoot, th, thead, thistle, time, title,
|
241
243
|
toLowerCase, toString, toUpperCase, toint32, token, tomato, top, tr, tt,
|
242
244
|
turquoise, type, u, ul, undef, unescape, "unicode-bidi", unused,
|
243
245
|
unwatch, updateNow, urls, value, valueOf, var, version,
|
244
|
-
"vertical-align", violet, visibility, watch, wheat, white,
|
246
|
+
"vertical-align", video, violet, visibility, watch, wheat, white,
|
245
247
|
"white-space", whitesmoke, widget, width, "word-spacing", "word-wrap",
|
246
248
|
yahooCheckLogin, yahooLogin, yahooLogout, yellow, yellowgreen,
|
247
249
|
"z-index"
|
@@ -294,6 +296,7 @@ var JSLINT = (function () {
|
|
294
296
|
constructor : true,
|
295
297
|
'eval' : true,
|
296
298
|
prototype : true,
|
299
|
+
stack : true,
|
297
300
|
unwatch : true,
|
298
301
|
valueOf : true,
|
299
302
|
watch : true
|
@@ -330,8 +333,7 @@ var JSLINT = (function () {
|
|
330
333
|
strict : true, // require the "use strict"; pragma
|
331
334
|
sub : true, // if all forms of subscript notation are tolerated
|
332
335
|
white : true, // if strict whitespace rules apply
|
333
|
-
widget : true
|
334
|
-
withstmt : true // if with statements should be allowd
|
336
|
+
widget : true // if the Yahoo Widgets globals should be predefined
|
335
337
|
},
|
336
338
|
|
337
339
|
// browser contains a set of global names which are commonly provided by a
|
@@ -583,6 +585,9 @@ var JSLINT = (function () {
|
|
583
585
|
address: {},
|
584
586
|
applet: {},
|
585
587
|
area: {empty: true, parent: ' map '},
|
588
|
+
article: {},
|
589
|
+
aside: {},
|
590
|
+
audio: {},
|
586
591
|
b: {},
|
587
592
|
base: {empty: true, parent: ' head '},
|
588
593
|
bdo: {},
|
@@ -598,8 +603,12 @@ var JSLINT = (function () {
|
|
598
603
|
code: {},
|
599
604
|
col: {empty: true, parent: ' table colgroup '},
|
600
605
|
colgroup: {parent: ' table '},
|
606
|
+
command: {parent: ' menu '},
|
607
|
+
datalist: {},
|
601
608
|
dd: {parent: ' dl '},
|
602
609
|
del: {},
|
610
|
+
details: {},
|
611
|
+
dialog: {},
|
603
612
|
dfn: {},
|
604
613
|
dir: {},
|
605
614
|
div: {},
|
@@ -608,7 +617,9 @@ var JSLINT = (function () {
|
|
608
617
|
em: {},
|
609
618
|
embed: {},
|
610
619
|
fieldset: {},
|
620
|
+
figure: {},
|
611
621
|
font: {},
|
622
|
+
footer: {},
|
612
623
|
form: {},
|
613
624
|
frame: {empty: true, parent: ' frameset '},
|
614
625
|
frameset: {parent: ' html frameset '},
|
@@ -619,6 +630,8 @@ var JSLINT = (function () {
|
|
619
630
|
h5: {},
|
620
631
|
h6: {},
|
621
632
|
head: {parent: ' html '},
|
633
|
+
header: {},
|
634
|
+
hgroup: {},
|
622
635
|
html: {parent: '*'},
|
623
636
|
hr: {empty: true},
|
624
637
|
i: {},
|
@@ -627,28 +640,39 @@ var JSLINT = (function () {
|
|
627
640
|
input: {empty: true},
|
628
641
|
ins: {},
|
629
642
|
kbd: {},
|
643
|
+
keygen: {},
|
630
644
|
label: {},
|
631
|
-
legend: {parent: ' fieldset '},
|
645
|
+
legend: {parent: ' details fieldset figure '},
|
632
646
|
li: {parent: ' dir menu ol ul '},
|
633
647
|
link: {empty: true, parent: ' head '},
|
634
648
|
map: {},
|
649
|
+
mark: {},
|
635
650
|
menu: {},
|
636
651
|
meta: {empty: true, parent: ' head noframes noscript '},
|
652
|
+
meter: {},
|
653
|
+
nav: {},
|
637
654
|
noframes: {parent: ' html body '},
|
638
655
|
noscript: {parent: ' body head noframes '},
|
639
656
|
object: {},
|
640
657
|
ol: {},
|
641
658
|
optgroup: {parent: ' select '},
|
642
659
|
option: {parent: ' optgroup select '},
|
660
|
+
output: {},
|
643
661
|
p: {},
|
644
662
|
param: {empty: true, parent: ' applet object '},
|
645
663
|
pre: {},
|
664
|
+
progress: {},
|
646
665
|
q: {},
|
666
|
+
rp: {},
|
667
|
+
rt: {},
|
668
|
+
ruby: {},
|
647
669
|
samp: {},
|
648
670
|
script: {empty: true, parent: ' body div frame head iframe p pre span '},
|
671
|
+
section: {},
|
649
672
|
select: {},
|
650
673
|
small: {},
|
651
674
|
span: {},
|
675
|
+
source: {},
|
652
676
|
strong: {},
|
653
677
|
style: {parent: ' head ', empty: true},
|
654
678
|
sub: {},
|
@@ -660,12 +684,14 @@ var JSLINT = (function () {
|
|
660
684
|
tfoot: {parent: ' table '},
|
661
685
|
th: {parent: ' tr '},
|
662
686
|
thead: {parent: ' table '},
|
687
|
+
time: {},
|
663
688
|
title: {parent: ' head '},
|
664
689
|
tr: {parent: ' table tbody thead tfoot '},
|
665
690
|
tt: {},
|
666
691
|
u: {},
|
667
692
|
ul: {},
|
668
|
-
'var': {}
|
693
|
+
'var': {},
|
694
|
+
video: {}
|
669
695
|
},
|
670
696
|
|
671
697
|
ids, // HTML ids
|
@@ -887,7 +913,7 @@ var JSLINT = (function () {
|
|
887
913
|
sx = /^\s*([{:#%.=,>+\[\]@()"';]|\*=?|\$=|\|=|\^=|~=|[a-zA-Z_][a-zA-Z0-9_\-]*|[0-9]+|<\/|\/\*)/,
|
888
914
|
ssx = /^\s*([@#!"'};:\-%.=,+\[\]()*_]|[a-zA-Z][a-zA-Z0-9._\-]*|\/\*?|\d+(?:\.\d+)?|<\/)/,
|
889
915
|
// attributes characters
|
890
|
-
qx = /[^a-zA-Z0-9
|
916
|
+
qx = /[^a-zA-Z0-9+\-_\/ ]/,
|
891
917
|
// query characters for ids
|
892
918
|
dx = /[\[\]\/\\"'*<>.&:(){}+=#]/,
|
893
919
|
|
@@ -1439,7 +1465,8 @@ var JSLINT = (function () {
|
|
1439
1465
|
errorAt("Unclosed comment.", line, character);
|
1440
1466
|
} else {
|
1441
1467
|
if (option.safe && ax.test(s)) {
|
1442
|
-
warningAt("ADsafe comment violation.",
|
1468
|
+
warningAt("ADsafe comment violation.",
|
1469
|
+
line, character);
|
1443
1470
|
}
|
1444
1471
|
}
|
1445
1472
|
}
|
@@ -1484,11 +1511,13 @@ var JSLINT = (function () {
|
|
1484
1511
|
l += 1;
|
1485
1512
|
switch (c) {
|
1486
1513
|
case '':
|
1487
|
-
errorAt("Unclosed regular expression.",
|
1514
|
+
errorAt("Unclosed regular expression.",
|
1515
|
+
line, from);
|
1488
1516
|
return;
|
1489
1517
|
case '/':
|
1490
1518
|
if (depth > 0) {
|
1491
|
-
warningAt("Unescaped '{a}'.",
|
1519
|
+
warningAt("Unescaped '{a}'.",
|
1520
|
+
line, from + l, '/');
|
1492
1521
|
}
|
1493
1522
|
c = s.substr(0, l - 1);
|
1494
1523
|
q = {
|
@@ -1504,15 +1533,18 @@ var JSLINT = (function () {
|
|
1504
1533
|
s = s.substr(l);
|
1505
1534
|
q = s.charAt(0);
|
1506
1535
|
if (q === '/' || q === '*') {
|
1507
|
-
errorAt("Confusing regular expression.",
|
1536
|
+
errorAt("Confusing regular expression.",
|
1537
|
+
line, from);
|
1508
1538
|
}
|
1509
1539
|
return it('(regexp)', c);
|
1510
1540
|
case '\\':
|
1511
1541
|
c = s.charAt(l);
|
1512
1542
|
if (c < ' ') {
|
1513
|
-
warningAt(
|
1543
|
+
warningAt(
|
1544
|
+
"Unexpected control character in regular expression.", line, from + l);
|
1514
1545
|
} else if (c === '<') {
|
1515
|
-
warningAt(
|
1546
|
+
warningAt(
|
1547
|
+
"Unexpected escaped character '{a}' in regular expression.", line, from + l, c);
|
1516
1548
|
}
|
1517
1549
|
l += 1;
|
1518
1550
|
break;
|
@@ -1528,7 +1560,8 @@ var JSLINT = (function () {
|
|
1528
1560
|
l += 1;
|
1529
1561
|
break;
|
1530
1562
|
default:
|
1531
|
-
warningAt(
|
1563
|
+
warningAt(
|
1564
|
+
"Expected '{a}' and instead saw '{b}'.", line, from + l, ':', s.charAt(l));
|
1532
1565
|
}
|
1533
1566
|
} else {
|
1534
1567
|
captures += 1;
|
@@ -1539,7 +1572,8 @@ var JSLINT = (function () {
|
|
1539
1572
|
break;
|
1540
1573
|
case ')':
|
1541
1574
|
if (depth === 0) {
|
1542
|
-
warningAt("Unescaped '{a}'.",
|
1575
|
+
warningAt("Unescaped '{a}'.",
|
1576
|
+
line, from + l, ')');
|
1543
1577
|
} else {
|
1544
1578
|
depth -= 1;
|
1545
1579
|
}
|
@@ -1551,7 +1585,8 @@ var JSLINT = (function () {
|
|
1551
1585
|
q += 1;
|
1552
1586
|
}
|
1553
1587
|
if (q > 1) {
|
1554
|
-
warningAt(
|
1588
|
+
warningAt(
|
1589
|
+
"Spaces are hard to count. Use {{a}}.", line, from + l, q);
|
1555
1590
|
}
|
1556
1591
|
break;
|
1557
1592
|
case '[':
|
@@ -1559,55 +1594,64 @@ var JSLINT = (function () {
|
|
1559
1594
|
if (c === '^') {
|
1560
1595
|
l += 1;
|
1561
1596
|
if (option.regexp) {
|
1562
|
-
warningAt("Insecure '{a}'.",
|
1597
|
+
warningAt("Insecure '{a}'.",
|
1598
|
+
line, from + l, c);
|
1563
1599
|
}
|
1564
1600
|
}
|
1565
1601
|
q = false;
|
1566
1602
|
if (c === ']') {
|
1567
|
-
warningAt("Empty class.", line,
|
1603
|
+
warningAt("Empty class.", line,
|
1604
|
+
from + l - 1);
|
1568
1605
|
q = true;
|
1569
1606
|
}
|
1570
|
-
|
1607
|
+
klass: do {
|
1571
1608
|
c = s.charAt(l);
|
1572
1609
|
l += 1;
|
1573
1610
|
switch (c) {
|
1574
1611
|
case '[':
|
1575
1612
|
case '^':
|
1576
|
-
warningAt("Unescaped '{a}'.",
|
1613
|
+
warningAt("Unescaped '{a}'.",
|
1614
|
+
line, from + l, c);
|
1577
1615
|
q = true;
|
1578
1616
|
break;
|
1579
1617
|
case '-':
|
1580
1618
|
if (q) {
|
1581
1619
|
q = false;
|
1582
1620
|
} else {
|
1583
|
-
warningAt("Unescaped '{a}'.",
|
1621
|
+
warningAt("Unescaped '{a}'.",
|
1622
|
+
line, from + l, '-');
|
1584
1623
|
q = true;
|
1585
1624
|
}
|
1586
1625
|
break;
|
1587
1626
|
case ']':
|
1588
1627
|
if (!q) {
|
1589
|
-
warningAt("Unescaped '{a}'.",
|
1628
|
+
warningAt("Unescaped '{a}'.",
|
1629
|
+
line, from + l - 1, '-');
|
1590
1630
|
}
|
1591
1631
|
break klass;
|
1592
1632
|
case '\\':
|
1593
1633
|
c = s.charAt(l);
|
1594
1634
|
if (c < ' ') {
|
1595
|
-
warningAt(
|
1635
|
+
warningAt(
|
1636
|
+
"Unexpected control character in regular expression.", line, from + l);
|
1596
1637
|
} else if (c === '<') {
|
1597
|
-
warningAt(
|
1638
|
+
warningAt(
|
1639
|
+
"Unexpected escaped character '{a}' in regular expression.", line, from + l, c);
|
1598
1640
|
}
|
1599
1641
|
l += 1;
|
1600
1642
|
q = true;
|
1601
1643
|
break;
|
1602
1644
|
case '/':
|
1603
|
-
warningAt("Unescaped '{a}'.",
|
1645
|
+
warningAt("Unescaped '{a}'.",
|
1646
|
+
line, from + l - 1, '/');
|
1604
1647
|
q = true;
|
1605
1648
|
break;
|
1606
1649
|
case '<':
|
1607
1650
|
if (xmode === 'script') {
|
1608
1651
|
c = s.charAt(l);
|
1609
1652
|
if (c === '!' || c === '/') {
|
1610
|
-
warningAt(
|
1653
|
+
warningAt(
|
1654
|
+
"HTML confusion in regular expression '<{a}'.", line, from + l, c);
|
1611
1655
|
}
|
1612
1656
|
}
|
1613
1657
|
q = true;
|
@@ -1619,7 +1663,8 @@ var JSLINT = (function () {
|
|
1619
1663
|
break;
|
1620
1664
|
case '.':
|
1621
1665
|
if (option.regexp) {
|
1622
|
-
warningAt("Insecure '{a}'.", line,
|
1666
|
+
warningAt("Insecure '{a}'.", line,
|
1667
|
+
from + l, c);
|
1623
1668
|
}
|
1624
1669
|
break;
|
1625
1670
|
case ']':
|
@@ -1628,13 +1673,15 @@ var JSLINT = (function () {
|
|
1628
1673
|
case '}':
|
1629
1674
|
case '+':
|
1630
1675
|
case '*':
|
1631
|
-
warningAt("Unescaped '{a}'.", line,
|
1676
|
+
warningAt("Unescaped '{a}'.", line,
|
1677
|
+
from + l, c);
|
1632
1678
|
break;
|
1633
1679
|
case '<':
|
1634
1680
|
if (xmode === 'script') {
|
1635
1681
|
c = s.charAt(l);
|
1636
1682
|
if (c === '!' || c === '/') {
|
1637
|
-
warningAt(
|
1683
|
+
warningAt(
|
1684
|
+
"HTML confusion in regular expression '<{a}'.", line, from + l, c);
|
1638
1685
|
}
|
1639
1686
|
}
|
1640
1687
|
}
|
@@ -1652,7 +1699,8 @@ var JSLINT = (function () {
|
|
1652
1699
|
l += 1;
|
1653
1700
|
c = s.charAt(l);
|
1654
1701
|
if (c < '0' || c > '9') {
|
1655
|
-
warningAt(
|
1702
|
+
warningAt(
|
1703
|
+
"Expected a number and instead saw '{a}'.", line, from + l, c);
|
1656
1704
|
}
|
1657
1705
|
l += 1;
|
1658
1706
|
low = +c;
|
@@ -1683,7 +1731,8 @@ var JSLINT = (function () {
|
|
1683
1731
|
}
|
1684
1732
|
}
|
1685
1733
|
if (s.charAt(l) !== '}') {
|
1686
|
-
warningAt(
|
1734
|
+
warningAt(
|
1735
|
+
"Expected '{a}' and instead saw '{b}'.", line, from + l, '}', c);
|
1687
1736
|
} else {
|
1688
1737
|
l += 1;
|
1689
1738
|
}
|
@@ -1691,7 +1740,8 @@ var JSLINT = (function () {
|
|
1691
1740
|
l += 1;
|
1692
1741
|
}
|
1693
1742
|
if (low > high) {
|
1694
|
-
warningAt(
|
1743
|
+
warningAt(
|
1744
|
+
"'{a}' should not be greater than '{b}'.", line, from + l, low, high);
|
1695
1745
|
}
|
1696
1746
|
}
|
1697
1747
|
}
|
@@ -1785,7 +1835,8 @@ var JSLINT = (function () {
|
|
1785
1835
|
|
1786
1836
|
function addlabel(t, type) {
|
1787
1837
|
|
1788
|
-
if (option.safe && funct['(global)'] &&
|
1838
|
+
if (option.safe && funct['(global)'] &&
|
1839
|
+
typeof predefined[t] !== 'boolean') {
|
1789
1840
|
warning('ADsafe global: ' + t + '.', token);
|
1790
1841
|
} else if (t === 'hasOwnProperty') {
|
1791
1842
|
warning("'hasOwnProperty' is a really bad name.");
|
@@ -1961,7 +2012,8 @@ loop: for (;;) {
|
|
1961
2012
|
if (nexttoken.id === '(end)') {
|
1962
2013
|
warning("Unmatched '{a}'.", t, t.id);
|
1963
2014
|
} else {
|
1964
|
-
warning(
|
2015
|
+
warning(
|
2016
|
+
"Expected '{a}' to match '{b}' from line {c} and instead saw '{d}'.",
|
1965
2017
|
nexttoken, id, t.id, t.line, nexttoken.value);
|
1966
2018
|
}
|
1967
2019
|
} else if (nexttoken.type !== '(identifier)' ||
|
@@ -2101,7 +2153,8 @@ loop: for (;;) {
|
|
2101
2153
|
if (option.white && nexttoken.id !== '(end)') {
|
2102
2154
|
i = indent + (bias || 0);
|
2103
2155
|
if (nexttoken.from !== i) {
|
2104
|
-
warning(
|
2156
|
+
warning(
|
2157
|
+
"Expected '{a}' to have an indentation at {b} instead at {c}.",
|
2105
2158
|
nexttoken, nexttoken.value, i, nexttoken.from);
|
2106
2159
|
}
|
2107
2160
|
}
|
@@ -2210,7 +2263,8 @@ loop: for (;;) {
|
|
2210
2263
|
|
2211
2264
|
function reservevar(s, v) {
|
2212
2265
|
return reserve(s, function () {
|
2213
|
-
if (this.id === 'this' || this.id === 'arguments'
|
2266
|
+
if (this.id === 'this' || this.id === 'arguments' ||
|
2267
|
+
this.id === 'eval') {
|
2214
2268
|
if (strict_mode && funct['(global)']) {
|
2215
2269
|
warning("Strict violation.", this);
|
2216
2270
|
} else if (option.safe) {
|
@@ -2365,7 +2419,8 @@ loop: for (;;) {
|
|
2365
2419
|
x.led = function (left) {
|
2366
2420
|
if (option.plusplus) {
|
2367
2421
|
warning("Unexpected use of '{a}'.", this, this.id);
|
2368
|
-
} else if ((!left.identifier || left.reserved) &&
|
2422
|
+
} else if ((!left.identifier || left.reserved) &&
|
2423
|
+
left.id !== '.' && left.id !== '[') {
|
2369
2424
|
warning("Bad operand.", this);
|
2370
2425
|
}
|
2371
2426
|
this.left = left;
|
@@ -2459,9 +2514,6 @@ loop: for (;;) {
|
|
2459
2514
|
if (!noindent) {
|
2460
2515
|
indentation();
|
2461
2516
|
}
|
2462
|
-
if (nexttoken.id === 'new') {
|
2463
|
-
warning("'new' should not be used as a statement.");
|
2464
|
-
}
|
2465
2517
|
r = parse(0, true);
|
2466
2518
|
|
2467
2519
|
// Look for the final semicolon.
|
@@ -2471,6 +2523,8 @@ loop: for (;;) {
|
|
2471
2523
|
warning(
|
2472
2524
|
"Expected an assignment or function call and instead saw an expression.",
|
2473
2525
|
token);
|
2526
|
+
} else if (r.id === '(' && r.left.id === 'new') {
|
2527
|
+
warning("Do not use 'new' for side effects.");
|
2474
2528
|
}
|
2475
2529
|
if (nexttoken.id !== ';') {
|
2476
2530
|
warningAt("Missing semicolon.", token.line,
|
@@ -3511,7 +3565,9 @@ loop: for (;;) {
|
|
3511
3565
|
if (ids[u] === true) {
|
3512
3566
|
warning("Duplicate id='{a}'.", nexttoken, v);
|
3513
3567
|
}
|
3514
|
-
if (
|
3568
|
+
if (!/^[A-Za-z][A-Za-z0-9._:\-]*$/.test(v)) {
|
3569
|
+
warning("Bad id: '{a}'.", nexttoken, v);
|
3570
|
+
} else if (option.adsafe) {
|
3515
3571
|
if (adsafe_id) {
|
3516
3572
|
if (v.slice(0, adsafe_id.length) !== adsafe_id) {
|
3517
3573
|
warning("ADsafe violation: An id must have a '{a}' prefix",
|
@@ -4000,6 +4056,9 @@ loop: for (;;) {
|
|
4000
4056
|
return this;
|
4001
4057
|
});
|
4002
4058
|
|
4059
|
+
|
4060
|
+
// ECMAScript parser
|
4061
|
+
|
4003
4062
|
delim('(endline)');
|
4004
4063
|
delim('(begin)');
|
4005
4064
|
delim('(end)').reach = true;
|
@@ -4584,28 +4643,6 @@ loop: for (;;) {
|
|
4584
4643
|
return p;
|
4585
4644
|
}
|
4586
4645
|
}
|
4587
|
-
};
|
4588
|
-
|
4589
|
-
function withparams() {
|
4590
|
-
var i, t = nexttoken, p = [];
|
4591
|
-
advance('(');
|
4592
|
-
nospace();
|
4593
|
-
if (nexttoken.id === ')') {
|
4594
|
-
advance(')');
|
4595
|
-
nospace(prevtoken, token);
|
4596
|
-
return;
|
4597
|
-
}
|
4598
|
-
for (;;) {
|
4599
|
-
i = parse(20);
|
4600
|
-
p.push(i);
|
4601
|
-
if (nexttoken.id === ',') {
|
4602
|
-
comma();
|
4603
|
-
} else {
|
4604
|
-
advance(')', t);
|
4605
|
-
nospace(prevtoken, token);
|
4606
|
-
return p;
|
4607
|
-
}
|
4608
|
-
}
|
4609
4646
|
}
|
4610
4647
|
|
4611
4648
|
function doFunction(i) {
|
@@ -4658,8 +4695,8 @@ loop: for (;;) {
|
|
4658
4695
|
nonadjacent(token, nexttoken);
|
4659
4696
|
}
|
4660
4697
|
doFunction(i);
|
4661
|
-
if (funct['(loopage)']
|
4662
|
-
warning("
|
4698
|
+
if (funct['(loopage)']) {
|
4699
|
+
warning("Don't make functions within a loop.");
|
4663
4700
|
}
|
4664
4701
|
return this;
|
4665
4702
|
});
|
@@ -4690,15 +4727,6 @@ loop: for (;;) {
|
|
4690
4727
|
return this;
|
4691
4728
|
});
|
4692
4729
|
|
4693
|
-
blockstmt('with', function () {
|
4694
|
-
if (!option.withstmt) {
|
4695
|
-
warning("Don't use with statements");
|
4696
|
-
}
|
4697
|
-
withparams();
|
4698
|
-
block(true);
|
4699
|
-
return this;
|
4700
|
-
});
|
4701
|
-
|
4702
4730
|
blockstmt('try', function () {
|
4703
4731
|
var b, e, s;
|
4704
4732
|
if (option.adsafe) {
|
@@ -5056,6 +5084,9 @@ loop: for (;;) {
|
|
5056
5084
|
reserve('public');
|
5057
5085
|
reserve('static');
|
5058
5086
|
|
5087
|
+
|
5088
|
+
// Parse JSON
|
5089
|
+
|
5059
5090
|
function jsonValue() {
|
5060
5091
|
|
5061
5092
|
function jsonObject() {
|
@@ -5181,7 +5212,6 @@ loop: for (;;) {
|
|
5181
5212
|
o.sub = false;
|
5182
5213
|
o.undef = true;
|
5183
5214
|
o.widget = false;
|
5184
|
-
o.withstmt= false;
|
5185
5215
|
predefined.Date = null;
|
5186
5216
|
predefined['eval'] = null;
|
5187
5217
|
predefined.Function = null;
|
@@ -5312,6 +5342,7 @@ loop: for (;;) {
|
|
5312
5342
|
return a;
|
5313
5343
|
}
|
5314
5344
|
|
5345
|
+
|
5315
5346
|
// Data summary.
|
5316
5347
|
|
5317
5348
|
itself.data = function () {
|
@@ -5525,8 +5556,8 @@ loop: for (;;) {
|
|
5525
5556
|
};
|
5526
5557
|
itself.jslint = itself;
|
5527
5558
|
|
5528
|
-
itself.edition = '2010-
|
5559
|
+
itself.edition = '2010-03-12';
|
5529
5560
|
|
5530
5561
|
return itself;
|
5531
5562
|
|
5532
|
-
}());
|
5563
|
+
}());
|