/*
 * Copyright (C) 2014 Apple Inc. All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions
 * are met:
 * 1. Redistributions of source code must retain the above copyright
 *    notice, this list of conditions and the following disclaimer.
 * 2. Redistributions in binary form must reproduce the above copyright
 *    notice, this list of conditions and the following disclaimer in the
 *    documentation and/or other materials provided with the distribution.
 *
 * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
 * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
 * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
 * THE POSSIBILITY OF SUCH DAMAGE.
 */

{
    "extends": "eslint:recommended",
    "env": {
        "browser": true,
        "worker": true,
        "es6": true,
    },
    "parserOptions": {
        "ecmaVersion": 2021,
    },
    "globals": {
        // Namespace
        "WI": true,

        // WebInspector
        "AsyncTestSuite": true,
        "Debouncer": true,
        "Formatter": true,
        "FormatterContentBuilder": true,
        "FrontendTestHarness": true,
        "InspectorBackend": true,
        "InspectorBackendClass": true,
        "InspectorFrontendAPI": true,
        "InspectorFrontendHost": true,
        "InspectorProtocol": true,
        "InspectorTest": true,
        "Multimap": true,
        "ProtocolTest": true,
        "ProtocolTestHarness": true,
        "SyncTestSuite": true,
        "TestHarness": true,
        "TestSuite": true,
        "Throttler": true,

        // Externals
        "CodeMirror": true,
        "THREE": true,
        "esprima": true,

        // Formatters
        "CSSFormatter": true,
        "ESTreeWalker": true,
        "EsprimaFormatter": true,
        "FormatterWorker": true,

        // Heap Snapshot
        "HeapSnapshot": true,
        "HeapSnapshotDiff": true,
        "HeapSnapshotWorker": true,

        // DOM
        "CSSPrimitiveValue": true,
        "Exception": true,
        "WebKitPoint": true,
        "SQLError": true,

        // Utilities
        "appendWebInspectorConsoleEvaluationSourceURL": true,
        "appendWebInspectorSourceURL": true,
        "clamp": true,
        "doubleQuotedString": true,
        "ellipsis": true,
        "emDash": true,
        "enDash": true,
        "figureDash": true,
        "handlePromiseException": true,
        "insertionIndexForObjectInListSortedByFunction": true,
        "insertObjectIntoSortedArray": true,
        "isEmptyObject": true,
        "isEnterKey": true,
        "isFunctionStringNativeCode": true,
        "isTextLikelyMinified": true,
        "isWebInspectorBootstrapScript": true,
        "isWebInspectorConsoleEvaluationScript": true,
        "isWebInspectorInternalScript": true,
        "isWebKitInternalScript": true,
        "multiplicationSign": true,
        "parseMIMEType": true,
        "resolveDotsInPath": true,
        "simpleGlobStringToRegExp": true,
        "timestamp": true,
        "zeroWidthSpace": true,

        // DOM Utilities
        "createSVGElement": true,

        // URL Utilities
        "absoluteURL": true,
        "parseDataURL": true,
        "parseLocationQueryParameters": true,
        "parseQueryString": true,
        "parseSecurityOrigin": true,
        "parseURL": true,
        "relativePath": true,
        "removeURLFragment": true,

        // Formatter Utilities
        "isECMAScriptLineTerminator": true,
        "isECMAScriptWhitespace": true,

        // Debug
        "handleInternalException": true,

        // CodeMirror
        "createCodeMirrorColorTextMarkers": true,
        "createCodeMirrorCubicBezierTextMarkers": true,
        "createCodeMirrorGradientTextMarkers": true,
        "createCodeMirrorSpringTextMarkers": true,
    },
    "rules": {
        "array-bracket-spacing": [2, "never"],
        "block-spacing": [2, "always"],
        "comma-dangle": [2, "only-multiline"],
        "comma-spacing": [2, {"before": false, "after": true}],
        "comma-style": [2, "last"],
        "consistent-return": 2,
        "curly": 0,
        "dot-notation": 0,
        "eol-last": 2,
        "eqeqeq": 2,
        "indent": ["error", 4],
        "func-call-spacing": [2, "never"],
        "key-spacing": [2, {"beforeColon": false, "afterColon": true}],
        "keyword-spacing": [2, {"before": true, "after": true}],
        "new-cap": 0,
        "new-parens": 0,
        "no-console": 0,
        "no-constant-condition": 0,
        "no-extra-bind": 2,
        "no-extra-parens": [2, "all", {"nestedBinaryExpressions": false}],
        "no-extra-semi": 2,
        "no-global-assign": 2,
        "no-inner-declarations": 0,
        "no-multi-spaces": 2,
        "no-new": 0,
        "no-proto": 0,
        "no-redeclare": 0,
        "no-return-assign": 2,
        "no-return-await": 2,
        "no-self-compare": 2,
        "no-shadow": 0,
        "no-trailing-spaces": 2,
        "no-undef": 2,
        "no-underscore-dangle": 0,
        "no-unused-expressions": 2,
        "no-unused-vars": [2, {"vars": "all", "args": "none"}],
        "no-use-before-define": 0,
        "object-curly-spacing": [2, "never"],
        "quotes": [2, "double"],
        "semi": 2,
        "semi-spacing": [2, {"before": false, "after": true}],
        "space-infix-ops": 2,
        "spaced-comment": [2, "always"],
        "strict": 0,
        "valid-typeof": 2,
    }
}
