trivago/prettier-plugin-sort-imports

SyntaxError: 'return' outside of function. when used with Astro

kb1995 opened this issue · 4 comments

Your Environment

  • Prettier version: ^2.8.4
  • node version: 18
  • package manager: yarn@2
  • IDE: VScode

Describe the bug

I want to use this plugin with my Astro project. My prettier config looks like this:

{
  "semi": true,
  "bracketSpacing": true,
  "printWidth": 100,
  "trailingComma": "es5",
  "tabWidth": 2,
  "useTabs": false,
  "importOrder": [
    "^astro",
    "<THIRD_PARTY_MODULES>",
    "^types/(.*)$",
    "^store/(.*)$",
    "^config/(.*)$",
    "^content/(.*)$",
    "^layouts/(.*)$",
    "^lib/(.*)$",
    "^utils/(.*)$",
    "^components/(.*)$"
  ],
  "importOrderSeparation": true,
  "importOrderSortSpecifiers": true,
  "plugins": [
    "prettier-plugin-astro",
    "@trivago/prettier-plugin-sort-imports",
    "prettier-plugin-tailwindcss"
  ],
  "pluginSearchDirs": false
}

The plugin works great for most files, but I encountered the following error when I'm using Astro's SSR's redirect function:

["ERROR" - 20:33:45] Error formatting document.
["ERROR" - 20:33:45] 'return' outside of function. (19:2)

Expected behavior

The file to be compiled successfully even when using SSR's return function

Error log

at instantiate (/Users/kris/Documents/code/products/astro-personal-sidebar/node_modules/@trivago/prettier-plugin-sort-imports/node_modules/@babel/parser/lib/index.js:72:32)
	at constructor (/Users/kris/Documents/code/products/astro-personal-sidebar/node_modules/@trivago/prettier-plugin-sort-imports/node_modules/@babel/parser/lib/index.js:359:12)
	at Parser.raise (/Users/kris/Documents/code/products/astro-personal-sidebar/node_modules/@trivago/prettier-plugin-sort-imports/node_modules/@babel/parser/lib/index.js:3339:19)
	at Parser.parseReturnStatement (/Users/kris/Documents/code/products/astro-personal-sidebar/node_modules/@trivago/prettier-plugin-sort-imports/node_modules/@babel/parser/lib/index.js:15048:12)
	at Parser.parseStatementContent (/Users/kris/Documents/code/products/astro-personal-sidebar/node_modules/@trivago/prettier-plugin-sort-imports/node_modules/@babel/parser/lib/index.js:14697:21)
	at Parser.parseStatementContent (/Users/kris/Documents/code/products/astro-personal-sidebar/node_modules/@trivago/prettier-plugin-sort-imports/node_modules/@babel/parser/lib/index.js:10364:18)
	at Parser.parseStatement (/Users/kris/Documents/code/products/astro-personal-sidebar/node_modules/@trivago/prettier-plugin-sort-imports/node_modules/@babel/parser/lib/index.js:14643:17)
	at Parser.parseBlockOrModuleBlockBody (/Users/kris/Documents/code/products/astro-personal-sidebar/node_modules/@trivago/prettier-plugin-sort-imports/node_modules/@babel/parser/lib/index.js:15286:25)
	at Parser.parseBlockBody (/Users/kris/Documents/code/products/astro-personal-sidebar/node_modules/@trivago/prettier-plugin-sort-imports/node_modules/@babel/parser/lib/index.js:15277:10)
	at Parser.parseBlock (/Users/kris/Documents/code/products/astro-personal-sidebar/node_modules/@trivago/prettier-plugin-sort-imports/node_modules/@babel/parser/lib/index.js:15261:10)
	at Parser.parseStatementContent (/Users/kris/Documents/code/products/astro-personal-sidebar/node_modules/@trivago/prettier-plugin-sort-imports/node_modules/@babel/parser/lib/index.js:14727:21)
	at Parser.parseStatementContent (/Users/kris/Documents/code/products/astro-personal-sidebar/node_modules/@trivago/prettier-plugin-sort-imports/node_modules/@babel/parser/lib/index.js:10364:18)
	at Parser.parseStatement (/Users/kris/Documents/code/products/astro-personal-sidebar/node_modules/@trivago/prettier-plugin-sort-imports/node_modules/@babel/parser/lib/index.js:14643:17)
	at Parser.parseIfStatement (/Users/kris/Documents/code/products/astro-personal-sidebar/node_modules/@trivago/prettier-plugin-sort-imports/node_modules/@babel/parser/lib/index.js:15041:28)
	at Parser.parseStatementContent (/Users/kris/Documents/code/products/astro-personal-sidebar/node_modules/@trivago/prettier-plugin-sort-imports/node_modules/@babel/parser/lib/index.js:14694:21)
	at Parser.parseStatementContent (/Users/kris/Documents/code/products/astro-personal-sidebar/node_modules/@trivago/prettier-plugin-sort-imports/node_modules/@babel/parser/lib/index.js:10364:18)
	at Parser.parseStatement (/Users/kris/Documents/code/products/astro-personal-sidebar/node_modules/@trivago/prettier-plugin-sort-imports/node_modules/@babel/parser/lib/index.js:14643:17)
	at Parser.parseBlockOrModuleBlockBody (/Users/kris/Documents/code/products/astro-personal-sidebar/node_modules/@trivago/prettier-plugin-sort-imports/node_modules/@babel/parser/lib/index.js:15286:25)
	at Parser.parseBlockBody (/Users/kris/Documents/code/products/astro-personal-sidebar/node_modules/@trivago/prettier-plugin-sort-imports/node_modules/@babel/parser/lib/index.js:15277:10)
	at Parser.parseProgram (/Users/kris/Documents/code/products/astro-personal-sidebar/node_modules/@trivago/prettier-plugin-sort-imports/node_modules/@babel/parser/lib/index.js:14561:10)
	at Parser.parseTopLevel (/Users/kris/Documents/code/products/astro-personal-sidebar/node_modules/@trivago/prettier-plugin-sort-imports/node_modules/@babel/parser/lib/index.js:14548:25)
	at Parser.parse (/Users/kris/Documents/code/products/astro-personal-sidebar/node_modules/@trivago/prettier-plugin-sort-imports/node_modules/@babel/parser/lib/index.js:16556:10)
	at Parser.parse (/Users/kris/Documents/code/products/astro-personal-sidebar/node_modules/@trivago/prettier-plugin-sort-imports/node_modules/@babel/parser/lib/index.js:11154:18)
	at Object.parse (/Users/kris/Documents/code/products/astro-personal-sidebar/node_modules/@trivago/prettier-plugin-sort-imports/node_modules/@babel/parser/lib/index.js:16608:38)
	at Object.preprocessor (/Users/kris/Documents/code/products/astro-personal-sidebar/node_modules/@trivago/prettier-plugin-sort-imports/lib/src/preprocessors/preprocessor.js:15:24)
	at Object.defaultPreprocessor [as preprocess] (/Users/kris/Documents/code/products/astro-personal-sidebar/node_modules/@trivago/prettier-plugin-sort-imports/lib/src/preprocessors/default-processor.js:9:27)
	at Object.preprocess (/Users/kris/Documents/code/products/astro-personal-sidebar/node_modules/prettier-plugin-tailwindcss/dist/index.js:134:3972)
	at Object.parse (/Users/kris/Documents/code/products/astro-personal-sidebar/node_modules/prettier/index.js:7511:25)
	at textToDoc (/Users/kris/Documents/code/products/astro-personal-sidebar/node_modules/prettier/index.js:8478:39)
	at /Users/kris/Documents/code/products/astro-personal-sidebar/node_modules/prettier/index.js:8466:99
	at wrapParserTryCatch (/Users/kris/Documents/code/products/astro-personal-sidebar/node_modules/prettier-plugin-astro/dist/index.js:628:16)
	at Object.embed (/Users/kris/Documents/code/products/astro-personal-sidebar/node_modules/prettier-plugin-astro/dist/index.js:587:36)
	at Object.printSubtree (/Users/kris/Documents/code/products/astro-personal-sidebar/node_modules/prettier/index.js:8466:32)
	at callPluginPrintFunction (/Users/kris/Documents/code/products/astro-personal-sidebar/node_modules/prettier/index.js:8593:32)
	at mainPrintInternal (/Users/kris/Documents/code/products/astro-personal-sidebar/node_modules/prettier/index.js:8550:22)
	at mainPrint (/Users/kris/Documents/code/products/astro-personal-sidebar/node_modules/prettier/index.js:8537:18)
	at /Users/kris/Documents/code/products/astro-personal-sidebar/node_modules/prettier/index.js:8392:27
	at AstPath.each (/Users/kris/Documents/code/products/astro-personal-sidebar/node_modules/prettier/index.js:8384:11)
	at AstPath.map (/Users/kris/Documents/code/products/astro-personal-sidebar/node_modules/prettier/index.js:8391:14)
	at Object.print (/Users/kris/Documents/code/products/astro-personal-sidebar/node_modules/prettier-plugin-astro/dist/index.js:328:50)
	at callPluginPrintFunction (/Users/kris/Documents/code/products/astro-personal-sidebar/node_modules/prettier/index.js:8601:26)
	at mainPrintInternal (/Users/kris/Documents/code/products/astro-personal-sidebar/node_modules/prettier/index.js:8550:22)
	at mainPrint (/Users/kris/Documents/code/products/astro-personal-sidebar/node_modules/prettier/index.js:8537:18)
	at printAstToDoc (/Users/kris/Documents/code/products/astro-personal-sidebar/node_modules/prettier/index.js:8529:18)
	at coreFormat (/Users/kris/Documents/code/products/astro-personal-sidebar/node_modules/prettier/index.js:8837:20)
	at formatWithCursor2 (/Users/kris/Documents/code/products/astro-personal-sidebar/node_modules/prettier/index.js:9021:18)
	at /Users/kris/Documents/code/products/astro-personal-sidebar/node_modules/prettier/index.js:38168:12
	at Object.format (/Users/kris/Documents/code/products/astro-personal-sidebar/node_modules/prettier/index.js:38182:12)
	at t.default.format (/Users/kris/.vscode/extensions/esbenp.prettier-vscode-9.10.4/dist/extension.js:1:14731)
	at async t.PrettierEditProvider.provideEdits (/Users/kris/.vscode/extensions/esbenp.prettier-vscode-9.10.4/dist/extension.js:1:11417)
	at async $.provideDocumentFormattingEdits (/Applications/Visual Studio Code.app/Contents/Resources/app/out/vs/workbench/api/node/extensionHostProcess.js:98:39748)
["INFO" - 20:33:45] Formatting completed in 25ms.

Contribute to @trivago/prettier-plugin-sort-imports

  • I'm willing to fix this bug 🥇

We are also experiencing this error. Astro supports early returns inside their script part

---
const { slug } = Astro.params

if (!slug) {
	return new Response(null, { status: 404 })
}
---

In regular javascript top level return is not supported.
I have zero idea how any of the prettier plugins are integrated, but maybe source from astro code could be wrapped in fake function before giving it to the babel used in this plugin? Or some sort integration with astro plugin?

I have this too, how to solve it?

<script is:inline define:vars={{ defaultTheme: UI.theme }}>
  if (window.basic_script) {
    return;
  }