Blog post for 2.0 (#7417)
* add a script that concatenates changelog_unreleased into a blog post draft * syntax highlighting issues * generate post draft * Copy edit, remove error stacks * Update 2020-00-00-2.0.0.md * Update changelog source files * edit entries, regenerate the post * add lost file in versioned_docs Co-authored-by: Jed Fox <git@twopointzero.us>
This commit is contained in:
1 parent
9dad95b35f
commit
8334610aa2
40 files changed
+2193
-147
No files matched your search
@@ -1,4 +1,4 @@
|
||||
#### Fix formatting i18n attributes ([#7371](https://github.com/prettier/prettier/pull/7371) by [@thorn0](https://github.com/thorn0))
|
||||
#### Fix formatting of i18n attributes ([#7371](https://github.com/prettier/prettier/pull/7371) by [@thorn0](https://github.com/thorn0))
|
||||
|
||||
Prettier 1.19 [added](https://prettier.io/blog/2019/11/09/1.19.0.html#add-formatting-for-i18n-attributes-6695-by-voithos)
|
||||
support for formatting [i18n attributes](https://angular.io/guide/i18n), but putting the closing quote mark on a new line
|
||||
|
||||
@@ -1 +1,3 @@
|
||||
#### [BREAKING] Fix config overrides pattern matching to include dot files ([#5813](https://github.com/prettier/prettier/pull/5813) by [@chrisblossom](https://github.com/chrisblossom))
|
||||
|
||||
Previously, [configuration overrides](/docs/en/configuration.html#configuration-overrides) weren't applied to files whose name had a leading dot.
|
||||
@@ -1,21 +1,10 @@
|
||||
#### [BREAKING] Remove deprecated API ([#6993](https://github.com/prettier/prettier/pull/6993) by [@fisker](https://github.com/fisker))
|
||||
|
||||
- Parser `typescript-eslint` is removed.
|
||||
|
||||
Use `typescript` instead.
|
||||
|
||||
- `prettier.util.mapDoc` is removed
|
||||
|
||||
Use `prettier.doc.utils.mapDoc` instead.
|
||||
|
||||
- `prettier.util.isNextLineEmpty` is updated
|
||||
#### [BREAKING] Remove deprecated API and change util signatures ([#6993](https://github.com/prettier/prettier/pull/6993) by [@fisker](https://github.com/fisker))
|
||||
|
||||
- Parser `typescript-eslint` is removed. Use the `typescript` parser instead.
|
||||
- `prettier.util.mapDoc` is removed. Use `prettier.doc.utils.mapDoc` instead.
|
||||
- `prettier.util.isNextLineEmpty` is updated.<br>
|
||||
Use `isNextLineEmpty(text, node, locEnd)` instead of `isNextLineEmpty(text, node, options)`.
|
||||
|
||||
- `prettier.util.isPreviousLineEmpty` is updated
|
||||
|
||||
Use `isPreviousLineEmpty(text, node, locStart)` instead of `isNextLineEmpty(text, node, options)`.
|
||||
|
||||
- `prettier.util.getNextNonSpaceNonCommentCharacterIndex` is updated
|
||||
|
||||
- `prettier.util.isPreviousLineEmpty` is updated.<br>
|
||||
Use `isPreviousLineEmpty(text, node, locStart)` instead of `isPreviousLineEmpty(text, node, options)`.
|
||||
- `prettier.util.getNextNonSpaceNonCommentCharacterIndex` is updated.<br>
|
||||
Use `getNextNonSpaceNonCommentCharacterIndex(text, node, locEnd)` instead of `getNextNonSpaceNonCommentCharacterIndex(text, node, options)`.
|
||||
@@ -1,7 +1,7 @@
|
||||
#### [BREAKING] Change default value for `arrowParens` to `always` ([#7430](https://github.com/prettier/prettier/pull/7430) by [@kachkaev](https://github.com/kachkaev))
|
||||
|
||||
[Since version 1.9](https://prettier.io/blog/2017/12/05/1.9.0.html#option-to-add-parens-in-arrow-function-arguments-3324httpsgithubcomprettierprettierpull3324-by-rattrayalexhttpsgithubcomrattrayalex-and-suchipihttpsgithubcomsuchipi), Prettier has an [option](https://prettier.io/docs/en/options.html#arrow-function-parentheses) to always wrap arrow function arguments with parentheses.
|
||||
Since version 2.0, this behavior becomes default.
|
||||
[Since version 1.9](https://prettier.io/blog/2017/12/05/1.9.0.html#option-to-add-parens-in-arrow-function-arguments-3324httpsgithubcomprettierprettierpull3324-by-rattrayalexhttpsgithubcomrattrayalex-and-suchipihttpsgithubcomsuchipi), Prettier has had an [option](https://prettier.io/docs/en/options.html#arrow-function-parentheses) to always wrap arrow function arguments with parentheses.
|
||||
In version 2.0, this behavior has become the default.
|
||||
|
||||
<!-- prettier-ignore -->
|
||||
```js
|
||||
@@ -15,8 +15,8 @@ const fn = x => y => x + y;
|
||||
const fn = (x) => (y) => x + y;
|
||||
```
|
||||
|
||||
At first glance, avoiding parentheses in the isolated example above may look like a better choice because of less visual noise.
|
||||
However, when Prettier removes parentheses, it becomes harder to add type annotations, extra arguments or default values as well as making [other changes](https://twitter.com/ManuelBieh/status/1181880524954050560).
|
||||
At first glance, avoiding parentheses in the isolated example above may look like a better choice because it results in less visual noise.
|
||||
However, when Prettier removes parentheses, it becomes harder to add type annotations, extra arguments, default values, or a variety of [other things](https://twitter.com/ManuelBieh/status/1181880524954050560).
|
||||
Consistent use of parentheses provides a better developer experience when editing real codebases, which justifies the change.
|
||||
|
||||
You are encouraged to use the new default value, but if the old behavior is still preferred, please configure Prettier with `{ "arrowParens": "avoid" }`.
|
||||
@@ -3,11 +3,11 @@
|
||||
Early versions of Prettier were formatting all files with the \*nix flavor of [line endings](https://en.wikipedia.org/wiki/Newline) (`\n`, also known as `LF`).
|
||||
This behavior was changed in [#472](https://github.com/prettier/prettier/pull/472), which allowed preserving Windows line endings (`\r\n`, also known as `CRLF`).
|
||||
|
||||
[Since Prettier version 1.15](https://prettier.io/blog/2018/11/07/1.15.0.html#add-an-option-to-enforce-line-endings-5327-by-kachkaev), the flavor of line endings is configurable via the `endOfLine` option.
|
||||
The default value was set to `auto` for backwards compatibility, which meant that Prettier preserved a flavor of line endings already present in a given file.
|
||||
[Since Prettier version 1.15](https://prettier.io/blog/2018/11/07/1.15.0.html#add-an-option-to-enforce-line-endings-5327-by-kachkaev), the flavor of line endings has been configurable via the `endOfLine` option.
|
||||
The default value was set to `auto` for backwards compatibility, which meant that Prettier preserved whichever flavor of line endings was already present in a given file.
|
||||
|
||||
With `endOfLine` equal to `auto`, Prettier converted mixed line endings within one file to what was found at the end of the first line.
|
||||
However, line endings in neighboring files could still remain inconsistent.
|
||||
That meant Prettier converted mixed line endings within one file to what was found at the end of the first line.
|
||||
However, line endings in separate files could still remain inconsistent.
|
||||
Besides, contributors on different operating systems could accidentally change line endings in previously committed files and this would be fine with Prettier.
|
||||
Doing so would produce a large `git diff` and thus make the line-by-line history for a file (`git blame`) harder to explore.
|
||||
|
||||
|
||||
@@ -1,3 +1,3 @@
|
||||
#### Cache plugins search result ([#7485](https://github.com/prettier/prettier/pull/7485) by [@fisker](https://github.com/fisker))
|
||||
#### [BREAKING] Cache plugin search results ([#7485](https://github.com/prettier/prettier/pull/7485) by [@fisker](https://github.com/fisker))
|
||||
|
||||
Previously, we search plugins on every `format` call, the plugins search result is cached since v2.0.0, cache can be clear by calling `prettier.clearConfigCache()`.
|
||||
Previously, Prettier searched the file system for plugins on every `prettier.format` call. Now, search results are cached. The cache can be cleared by calling `prettier.clearConfigCache()`.
|
||||
@@ -1,8 +1,8 @@
|
||||
#### Remove deprecated options and option values ([#7511](https://github.com/prettier/prettier/pull/7511), [#7533](https://github.com/prettier/prettier/pull/7533), [#7535](https://github.com/prettier/prettier/pull/7535), [#7536](https://github.com/prettier/prettier/pull/7536) by [@fisker](https://github.com/fisker))
|
||||
#### [BREAKING] Remove deprecated options and option values ([#7511](https://github.com/prettier/prettier/pull/7511), [#7533](https://github.com/prettier/prettier/pull/7533), [#7535](https://github.com/prettier/prettier/pull/7535), [#7536](https://github.com/prettier/prettier/pull/7536) by [@fisker](https://github.com/fisker))
|
||||
|
||||
- Options:
|
||||
- `useFlowParser` (`--flow-parser` in CLI) [has been deprecated since `v0.0.10`](https://github.com/prettier/prettier/blob/master/CHANGELOG.md#0010).
|
||||
- Renamed option values whose old names were kept for backward compatibility:
|
||||
- `parser`: `babylon` (renamed to `babel` in _v1.16.0_), `postcss` (renamed to `css` in _v1.7.1_)
|
||||
- `trailingComma`: `true` (renamed to `always` in _v1.9.0_), `false` (renamed to `never` in _v1.9.0_)
|
||||
- `proseWrap`: `true` (renamed to `es5` in _v0.19.0_), `false` (renamed to `none` in _v0.19.0_)
|
||||
- `useFlowParser` (`--flow-parser` in CLI) has been deprecated [since `v0.0.10`](https://github.com/prettier/prettier/blob/master/CHANGELOG.md#0010).
|
||||
- Option values:
|
||||
- `parser`: `babylon` (renamed to `babel` in v1.16.0), `postcss` (renamed to `css` in v1.7.1)
|
||||
- `proseWrap`: `true` (renamed to `always` in v1.9.0), `false` (renamed to `never` in v1.9.0)
|
||||
- `trailingComma`: `true` (renamed to `es5` in v0.19.0), `false` (renamed to `none` in v0.19.0)
|
||||
@@ -1,3 +1,3 @@
|
||||
#### [BREAKING] Remove the `version` parameter of `prettier.getSupportInfo()` ([#7620](https://github.com/prettier/prettier/pull/7620) by [@thorn0](https://github.com/thorn0))
|
||||
#### [BREAKING] Remove the `version` parameter of `prettier.getSupportInfo` ([#7620](https://github.com/prettier/prettier/pull/7620) by [@thorn0](https://github.com/thorn0))
|
||||
|
||||
In Prettier 1.x (since 1.8.0), it was possible to pass a version number to `prettier.getSupportInfo()` to get information on the languages, options, etc. supported by previous versions. This interesting but apparently not very useful API kept causing maintenance problems and has been removed in Prettier 2.0.0.
|
||||
Since Prettier 1.8.0, it was possible to pass a version number to `prettier.getSupportInfo` to get information on the languages, options, etc. supported by previous versions. This interesting but apparently not very useful API kept causing maintenance problems and has been removed in Prettier 2.0.0.
|
||||
@@ -0,0 +1,7 @@
|
||||
---
|
||||
author: "Georgii Dolzhykov (@thorn0)"
|
||||
authorURL: "https://github.com/thorn0"
|
||||
title: "Prettier 2.0 “2020”"
|
||||
---
|
||||
|
||||
Better defaults, a better CLI and better heuristics. Oh, and TypeScript 3.8.
|
||||
@@ -1,3 +1,3 @@
|
||||
#### Test whether passed globs are names of existing files before treating them as globs ([#7587](https://github.com/prettier/prettier/pull/7587) by [@fisker](https://github.com/fisker))
|
||||
#### [HIGHLIGHT] Test whether passed globs are names of existing files before treating them as globs ([#7587](https://github.com/prettier/prettier/pull/7587) by [@fisker](https://github.com/fisker))
|
||||
|
||||
Since file names in Linux can contain almost any characters, strings like `foo*.js` and `[bar].css` are valid file names. Previously, if the user needed to format a file named `[bar].css`, a glob escaping syntax had to be used: `prettier "\[bar].css"` (this one doesn't work on Windows, where backslashes are treated as path separators) or `prettier "[[]bar].css"`. Because of this, important use cases were broken. E.g. [lint-staged](https://github.com/okonet/lint-staged) passes absolute paths and knows nothing about the escaping syntax. Now, when Prettier CLI gets a glob, it first tries to resolve it as a literal file name.
|
||||
@@ -1,4 +1,4 @@
|
||||
#### Expand directories, including `.` ([#7660](https://github.com/prettier/prettier/pull/7660) by [@thorn0](https://github.com/thorn0))
|
||||
#### [HIGHLIGHT] Expand directories, including `.` ([#7660](https://github.com/prettier/prettier/pull/7660) by [@thorn0](https://github.com/thorn0))
|
||||
|
||||
It's finally possible to run `prettier --write .` to format all supported files in the current directory and its subdirectories.
|
||||
Directory names can be mixed with file names and glob patterns (e.g. `prettier src "test/*.spec.js" foo.js`).
|
||||
|
||||
@@ -3,7 +3,9 @@
|
||||
<!-- prettier-ignore -->
|
||||
```js
|
||||
// Input
|
||||
class Foo {#privateProp: number;}
|
||||
class Foo {
|
||||
#privateProp: number;
|
||||
}
|
||||
|
||||
// Prettier stable
|
||||
class Foo {
|
||||
|
||||
@@ -14,3 +14,4 @@
|
||||
<ul class="abc
|
||||
def">
|
||||
</ul>
|
||||
```
|
||||
@@ -8,16 +8,6 @@
|
||||
|
||||
<!-- Prettier stable -->
|
||||
TypeError: Cannot read property 'start' of null
|
||||
at hasTrailingLineBreak (https://prettier.io/lib/standalone.js:19694:169)
|
||||
at forceBreakContent (https://prettier.io/lib/standalone.js:19668:154)
|
||||
at Object.genericPrint$2 [as print] (https://prettier.io/lib/standalone.js:21068:126)
|
||||
at callPluginPrintFunction (https://prettier.io/lib/standalone.js:15302:20)
|
||||
at https://prettier.io/lib/standalone.js:15253:18
|
||||
at Object.printComments (https://prettier.io/lib/standalone.js:14974:19)
|
||||
at printGenerically (https://prettier.io/lib/standalone.js:15252:24)
|
||||
at printChild (https://prettier.io/lib/standalone.js:21227:14)
|
||||
at https://prettier.io/lib/standalone.js:21211:104
|
||||
at FastPath.map (https://prettier.io/lib/standalone.js:15155:23)
|
||||
|
||||
<!-- Prettier master -->
|
||||
<div><span> < </span></div>
|
||||
|
||||
@@ -11,16 +11,6 @@ srcset="
|
||||
|
||||
<!-- Prettier stable -->
|
||||
Error: Mixed descriptor in srcset is not supported
|
||||
at printImgSrcset (https://prettier.io/lib/standalone.js:20867:13)
|
||||
at printEmbeddedAttributeValue (https://prettier.io/lib/standalone.js:21538:26)
|
||||
at Object.embed$2 [as embed] (https://prettier.io/lib/standalone.js:21009:43)
|
||||
at Object.printSubtree (https://prettier.io/lib/standalone.js:15170:30)
|
||||
at callPluginPrintFunction (https://prettier.io/lib/standalone.js:15288:31)
|
||||
at https://prettier.io/lib/standalone.js:15253:18
|
||||
at Object.printComments (https://prettier.io/lib/standalone.js:14974:19)
|
||||
at printGenerically (https://prettier.io/lib/standalone.js:15252:24)
|
||||
at https://prettier.io/lib/standalone.js:21285:175
|
||||
at FastPath.map (https://prettier.io/lib/standalone.js:15155:23)
|
||||
|
||||
<!-- Prettier master -->
|
||||
<img srcset="/media/examples/surfer-240-200.jpg" />
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
#### Fix error throws on unclosed tag in `pre` tag ([#7392](https://github.com/prettier/prettier/pull/7392) by [@fisker](https://github.com/fisker))
|
||||
#### Fix error thrown on unclosed tag in `pre` tag ([#7392](https://github.com/prettier/prettier/pull/7392) by [@fisker](https://github.com/fisker))
|
||||
|
||||
<!-- prettier-ignore -->
|
||||
```html
|
||||
@@ -8,16 +8,6 @@
|
||||
|
||||
<!-- Prettier stable -->
|
||||
TypeError: Cannot read property 'start' of null
|
||||
at printChild (https://prettier.io/lib/standalone.js:21224:358)
|
||||
at https://prettier.io/lib/standalone.js:21211:104
|
||||
at FastPath.map (https://prettier.io/lib/standalone.js:15155:23)
|
||||
at printChildren$1 (https://prettier.io/lib/standalone.js:21155:26)
|
||||
at Object.genericPrint$2 [as print] (https://prettier.io/lib/standalone.js:21039:41)
|
||||
at callPluginPrintFunction (https://prettier.io/lib/standalone.js:15302:20)
|
||||
at https://prettier.io/lib/standalone.js:15253:18
|
||||
at Object.printComments (https://prettier.io/lib/standalone.js:14974:19)
|
||||
at printGenerically (https://prettier.io/lib/standalone.js:15252:24)
|
||||
at printAstToDoc (https://prettier.io/lib/standalone.js:15264:15)
|
||||
|
||||
<!-- Prettier master -->
|
||||
<pre><br /></pre>
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
#### Method chain breaking heuristic ([#6685](https://github.com/prettier/prettier/pull/6685) by [@mmkal](https://github.com/mmkal))
|
||||
#### [HIGHLIGHT] Improved method chain breaking heuristic ([#6685](https://github.com/prettier/prettier/pull/6685) by [@mmkal](https://github.com/mmkal))
|
||||
|
||||
Previously, any method call chain of length three or longer would be automatically broken into multiple lines. The new heuristic is based on the complexity of the call arguments in the chain, rather than simply on the chain's length. Now, if chained method calls have arguments which aren't easy to understand at a glance (e.g. functions or deeply-nested objects), the chain is broken. Otherwise, they're allowed to remain on one line. See prior issues [#3197](https://github.com/prettier/prettier/issues/3107), [#4765](https://github.com/prettier/prettier/pull/4765), [#1565](https://github.com/prettier/prettier/issues/1565) and [#4125](https://github.com/prettier/prettier/pull/4125) for context and examples.
|
||||
|
||||
|
||||
@@ -1,16 +0,0 @@
|
||||
#### Preserve parentheses for JSDoc type casting with extra trailing spaces and asterisks ([#7011](https://github.com/prettier/prettier/pull/7011) by [@evilebottnawi](https://github.com/evilebottnawi))
|
||||
|
||||
<!-- prettier-ignore -->
|
||||
```javascript
|
||||
// Input
|
||||
const foo = /** @type {!Foo} **/ (baz);
|
||||
const bar = /** @type {!Foo} * * */(baz);
|
||||
|
||||
// Prettier stable
|
||||
const foo = /** @type {!Foo} **/ baz;
|
||||
const bar = /** @type {!Foo} * * */ baz;
|
||||
|
||||
// Prettier master
|
||||
const foo = /** @type {!Foo} **/ (baz);
|
||||
const bar = /** @type {!Foo} * * */ (baz);
|
||||
```
|
||||
@@ -18,7 +18,7 @@ const averredBathersBoxroomBuggyNurl =
|
||||
askTrovenaBeenaDependsRowans === 2 ||
|
||||
glimseGlyphsHazardNoopsTieTie === 3;
|
||||
|
||||
// Prettier master (first output)
|
||||
// Prettier master (first and second outputs)
|
||||
const averredBathersBoxroomBuggyNurl =
|
||||
bifornCringerMoshedPerplexSawder === 1 ||
|
||||
askTrovenaBeenaDependsRowans === 2 ||
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
Because decorators modify the line following, splitting a decorator call’s
|
||||
arguments onto multiple lines can obscure the relationship between the
|
||||
decorator and its intended target, producing less-readable code. Therefore, the
|
||||
function composition logic introduced in #6033 has been changed to exclude
|
||||
function composition logic introduced in [#6033](https://github.com/prettier/prettier/pull/6033) has been changed to exclude
|
||||
decorator calls.
|
||||
|
||||
<!-- prettier-ignore -->
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
#### Fix moving semicolon to trailing comment in `return` ([#7140](https://github.com/prettier/prettier/pull/7140) by [@sosukesuzuki](https://github.com/sosukesuzuki))
|
||||
#### Correct semicolon placement in empty `return` statement with comment ([#7140](https://github.com/prettier/prettier/pull/7140) by [@sosukesuzuki](https://github.com/sosukesuzuki))
|
||||
|
||||
<!-- prettier-ignore -->
|
||||
```js
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
#### Fix: remove unnecessary parens when yielding JSX ([#7367](https://github.com/prettier/prettier/pull/7367) by [@cola119](https://github.com/cola119))
|
||||
#### Remove unnecessary parens when yielding JSX ([#7367](https://github.com/prettier/prettier/pull/7367) by [@cola119](https://github.com/cola119))
|
||||
|
||||
<!-- prettier-ignore -->
|
||||
```jsx
|
||||
|
||||
@@ -1,6 +1,8 @@
|
||||
#### Ultimate fix for Closure-style type casts ([#7791](https://github.com/prettier/prettier/pull/7791) by [@thorn0](https://github.com/thorn0))
|
||||
#### [HIGHLIGHT] Ultimate fix for Closure-style type casts ([#7791](https://github.com/prettier/prettier/pull/7791) by [@thorn0](https://github.com/thorn0), [#7011](https://github.com/prettier/prettier/pull/7011) by [@evilebottnawi](https://github.com/evilebottnawi))
|
||||
|
||||
Prettier has been trying not to corrupt these JSDoc type assertions since [v1.6.0](https://prettier.io/blog/2017/08/29/1.6.0.html#handle-closure-compiler-type-cast-syntax-correctly-2484httpsgithubcomprettierprettierpull2484-by-yangsuhttpsgithubcomyangsu), with mixed results. As type checking based on JSDoc becomes increasingly common, we've been getting new bug reports about this syntax. The bugs were tricky because the required parentheses around the expression weren't part of the AST, so Prettier didn't have a good way to detect their presence. Finally, we used the `createParenthesizedExpressions` option of the Babel parser to represent parentheses in the AST using non-standard nodes. This helped fix all the reported bugs.
|
||||
Prettier has been trying not to corrupt these JSDoc type assertions since [v1.6.0](https://prettier.io/blog/2017/08/29/1.6.0.html#handle-closure-compiler-type-cast-syntax-correctly-2484httpsgithubcomprettierprettierpull2484-by-yangsuhttpsgithubcomyangsu), with mixed results. As type checking based on JSDoc becomes increasingly common, we've been getting new bug reports about this syntax. The bugs were tricky because the required parentheses around the expression weren't part of the AST, so Prettier didn't have a good way to detect their presence.
|
||||
|
||||
Finally, we used the `createParenthesizedExpressions` option of the Babel parser to represent parentheses in the AST using non-standard nodes. This helped fix all the reported bugs.
|
||||
|
||||
Consequently, Prettier won't recognize JSDoc type casts if the `flow` or `typescript` parser is used, but this is reasonable as this syntax makes little sense in Flow and TypeScript files.
|
||||
|
||||
@@ -18,7 +20,4 @@ const nestedAssertions /** @type {MyType} */ /** @type {unknown} */ = x;
|
||||
const nestedAssertions = /** @type {MyType} */ (/** @type {unknown} */ (x));
|
||||
```
|
||||
|
||||
Reference documentation for this syntax:
|
||||
|
||||
- [Closure Compiler](https://github.com/google/closure-compiler/wiki/Annotating-JavaScript-for-the-Closure-Compiler#type-type)
|
||||
- [TypeScript (with `--checkJs`)](https://www.typescriptlang.org/docs/handbook/type-checking-javascript-files.html#casts)
|
||||
Reference documentation for this syntax: [Closure Compiler](https://github.com/google/closure-compiler/wiki/Annotating-JavaScript-for-the-Closure-Compiler#type-type), [TypeScript (with `--checkJs`)](https://www.typescriptlang.org/docs/handbook/type-checking-javascript-files.html#casts).
|
||||
@@ -1,6 +1,6 @@
|
||||
#### Fix multiple long-standing issues by updating `postcss-less` ([#6981](https://github.com/prettier/prettier/pull/6981) by [@fisker](https://github.com/fisker), [#7021](https://github.com/prettier/prettier/pull/7021) by [@evilebottnawi](https://github.com/evilebottnawi), [@thorn0](https://github.com/thorn0))
|
||||
|
||||
- [`each`](http://lesscss.org/functions/#list-functions-each) is supported now ([#5653](https://github.com/prettier/prettier/issues/5653).
|
||||
- [`each`](http://lesscss.org/functions/#list-functions-each) is supported now ([#5653](https://github.com/prettier/prettier/issues/5653)).
|
||||
- `!important` was being moved out of mixin call parameters ([#3544](https://github.com/prettier/prettier/issues/3544)).
|
||||
- Comments in rulesets passed to mixin calls caused duplicate semicolons ([#3096](https://github.com/prettier/prettier/issues/3096)).
|
||||
- `::before` was broken in mixin call parameters ([#5791](https://github.com/prettier/prettier/issues/5791)).
|
||||
@@ -1,4 +1,4 @@
|
||||
#### Fix incorrect prettification of multi-line markdown footnote ([#7203](https://github.com/prettier/prettier/pull/7203) by [@sasurau4](https://github.com/sasurau4))
|
||||
#### Fix formatting of multi-line footnote ([#7203](https://github.com/prettier/prettier/pull/7203) by [@sasurau4](https://github.com/sasurau4))
|
||||
|
||||
<!-- prettier-ignore -->
|
||||
```md
|
||||
|
||||
@@ -4,7 +4,7 @@ MDX parsing for JSX failed when encountering JSX elements that where not
|
||||
parsable as HTML, such as `<Tag value={{a: 'b'}}>test</Tag>`
|
||||
|
||||
<!-- prettier-ignore -->
|
||||
````md
|
||||
```md
|
||||
<!-- Input -->
|
||||
|
||||
<Tag value={ {a : 'b' } }>test</ Tag>
|
||||
@@ -19,14 +19,8 @@ parsable as HTML, such as `<Tag value={{a: 'b'}}>test</Tag>`
|
||||
|
||||
<!-- Prettier stable -->
|
||||
|
||||
```
|
||||
SyntaxError: Unexpected closing tag "Tag". It may happen when the tag has already been closed by another tag. For more info see https://www.w3.org/TR/html5/syntax.html#closing-elements-that-have-implied-end-tags (1:35)
|
||||
> 1 | <Tag value={ {a : 'b' } }>test</ Tag>
|
||||
| ^
|
||||
2 |
|
||||
3 | <Foo bg={ 'red' } >
|
||||
4 | <div style={{ display: 'block'} }>
|
||||
```
|
||||
|
||||
<!-- Prettier master -->
|
||||
|
||||
@@ -40,4 +34,4 @@ SyntaxError: Unexpected closing tag "Tag". It may happen when the tag has alread
|
||||
</div>
|
||||
</Foo>
|
||||
|
||||
````
|
||||
```
|
||||
@@ -1,6 +1,6 @@
|
||||
#### Don't add extra comma after last comment in map ([#6918](https://github.com/prettier/prettier/pull/6918) by [@fisker](https://github.com/fisker))
|
||||
|
||||
Previously, when `trailingComma` set to `es5`, extra comma added after last comment in map.
|
||||
Previously, when `trailingComma` set to `es5`, an extra comma was added after last comment in an SCSS map.
|
||||
|
||||
<!-- prettier-ignore -->
|
||||
```scss
|
||||
|
||||
@@ -1,6 +1,4 @@
|
||||
#### Fix scss variable string concatenation removing spaces ([#7211](https://github.com/prettier/prettier/pull/7211) by [@sasurau4](https://github.com/sasurau4))
|
||||
|
||||
Previously, when Prettier format the scss variable string concatenation, it would remove spaces. Now, Prettier insert spaces around plus operator.
|
||||
#### Fix whitespace in SCSS concatenation ([#7211](https://github.com/prettier/prettier/pull/7211) by [@sasurau4](https://github.com/sasurau4))
|
||||
|
||||
<!-- prettier-ignore -->
|
||||
```scss
|
||||
|
||||
@@ -1,3 +1,3 @@
|
||||
#### Babel as an alternative parser for TypeScript ([#6400](https://github.com/prettier/prettier/pull/6400) by [@JounQin](https://github.com/JounQin) & [@thorn0](https://github.com/thorn0))
|
||||
|
||||
A new value for the `parser` option has been added: `babel-ts`, which stands for Babel with its TypeScript support enabled. The `babel-ts` parser supports JavaScript features not yet supported by TypeScript (ECMAScript proposals, e.g. [private methods and accessors](https://github.com/tc39/proposal-private-methods)), but it's less permissive when it comes to error recovery and less battle-tested than the `typescript` parser. While Babel's TypeScript plugin is quite mature, ASTs produced by the two parsers aren't 100% compatible. We tried to take the discrepancies into account, but there still must remain cases where code gets formatted differently or even incorrectly. We call upon the community to help us find such cases. If you see them, please raise issues. In the long run, this will help with [unifying the AST format](https://github.com/typescript-eslint/typescript-eslint/tree/master/packages/typescript-estree#ast-alignment-tests) in future versions of the parsers and thus contribute to a better, more solid JavaScript parser ecosystem.
|
||||
A new value for the `parser` option has been added: `babel-ts`, which makes use of Babel’s TypeScript plugin. The `babel-ts` parser supports JavaScript features not yet supported by TypeScript (ECMAScript proposals, e.g. [private methods and accessors](https://github.com/tc39/proposal-private-methods)), but it's less permissive when it comes to error recovery and less battle-tested than the `typescript` parser. While Babel’s TypeScript plugin is quite mature, ASTs produced by the two parsers aren't 100% compatible. We tried to take the discrepancies into account, but there are most likely still cases where code gets formatted differently or even incorrectly. We call upon you, our users, to help us find such cases. If you see them, please raise issues. In the long run, this will help with [unifying the AST format](https://github.com/typescript-eslint/typescript-eslint/tree/master/packages/typescript-estree#ast-alignment-tests) in future versions of the parsers and thus contribute to a better, more solid JavaScript parser ecosystem.
|
||||
@@ -1,4 +1,4 @@
|
||||
#### Print JSDoc-only types as is instead of throwing strange errors ([#7020](https://github.com/prettier/prettier/pull/7020) by [@thorn0](https://github.com/thorn0))
|
||||
#### Print JSDoc-only types as is instead of throwing errors ([#7020](https://github.com/prettier/prettier/pull/7020) by [@thorn0](https://github.com/thorn0))
|
||||
|
||||
Another fix related to error recovery. Should come in handy to those who migrate from Flow to TypeScript.
|
||||
|
||||
@@ -9,8 +9,6 @@ function fromFlow(arg: ?Maybe) {}
|
||||
|
||||
// Prettier stable
|
||||
Error: unknown type: "TSJSDocNullableType"
|
||||
at printPathNoParens (https://prettier.io/lib/standalone.js:26012:13)
|
||||
at Object.genericPrint$3 [as print] (https://prettier.io/lib/standalone.js:23541:28)
|
||||
|
||||
// Prettier master
|
||||
function fromFlow(arg: ?Maybe) {}
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
#### Fix formatting comments for function-like nodes ([#7144](https://github.com/prettier/prettier/pull/7144) by [@armano2](https://github.com/armano2))
|
||||
#### Fix formatting of comments for function-like nodes ([#7144](https://github.com/prettier/prettier/pull/7144) by [@armano2](https://github.com/armano2))
|
||||
|
||||
<!-- prettier-ignore -->
|
||||
```ts
|
||||
@@ -54,6 +54,7 @@ let foo9: new (/* bar */) => /* foo */ /* baz */ string;
|
||||
let foo10: new (/* foo */ a: /* bar */ string) => /* baz */ string;
|
||||
```
|
||||
|
||||
<!-- prettier-ignore -->
|
||||
```ts
|
||||
// Input
|
||||
abstract class Test {
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
#### TypeScript 3.8 ([#7631](https://github.com/prettier/prettier/pull/7631) by [@thorn0](https://github.com/thorn0), [#7764](https://github.com/prettier/prettier/pull/7764) by [@sosukesuzuki](https://github.com/sosukesuzuki), [#7804](https://github.com/prettier/prettier/pull/7804) by [@sosukesuzuki](https://github.com/sosukesuzuki))
|
||||
#### [HIGHLIGHT] TypeScript 3.8 ([#7631](https://github.com/prettier/prettier/pull/7631) by [@thorn0](https://github.com/thorn0), [#7764](https://github.com/prettier/prettier/pull/7764) by [@sosukesuzuki](https://github.com/sosukesuzuki), [#7804](https://github.com/prettier/prettier/pull/7804) by [@sosukesuzuki](https://github.com/sosukesuzuki))
|
||||
|
||||
Prettier now supports the new syntax added in TypeScript 3.8:
|
||||
|
||||
|
||||
@@ -1,29 +1,22 @@
|
||||
#### Don't print single `TemplateLiteral` and `StringLiteral` expression on new line ([#7479](https://github.com/prettier/prettier/pull/7479) by [@fisker](https://github.com/fisker))
|
||||
|
||||
Previously, we print long `TemplateLiteral` and `StringLiteral` on new line in attribute, now we print them on the same line with attribute name.
|
||||
#### Don't print sole string literals in attributes on a new line ([#7479](https://github.com/prettier/prettier/pull/7479) by [@fisker](https://github.com/fisker))
|
||||
|
||||
<!-- prettier-ignore -->
|
||||
```vue
|
||||
<!-- Input -->
|
||||
<template>
|
||||
<MyComponent :attr="`loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooog ${template} literal value`"/>
|
||||
</template>
|
||||
<template>
|
||||
<MyComponent :attr="'loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooog string literal value'"/>
|
||||
<MyComponent
|
||||
:attr1="`loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong ${template} literal value`"
|
||||
:attr2="'loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong string literal value'"/>
|
||||
</template>
|
||||
|
||||
<!-- Prettier stable -->
|
||||
<template>
|
||||
<MyComponent
|
||||
:attr="
|
||||
`loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooog ${template} literal value`
|
||||
:attr1="
|
||||
`loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong ${template} literal value`
|
||||
"
|
||||
/>
|
||||
</template>
|
||||
<template>
|
||||
<MyComponent
|
||||
:attr="
|
||||
'loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooog string literal value'
|
||||
:attr2="
|
||||
'loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong string literal value'
|
||||
"
|
||||
/>
|
||||
</template>
|
||||
@@ -31,12 +24,8 @@ Previously, we print long `TemplateLiteral` and `StringLiteral` on new line in a
|
||||
<!-- Prettier master -->
|
||||
<template>
|
||||
<MyComponent
|
||||
:attr="`loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooog ${template} literal value`"
|
||||
/>
|
||||
</template>
|
||||
<template>
|
||||
<MyComponent
|
||||
:attr="'loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooog string literal value'"
|
||||
:attr1="`loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong ${template} literal value`"
|
||||
:attr2="'loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong string literal value'"
|
||||
/>
|
||||
</template>
|
||||
```
|
||||
@@ -84,6 +84,7 @@
|
||||
"docblock",
|
||||
"docblocks",
|
||||
"Dodds",
|
||||
"Dolzhykov",
|
||||
"dotfile",
|
||||
"dotfiles",
|
||||
"duailibe",
|
||||
@@ -117,6 +118,7 @@
|
||||
"Friedly",
|
||||
"fuzzer",
|
||||
"gavinjoyce",
|
||||
"Georgii",
|
||||
"gettin",
|
||||
"git's",
|
||||
"gitattributes",
|
||||
|
||||
@@ -0,0 +1,117 @@
|
||||
#!/usr/bin/env node
|
||||
|
||||
"use strict";
|
||||
|
||||
const fs = require("fs");
|
||||
const path = require("path");
|
||||
const rimraf = require("rimraf");
|
||||
|
||||
const changelogUnreleasedDir = path.join(__dirname, "../changelog_unreleased");
|
||||
const blogDir = path.join(__dirname, "../website/blog");
|
||||
const introFile = path.join(changelogUnreleasedDir, "blog-post-intro.md");
|
||||
const version = require("../package.json").version.replace(/-.+/, "");
|
||||
const postGlob = path.join(blogDir, `????-??-??-${version}.md`);
|
||||
const postFile = path.join(
|
||||
blogDir,
|
||||
`${new Date().toISOString().replace(/T.+/, "")}-${version}.md`
|
||||
);
|
||||
|
||||
const categories = [
|
||||
{ dir: "javascript", title: "JavaScript" },
|
||||
{ dir: "typescript", title: "TypeScript" },
|
||||
{ dir: "flow", title: "Flow" },
|
||||
{ dir: "json", title: "JSON" },
|
||||
{ dir: "css", title: "CSS" },
|
||||
{ dir: "scss", title: "SCSS" },
|
||||
{ dir: "less", title: "Less" },
|
||||
{ dir: "html", title: "HTML" },
|
||||
{ dir: "vue", title: "Vue" },
|
||||
{ dir: "angular", title: "Angular" },
|
||||
{ dir: "lwc", title: "LWC" },
|
||||
{ dir: "handlebars", title: "Handlebars (alpha)" },
|
||||
{ dir: "graphql", title: "GraphQL" },
|
||||
{ dir: "markdown", title: "Markdown" },
|
||||
{ dir: "mdx", title: "MDX" },
|
||||
{ dir: "yaml", title: "YAML" },
|
||||
{ dir: "api", title: "API" },
|
||||
{ dir: "cli", title: "CLI" },
|
||||
];
|
||||
|
||||
const categoriesByDir = categories.reduce((result, category) => {
|
||||
result[category.dir] = category;
|
||||
return result;
|
||||
}, {});
|
||||
|
||||
const dirs = fs
|
||||
.readdirSync(changelogUnreleasedDir, { withFileTypes: true })
|
||||
.filter((entry) => entry.isDirectory());
|
||||
|
||||
for (const dir of dirs) {
|
||||
const dirPath = path.join(changelogUnreleasedDir, dir.name);
|
||||
const category = categoriesByDir[dir.name];
|
||||
|
||||
if (!category) {
|
||||
throw new Error("Unknown category: " + dir.name);
|
||||
}
|
||||
|
||||
category.entries = fs
|
||||
.readdirSync(path.join(changelogUnreleasedDir, dir.name))
|
||||
.filter((fileName) => /^pr-\d+\.md$/.test(fileName))
|
||||
.map((fileName) => {
|
||||
const [title, ...rest] = fs
|
||||
.readFileSync(path.join(dirPath, fileName), "utf8")
|
||||
.trim()
|
||||
.split("\n");
|
||||
return {
|
||||
breaking: title.includes("[BREAKING]"),
|
||||
highlight: title.includes("[HIGHLIGHT]"),
|
||||
content: [
|
||||
title
|
||||
.replace(/\[(BREAKING|HIGHLIGHT)\]/g, "")
|
||||
.replace(/\s+/g, " ")
|
||||
.replace(/^#### [a-z]/, (s) => s.toUpperCase()),
|
||||
...rest,
|
||||
].join("\n"),
|
||||
};
|
||||
});
|
||||
}
|
||||
|
||||
rimraf.sync(postGlob);
|
||||
|
||||
fs.writeFileSync(
|
||||
postFile,
|
||||
[
|
||||
fs.readFileSync(introFile, "utf8").trim(),
|
||||
"<!--truncate-->",
|
||||
...printEntries({
|
||||
title: "Highlights",
|
||||
filter: (entry) => entry.highlight,
|
||||
}),
|
||||
...printEntries({
|
||||
title: "Breaking changes",
|
||||
filter: (entry) => entry.breaking && !entry.highlight,
|
||||
}),
|
||||
...printEntries({
|
||||
title: "Other changes",
|
||||
filter: (entry) => !entry.breaking && !entry.highlight,
|
||||
}),
|
||||
].join("\n\n") + "\n"
|
||||
);
|
||||
|
||||
function printEntries({ title, filter }) {
|
||||
const result = [];
|
||||
|
||||
for (const { entries = [], title } of categories) {
|
||||
const filteredEntries = entries.filter(filter);
|
||||
if (filteredEntries.length) {
|
||||
result.push("### " + title);
|
||||
result.push(...filteredEntries.map((entry) => entry.content));
|
||||
}
|
||||
}
|
||||
|
||||
if (result.length) {
|
||||
result.unshift("## " + title);
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
@@ -1,9 +1,11 @@
|
||||
#!/usr/bin/env node
|
||||
"use strict";
|
||||
const fs = require("fs");
|
||||
const path = require("path");
|
||||
|
||||
const CHANGELOG_DIR = "changelog_unreleased";
|
||||
const TEMPLATE_FILE = "TEMPLATE.md";
|
||||
const BLOG_POST_INTRO_FILE = "blog-post-intro.md";
|
||||
const CHANGELOG_CATEGORIES = [
|
||||
"angular",
|
||||
"api",
|
||||
@@ -32,11 +34,19 @@ const showErrorMessage = (message) => {
|
||||
|
||||
const files = fs.readdirSync(CHANGELOG_ROOT);
|
||||
for (const file of files) {
|
||||
if (file !== TEMPLATE_FILE && !CHANGELOG_CATEGORIES.includes(file)) {
|
||||
if (
|
||||
file !== TEMPLATE_FILE &&
|
||||
file !== BLOG_POST_INTRO_FILE &&
|
||||
!CHANGELOG_CATEGORIES.includes(file)
|
||||
) {
|
||||
showErrorMessage(`Please remove "${file}" from "${CHANGELOG_DIR}".`);
|
||||
}
|
||||
}
|
||||
for (const file of [TEMPLATE_FILE, ...CHANGELOG_CATEGORIES]) {
|
||||
for (const file of [
|
||||
TEMPLATE_FILE,
|
||||
BLOG_POST_INTRO_FILE,
|
||||
...CHANGELOG_CATEGORIES,
|
||||
]) {
|
||||
if (!files.includes(file)) {
|
||||
showErrorMessage(`Please don't remove "${file}" from "${CHANGELOG_DIR}".`);
|
||||
}
|
||||
|
||||
File diff suppressed because it is too large.
Load diff
@@ -53,7 +53,9 @@ const siteConfig = {
|
||||
},
|
||||
highlight: {
|
||||
theme: "default",
|
||||
version: require("highlight.js/package.json").version,
|
||||
},
|
||||
usePrism: ["javascript", "jsx", "typescript", "ts", "js", "html"],
|
||||
useEnglishUrl: true,
|
||||
scripts: ["https://buttons.github.io/buttons.js"],
|
||||
stylesheets: [
|
||||
|
||||
@@ -0,0 +1,49 @@
|
||||
---
|
||||
id: version-stable-for-enterprise
|
||||
title: For Enterprise
|
||||
original_id: for-enterprise
|
||||
---
|
||||
|
||||
## Available as part of the Tidelift Subscription
|
||||
|
||||
Tidelift is working with the maintainers of Prettier and thousands of other open source projects to deliver commercial support and maintenance for the open source dependencies you use to build your applications. Save time, reduce risk, and improve code health, while paying the maintainers of the exact dependencies you use.
|
||||
|
||||
<a class="button" href="https://tidelift.com/subscription/pkg/npm-prettier?utm_source=npm-prettier&utm_medium=referral&utm_campaign=enterprise">Learn more</a>
|
||||
<a class="button" href="https://tidelift.com/subscription/request-a-demo?utm_source=npm-prettier&utm_medium=referral&utm_campaign=enterprise">Request a demo</a>
|
||||
|
||||
<br>
|
||||
|
||||
### Enterprise-ready open source software—managed for you
|
||||
|
||||
The Tidelift Subscription is a managed open source subscription for application dependencies covering millions of open source projects across JavaScript, Python, Java, PHP, Ruby, .NET, and more.
|
||||
|
||||
Your subscription includes:
|
||||
|
||||
**Security updates**
|
||||
|
||||
Tidelift’s security response team coordinates patches for new breaking security vulnerabilities and alerts immediately through a private channel, so your software supply chain is always secure.
|
||||
|
||||
**Licensing verification and indemnification**
|
||||
|
||||
Tidelift verifies license information to enable easy policy enforcement and adds intellectual property indemnification to cover creators and users in case something goes wrong. You always have a 100% up-to-date bill of materials for your dependencies to share with your legal team, customers, or partners.
|
||||
|
||||
**Maintenance and code improvement**
|
||||
|
||||
Tidelift ensures the software you rely on keeps working as long as you need it to work. Your managed dependencies are actively maintained and we recruit additional maintainers where required.
|
||||
|
||||
**Package selection and version guidance**
|
||||
|
||||
We help you choose the best open source packages from the start—and then guide you through updates to stay on the best releases as new issues arise.
|
||||
|
||||
**Roadmap input**
|
||||
|
||||
Take a seat at the table with the creators behind the software you use. Tidelift’s participating maintainers earn more income as their software is used by more subscribers, so they’re interested in knowing what you need.
|
||||
|
||||
**Tooling and cloud integration**
|
||||
|
||||
Tidelift works with GitHub, GitLab, BitBucket, and more. We support every cloud platform (and other deployment targets, too).
|
||||
|
||||
The end result? All of the capabilities you expect from commercial-grade software, for the full breadth of open source you use. That means less time grappling with esoteric open source trivia, and more time building your own applications—and your business.
|
||||
|
||||
<a class="button" href="https://tidelift.com/subscription/pkg/npm-prettier?utm_source=npm-prettier&utm_medium=referral&utm_campaign=enterprise">Learn more</a>
|
||||
<a class="button" href="https://tidelift.com/subscription/request-a-demo?utm_source=npm-prettier&utm_medium=referral&utm_campaign=enterprise">Request a demo</a>
|
||||
+6
-6
@@ -3768,9 +3768,9 @@ hex-color-regex@^1.1.0:
|
||||
integrity sha512-l9sfDFsuqtOqKDsQdqrMRk0U85RZc0RtOR9yPI7mRVOa4FsR/BVnZ0shmQRM96Ji99kYZP/7hn1cedc1+ApsTQ==
|
||||
|
||||
highlight.js@^9.16.2:
|
||||
version "9.16.2"
|
||||
resolved "https://registry.yarnpkg.com/highlight.js/-/highlight.js-9.16.2.tgz#68368d039ffe1c6211bcc07e483daf95de3e403e"
|
||||
integrity sha512-feMUrVLZvjy0oC7FVJQcSQRqbBq9kwqnYE4+Kj9ZjbHh3g+BisiPgF49NyQbVLNdrL/qqZr3Ca9yOKwgn2i/tw==
|
||||
version "9.18.1"
|
||||
resolved "https://registry.yarnpkg.com/highlight.js/-/highlight.js-9.18.1.tgz#ed21aa001fe6252bb10a3d76d47573c6539fe13c"
|
||||
integrity sha512-OrVKYz70LHsnCgmbXctv/bfuvntIKDz177h0Co37DQ5jamGZLVmoCVMtjMtNZY3X9DrCcKfklHPNeA0uPZhSJg==
|
||||
|
||||
hmac-drbg@^1.0.0:
|
||||
version "1.0.1"
|
||||
@@ -5937,9 +5937,9 @@ prepend-http@^2.0.0:
|
||||
resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-2.0.0.tgz#e92434bfa5ea8c19f41cdfd401d741a3c819d897"
|
||||
|
||||
prismjs@^1.17.1:
|
||||
version "1.17.1"
|
||||
resolved "https://registry.yarnpkg.com/prismjs/-/prismjs-1.17.1.tgz#e669fcbd4cdd873c35102881c33b14d0d68519be"
|
||||
integrity sha512-PrEDJAFdUGbOP6xK/UsfkC5ghJsPJviKgnQOoxaDbBjwc8op68Quupwt1DeAFoG8GImPhiKXAvvsH7wDSLsu1Q==
|
||||
version "1.19.0"
|
||||
resolved "https://registry.yarnpkg.com/prismjs/-/prismjs-1.19.0.tgz#713afbd45c3baca4b321569f2df39e17e729d4dc"
|
||||
integrity sha512-IVFtbW9mCWm9eOIaEkNyo2Vl4NnEifis2GQ7/MLRG5TQe6t+4Sj9J5QWI9i3v+SS43uZBlCAOn+zYTVYQcPXJw==
|
||||
optionalDependencies:
|
||||
clipboard "^2.0.0"
|
||||
|
||||
|
||||
Reference in new issue
Block a user