Files
echo-nexus/node_modules/@codemirror/lang-rust/dist/index.js
T

42 lines
1.4 KiB
JavaScript

import { parser } from '@lezer/rust';
import { LRLanguage, indentNodeProp, continuedIndent, foldNodeProp, foldInside, LanguageSupport } from '@codemirror/language';
/**
A syntax provider based on the [Lezer Rust
parser](https://github.com/lezer-parser/rust), extended with
highlighting and indentation information.
*/
const rustLanguage = /*@__PURE__*/LRLanguage.define({
name: "rust",
parser: /*@__PURE__*/parser.configure({
props: [
/*@__PURE__*/indentNodeProp.add({
IfExpression: /*@__PURE__*/continuedIndent({ except: /^\s*({|else\b)/ }),
"String BlockComment": () => null,
"AttributeItem": cx => cx.continue(),
"Statement MatchArm": /*@__PURE__*/continuedIndent()
}),
/*@__PURE__*/foldNodeProp.add(type => {
if (/(Block|edTokens|List)$/.test(type.name))
return foldInside;
if (type.name == "BlockComment")
return tree => ({ from: tree.from + 2, to: tree.to - 2 });
return undefined;
})
]
}),
languageData: {
commentTokens: { line: "//", block: { open: "/*", close: "*/" } },
indentOnInput: /^\s*(?:\{|\})$/,
closeBrackets: { stringPrefixes: ["b", "r", "br"] }
}
});
/**
Rust language support
*/
function rust() {
return new LanguageSupport(rustLanguage);
}
export { rust, rustLanguage };