summaryrefslogtreecommitdiff
path: root/Source/WebInspectorUI/UserInterface/Controllers/AnalyzerManager.js
diff options
context:
space:
mode:
authorLorry Tar Creator <lorry-tar-importer@lorry>2017-06-27 06:07:23 +0000
committerLorry Tar Creator <lorry-tar-importer@lorry>2017-06-27 06:07:23 +0000
commit1bf1084f2b10c3b47fd1a588d85d21ed0eb41d0c (patch)
tree46dcd36c86e7fbc6e5df36deb463b33e9967a6f7 /Source/WebInspectorUI/UserInterface/Controllers/AnalyzerManager.js
parent32761a6cee1d0dee366b885b7b9c777e67885688 (diff)
downloadWebKitGtk-tarball-master.tar.gz
Diffstat (limited to 'Source/WebInspectorUI/UserInterface/Controllers/AnalyzerManager.js')
-rw-r--r--Source/WebInspectorUI/UserInterface/Controllers/AnalyzerManager.js122
1 files changed, 122 insertions, 0 deletions
diff --git a/Source/WebInspectorUI/UserInterface/Controllers/AnalyzerManager.js b/Source/WebInspectorUI/UserInterface/Controllers/AnalyzerManager.js
new file mode 100644
index 000000000..99c62738c
--- /dev/null
+++ b/Source/WebInspectorUI/UserInterface/Controllers/AnalyzerManager.js
@@ -0,0 +1,122 @@
+/*
+ * 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.
+ */
+
+WebInspector.AnalyzerManager = class AnalyzerManager extends WebInspector.Object
+{
+ constructor()
+ {
+ super();
+
+ this._eslintConfig = {
+ env: {
+ "browser": true,
+ "node": false
+ },
+ globals: {
+ "document": true
+ },
+ rules: {
+ "consistent-return": 2,
+ "curly": 0,
+ "eqeqeq": 0,
+ "new-parens": 0,
+ "no-comma-dangle": 0,
+ "no-console": 0,
+ "no-constant-condition": 0,
+ "no-extra-bind": 2,
+ "no-extra-semi": 2,
+ "no-proto": 0,
+ "no-return-assign": 2,
+ "no-trailing-spaces": 2,
+ "no-underscore-dangle": 0,
+ "no-unused-expressions": 2,
+ "no-wrap-func": 2,
+ "semi": 2,
+ "space-infix-ops": 2,
+ "space-return-throw-case": 2,
+ "strict": 0,
+ "valid-typeof": 2
+ }
+ };
+
+ this._sourceCodeMessagesMap = new WeakMap;
+
+ WebInspector.SourceCode.addEventListener(WebInspector.SourceCode.Event.ContentDidChange, this._handleSourceCodeContentDidChange, this);
+ }
+
+ // Public
+
+ getAnalyzerMessagesForSourceCode(sourceCode)
+ {
+ return new Promise(function(resolve, reject) {
+ var analyzer = WebInspector.AnalyzerManager._typeAnalyzerMap.get(sourceCode.type);
+ if (!analyzer) {
+ reject(new Error("This resource type cannot be analyzed."));
+ return;
+ }
+
+ if (this._sourceCodeMessagesMap.has(sourceCode)) {
+ resolve(this._sourceCodeMessagesMap.get(sourceCode));
+ return;
+ }
+
+ function retrieveAnalyzerMessages(properties)
+ {
+ var analyzerMessages = [];
+ var rawAnalyzerMessages = analyzer.verify(sourceCode.content, this._eslintConfig);
+
+ // Raw line and column numbers are one-based. SourceCodeLocation expects them to be zero-based so we subtract 1 from each.
+ for (var rawAnalyzerMessage of rawAnalyzerMessages)
+ analyzerMessages.push(new WebInspector.AnalyzerMessage(new WebInspector.SourceCodeLocation(sourceCode, rawAnalyzerMessage.line - 1, rawAnalyzerMessage.column - 1), rawAnalyzerMessage.message, rawAnalyzerMessage.ruleId));
+
+ this._sourceCodeMessagesMap.set(sourceCode, analyzerMessages);
+
+ resolve(analyzerMessages);
+ }
+
+ sourceCode.requestContent().then(retrieveAnalyzerMessages.bind(this)).catch(handlePromiseException);
+ }.bind(this));
+ }
+
+ sourceCodeCanBeAnalyzed(sourceCode)
+ {
+ return sourceCode.type === WebInspector.Resource.Type.Script;
+ }
+
+ // Private
+
+ _handleSourceCodeContentDidChange(event)
+ {
+ var sourceCode = event.target;
+
+ // Since sourceCode has changed, remove it and its messages from the map so getAnalyzerMessagesForSourceCode will have to reanalyze the next time it is called.
+ this._sourceCodeMessagesMap.delete(sourceCode);
+ }
+};
+
+WebInspector.AnalyzerManager._typeAnalyzerMap = new Map;
+
+// <https://webkit.org/b/136515> Web Inspector: JavaScript source text editor should have a linter
+// WebInspector.AnalyzerManager._typeAnalyzerMap.set(WebInspector.Resource.Type.Script, eslint);