summaryrefslogtreecommitdiff
path: root/_test/jslint.js
blob: 730f8d8a8b9daf47190c3d7a257a0ba6c28bae06 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
/**
 * Copy to a JavaScript console on your DokuWiki instance and execute
 * Runs JSLint on all our JavaScript files with our settings
 */

(function () {
var globals = ['jQuery', 'SIG', 'NS', 'JSINFO', 'LANG', 'DOKU_BASE',
               'DOKU_UHC' // FIXME: Should be moved to JSINFO
    ], files = {
        'scripts/behaviour.js': null,
        //"scripts/compatibility.js": null,
        "scripts/cookie.js": null,
        //"scripts/delay.js": null,
        //"scripts/drag.js": null,
        "scripts/edit.js": null,
        "scripts/editor.js": null,
        "scripts/helpers.js": null,
        "scripts/hotkeys.js": null,
        "scripts/index.js": null,
        "scripts/linkwiz.js": null,
        "scripts/locktimer.js": null,
        "scripts/media.js": null,
        "scripts/page.js": null,
        "scripts/qsearch.js": null,
        "scripts/script.js": null,
        "scripts/textselection.js": null,
        "scripts/toolbar.js": null,
        "scripts/tree.js": null //,
        //"scripts/tw-sack.js": null
    }, overwrites = {
        "scripts/script.js": {evil: true},
        "scripts/media.js": {devel: true, windows: true},
        "scripts/locktimer.js": {devel: true},
        "scripts/behaviour.js": {devel: true},
        "scripts/helpers.js": {windows: true}
    };

jQuery.ajax({
    dataType: 'script',
    type: "GET",
//  url: 'http://jshint.com/jshint.js'
    url: 'https://raw.github.com/douglascrockford/JSLint/master/jslint.js',
    success: function () {
        for (var file in files) {
            jQuery.ajax({
                cache: false,
                async: false,
                type: "GET",
                url: DOKU_BASE + 'lib/' + file,
                dataType: 'text',
                success: function (res) {
                    files[file] = res;
                    var data = lint(files[file]);
                    jQuery.merge(globals, data.globals);
            }});
        }

        for (var file in files) {
            if (!files[file]) {
                continue;
            }
            // FIXME more fine-grained write access
            var data = lint('/*global ' + globals.join(':true, ') +
                            ':true*/\n' + files[file], overwrites[file]);
            console.log(file);
            jQuery.each(data.errors || [], function (_, val) {
                if (val === null) {
                    return;
                }
                console.error(val.reason + ' (Line ' + (val.line - 1) +
                              ', character ' + val.character + '):\n' +
                              val.evidence);
            });
        };
    }
});

function lint(txt, overwrite) {
    JSLINT(txt, jQuery.extend({
        // These settings are necessary
        browser: true,

        // Things we probably should learn someday
        sloppy: true, white: true, eqeq: true, nomen: true,
        plusplus: true, regexp: true
    }, overwrite));
    return JSLINT.data();
}
})();