all files / lib/languages/ coffeescript.js

100% Statements 12/12
100% Branches 0/0
100% Functions 0/0
100% Lines 12/12
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 90 91 92                                                                                                                                                               
"use strict";
 
Object.defineProperty(exports, "__esModule", {
    value: true
});
exports.coffeescript = exports.coffee = undefined;
 
var _javascript = require("./javascript");
 
var _utils = require("../utils");
 
// Ignore comments starting with { to privilege string interpolation highlighting
var comment = /#(?!\{).+/,
    interpolation = {
    pattern: /#\{[^}]+\}/,
    alias: 'variable'
};
 
var coffeescript = _utils.lang.extend(_javascript.javascript, {
    comment: comment,
    string: [
    // Strings are multiline
    /'(?:\\?[^\\])*?'/, {
        // Strings are multiline
        pattern: /"(?:\\?[^\\])*?"/,
        inside: {
            interpolation: interpolation,
            _order: ["interpolation"]
        }
    }],
    keyword: /\b(and|break|by|catch|class|continue|debugger|delete|do|each|else|extend|extends|false|finally|for|if|in|instanceof|is|isnt|let|loop|namespace|new|no|not|null|of|off|on|or|own|return|super|switch|then|this|throw|true|try|typeof|undefined|unless|until|when|while|window|with|yes|yield)\b/,
    "class-member": {
        pattern: /@(?!\d)\w+/,
        alias: 'variable'
    },
    _order: ["string", "keyword", "class-member"]
});
 
_utils.lang.insertBefore(coffeescript, 'comment', {
    "multiline-comment": {
        pattern: /###[\s\S]+?###/,
        alias: 'comment'
    },
    // Block regexp can contain comments and interpolation
    "block-regex": {
        pattern: /\/{3}[\s\S]*?\/{3}/,
        alias: 'regex',
        inside: {
            comment: comment,
            interpolation: interpolation,
            _order: ["comment", "interpolation"]
        }
    },
    _order: ["multiline-comment", "block-regex"]
});
 
_utils.lang.insertBefore(coffeescript, 'string', {
    "inline-javascript": {
        pattern: /`(?:\\?[\s\S])*?`/,
        inside: {
            delimiter: {
                pattern: /^`|`$/,
                alias: "punctuation"
            },
            _order: ["delimiter"]
        }
    },
    // Block strings
    "multiline-string": [{
        pattern: /'''[\s\S]*?'''/,
        alias: "string"
    }, {
        pattern: /"""[\s\S]*?"""/,
        alias: "string",
        inside: {
            interpolation: interpolation,
            _order: ["interpolation"]
        }
    }],
    _order: ["inline-javascript", "multiline-string"]
});
 
_utils.lang.insertAfter(coffeescript["inline-javascript"].inside, "delimiter", _utils.lang.clone(_javascript.javascript));
 
_utils.lang.insertBefore(coffeescript, "keyword", {
    // Object property
    property: /(?!\d)\w+(?=\s*:(?!:))/,
    _order: ["property"]
});
 
exports.coffee = coffeescript;
exports.coffeescript = coffeescript;