• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1/**
2 * @fileoverview Rule to flag when using multiline strings
3 * @author Ilya Volodin
4 */
5
6"use strict";
7
8//------------------------------------------------------------------------------
9// Requirements
10//------------------------------------------------------------------------------
11
12const astUtils = require("./utils/ast-utils");
13
14//------------------------------------------------------------------------------
15// Rule Definition
16//------------------------------------------------------------------------------
17
18module.exports = {
19    meta: {
20        type: "suggestion",
21
22        docs: {
23            description: "disallow multiline strings",
24            category: "Best Practices",
25            recommended: false,
26            url: "https://eslint.org/docs/rules/no-multi-str"
27        },
28
29        schema: [],
30
31        messages: {
32            multilineString: "Multiline support is limited to browsers supporting ES5 only."
33        }
34    },
35
36    create(context) {
37
38        /**
39         * Determines if a given node is part of JSX syntax.
40         * @param {ASTNode} node The node to check.
41         * @returns {boolean} True if the node is a JSX node, false if not.
42         * @private
43         */
44        function isJSXElement(node) {
45            return node.type.indexOf("JSX") === 0;
46        }
47
48        //--------------------------------------------------------------------------
49        // Public API
50        //--------------------------------------------------------------------------
51
52        return {
53
54            Literal(node) {
55                if (astUtils.LINEBREAK_MATCHER.test(node.raw) && !isJSXElement(node.parent)) {
56                    context.report({
57                        node,
58                        messageId: "multilineString"
59                    });
60                }
61            }
62        };
63
64    }
65};
66