diff --git a/apps/remix-ide/src/app/plugins/parser/services/code-parser-antlr-service.ts b/apps/remix-ide/src/app/plugins/parser/services/code-parser-antlr-service.ts index 1796405a22f..33a6627dacd 100644 --- a/apps/remix-ide/src/app/plugins/parser/services/code-parser-antlr-service.ts +++ b/apps/remix-ide/src/app/plugins/parser/services/code-parser-antlr-service.ts @@ -6,6 +6,31 @@ import { antlr } from '../types' import { pathToFileURL } from 'url' import { Registry } from '@remix-project/remix-lib' + + +let slangModule; + +async function getSlang() { + if (!slangModule) { + slangModule = await import("@nomicfoundation/slang/target/generated/index.mjs"); + } + return slangModule; +} + +async function runSlangParser(source: string) { + const slang = await getSlang(); + console.log(slang.parser); + + const parser = slang.parser.Parser.create("0.8.22"); + const startTime = Date.now(); + const parseOutput = parser.parseNonterminal(slang.cst.NonterminalKind.SourceUnit, source); + const json = parseOutput.tree.toJson(); + + console.log("Time taken: ", Date.now() - startTime, "ms"); + console.log(json); +} + + const SolidityParser = (window as any).SolidityParser = (window as any).SolidityParser || [] interface BlockDefinition { @@ -62,6 +87,7 @@ export default class CodeParserAntlrService { blocks: ev.data.blocks, blockDurations: self.cache[ev.data.file].blockDurations? [...self.cache[ev.data.file].blockDurations.slice(-self.parserThresholdSampleAmount), ev.data.blockDuration]: [ev.data.blockDuration] } + console.log('parsed', self.cache[ev.data.file]) self.setFileParsingState(ev.data.file) } break; @@ -98,6 +124,8 @@ export default class CodeParserAntlrService { } async parseWithWorker(text: string, file: string) { + console.log('parseWithWorker', text, file) + await runSlangParser(text); this.parserStartTime = Date.now() this.worker.postMessage({ cmd: 'parse', diff --git a/apps/remix-ide/webpack.config.js b/apps/remix-ide/webpack.config.js index 82a8ea3bfb6..e27f718395c 100644 --- a/apps/remix-ide/webpack.config.js +++ b/apps/remix-ide/webpack.config.js @@ -94,7 +94,10 @@ module.exports = composePlugins(withNx(), withReact(), (config) => { config.resolve.alias = { ...config.resolve.alias, - // 'rust-verkle-wasm$': path.resolve(__dirname, '../../node_modules/rust-verkle-wasm/web/run_verkle_wasm.js') + "@nomicfoundation/slang/target/generated": path.resolve( + __dirname, + "/../../node_modules/@nomicfoundation/slang/target/generated" + ), } diff --git a/package.json b/package.json index 34ec97221fa..e5685a1774d 100644 --- a/package.json +++ b/package.json @@ -110,6 +110,7 @@ "@nlux/highlighter": "^2.17.1", "@nlux/react": "^2.17.1", "@nlux/themes": "^2.17.1", + "@nomicfoundation/slang": "^0.19.0", "@noir-lang/noir_wasm": "^1.0.0-beta.1", "@openzeppelin/contracts": "^5.0.0", "@openzeppelin/upgrades-core": "^1.30.0", diff --git a/tsconfig.paths.json b/tsconfig.paths.json index 7e5cec001f4..fcdf25436f1 100644 --- a/tsconfig.paths.json +++ b/tsconfig.paths.json @@ -1,6 +1,7 @@ { "compilerOptions": { "paths": { + "@nomicfoundation/slang": ["node_modules/@nomicfoundation/slang/target/generated/index.d.mts"], "@remix-project/core-plugin": [ "libs/remix-core-plugin/src/index.ts" ], diff --git a/yarn.lock b/yarn.lock index 55fabe11a8a..4baab26c2bc 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2252,6 +2252,11 @@ resolved "https://registry.yarnpkg.com/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz#75a2e8b51cb758a7553d6804a5932d7aace75c39" integrity sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw== +"@bytecodealliance/preview2-shim@0.17.1": + version "0.17.1" + resolved "https://registry.yarnpkg.com/@bytecodealliance/preview2-shim/-/preview2-shim-0.17.1.tgz#369b4745387dd700ce13d377d95f8d1045942844" + integrity sha512-h1qLL0TN5KXk/zagY2BtbZuDX6xYjz4Br9RZXEa0ID4UpiPc0agUMhTdz9r89G4vX5SU/tqBg1A6UNv2+DJ5pg== + "@chainsafe/as-sha256@^0.3.1": version "0.3.1" resolved "https://registry.yarnpkg.com/@chainsafe/as-sha256/-/as-sha256-0.3.1.tgz#3639df0e1435cab03f4d9870cc3ac079e57a6fc9" @@ -5556,6 +5561,13 @@ mcl-wasm "^0.7.1" rustbn.js "~0.2.0" +"@nomicfoundation/slang@^0.19.0": + version "0.19.0" + resolved "https://registry.yarnpkg.com/@nomicfoundation/slang/-/slang-0.19.0.tgz#70102e3d39e2f1002f92f91f5e98e8096b83d356" + integrity sha512-bOKJnc5/Q4Fbkm9OkaPItri81DGjZbzPeeGKbqUefPftEgGsFMtAqj+vSfT0fwGGuhoGXkGXk7SZ5oTpNE7xGg== + dependencies: + "@bytecodealliance/preview2-shim" "0.17.1" + "@nomicfoundation/solidity-analyzer-darwin-arm64@0.1.0": version "0.1.0" resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-darwin-arm64/-/solidity-analyzer-darwin-arm64-0.1.0.tgz#83a7367342bd053a76d04bbcf4f373fef07cf760"