screw_server 0.1.4 → 0.1.6
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/Gemfile.run.lock +2 -10
- data/assets/screw-jslint.js +2 -2
- data/assets/vendor/jslint/README +41 -0
- data/assets/vendor/jslint/init_ui.js +178 -0
- data/assets/vendor/jslint/intercept.js +98 -0
- data/assets/vendor/jslint/jslint.html +309 -0
- data/assets/vendor/jslint/jslint.js +6945 -0
- data/assets/vendor/jslint/lint.html +765 -0
- data/bin/screw_server +1 -1
- data/lib/screw_server/app.rb +3 -2
- data/lib/screw_server/jslint_suite.rb +8 -9
- data/lib/screw_server/spec_file.rb +3 -2
- data/screw_server.gemspec +3 -3
- data/views/run_spec.haml +1 -0
- metadata +15 -10
- data/assets/vendor/fulljslint.js +0 -5699
data/Gemfile.run.lock
CHANGED
@@ -1,8 +1,8 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
screw_server (0.1.
|
5
|
-
bundler (= 1.0.
|
4
|
+
screw_server (0.1.6)
|
5
|
+
bundler (= 1.0.21)
|
6
6
|
daemons (= 1.0.10)
|
7
7
|
eventmachine (= 0.12.6)
|
8
8
|
haml (= 3.0.13)
|
@@ -30,12 +30,4 @@ PLATFORMS
|
|
30
30
|
ruby
|
31
31
|
|
32
32
|
DEPENDENCIES
|
33
|
-
bundler (= 1.0.7)
|
34
|
-
daemons (= 1.0.10)
|
35
|
-
eventmachine (= 0.12.6)
|
36
|
-
haml (= 3.0.13)
|
37
|
-
json (= 1.4.3)
|
38
|
-
rack (= 1.1.0)
|
39
33
|
screw_server!
|
40
|
-
sinatra (= 1.0)
|
41
|
-
thin (= 1.2.7)
|
data/assets/screw-jslint.js
CHANGED
@@ -49,8 +49,8 @@ if (Screw.jslint_suites.length > 0) {
|
|
49
49
|
for (var i = 0; i < JSLINT.errors.length; i += 1) {
|
50
50
|
var e = JSLINT.errors[i];
|
51
51
|
if (e) {
|
52
|
-
var line = parseInt(e.line, 10)
|
53
|
-
var character = parseInt(e.character, 10)
|
52
|
+
var line = parseInt(e.line, 10);
|
53
|
+
var character = parseInt(e.character, 10);
|
54
54
|
message += 'Lint at ' + name + ":" + line + ' character ' +
|
55
55
|
character + ': ' + e.reason + "\n";
|
56
56
|
message += (e.evidence || '').
|
@@ -0,0 +1,41 @@
|
|
1
|
+
JSLint, The JavaScript Code Quality Tool
|
2
|
+
|
3
|
+
Douglas Crockford
|
4
|
+
douglas@crockford.com
|
5
|
+
|
6
|
+
2011-04-17
|
7
|
+
|
8
|
+
jslint.js contains the fully commented JSLINT function.
|
9
|
+
|
10
|
+
jslint.html runs the JSLINT function in a web page. The page also depends
|
11
|
+
on adsafe.js [www.ADsafe.org] and json2.js [www.JSON.org] (which are not
|
12
|
+
included in this project) and intercept.js and init_ui.js (which are). The
|
13
|
+
js files should all be minified, and all except init_ui.js are concatenated
|
14
|
+
together to form web_jslint.js.
|
15
|
+
|
16
|
+
intercept.js augments ADsafe, giving widgets access to the clock, cookies,
|
17
|
+
and the JSLINT function.
|
18
|
+
|
19
|
+
init_ui.js hooks the HTML ui components to ADsafe.
|
20
|
+
|
21
|
+
lint.html describes JSLint's usage.
|
22
|
+
|
23
|
+
Direct questions and comments to http://tech.groups.yahoo.com/group/jslint_com/.
|
24
|
+
|
25
|
+
JSLint can be run anywhere that JavaScript (or Java) can run. See for example
|
26
|
+
http://tech.groups.yahoo.com/group/jslint_com/database?method=reportRows&tbl=1
|
27
|
+
|
28
|
+
The place to express yourself in programming is in the quality of your ideas,
|
29
|
+
and the efficiency of execution. The role of style is the same as in
|
30
|
+
literature. A great writer doesn't express himself by putting the spaces
|
31
|
+
before his commas instead of after, or by putting extra spaces inside his
|
32
|
+
parentheses. A great writer will slavishly conform to some rules of style,
|
33
|
+
and that in no way constrains his power to express himself creatively.
|
34
|
+
See for example William Strunk's The Elements of Style
|
35
|
+
[http://www.crockford.com/wrrrld/style.html].
|
36
|
+
|
37
|
+
This applies to programming as well. Conforming to a consistent style
|
38
|
+
improves readability, and frees you to express yourself in ways that matter.
|
39
|
+
JSLint here plays the part of a stern but benevolent editor, helping you to
|
40
|
+
get the style right so that you can focus your creative energy where it is
|
41
|
+
most needed.
|
@@ -0,0 +1,178 @@
|
|
1
|
+
// init_ui.js
|
2
|
+
// 2011-07-19
|
3
|
+
|
4
|
+
// This is the web browser companion to fulljslint.js. It is an ADsafe
|
5
|
+
// lib file that implements a web ui by adding behavior to the widget's
|
6
|
+
// html tags.
|
7
|
+
|
8
|
+
// It stores a function in lib.init_ui. Calling that function will
|
9
|
+
// start up the JSLint widget ui.
|
10
|
+
|
11
|
+
// option = {adsafe: true, fragment: false}
|
12
|
+
|
13
|
+
/*properties check, cookie, each, edition, get, getCheck, getTitle, getValue,
|
14
|
+
has, indent, isArray, join, jslint, length, lib, maxerr, maxlen, on,
|
15
|
+
predef, push, q, select, set, split, stringify, style, target, tree, value
|
16
|
+
*/
|
17
|
+
|
18
|
+
|
19
|
+
ADSAFE.lib("init_ui", function (lib) {
|
20
|
+
"use strict";
|
21
|
+
|
22
|
+
return function (dom) {
|
23
|
+
var table = dom.q('#JSLINT_TABLE'),
|
24
|
+
boxes = table.q('span'),
|
25
|
+
indent = dom.q('#JSLINT_INDENT'),
|
26
|
+
input = dom.q('#JSLINT_INPUT'),
|
27
|
+
jslintstring = dom.q('#JSLINT_JSLINTSTRING'),
|
28
|
+
maxerr = dom.q('#JSLINT_MAXERR'),
|
29
|
+
maxlen = dom.q('#JSLINT_MAXLEN'),
|
30
|
+
option = lib.cookie.get(),
|
31
|
+
output = dom.q('#JSLINT_OUTPUT'),
|
32
|
+
tree = dom.q('#JSLINT_TREE'),
|
33
|
+
predefined = dom.q('#JSLINT_PREDEF');
|
34
|
+
|
35
|
+
function show_jslint_control() {
|
36
|
+
|
37
|
+
// Build and display a /*jslint*/ control comment.
|
38
|
+
// The comment can be copied into a .js file.
|
39
|
+
|
40
|
+
var a = [];
|
41
|
+
|
42
|
+
boxes.each(function (bunch) {
|
43
|
+
var name = bunch.getTitle(),
|
44
|
+
value = ADSAFE.get(option, name);
|
45
|
+
if (typeof value === 'boolean') {
|
46
|
+
a.push(name + ': ' + value);
|
47
|
+
bunch.style('backgroundColor', value ? 'black' : 'white');
|
48
|
+
} else {
|
49
|
+
bunch.style('backgroundColor', 'gainsboro');
|
50
|
+
}
|
51
|
+
});
|
52
|
+
if (typeof option.maxerr === 'number' && option.maxerr >= 0) {
|
53
|
+
a.push('maxerr: ' + String(option.maxerr));
|
54
|
+
}
|
55
|
+
if (typeof option.maxlen === 'number' && option.maxlen >= 0) {
|
56
|
+
a.push('maxlen: ' + String(option.maxlen));
|
57
|
+
}
|
58
|
+
if (typeof option.indent === 'number' && option.indent >= 0) {
|
59
|
+
a.push('indent: ' + String(option.indent));
|
60
|
+
}
|
61
|
+
jslintstring.value('/*jslint ' + a.join(', ') + ' */');
|
62
|
+
|
63
|
+
// Make a JSON cookie of the option object.
|
64
|
+
|
65
|
+
lib.cookie.set(option);
|
66
|
+
}
|
67
|
+
|
68
|
+
function show_options() {
|
69
|
+
indent.value(String(option.indent));
|
70
|
+
maxlen.value(String(option.maxlen || ''));
|
71
|
+
maxerr.value(String(option.maxerr));
|
72
|
+
predefined.value(ADSAFE.isArray(option.predef) ? option.predef.join(',') : '');
|
73
|
+
show_jslint_control();
|
74
|
+
}
|
75
|
+
|
76
|
+
function update_box(event) {
|
77
|
+
|
78
|
+
// Boxes are tristate, cycling true, false, undefined.
|
79
|
+
|
80
|
+
var title = event.target.getTitle();
|
81
|
+
if (title) {
|
82
|
+
ADSAFE.set(option, title,
|
83
|
+
ADSAFE.get(option, title) === true ? false :
|
84
|
+
ADSAFE.get(option, title) === false ? undefined : true);
|
85
|
+
}
|
86
|
+
show_jslint_control();
|
87
|
+
}
|
88
|
+
|
89
|
+
function update_number(event) {
|
90
|
+
var value = event.target.getValue();
|
91
|
+
if (value.length === 0 || +value < 0 || !isFinite(value)) {
|
92
|
+
value = '';
|
93
|
+
ADSAFE.set(option, event.target.getTitle(), undefined);
|
94
|
+
} else {
|
95
|
+
ADSAFE.set(option, event.target.getTitle(), +value);
|
96
|
+
}
|
97
|
+
event.target.value(String(value));
|
98
|
+
show_jslint_control();
|
99
|
+
}
|
100
|
+
|
101
|
+
function update_list(event) {
|
102
|
+
var value = event.target.getValue().split(/\s*,\s*/);
|
103
|
+
ADSAFE.set(option, event.target.getTitle(), value);
|
104
|
+
event.target.value(value.join(', '));
|
105
|
+
show_jslint_control();
|
106
|
+
}
|
107
|
+
|
108
|
+
|
109
|
+
// Restore the options from a JSON cookie.
|
110
|
+
|
111
|
+
if (!option || typeof option !== 'object') {
|
112
|
+
option = {
|
113
|
+
indent: 4,
|
114
|
+
maxerr: 50
|
115
|
+
};
|
116
|
+
} else {
|
117
|
+
option.indent =
|
118
|
+
typeof option.indent === 'number' && option.indent >= 0 ?
|
119
|
+
option.indent : 4;
|
120
|
+
option.maxerr =
|
121
|
+
typeof option.maxerr === 'number' && option.maxerr >= 0 ?
|
122
|
+
option.maxerr : 50;
|
123
|
+
}
|
124
|
+
show_options();
|
125
|
+
|
126
|
+
|
127
|
+
// Display the edition.
|
128
|
+
|
129
|
+
dom.q('#JSLINT_EDITION').value('Edition ' + lib.edition());
|
130
|
+
|
131
|
+
// Add click event handlers to the [JSLint] and [clear] buttons.
|
132
|
+
|
133
|
+
dom.q('input&jslint').on('click', function () {
|
134
|
+
tree.value('');
|
135
|
+
|
136
|
+
// Call JSLint and display the report.
|
137
|
+
|
138
|
+
tree.value(String(lib.jslint(input.getValue(), option, output) / 1000) + ' seconds.');
|
139
|
+
input.select();
|
140
|
+
return false;
|
141
|
+
});
|
142
|
+
|
143
|
+
dom.q('input&tree').on('click', function () {
|
144
|
+
output.value('Tree:');
|
145
|
+
tree.value(JSON.stringify(lib.tree(), [
|
146
|
+
'label', 'id', 'string', 'number', 'arity', 'name', 'first',
|
147
|
+
'second', 'third', 'block', 'else', 'quote', 'type'
|
148
|
+
], 4));
|
149
|
+
input.select();
|
150
|
+
});
|
151
|
+
|
152
|
+
dom.q('input&clear').on('click', function () {
|
153
|
+
output.value('');
|
154
|
+
tree.value('');
|
155
|
+
input.value('').select();
|
156
|
+
});
|
157
|
+
|
158
|
+
|
159
|
+
dom.q('#JSLINT_CLEARALL').on('click', function () {
|
160
|
+
option = {
|
161
|
+
indent: 4,
|
162
|
+
maxerr: 50
|
163
|
+
};
|
164
|
+
show_options();
|
165
|
+
});
|
166
|
+
|
167
|
+
table.on('click', update_box);
|
168
|
+
indent.on('change', update_number);
|
169
|
+
maxerr.on('change', update_number);
|
170
|
+
maxlen.on('change', update_number);
|
171
|
+
predefined.on('change', update_list);
|
172
|
+
input
|
173
|
+
.on('change', function () {
|
174
|
+
output.value('');
|
175
|
+
})
|
176
|
+
.select();
|
177
|
+
};
|
178
|
+
});
|
@@ -0,0 +1,98 @@
|
|
1
|
+
// intercept.js
|
2
|
+
// 2011-06-13
|
3
|
+
|
4
|
+
// This file makes it possible for JSLint to run as an ADsafe widget by
|
5
|
+
// adding lib features.
|
6
|
+
|
7
|
+
// It provides a JSON cookie facility. Each widget is allowed to create a
|
8
|
+
// single JSON cookie.
|
9
|
+
|
10
|
+
// It also provides a way for the widget to call JSLint. The widget cannot
|
11
|
+
// call JSLint directly because it is loaded as a global variable. I don't
|
12
|
+
// want to change that because other versions of JSLint depend on that.
|
13
|
+
|
14
|
+
// And it provides access to the syntax tree that JSLint constructed.
|
15
|
+
|
16
|
+
/*jslint nomen: true, unparam: true */
|
17
|
+
|
18
|
+
/*global ADSAFE, document, JSLINT */
|
19
|
+
|
20
|
+
/*properties ___nodes___, _intercept, cookie, edition, get, getTime,
|
21
|
+
indexOf, innerHTML, jslint, length, now, parse, replace, report, set,
|
22
|
+
setTime, slice, stringify, toGMTString, tree
|
23
|
+
*/
|
24
|
+
|
25
|
+
ADSAFE._intercept(function (id, dom, lib, bunch) {
|
26
|
+
"use strict";
|
27
|
+
|
28
|
+
// Give every widget access to a JSON cookie. The name of the cookie will be
|
29
|
+
// the same as the id of the widget.
|
30
|
+
|
31
|
+
lib.cookie = {
|
32
|
+
get: function () {
|
33
|
+
|
34
|
+
// Get the raw cookie. Extract this widget's cookie, and parse it.
|
35
|
+
|
36
|
+
var c = ' ' + document.cookie + ';',
|
37
|
+
s = c.indexOf((' ' + id + '=')),
|
38
|
+
v;
|
39
|
+
try {
|
40
|
+
if (s >= 0) {
|
41
|
+
s += id.length + 2;
|
42
|
+
v = JSON.parse(c.slice(s, c.indexOf(';', s)));
|
43
|
+
}
|
44
|
+
} catch (ignore) {}
|
45
|
+
return v;
|
46
|
+
},
|
47
|
+
set: function (value) {
|
48
|
+
|
49
|
+
// Set a cookie. It must be under 2000 in length. Escapify equal sign
|
50
|
+
// and semicolon if necessary.
|
51
|
+
|
52
|
+
var d,
|
53
|
+
j = JSON.stringify(value)
|
54
|
+
.replace(/[=]/g, '\\u003d')
|
55
|
+
.replace(/[;]/g, '\\u003b');
|
56
|
+
|
57
|
+
if (j.length < 2000) {
|
58
|
+
d = new Date();
|
59
|
+
d.setTime(d.getTime() + 1e9);
|
60
|
+
document.cookie = id + "=" + j + ';expires=' + d.toGMTString();
|
61
|
+
}
|
62
|
+
}
|
63
|
+
};
|
64
|
+
});
|
65
|
+
|
66
|
+
ADSAFE._intercept(function (id, dom, lib, bunch) {
|
67
|
+
"use strict";
|
68
|
+
|
69
|
+
// Give only the JSLINT_ widget access to the JSLINT function.
|
70
|
+
// We add a jslint function to its lib that calls JSLINT and
|
71
|
+
// then calls JSLINT.report, and stuffs the html result into
|
72
|
+
// a node provided by the widget. A widget does not get direct
|
73
|
+
// access to nodes.
|
74
|
+
|
75
|
+
// We also add an edition function to the lib that gives the
|
76
|
+
// widget access to the current edition string.
|
77
|
+
|
78
|
+
var now = Date.now || function () {
|
79
|
+
return new Date().getTime();
|
80
|
+
};
|
81
|
+
if (id === 'JSLINT_') {
|
82
|
+
lib.jslint = function (source, options, output) {
|
83
|
+
output.___nodes___[0].innerHTML = "Working.";
|
84
|
+
var after, report, before = now();
|
85
|
+
JSLINT(source, options);
|
86
|
+
report = JSLINT.report();
|
87
|
+
after = now();
|
88
|
+
output.___nodes___[0].innerHTML = report;
|
89
|
+
return after - before;
|
90
|
+
};
|
91
|
+
lib.edition = function () {
|
92
|
+
return JSLINT.edition;
|
93
|
+
};
|
94
|
+
lib.tree = function () {
|
95
|
+
return JSLINT.tree;
|
96
|
+
};
|
97
|
+
}
|
98
|
+
});
|
@@ -0,0 +1,309 @@
|
|
1
|
+
<html>
|
2
|
+
<head><title>JSLint, The JavaScript Code Quality Tool</title>
|
3
|
+
<link rel="icon" type="image/gif" href="http://www.JSLint.com/favicon.gif">
|
4
|
+
<style>
|
5
|
+
#JSLINT_TABLE td span {
|
6
|
+
border: 2px solid black;
|
7
|
+
}
|
8
|
+
table {
|
9
|
+
cursor: pointer;
|
10
|
+
}
|
11
|
+
i {
|
12
|
+
font-family: serif;
|
13
|
+
font-style: italic;
|
14
|
+
}
|
15
|
+
p {
|
16
|
+
padding-left: 10pt;
|
17
|
+
}
|
18
|
+
input[type="button"] {
|
19
|
+
background-color: navajowhite;
|
20
|
+
border: 2px solid black;
|
21
|
+
color: black;
|
22
|
+
}
|
23
|
+
input[type="button"]:hover {
|
24
|
+
background-color: lightsteelblue;
|
25
|
+
text-decoration: underline;
|
26
|
+
}
|
27
|
+
input[type="button"]:active {
|
28
|
+
background-color: indianred;
|
29
|
+
text-decoration: none;
|
30
|
+
}
|
31
|
+
|
32
|
+
input[type="text"] {
|
33
|
+
border: 2px solid black;
|
34
|
+
text-align: center;
|
35
|
+
}
|
36
|
+
|
37
|
+
a:link {
|
38
|
+
color: darkblue;
|
39
|
+
}
|
40
|
+
a:visited {
|
41
|
+
color: purple;
|
42
|
+
}
|
43
|
+
a:hover {
|
44
|
+
color: blue;
|
45
|
+
}
|
46
|
+
a:active {
|
47
|
+
color: red;
|
48
|
+
}
|
49
|
+
body {
|
50
|
+
background-color: gainsboro;
|
51
|
+
padding-left: 5%;
|
52
|
+
padding-right: 5%;
|
53
|
+
text-align: center;
|
54
|
+
}
|
55
|
+
|
56
|
+
|
57
|
+
.leftcolumn {
|
58
|
+
float: left;
|
59
|
+
margin: 1em;
|
60
|
+
}
|
61
|
+
|
62
|
+
#errors {
|
63
|
+
margin: 1em;
|
64
|
+
border: 2px solid black;
|
65
|
+
padding: 1em;
|
66
|
+
background-color: mistyrose;
|
67
|
+
}
|
68
|
+
#errors p {
|
69
|
+
margin-left: 2em;
|
70
|
+
}
|
71
|
+
#errors p.evidence {
|
72
|
+
margin-left: 0;
|
73
|
+
font-family: monospace;
|
74
|
+
}
|
75
|
+
|
76
|
+
#functions {
|
77
|
+
background-color: white;
|
78
|
+
}
|
79
|
+
#members {
|
80
|
+
background-color: peachpuff;
|
81
|
+
}
|
82
|
+
|
83
|
+
#functions, #members {
|
84
|
+
border: 2px solid black;
|
85
|
+
font-family: monospace;
|
86
|
+
margin: 1em;
|
87
|
+
padding: 1em;
|
88
|
+
}
|
89
|
+
#functions div {
|
90
|
+
margin-left: 10em;
|
91
|
+
text-indent: -5em;
|
92
|
+
}
|
93
|
+
#functions div.function {
|
94
|
+
margin-left: 0;
|
95
|
+
text-indent: 0;
|
96
|
+
}
|
97
|
+
|
98
|
+
#JSLINT_OUTPUT {
|
99
|
+
text-align: left;
|
100
|
+
}
|
101
|
+
|
102
|
+
#JSLINT_INPUT{
|
103
|
+
border: 2px solid black;
|
104
|
+
color: black;
|
105
|
+
font-family: monospace;
|
106
|
+
height: 3in;
|
107
|
+
overflow: auto;
|
108
|
+
padding: 0.5em;
|
109
|
+
width: 100%;
|
110
|
+
}
|
111
|
+
|
112
|
+
#JSLINT_JSLINTSTRING {
|
113
|
+
background-color: peachpuff;
|
114
|
+
border: 2px solid black;
|
115
|
+
font-family: monospace;
|
116
|
+
margin: 1em;
|
117
|
+
padding: 1em;
|
118
|
+
}
|
119
|
+
|
120
|
+
#JSLINT_OPTIONS {
|
121
|
+
border: 2px solid black;
|
122
|
+
color: black;
|
123
|
+
margin: 1em;
|
124
|
+
padding: 8px;
|
125
|
+
text-align: left;
|
126
|
+
background-color: linen;
|
127
|
+
}
|
128
|
+
|
129
|
+
#JSLINT_TREE, #JSLINT_FIELDS {
|
130
|
+
text-align: left;
|
131
|
+
}
|
132
|
+
</style></head>
|
133
|
+
<body>
|
134
|
+
<table border="0" cols="2"><tbody>
|
135
|
+
<tr>
|
136
|
+
<td><img src="jslint.gif" width="383" height="120" alt="JSLint"> </td>
|
137
|
+
<td valign="middle" align="left">
|
138
|
+
<p><big>The <a href="http://javascript.crockford.com/">JavaScript</a> Code Quality Tool</big></p>
|
139
|
+
<p id=JSLINT_EDITION></p>
|
140
|
+
<p>
|
141
|
+
<a href="http://www.JSLint.com/lint.html">Read the instructions.</a>
|
142
|
+
<a href="#JSLINT_OPTIONS">Set the options.</a>
|
143
|
+
<a href="http://www.amazon.com/exec/obidos/ASIN/0596517742/wrrrldwideweb"
|
144
|
+
target="_blank">Enjoy <i>The Good Parts</i>.</a></p>
|
145
|
+
</td></tr></tbody></table>
|
146
|
+
<script src="web_jslint.js">
|
147
|
+
// json2.js+jslint.js+adsafe.js+intercept.js
|
148
|
+
</script>
|
149
|
+
|
150
|
+
<div id="JSLINT_">
|
151
|
+
|
152
|
+
<p style="background-color: transparent;"><textarea id="JSLINT_INPUT"></textarea></p>
|
153
|
+
<p>
|
154
|
+
<input type="button" name="jslint" value="JSLint">
|
155
|
+
|
156
|
+
<input type="button" name="tree" value="Syntax Tree">
|
157
|
+
|
158
|
+
<input type="button" name="clear" value="clear">
|
159
|
+
</p>
|
160
|
+
<div id="JSLINT_OUTPUT">
|
161
|
+
|
162
|
+
<div style="text-align: center;">Paste your program into the text box
|
163
|
+
above and click a <input type="button" name="jslint" value="JSLint">
|
164
|
+
button.</div>
|
165
|
+
<div style="text-align: center; margin: 1em; border: 2px solid black; padding: 1em; background-color: papayawhip;">
|
166
|
+
I love JSLint. It has caught more errors of inadvertence than I can count.<br><i>L Peter Deutsch</i>
|
167
|
+
|
168
|
+
</div>
|
169
|
+
</div>
|
170
|
+
<pre id="JSLINT_TREE"></pre>
|
171
|
+
<p>
|
172
|
+
<input type="button" name="jslint" value="JSLint">
|
173
|
+
|
174
|
+
<input type="button" name="tree" value="Syntax Tree">
|
175
|
+
|
176
|
+
<input type="button" name="clear" value="clear">
|
177
|
+
|
178
|
+
<input type="button" id="JSLINT_CLEARALL" value="Clear All Options">
|
179
|
+
</p>
|
180
|
+
<p id="JSLINT_OPTIONS">
|
181
|
+
<table id="JSLINT_TABLE" border="0">
|
182
|
+
<tr>
|
183
|
+
<td><span title="devel"> </span></td>
|
184
|
+
<td title="devel">Assume <code>console</code>, <code>alert</code>, ...</td>
|
185
|
+
<td><span title="bitwise"> </span></td>
|
186
|
+
<td title="bitwise">Tolerate bitwise operators</td>
|
187
|
+
<td><span title="regexp"> </span></td>
|
188
|
+
<td title="regexp">Tolerate <tt>.</tt> and <tt>[^</tt>...<tt>]</tt> in /RegExp/</td>
|
189
|
+
</tr>
|
190
|
+
<tr>
|
191
|
+
<td><span title="browser"> </span></td>
|
192
|
+
<td title="browser">Assume a browser</td>
|
193
|
+
<td><span title="confusion"> </span></td>
|
194
|
+
<td title="confusion">Tolerate type confusion</td>
|
195
|
+
<td><span title="undef"> </span></td>
|
196
|
+
<td title="undef">Tolerate misordered definitions</td>
|
197
|
+
</tr>
|
198
|
+
<tr>
|
199
|
+
<td><span title="node"> </span></td>
|
200
|
+
<td title="node">Assume <a href="http://nodejs.org/">Node.js</a></td>
|
201
|
+
<td><span title="continue"> </span></td>
|
202
|
+
<td title="continue">Tolerate <tt>continue</tt></td>
|
203
|
+
<td><span title="unparam"> </span></td>
|
204
|
+
<td title="unparam">Tolerate unused parameters</td>
|
205
|
+
</tr>
|
206
|
+
<tr>
|
207
|
+
<td><span title="rhino"> </span></td>
|
208
|
+
<td title="rhino">Assume <a href="http://www.mozilla.org/rhino/">Rhino</a></td>
|
209
|
+
<td><span title="debug"> </span></td>
|
210
|
+
<td title="debug">Tolerate <tt>debugger</tt> statements</td>
|
211
|
+
<td><span title="sloppy"> </span></td>
|
212
|
+
<td title="sloppy">Tolerate missing <code>'use strict'</code> pragma</td>
|
213
|
+
</tr>
|
214
|
+
<tr>
|
215
|
+
<td><span title="widget"> </span></td>
|
216
|
+
<td title="widget">Assume a <a href="http://widgets.yahoo.com/tools/">Yahoo Widget</a></td>
|
217
|
+
<td><span title="eqeq"> </span></td>
|
218
|
+
<td title="eqeq">Tolerate <code>==</code> and <code>!=</code></td>
|
219
|
+
<td><span title="sub"> </span></td>
|
220
|
+
<td title="sub">Tolerate inefficient subscripting</td>
|
221
|
+
</tr>
|
222
|
+
<tr>
|
223
|
+
<td><span title="windows"> </span></td>
|
224
|
+
<td title="windows">Assume Windows</td>
|
225
|
+
<td><span title="es5"> </span></td>
|
226
|
+
<td title="es5">Tolerate ES5 syntax</td>
|
227
|
+
<td><span title="vars"> </span></td>
|
228
|
+
<td title="vars">Tolerate many <tt>var</tt> statements per function</td>
|
229
|
+
</tr>
|
230
|
+
<tr>
|
231
|
+
<td> </td>
|
232
|
+
<td> </td>
|
233
|
+
<td><span title="evil"> </span></td>
|
234
|
+
<td title="evil">Tolerate <tt>eval</tt></td>
|
235
|
+
<td><span title="white"> </span></td>
|
236
|
+
<td title="white">Tolerate messy white space</td>
|
237
|
+
</tr>
|
238
|
+
<tr>
|
239
|
+
<td><span title="passfail"> </span></td>
|
240
|
+
<td title="passfail">Stop on first error</td>
|
241
|
+
<td><span title="forin"> </span></td>
|
242
|
+
<td title="forin">Tolerate <a href="http://yuiblog.com/blog/2006/09/26/for-in-intrigue/">unfiltered</a> <tt>for</tt> <tt>in</tt></td>
|
243
|
+
<td><span title="css"> </span></td>
|
244
|
+
<td title="css">Tolerate CSS workarounds</td>
|
245
|
+
</tr>
|
246
|
+
<tr>
|
247
|
+
<td> </td>
|
248
|
+
<td> </td>
|
249
|
+
<td><span title="newcap"> </span></td>
|
250
|
+
<td title="newcap">Tolerate uncapitalized constructors</td>
|
251
|
+
<td><span title="cap"> </span></td>
|
252
|
+
<td title="cap">Tolerate <tt>HTML</tt> case</td>
|
253
|
+
</tr>
|
254
|
+
<tr>
|
255
|
+
<td><span title="safe"> </span></td>
|
256
|
+
<td title="safe">Safe Subset</td>
|
257
|
+
<td><span title="nomen"> </span></td>
|
258
|
+
<td title="nomen">Tolerate dangling <tt>_</tt> in identifiers</td>
|
259
|
+
<td><span title="on"> </span></td>
|
260
|
+
<td title="on">Tolerate <tt>HTML</tt> event handlers</td>
|
261
|
+
</tr>
|
262
|
+
<tr>
|
263
|
+
<td><span title="adsafe"> </span></td>
|
264
|
+
<td title="adsafe">Verify <a href="http://www.ADsafe.org">ADsafe</a></td>
|
265
|
+
<td><span title="plusplus"> </span></td>
|
266
|
+
<td title="plusplus">Tolerate <tt>++</tt> and <tt>--</tt></td>
|
267
|
+
<td><span title="fragment"> </span></td>
|
268
|
+
<td title="fragment">Tolerate <tt>HTML</tt> fragments</td>
|
269
|
+
</tr>
|
270
|
+
</table>
|
271
|
+
<p><br clear=all>
|
272
|
+
</p>
|
273
|
+
<div id=JSLINT_FIELDS>
|
274
|
+
<input id="JSLINT_INDENT" type="text" size="2" title="indent" value="" autocomplete=off> <label for="JSLINT_INDENT" title="indent">Indentation</label><br>
|
275
|
+
<input id="JSLINT_MAXLEN" type="text" size="2" title="maxlen" value="" autocomplete=off> <label for="JSLINT_MAXLEN" title="maxlen">Maximum line length</label><br>
|
276
|
+
<input id="JSLINT_MAXERR" type="text" size="2" title="maxerr" value="" autocomplete=off> <label for="JSLINT_MAXERR" title="maxerr">Maximum number of errors</label><br>
|
277
|
+
<label title=predef for="JSLINT_PREDEF">Predefined <small>( <code>,</code> separated)</small></label> <input id="JSLINT_PREDEF" type="text" size="72" autocomplete=off title=predef>
|
278
|
+
</div>
|
279
|
+
</p>
|
280
|
+
<p id="JSLINT_JSLINTSTRING"></p>
|
281
|
+
<p> Copyright 2002 <a href="http://www.JSLint.com/lint.html">Douglas
|
282
|
+
Crockford.</a> <a target="_blank" href="http://www.crockford.com/">All
|
283
|
+
Rights Reserved Wrrrldwide and Beyond!</a> <br>
|
284
|
+
<a href="http://javascript.crockford.com/code.html" target="_blank">Code
|
285
|
+
Conventions for the JavaScript Programming Language.</a><br>
|
286
|
+
<a href="http://tech.groups.yahoo.com/group/jslint_com/" target="_blank">Join
|
287
|
+
the JSLint Group.</a> </p>
|
288
|
+
<script>
|
289
|
+
ADSAFE.id("JSLINT_");
|
290
|
+
</script>
|
291
|
+
|
292
|
+
<script src="init_ui.js"></script>
|
293
|
+
|
294
|
+
<script>
|
295
|
+
ADSAFE.go("JSLINT_", function (dom, lib) {
|
296
|
+
"use strict";
|
297
|
+
lib.init_ui(dom);
|
298
|
+
});
|
299
|
+
</script>
|
300
|
+
|
301
|
+
</div>
|
302
|
+
|
303
|
+
<a href="http://www.JSLint.com/"><img src="jslintpill.gif" width="36" height="17" border="0"></a>
|
304
|
+
<a href="http://tech.groups.yahoo.com/group/jslint_com/"><img src="y.gif" width="31" height="17" border="0"></a>
|
305
|
+
<a href="https://github.com/douglascrockford/JSLint"><img src="github.gif" width="39" height="16" border="0"></a>
|
306
|
+
<a href="http://www.ADsafe.org/"><img src="adsafepill.gif" width="36" height="17" border="0"></a>
|
307
|
+
<a href="http://www.JSON.org/"><img src="jsonpill.gif" width="36" height="17" border="0"></a>
|
308
|
+
<a href="http://www.1and1.com/?k_id=10219574"><img src="1and1pill.gif" width="36" height="17" border="0"></a>
|
309
|
+
</body></html>
|