Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Make svelte:options part of svelteSortOrder #178

Merged
merged 3 commits into from
Jan 5, 2021
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
## Unreleased

* Rework of the tag breaking logic with the goal to be more in line with how Prettier formats HTML. This includes respecting the user's decision to have child tags in seperate lines even if they don't exceed the maximum line width ([#143](https://github.com/sveltejs/prettier-plugin-svelte/issues/143), [#117](https://github.com/sveltejs/prettier-plugin-svelte/issues/117)). This is a breaking change because tags are broken up differently now than before.
* Default sort order is now `scripts-markup-styles`. This is a breaking change.
* `svelte:options` is now part of `svelteSortOrder`. Default sort order is now `options-scripts-markup-styles`. This is a breaking change. ([#73](https://github.com/sveltejs/prettier-plugin-svelte/issues/73))
* Fix formatting of fenced Svelte code blocks inside markdown ([#129](https://github.com/sveltejs/prettier-plugin-svelte/issues/129))
* Everything that is not explicitely a block element is now treated as an inline element, including components. This is a breaking change ([#159](https://github.com/sveltejs/prettier-plugin-svelte/issues/159))
* Single quotes are no longer forced except inside quoted attributes/events/etc. This is a breaking change ([#94](https://github.com/sveltejs/prettier-plugin-svelte/issues/94))
Expand Down
8 changes: 4 additions & 4 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -21,8 +21,8 @@ and add your preferred configuration options:


- **`svelteSortOrder`**
- Default: `scripts-markup-styles`
- Sort order for scripts, markup, and styles.
- Default: `options-scripts-markup-styles`
- Sort order for svelte:options, scripts, markup, and styles.

- **`svelteStrictMode`**
- Default: `false`
Expand Down Expand Up @@ -59,7 +59,7 @@ and add your preferred configuration options:

```json
{
"svelteSortOrder" : "styles-scripts-markup",
"svelteSortOrder" : "options-styles-scripts-markup",
"svelteStrictMode": true,
"svelteBracketNewLine": true,
"svelteAllowShorthand": false,
Expand All @@ -86,7 +86,7 @@ prettier --write --plugin-search-dir=. ./**/*.html

## Options (CLI)

**`svelte-sort-order`** Sort order for scripts, styles, and markup. Defaults to `scripts-markup-styles`.
**`svelte-sort-order`** Sort order for svelte:options, scripts, styles, and markup. Defaults to `options-scripts-styles-markup`.

```
prettier --write --svelte-sort-order scripts-markup-styles ./**/*.svelte
Expand Down
71 changes: 68 additions & 3 deletions src/options.ts
Original file line number Diff line number Diff line change
Expand Up @@ -14,10 +14,36 @@ export interface PluginOptions {

export const options: Record<keyof PluginOptions, SupportOption> = {
svelteSortOrder: {
category: 'Svelte',
type: 'choice',
default: 'scripts-markup-styles',
default: 'options-scripts-markup-styles',
description: 'Sort order for scripts, markup, and styles',
choices: [
{ value: 'options-scripts-markup-styles' },
{ value: 'options-scripts-styles-markup' },
{ value: 'options-markup-styles-scripts' },
{ value: 'options-markup-scripts-styles' },
{ value: 'options-styles-markup-scripts' },
{ value: 'options-styles-scripts-markup' },
{ value: 'scripts-options-markup-styles' },
{ value: 'scripts-options-styles-markup' },
{ value: 'markup-options-styles-scripts' },
{ value: 'markup-options-scripts-styles' },
{ value: 'styles-options-markup-scripts' },
{ value: 'styles-options-scripts-markup' },
{ value: 'scripts-markup-options-styles' },
{ value: 'scripts-styles-options-markup' },
{ value: 'markup-styles-options-scripts' },
{ value: 'markup-scripts-options-styles' },
{ value: 'styles-markup-options-scripts' },
{ value: 'styles-scripts-options-markup' },
{ value: 'scripts-markup-styles-options' },
{ value: 'scripts-styles-markup-options' },
{ value: 'markup-styles-scripts-options' },
{ value: 'markup-scripts-styles-options' },
{ value: 'styles-markup-scripts-options' },
{ value: 'styles-scripts-markup-options' },
// Deprecated, keep in 2.x for backwards-compatibility. svelte:options will be moved to the top
{ value: 'scripts-markup-styles' },
{ value: 'scripts-styles-markup' },
{ value: 'markup-styles-scripts' },
Expand All @@ -27,22 +53,26 @@ export const options: Record<keyof PluginOptions, SupportOption> = {
],
},
svelteStrictMode: {
category: 'Svelte',
type: 'boolean',
default: false,
description: 'More strict HTML syntax: self-closed tags, quotes in attributes',
},
svelteBracketNewLine: {
category: 'Svelte',
type: 'boolean',
default: false,
description: 'Put the `>` of a multiline element on a new line',
},
svelteAllowShorthand: {
category: 'Svelte',
type: 'boolean',
default: true,
description:
'Option to enable/disable component attribute shorthand if attribute name and expressions are same',
},
svelteIndentScriptAndStyle: {
category: 'Svelte',
type: 'boolean',
default: true,
description:
Expand All @@ -51,17 +81,52 @@ export const options: Record<keyof PluginOptions, SupportOption> = {
};

export type SortOrder =
| 'options-scripts-markup-styles'
| 'options-scripts-styles-markup'
| 'options-markup-styles-scripts'
| 'options-markup-scripts-styles'
| 'options-styles-markup-scripts'
| 'options-styles-scripts-markup'
| 'scripts-options-markup-styles'
| 'scripts-options-styles-markup'
| 'markup-options-styles-scripts'
| 'markup-options-scripts-styles'
| 'styles-options-markup-scripts'
| 'styles-options-scripts-markup'
| 'scripts-markup-options-styles'
| 'scripts-styles-options-markup'
| 'markup-styles-options-scripts'
| 'markup-scripts-options-styles'
| 'styles-markup-options-scripts'
| 'styles-scripts-options-markup'
| 'scripts-markup-styles-options'
| 'scripts-styles-markup-options'
| 'markup-styles-scripts-options'
| 'markup-scripts-styles-options'
| 'styles-markup-scripts-options'
| 'styles-scripts-markup-options'
| DeprecatedSortOrder;

export type DeprecatedSortOrder =
| 'scripts-markup-styles'
| 'scripts-styles-markup'
| 'markup-styles-scripts'
| 'markup-scripts-styles'
| 'styles-markup-scripts'
| 'styles-scripts-markup';

export type SortOrderPart = 'scripts' | 'markup' | 'styles';
export type SortOrderPart = 'scripts' | 'markup' | 'styles' | 'options';

const sortOrderSeparator = '-';

export function parseSortOrder(sortOrder: SortOrder): SortOrderPart[] {
return sortOrder.split(sortOrderSeparator) as SortOrderPart[];
const order = sortOrder.split(sortOrderSeparator) as SortOrderPart[];
// For backwards compatibility: Add options to beginning if not present
if (!order.includes('options')) {
console.warn(
'svelteSortOrder is missing option `options`. This will be an error in prettier-plugin-svelte version 3.',
);
order.unshift('options');
}
return order;
}
7 changes: 5 additions & 2 deletions src/print/doc-helpers.ts
Original file line number Diff line number Diff line change
@@ -1,10 +1,13 @@
import { Doc, doc } from 'prettier';
import { findLastIndex } from './helpers';

export function isLine(docToCheck: Doc) {
export function isLine(docToCheck: Doc): boolean {
return (
docToCheck === doc.builders.hardline ||
(typeof docToCheck === 'object' && docToCheck.type === 'line')
(typeof docToCheck === 'object' && docToCheck.type === 'line') ||
(typeof docToCheck === 'object' &&
docToCheck.type === 'concat' &&
docToCheck.parts.every(isLine))
);
}

Expand Down
Loading