-
-
Notifications
You must be signed in to change notification settings - Fork 1.5k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
fix(#1214): fixed code mirror lint issues
- Loading branch information
1 parent
05cab18
commit 51d4dbd
Showing
3 changed files
with
102 additions
and
4 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
92 changes: 92 additions & 0 deletions
92
packages/bruno-app/src/utils/codemirror/javascript-lint.js
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,92 @@ | ||
/** | ||
* MIT License | ||
* https://github.com/codemirror/codemirror5/blob/master/LICENSE | ||
* | ||
* Copyright (C) 2017 by Marijn Haverbeke <[email protected]> and others | ||
*/ | ||
|
||
let CodeMirror; | ||
const SERVER_RENDERED = typeof navigator === 'undefined' || global['PREVENT_CODEMIRROR_RENDER'] === true; | ||
|
||
if (!SERVER_RENDERED) { | ||
CodeMirror = require('codemirror'); | ||
const { filter } = require('lodash'); | ||
|
||
function validator(text, options) { | ||
if (!window.JSHINT) { | ||
if (window.console) { | ||
window.console.error('Error: window.JSHINT not defined, CodeMirror JavaScript linting cannot run.'); | ||
} | ||
return []; | ||
} | ||
if (!options.indent) | ||
// JSHint error.character actually is a column index, this fixes underlining on lines using tabs for indentation | ||
options.indent = 1; // JSHint default value is 4 | ||
JSHINT(text, options, options.globals); | ||
var errors = JSHINT.data().errors, | ||
result = []; | ||
|
||
/* | ||
* Filter out errors due to top level awaits | ||
* See https://github.com/usebruno/bruno/issues/1214 | ||
* | ||
* Once JSHINT top level await support is added, this file can be removed | ||
* and we can use the default javascript-lint addon from codemirror | ||
*/ | ||
errors = filter(errors, (error) => { | ||
if (error.code === 'E058') { | ||
if ( | ||
error.evidence && | ||
error.evidence.includes('await') && | ||
error.reason === 'Missing semicolon.' && | ||
error.scope === '(main)' | ||
) { | ||
return false; | ||
} | ||
|
||
return true; | ||
} | ||
|
||
return true; | ||
}); | ||
|
||
if (errors) parseErrors(errors, result); | ||
|
||
return result; | ||
} | ||
|
||
CodeMirror.registerHelper('lint', 'javascript', validator); | ||
|
||
function parseErrors(errors, output) { | ||
for (var i = 0; i < errors.length; i++) { | ||
var error = errors[i]; | ||
if (error) { | ||
if (error.line <= 0) { | ||
if (window.console) { | ||
window.console.warn('Cannot display JSHint error (invalid line ' + error.line + ')', error); | ||
} | ||
continue; | ||
} | ||
|
||
var start = error.character - 1, | ||
end = start + 1; | ||
if (error.evidence) { | ||
var index = error.evidence.substring(start).search(/.\b/); | ||
if (index > -1) { | ||
end += index; | ||
} | ||
} | ||
|
||
// Convert to format expected by validation service | ||
var hint = { | ||
message: error.reason, | ||
severity: error.code ? (error.code.startsWith('W') ? 'warning' : 'error') : 'error', | ||
from: CodeMirror.Pos(error.line - 1, start), | ||
to: CodeMirror.Pos(error.line - 1, end) | ||
}; | ||
|
||
output.push(hint); | ||
} | ||
} | ||
} | ||
} |