diff --git a/package.json b/package.json index 2bae828e9..6bbb61b13 100644 --- a/package.json +++ b/package.json @@ -82,7 +82,7 @@ "minimist": "1.2.8", "n-readlines": "1.0.1", "outdent": "0.8.0", - "oxc-parser": "0.72.0", + "oxc-parser": "0.72.2", "parse-json": "8.3.0", "picocolors": "1.1.1", "please-upgrade-node": "3.2.0", diff --git a/src/language-js/parse/oxc.js b/src/language-js/parse/oxc.js index 8d787f770..42e6fca35 100644 --- a/src/language-js/parse/oxc.js +++ b/src/language-js/parse/oxc.js @@ -1,5 +1,5 @@ +import os from "node:os"; import indexToPosition from "index-to-position"; -import { parseAsync as oxcParse, rawTransferSupported } from "oxc-parser"; import createError from "../../common/parser-create-error.js"; import { tryCombinationsAsync } from "../../utils/try-combinations.js"; import postprocess from "./postprocess/index.js"; @@ -7,6 +7,9 @@ import createParser from "./utils/create-parser.js"; import jsxRegexp from "./utils/jsx-regexp.evaluate.js"; import { getSourceType } from "./utils/source-types.js"; +/** @import {ParseResult, ParserOptions as ParserOptionsWithoutExperimentalRawTransfer} from "oxc-parser" */ +/** @typedef {ParserOptionsWithoutExperimentalRawTransfer & {experimentalRawTransfer?: boolean}} ParserOptions */ + function createParseError(error, { text }) { /* c8 ignore next 3 */ if (!error?.labels?.[0]) { @@ -31,11 +34,23 @@ function createParseError(error, { text }) { }); } +let oxcParser; +/** +@param {string} filepath +@param {string} text +@param {ParserOptions} options +@returns {Promise} +*/ async function parseWithOptions(filepath, text, options) { - const result = await oxcParse(filepath, text, { + if (!oxcParser) { + os.availableParallelism ??= () => os.cpus().length; + oxcParser = await import("oxc-parser"); + } + + const result = await oxcParser.parseAsync(filepath, text, { preserveParens: true, - experimentalRawTransfer: rawTransferSupported(), showSemanticErrors: false, + experimentalRawTransfer: oxcParser.rawTransferSupported(), ...options, }); @@ -81,10 +96,12 @@ async function parseJs(text, options) { async function parseTs(text, options) { let filepath = options?.filepath; const sourceType = getSourceType(filepath); + /** @type {ParserOptions} */ const parseOptions = { sourceType, astType: "ts" }; const isKnownJsx = typeof filepath === "string" && /\.(?:jsx|tsx)$/iu.test(filepath); + /** @type {ParserOptions[]} */ let parseOptionsCombinations = []; if (isKnownJsx) { parseOptionsCombinations = [{ ...parseOptions, lang: "tsx" }]; diff --git a/tests/config/run-format-test.js b/tests/config/run-format-test.js index 977611320..55f91b453 100644 --- a/tests/config/run-format-test.js +++ b/tests/config/run-format-test.js @@ -85,18 +85,7 @@ const babelTsDisabledTests = new Set( path.join(__dirname, "../format/typescript", file), ), ); -const oxcDisabledTests = new Set( - [ - // Missing `.decorators` - // https://github.com/oxc-project/oxc/issues/10921 - "js/babel-plugins/decorators.js", - "js/decorators", - "js/decorators/class-expression", - "js/decorators-export", - "js/decorator-auto-accessors", - "js/ignore/class-expression-decorator.js", - ].map((file) => path.join(__dirname, "../format", file)), -); +const oxcDisabledTests = new Set(); const oxcTsDisabledTests = new Set( [ // https://github.com/oxc-project/oxc/issues/11029 diff --git a/yarn.lock b/yarn.lock index 4e2d04e9d..7fb393303 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1990,110 +1990,110 @@ __metadata: languageName: node linkType: hard -"@oxc-parser/binding-darwin-arm64@npm:0.72.0": - version: 0.72.0 - resolution: "@oxc-parser/binding-darwin-arm64@npm:0.72.0" +"@oxc-parser/binding-darwin-arm64@npm:0.72.2": + version: 0.72.2 + resolution: "@oxc-parser/binding-darwin-arm64@npm:0.72.2" conditions: os=darwin & cpu=arm64 languageName: node linkType: hard -"@oxc-parser/binding-darwin-x64@npm:0.72.0": - version: 0.72.0 - resolution: "@oxc-parser/binding-darwin-x64@npm:0.72.0" +"@oxc-parser/binding-darwin-x64@npm:0.72.2": + version: 0.72.2 + resolution: "@oxc-parser/binding-darwin-x64@npm:0.72.2" conditions: os=darwin & cpu=x64 languageName: node linkType: hard -"@oxc-parser/binding-freebsd-x64@npm:0.72.0": - version: 0.72.0 - resolution: "@oxc-parser/binding-freebsd-x64@npm:0.72.0" +"@oxc-parser/binding-freebsd-x64@npm:0.72.2": + version: 0.72.2 + resolution: "@oxc-parser/binding-freebsd-x64@npm:0.72.2" conditions: os=freebsd & cpu=x64 languageName: node linkType: hard -"@oxc-parser/binding-linux-arm-gnueabihf@npm:0.72.0": - version: 0.72.0 - resolution: "@oxc-parser/binding-linux-arm-gnueabihf@npm:0.72.0" +"@oxc-parser/binding-linux-arm-gnueabihf@npm:0.72.2": + version: 0.72.2 + resolution: "@oxc-parser/binding-linux-arm-gnueabihf@npm:0.72.2" conditions: os=linux & cpu=arm languageName: node linkType: hard -"@oxc-parser/binding-linux-arm-musleabihf@npm:0.72.0": - version: 0.72.0 - resolution: "@oxc-parser/binding-linux-arm-musleabihf@npm:0.72.0" +"@oxc-parser/binding-linux-arm-musleabihf@npm:0.72.2": + version: 0.72.2 + resolution: "@oxc-parser/binding-linux-arm-musleabihf@npm:0.72.2" conditions: os=linux & cpu=arm languageName: node linkType: hard -"@oxc-parser/binding-linux-arm64-gnu@npm:0.72.0": - version: 0.72.0 - resolution: "@oxc-parser/binding-linux-arm64-gnu@npm:0.72.0" +"@oxc-parser/binding-linux-arm64-gnu@npm:0.72.2": + version: 0.72.2 + resolution: "@oxc-parser/binding-linux-arm64-gnu@npm:0.72.2" conditions: os=linux & cpu=arm64 & libc=glibc languageName: node linkType: hard -"@oxc-parser/binding-linux-arm64-musl@npm:0.72.0": - version: 0.72.0 - resolution: "@oxc-parser/binding-linux-arm64-musl@npm:0.72.0" +"@oxc-parser/binding-linux-arm64-musl@npm:0.72.2": + version: 0.72.2 + resolution: "@oxc-parser/binding-linux-arm64-musl@npm:0.72.2" conditions: os=linux & cpu=arm64 & libc=musl languageName: node linkType: hard -"@oxc-parser/binding-linux-riscv64-gnu@npm:0.72.0": - version: 0.72.0 - resolution: "@oxc-parser/binding-linux-riscv64-gnu@npm:0.72.0" +"@oxc-parser/binding-linux-riscv64-gnu@npm:0.72.2": + version: 0.72.2 + resolution: "@oxc-parser/binding-linux-riscv64-gnu@npm:0.72.2" conditions: os=linux & cpu=riscv64 & libc=glibc languageName: node linkType: hard -"@oxc-parser/binding-linux-s390x-gnu@npm:0.72.0": - version: 0.72.0 - resolution: "@oxc-parser/binding-linux-s390x-gnu@npm:0.72.0" +"@oxc-parser/binding-linux-s390x-gnu@npm:0.72.2": + version: 0.72.2 + resolution: "@oxc-parser/binding-linux-s390x-gnu@npm:0.72.2" conditions: os=linux & cpu=s390x & libc=glibc languageName: node linkType: hard -"@oxc-parser/binding-linux-x64-gnu@npm:0.72.0": - version: 0.72.0 - resolution: "@oxc-parser/binding-linux-x64-gnu@npm:0.72.0" +"@oxc-parser/binding-linux-x64-gnu@npm:0.72.2": + version: 0.72.2 + resolution: "@oxc-parser/binding-linux-x64-gnu@npm:0.72.2" conditions: os=linux & cpu=x64 & libc=glibc languageName: node linkType: hard -"@oxc-parser/binding-linux-x64-musl@npm:0.72.0": - version: 0.72.0 - resolution: "@oxc-parser/binding-linux-x64-musl@npm:0.72.0" +"@oxc-parser/binding-linux-x64-musl@npm:0.72.2": + version: 0.72.2 + resolution: "@oxc-parser/binding-linux-x64-musl@npm:0.72.2" conditions: os=linux & cpu=x64 & libc=musl languageName: node linkType: hard -"@oxc-parser/binding-wasm32-wasi@npm:0.72.0": - version: 0.72.0 - resolution: "@oxc-parser/binding-wasm32-wasi@npm:0.72.0" +"@oxc-parser/binding-wasm32-wasi@npm:0.72.2": + version: 0.72.2 + resolution: "@oxc-parser/binding-wasm32-wasi@npm:0.72.2" dependencies: "@napi-rs/wasm-runtime": "npm:^0.2.10" conditions: cpu=wasm32 languageName: node linkType: hard -"@oxc-parser/binding-win32-arm64-msvc@npm:0.72.0": - version: 0.72.0 - resolution: "@oxc-parser/binding-win32-arm64-msvc@npm:0.72.0" +"@oxc-parser/binding-win32-arm64-msvc@npm:0.72.2": + version: 0.72.2 + resolution: "@oxc-parser/binding-win32-arm64-msvc@npm:0.72.2" conditions: os=win32 & cpu=arm64 languageName: node linkType: hard -"@oxc-parser/binding-win32-x64-msvc@npm:0.72.0": - version: 0.72.0 - resolution: "@oxc-parser/binding-win32-x64-msvc@npm:0.72.0" +"@oxc-parser/binding-win32-x64-msvc@npm:0.72.2": + version: 0.72.2 + resolution: "@oxc-parser/binding-win32-x64-msvc@npm:0.72.2" conditions: os=win32 & cpu=x64 languageName: node linkType: hard -"@oxc-project/types@npm:^0.72.0": - version: 0.72.0 - resolution: "@oxc-project/types@npm:0.72.0" - checksum: 10/b7428179599fa4561faa98e31e03630b56783ec26cc53e5362a3c51a9d4815a16f06382bfef1cce4072f1bf4256afc4a39a2a561253cd52bb1c107b540e0a324 +"@oxc-project/types@npm:^0.72.2": + version: 0.72.2 + resolution: "@oxc-project/types@npm:0.72.2" + checksum: 10/f52643475893891d384af3f38d93a513d7252d229b22b5ab382e39aaf58debe21bc5ff45f8be7fdf5ee20a2426a417310ce174d19af765e9680eb6c5fe679e88 languageName: node linkType: hard @@ -6904,25 +6904,25 @@ __metadata: languageName: node linkType: hard -"oxc-parser@npm:0.72.0": - version: 0.72.0 - resolution: "oxc-parser@npm:0.72.0" +"oxc-parser@npm:0.72.2": + version: 0.72.2 + resolution: "oxc-parser@npm:0.72.2" dependencies: - "@oxc-parser/binding-darwin-arm64": "npm:0.72.0" - "@oxc-parser/binding-darwin-x64": "npm:0.72.0" - "@oxc-parser/binding-freebsd-x64": "npm:0.72.0" - "@oxc-parser/binding-linux-arm-gnueabihf": "npm:0.72.0" - "@oxc-parser/binding-linux-arm-musleabihf": "npm:0.72.0" - "@oxc-parser/binding-linux-arm64-gnu": "npm:0.72.0" - "@oxc-parser/binding-linux-arm64-musl": "npm:0.72.0" - "@oxc-parser/binding-linux-riscv64-gnu": "npm:0.72.0" - "@oxc-parser/binding-linux-s390x-gnu": "npm:0.72.0" - "@oxc-parser/binding-linux-x64-gnu": "npm:0.72.0" - "@oxc-parser/binding-linux-x64-musl": "npm:0.72.0" - "@oxc-parser/binding-wasm32-wasi": "npm:0.72.0" - "@oxc-parser/binding-win32-arm64-msvc": "npm:0.72.0" - "@oxc-parser/binding-win32-x64-msvc": "npm:0.72.0" - "@oxc-project/types": "npm:^0.72.0" + "@oxc-parser/binding-darwin-arm64": "npm:0.72.2" + "@oxc-parser/binding-darwin-x64": "npm:0.72.2" + "@oxc-parser/binding-freebsd-x64": "npm:0.72.2" + "@oxc-parser/binding-linux-arm-gnueabihf": "npm:0.72.2" + "@oxc-parser/binding-linux-arm-musleabihf": "npm:0.72.2" + "@oxc-parser/binding-linux-arm64-gnu": "npm:0.72.2" + "@oxc-parser/binding-linux-arm64-musl": "npm:0.72.2" + "@oxc-parser/binding-linux-riscv64-gnu": "npm:0.72.2" + "@oxc-parser/binding-linux-s390x-gnu": "npm:0.72.2" + "@oxc-parser/binding-linux-x64-gnu": "npm:0.72.2" + "@oxc-parser/binding-linux-x64-musl": "npm:0.72.2" + "@oxc-parser/binding-wasm32-wasi": "npm:0.72.2" + "@oxc-parser/binding-win32-arm64-msvc": "npm:0.72.2" + "@oxc-parser/binding-win32-x64-msvc": "npm:0.72.2" + "@oxc-project/types": "npm:^0.72.2" dependenciesMeta: "@oxc-parser/binding-darwin-arm64": optional: true @@ -6952,7 +6952,7 @@ __metadata: optional: true "@oxc-parser/binding-win32-x64-msvc": optional: true - checksum: 10/65b9a1ed3f5ab255fceddadd713659d582d04bcb22b90a75b08b92356a83c8ff767d692fd0883c7ffdb8dbccb3090169681cd64d457cf58faa08d822698e4a18 + checksum: 10/a7659854c66943025bc28f6892ff56b272c2ca3242bbab9a82d0df4042f34284ee9e5aa08f1b8a878196bafc722578b3dec057383893702c9ae4bab8807c5abd languageName: node linkType: hard @@ -7398,7 +7398,7 @@ __metadata: node-style-text: "npm:0.0.8" npm-run-all2: "npm:8.0.4" outdent: "npm:0.8.0" - oxc-parser: "npm:0.72.0" + oxc-parser: "npm:0.72.2" parse-json: "npm:8.3.0" picocolors: "npm:1.1.1" please-upgrade-node: "npm:3.2.0"