first commit
This commit is contained in:
64
media/vendor/codemirror/js/codemirror-lang-json.js
vendored
Normal file
64
media/vendor/codemirror/js/codemirror-lang-json.js
vendored
Normal file
@ -0,0 +1,64 @@
|
||||
import { parser } from '@lezer/json';
|
||||
import { LRLanguage, indentNodeProp, continuedIndent, foldNodeProp, foldInside, LanguageSupport } from '@codemirror/language';
|
||||
|
||||
/**
|
||||
Calls
|
||||
[`JSON.parse`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/parse)
|
||||
on the document and, if that throws an error, reports it as a
|
||||
single diagnostic.
|
||||
*/
|
||||
const jsonParseLinter = () => (view) => {
|
||||
try {
|
||||
JSON.parse(view.state.doc.toString());
|
||||
}
|
||||
catch (e) {
|
||||
if (!(e instanceof SyntaxError))
|
||||
throw e;
|
||||
const pos = getErrorPosition(e, view.state.doc);
|
||||
return [{
|
||||
from: pos,
|
||||
message: e.message,
|
||||
severity: 'error',
|
||||
to: pos
|
||||
}];
|
||||
}
|
||||
return [];
|
||||
};
|
||||
function getErrorPosition(error, doc) {
|
||||
let m;
|
||||
if (m = error.message.match(/at position (\d+)/))
|
||||
return Math.min(+m[1], doc.length);
|
||||
if (m = error.message.match(/at line (\d+) column (\d+)/))
|
||||
return Math.min(doc.line(+m[1]).from + (+m[2]) - 1, doc.length);
|
||||
return 0;
|
||||
}
|
||||
|
||||
/**
|
||||
A language provider that provides JSON parsing.
|
||||
*/
|
||||
const jsonLanguage = /*@__PURE__*/LRLanguage.define({
|
||||
name: "json",
|
||||
parser: /*@__PURE__*/parser.configure({
|
||||
props: [
|
||||
/*@__PURE__*/indentNodeProp.add({
|
||||
Object: /*@__PURE__*/continuedIndent({ except: /^\s*\}/ }),
|
||||
Array: /*@__PURE__*/continuedIndent({ except: /^\s*\]/ })
|
||||
}),
|
||||
/*@__PURE__*/foldNodeProp.add({
|
||||
"Object Array": foldInside
|
||||
})
|
||||
]
|
||||
}),
|
||||
languageData: {
|
||||
closeBrackets: { brackets: ["[", "{", '"'] },
|
||||
indentOnInput: /^\s*[\}\]]$/
|
||||
}
|
||||
});
|
||||
/**
|
||||
JSON language support.
|
||||
*/
|
||||
function json() {
|
||||
return new LanguageSupport(jsonLanguage);
|
||||
}
|
||||
|
||||
export { json, jsonLanguage, jsonParseLinter };
|
||||
Reference in New Issue
Block a user