12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970 |
- // CodeMirror, copyright (c) by Marijn Haverbeke and others
- // Distributed under an MIT license: https://codemirror.net/LICENSE
- // Depends on jshint.js from https://github.com/jshint/jshint
- ;(function (mod) {
- if (typeof exports == 'object' && typeof module == 'object')
- // CommonJS
- mod(require('../../lib/codemirror'))
- else if (typeof define == 'function' && define.amd)
- // AMD
- define(['../../lib/codemirror'], mod)
- // Plain browser env
- else mod(CodeMirror)
- })(function (CodeMirror) {
- 'use strict'
- // declare global: JSHINT
- 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 = []
- 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)
- }
- }
- }
- })
|