diff --git a/website/package.json b/website/package.json index d16b80fe..11e037ff 100644 --- a/website/package.json +++ b/website/package.json @@ -57,6 +57,7 @@ "@typescript-eslint/parser": "^5.0.0", "@vue/compiler-dom": "^3.0.0-rc.10", "@webassemblyjs/wast-parser": "^1.9.0", + "@wxml/parser": "^0.4.0", "acorn": "^8.3.0", "acorn-jsx": "^5.3.1", "acorn-loose": "^8.1.0", diff --git a/website/src/parsers/wxml/codeExample.txt b/website/src/parsers/wxml/codeExample.txt new file mode 100644 index 00000000..0bacdf84 --- /dev/null +++ b/website/src/parsers/wxml/codeExample.txt @@ -0,0 +1,16 @@ + + + + {{mallName}} + + + + + \ No newline at end of file diff --git a/website/src/parsers/wxml/index.js b/website/src/parsers/wxml/index.js new file mode 100644 index 00000000..8902427c --- /dev/null +++ b/website/src/parsers/wxml/index.js @@ -0,0 +1,4 @@ +export const id = 'wxml'; +export const displayName = 'WXML'; +export const mimeTypes = []; +export const fileExtension = 'wxml'; diff --git a/website/src/parsers/wxml/wxml.js b/website/src/parsers/wxml/wxml.js new file mode 100644 index 00000000..623e30f1 --- /dev/null +++ b/website/src/parsers/wxml/wxml.js @@ -0,0 +1,41 @@ +import { VERSION, parse } from '@wxml/parser'; +import defaultParserInterface from '../utils/defaultParserInterface'; + +const ID = 'wxml'; + +export default { + ...defaultParserInterface, + + id: ID, + displayName: ID, + homepage: 'https://github.com/wxmlfile/wxml-parser', + version: VERSION, + locationProps: new Set(['start', 'end', 'loc']), + + async loadParser(callback) { + require(['@wxml/parser'], callback); + }, + + parse(parser, code) { + try { + return parser.parse(code); + } catch (message) { + // AST Explorer expects the thrown error to be an object, not a string. + throw new SyntaxError(message); + } + }, + opensByDefault(node, key) { + return key === 'children'; + }, + + getNodeName(node) { + return node.type; + }, + + nodeToRange(node) { + if (typeof node.start === 'number') { + return [node.start, node.end]; + } + return node.range; + }, +}; diff --git a/website/yarn.lock b/website/yarn.lock index b06398cd..54b3b9c8 100644 --- a/website/yarn.lock +++ b/website/yarn.lock @@ -1885,6 +1885,11 @@ "@webassemblyjs/wast-parser" "1.9.0" "@xtuc/long" "4.2.2" +"@wxml/parser@^0.4.0": + version "0.4.0" + resolved "https://registry.yarnpkg.com/@wxml/parser/-/parser-0.4.0.tgz#14c9ad4834a5c5b6c0e18126da79f82ec8b0fa97" + integrity sha512-pS0OPyKzCOhCPGlcfO9IDLZbqH4485bPdGDqaa+hYnI+cY/OW+GN4J88XpfdzM8wXJcJShFZy5F6MTUr2rysXg== + "@xtuc/ieee754@^1.2.0": version "1.2.0" resolved "https://registry.yarnpkg.com/@xtuc/ieee754/-/ieee754-1.2.0.tgz#eef014a3145ae477a1cbc00cd1e552336dceb790"