diff --git a/_sips/sips/001-named-and-default-arguments.md b/_sips/sips/001-named-and-default-arguments.md index b92d094f7..0a9ba212b 100644 --- a/_sips/sips/001-named-and-default-arguments.md +++ b/_sips/sips/001-named-and-default-arguments.md @@ -2,9 +2,11 @@ kind: SID layout: sip number: 1 -permalink: /sips/:number -redirect_from: /sips/:title.html -redirect_from: /sips/pending/named-and-default-arguments.html +permalink: /sips/:number.html +redirect_from: + - /sips/:number + - /sips/:title.html + - /sips/pending/named-and-default-arguments.html stage: completed status: shipped title: Named and Default Arguments diff --git a/_sips/sips/002-scala-compiler-phase-plugin-in.md b/_sips/sips/002-scala-compiler-phase-plugin-in.md index 273be6e6a..f40c9853b 100644 --- a/_sips/sips/002-scala-compiler-phase-plugin-in.md +++ b/_sips/sips/002-scala-compiler-phase-plugin-in.md @@ -2,9 +2,11 @@ kind: SID layout: sip number: 2 -permalink: /sips/:number -redirect_from: /sips/:title.html -redirect_from: /sips/pending/scala-compiler-phase-plugin-in.html +permalink: /sips/:number.html +redirect_from: + - /sips/:number + - /sips/:title.html + - /sips/pending/scala-compiler-phase-plugin-in.html stage: completed status: shipped title: Scala Compiler Phase and Plug-In Initialization for Scala 2.8 diff --git a/_sips/sips/003-new-collection-classes.md b/_sips/sips/003-new-collection-classes.md index 72f0fd60f..4dbf889ae 100644 --- a/_sips/sips/003-new-collection-classes.md +++ b/_sips/sips/003-new-collection-classes.md @@ -2,9 +2,11 @@ kind: SID layout: sip number: 3 -permalink: /sips/:number -redirect_from: /sips/:title.html -redirect_from: /sips/pending/new-collection-classes.html +permalink: /sips/:number.html +redirect_from: + - /sips/:number + - /sips/:title.html + - /sips/pending/new-collection-classes.html stage: completed status: shipped title: New Collection classes diff --git a/_sips/sips/004-early-member-definitions.md b/_sips/sips/004-early-member-definitions.md index 367dd7c20..8a7250e41 100644 --- a/_sips/sips/004-early-member-definitions.md +++ b/_sips/sips/004-early-member-definitions.md @@ -2,9 +2,11 @@ kind: SID layout: sip number: 4 -permalink: /sips/:number -redirect_from: /sips/:title.html -redirect_from: /sips/pending/early-member-definitions.html +permalink: /sips/:number.html +redirect_from: + - /sips/:number + - /sips/:title.html + - /sips/pending/early-member-definitions.html stage: completed status: shipped title: Early Member Definitions diff --git a/_sips/sips/005-internals-of-scala-annotations.md b/_sips/sips/005-internals-of-scala-annotations.md index c13281440..6c6862be4 100644 --- a/_sips/sips/005-internals-of-scala-annotations.md +++ b/_sips/sips/005-internals-of-scala-annotations.md @@ -2,9 +2,11 @@ kind: SID layout: sip number: 5 -permalink: /sips/:number -redirect_from: /sips/:title.html -redirect_from: /sips/pending/internals-of-scala-annotations.html +permalink: /sips/:number.html +redirect_from: + - /sips/:number + - /sips/:title.html + - /sips/pending/internals-of-scala-annotations.html stage: completed status: shipped title: Internals of Scala Annotations diff --git a/_sips/sips/007-scala-2-8-arrays.md b/_sips/sips/007-scala-2-8-arrays.md index 77c4e5e4e..2a2d08702 100644 --- a/_sips/sips/007-scala-2-8-arrays.md +++ b/_sips/sips/007-scala-2-8-arrays.md @@ -2,9 +2,11 @@ kind: SID layout: sip number: 7 -permalink: /sips/:number -redirect_from: /sips/:title.html -redirect_from: /sips/pending/scala-2-8-arrays.html +permalink: /sips/:number.html +redirect_from: + - /sips/:number + - /sips/:title.html + - /sips/pending/scala-2-8-arrays.html stage: completed status: shipped title: Scala 2.8 Arrays diff --git a/_sips/sips/008-scala-swing-overview.md b/_sips/sips/008-scala-swing-overview.md index 5710cb161..5251e2531 100644 --- a/_sips/sips/008-scala-swing-overview.md +++ b/_sips/sips/008-scala-swing-overview.md @@ -2,9 +2,11 @@ kind: SID layout: sip number: 8 -permalink: /sips/:number -redirect_from: /sips/:title.html -redirect_from: /sips/pending/scala-swing-overview.html +permalink: /sips/:number.html +redirect_from: + - /sips/:number + - /sips/:title.html + - /sips/pending/scala-swing-overview.html stage: completed status: shipped title: Scala Swing Overview diff --git a/_sips/sips/009-scala-specialization.md b/_sips/sips/009-scala-specialization.md index 293eaf180..bb1872bc0 100644 --- a/_sips/sips/009-scala-specialization.md +++ b/_sips/sips/009-scala-specialization.md @@ -2,9 +2,11 @@ kind: SID layout: sip number: 9 -permalink: /sips/:number -redirect_from: /sips/:title.html -redirect_from: /sips/pending/scala-specialization.html +permalink: /sips/:number.html +redirect_from: + - /sips/:number + - /sips/:title.html + - /sips/pending/scala-specialization.html stage: completed status: shipped title: Scala Specialization diff --git a/_sips/sips/010-picked-signatures.md b/_sips/sips/010-picked-signatures.md index 64aff942a..1863c1b18 100644 --- a/_sips/sips/010-picked-signatures.md +++ b/_sips/sips/010-picked-signatures.md @@ -2,9 +2,11 @@ kind: SID layout: sip number: 10 -permalink: /sips/:number -redirect_from: /sips/:title.html -redirect_from: /sips/pending/picked-signatures.html +permalink: /sips/:number.html +redirect_from: + - /sips/:number + - /sips/:title.html + - /sips/pending/picked-signatures.html stage: completed status: shipped title: Storage of pickled Scala signatures in class files diff --git a/_sips/sips/011-string-interpolation.md b/_sips/sips/011-string-interpolation.md index c5a2289c2..97547238c 100644 --- a/_sips/sips/011-string-interpolation.md +++ b/_sips/sips/011-string-interpolation.md @@ -1,9 +1,11 @@ --- layout: sip number: 11 -permalink: /sips/:number -redirect_from: /sips/string-interpolation.html -redirect_from: /sips/pending/string-interpolation.html +permalink: /sips/:number.html +redirect_from: + - /sips/:number + - /sips/string-interpolation.html + - /sips/pending/string-interpolation.html stage: completed status: shipped title: String Interpolation diff --git a/_sips/sips/013-implicit-classes.md b/_sips/sips/013-implicit-classes.md index 2b2de8ee7..edc33ca22 100644 --- a/_sips/sips/013-implicit-classes.md +++ b/_sips/sips/013-implicit-classes.md @@ -1,9 +1,11 @@ --- layout: sip number: 13 -permalink: /sips/:number -redirect_from: /sips/:title.html -redirect_from: /sips/pending/implicit-classes.html +permalink: /sips/:number.html +redirect_from: + - /sips/:number + - /sips/:title.html + - /sips/pending/implicit-classes.html stage: completed status: shipped title: Implicit classes diff --git a/_sips/sips/014-futures-promises.md b/_sips/sips/014-futures-promises.md index b571f7fdb..7096f5af2 100644 --- a/_sips/sips/014-futures-promises.md +++ b/_sips/sips/014-futures-promises.md @@ -1,9 +1,11 @@ --- layout: sip number: 14 -permalink: /sips/:number -redirect_from: /sips/:title.html -redirect_from: /sips/pending/futures-promises.html +permalink: /sips/:number.html +redirect_from: + - /sips/:number + - /sips/:title.html + - /sips/pending/futures-promises.html stage: completed status: shipped title: Futures and Promises diff --git a/_sips/sips/015-value-classes.md b/_sips/sips/015-value-classes.md index a33b64556..6208a2f0a 100644 --- a/_sips/sips/015-value-classes.md +++ b/_sips/sips/015-value-classes.md @@ -1,9 +1,11 @@ --- layout: sip number: 15 -permalink: /sips/:number -redirect_from: /sips/:title.html -redirect_from: /sips/pending/value-classes.html +permalink: /sips/:number.html +redirect_from: + - /sips/:number + - /sips/:title.html + - /sips/pending/value-classes.html stage: completed status: shipped title: Value Classes diff --git a/_sips/sips/017-type-dynamic.md b/_sips/sips/017-type-dynamic.md index 138d749f0..d99d75320 100644 --- a/_sips/sips/017-type-dynamic.md +++ b/_sips/sips/017-type-dynamic.md @@ -1,9 +1,11 @@ --- layout: sip number: 17 -permalink: /sips/:number -redirect_from: /sips/:title.html -redirect_from: /sips/pending/type-dynamic.html +permalink: /sips/:number.html +redirect_from: + - /sips/:number + - /sips/:title.html + - /sips/pending/type-dynamic.html stage: completed status: shipped title: Type Dynamic diff --git a/_sips/sips/018-modularizing-language-features.md b/_sips/sips/018-modularizing-language-features.md index 1624ae131..eae79131a 100644 --- a/_sips/sips/018-modularizing-language-features.md +++ b/_sips/sips/018-modularizing-language-features.md @@ -1,9 +1,11 @@ --- layout: sip number: 18 -permalink: /sips/:number -redirect_from: /sips/:title.html -redirect_from: /sips/pending/modularizing-language-features.html +permalink: /sips/:number.html +redirect_from: + - /sips/:number + - /sips/:title.html + - /sips/pending/modularizing-language-features.html stage: completed status: shipped title: Modularizing Language Features diff --git a/_sips/sips/023-42.type.md b/_sips/sips/023-42.type.md index 19ac13697..e5328786e 100644 --- a/_sips/sips/023-42.type.md +++ b/_sips/sips/023-42.type.md @@ -1,9 +1,11 @@ --- layout: sip number: 23 -permalink: /sips/:number -redirect_from: /sips/:title.html -redirect_from: /sips/pending/42.type.html +permalink: /sips/:number.html +redirect_from: + - /sips/:number + - /sips/:title.html + - /sips/pending/42.type.html stage: completed status: shipped title: Literal-based singleton types diff --git a/_sips/sips/025-trait-parameters.md b/_sips/sips/025-trait-parameters.md index 7f71ec7ea..9631afb43 100644 --- a/_sips/sips/025-trait-parameters.md +++ b/_sips/sips/025-trait-parameters.md @@ -1,9 +1,11 @@ --- layout: sip number: 25 -permalink: /sips/:number -redirect_from: /sips/:title.html -redirect_from: /sips/pending/trait-parameters.html +permalink: /sips/:number.html +redirect_from: + - /sips/:number + - /sips/:title.html + - /sips/pending/trait-parameters.html stage: completed status: shipped title: Trait Parameters diff --git a/_sips/sips/027-trailing-commas.md b/_sips/sips/027-trailing-commas.md index 705dac2b9..9f79ec5cc 100644 --- a/_sips/sips/027-trailing-commas.md +++ b/_sips/sips/027-trailing-commas.md @@ -1,9 +1,11 @@ --- layout: sip number: 27 -permalink: /sips/:number -redirect_from: /sips/:title.html -redirect_from: /sips/pending/trailing-commas.html +permalink: /sips/:number.html +redirect_from: + - /sips/:number + - /sips/:title.html + - /sips/pending/trailing-commas.html stage: completed status: shipped title: Trailing Commas diff --git a/_sips/sips/030-static-members.md b/_sips/sips/030-static-members.md index fccf24ef2..4baea0ec4 100644 --- a/_sips/sips/030-static-members.md +++ b/_sips/sips/030-static-members.md @@ -1,9 +1,11 @@ --- layout: sip number: 30 -permalink: /sips/:number -redirect_from: /sips/:title.html -redirect_from: /sips/pending/static-members.html +permalink: /sips/:number.html +redirect_from: + - /sips/:number + - /sips/:title.html + - /sips/pending/static-members.html stage: completed status: shipped title: "@static fields and methods in Scala objects (SI-4581)" diff --git a/_sips/sips/031-byname-implicits.md b/_sips/sips/031-byname-implicits.md index 5423b2d1f..6ca168434 100644 --- a/_sips/sips/031-byname-implicits.md +++ b/_sips/sips/031-byname-implicits.md @@ -1,9 +1,11 @@ --- layout: sip number: 31 -permalink: /sips/:number -redirect_from: /sips/:title.html -redirect_from: /sips/pending/byname-implicits.html +permalink: /sips/:number.html +redirect_from: + - /sips/:number + - /sips/:title.html + - /sips/pending/byname-implicits.html stage: completed status: shipped title: Byname implicit arguments diff --git a/_sips/sips/033-priority-based-infix-type-precedence.md b/_sips/sips/033-priority-based-infix-type-precedence.md index b47a39b91..a25bfc544 100644 --- a/_sips/sips/033-priority-based-infix-type-precedence.md +++ b/_sips/sips/033-priority-based-infix-type-precedence.md @@ -1,9 +1,11 @@ --- layout: sip number: 33 -permalink: /sips/:number -redirect_from: /sips/:title.html -redirect_from: /sips/pending/priority-based-infix-type-precedence.html +permalink: /sips/:number.html +redirect_from: + - /sips/:number + - /sips/:title.html + - /sips/pending/priority-based-infix-type-precedence.html stage: completed status: shipped title: Priority-based infix type precedence diff --git a/_sips/sips/035-opaque-types.md b/_sips/sips/035-opaque-types.md index 0d3c0268f..e2aa13a4e 100644 --- a/_sips/sips/035-opaque-types.md +++ b/_sips/sips/035-opaque-types.md @@ -1,9 +1,11 @@ --- layout: sip number: 35 -permalink: /sips/:number -redirect_from: /sips/:title.html -redirect_from: /sips/pending/opaque-types.html +permalink: /sips/:number.html +redirect_from: + - /sips/:number + - /sips/:title.html + - /sips/pending/opaque-types.html stage: completed status: shipped title: Opaque types diff --git a/_sips/sips/037-interpolation-quote-escape.md b/_sips/sips/037-interpolation-quote-escape.md index df6454fe3..e9722baf1 100644 --- a/_sips/sips/037-interpolation-quote-escape.md +++ b/_sips/sips/037-interpolation-quote-escape.md @@ -1,134 +1,136 @@ ---- -layout: sip -number: 37 -permalink: /sips/:number -redirect_from: /sips/:title.html -redirect_from: /sips/pending/interpolation-quote-escape.html -stage: completed -status: shipped -title: Quote escapes for interpolations ---- - -> This proposal has been implemented in Scala 2.13.6 and Scala 3.0.0. - -**By: Martijn Hoekstra** - -## History - -| Date | Version | -|---------------|-----------------------| -| Jul 31th 2018 | Initial Draft | -| Aug 1st 2018 | Process lead comments | -| Nov 2nd 2019 | Link dotty impl | - -## Introduction - -It's not straight-forward how to have a quote character (`"`) in an -interpolation. Parsing interpolations does not process backslash escapes, but -rather passes the raw string to the interpolator, which then has the option to -process escapes itself as it sees fit. That means there are no lexing rules that -process the escape, and the sequence `\"` simply terminates the interpolation. - -Interpolations have a different meta-character -- the `$` character -- which is -treated specially. Interpolations use this escape to splice in arguments, and it -can also be used to escape itself as the sequence `$$` to represent a literal -`$` character. - -Because of its special handling during the parse, the `$` could be used to -escape a `"` character to represent a literal `"` withing a string. - -## Motivating Example - -That the `"` character can't be easily escaped in interpolations has been an -open issue since at least 2012[^1], and how to deal with this issue is a -somewhat common SO question[^2][^3] - -{% highlight Scala %} -s"A common question for Scala programmers is "How can I represent a literal " character in Scala interpolations?"" -{% endhighlight %} - -Doesn't work. - -Neither does - -{% highlight Scala %} -s"A common question for Scala programmers is \"How can I represent a literal \" character in Scala interpolations?\"" -{% endhighlight %} - -### Examples - -{% highlight Scala %} -s"A common question for Scala programmers is $"How can I represent a literal $" character in Scala interpolations?$"" -{% endhighlight %} - -### Comparison Examples - -There are a number of ways to work around the current restriction. - -The simplest is triple-quoting the interpolation: -{% highlight Scala %} -s"""A common question for Scala programmers is "How can I represent a literal " character in Scala interpolations?"""" -{% endhighlight %} - -Another common workaround is splicing in a separate string in one way or another. - -{% highlight Scala %} -//with a normal escape in a string in a block -s"A common question for Scala programmers is ${"\""}How can I represent a literal ${"\""} character in Scala interpolations?${"\""}" -//with a quote character as a block -s"A common question for Scala programmers is ${'"'}How can I represent a literal ${'"'} character in Scala interpolations?${'"'}" -//with an identifier referencing a string that contains a single quote -val quote = "\"" -s"A common question for Scala programmers is ${q}How can I represent a literal $q character in Scala interpolations?$q" -{% endhighlight %} - -The second set of workarounds is dependent on the actual interpolator, and the -quote becomes an argument. The `s`, `f` and `raw` interpolators splice their -arguments in to the string, as is the obvious use and implementation of an -interpolator. But it's not the only possible use and implementation for an -interpolator and this way of inserting quotes may not work for any given -interpolator. - -## Design - -This is a non-breaking change. Currently the sequence `$"` within an -interpolation is a syntax error, as has already been noted[^4] -on the original ticket. - -## Implementation - -The implementation is simple to the point of being trivial: see -the implementation [^5] for the actual change in functionality and the rest of -that PR for the spec and test changes. - -There is also an implementation for Dotty.[^7] - -## Drawbacks - -Adding this feature makes the language just a bit more irregular. There already -is some amount of irregularity around string literals and interpolations in -the language. An argument could be made that this change makes that worse rather -than better. - -Because it affects parsing, this change may affect syntax highlighters. Syntax -highlighters tend to already struggle around "funky" strings and interpolations. - -## Alternatives - -More ambitious proposals around interpolations are possible, and have been -proposed in different forms before. For example, there was a PR thatshows more options -around using `\` as a meta character in interpolations[^6]. It stranded somewhere -between red tape, ambition and changing processes. - -I suspect the last word about interpolations hasn't been spoken, and that later -proposals may still make interpolations more regular. This proposal is -deliberately small, and intends not to be in the way of any potential further -proposals. - -[^1]: https://github.com/Scala/bug/issues/6476 "\\\" escape does not work with string interpolation" -[^2]: https://stackoverflow.com/questions/31366563/string-interpolation-escaping-quotation-mark/31366588 "" -[^3]: https://stackoverflow.com/questions/17085354/escaping-quotation-marks-in-f-string-interpolation "" -[^4]: https://github.com/scala/bug/issues/6476#issuecomment-292412577 "@retronym said: +1 to s"$"". Because it doesn't compile today, we don't risk changing the meaning of existing programs." -[^5]: https://github.com/Scala/Scala/pull/6953/files#diff-0023b3bfa053fb16603156b785efa7ad "" -[^6]: https://github.com/Scala/Scala/pull/4308 "SI-6476 Accept escaped quotes in interp strings" -[^7]: https://github.com/lampepfl/dotty/pull/7486 "PR in dotty" +--- +layout: sip +number: 37 +permalink: /sips/:number.html +redirect_from: + - /sips/:number + - /sips/:title.html + - /sips/pending/interpolation-quote-escape.html +stage: completed +status: shipped +title: Quote escapes for interpolations +--- + +> This proposal has been implemented in Scala 2.13.6 and Scala 3.0.0. + +**By: Martijn Hoekstra** + +## History + +| Date | Version | +|---------------|-----------------------| +| Jul 31th 2018 | Initial Draft | +| Aug 1st 2018 | Process lead comments | +| Nov 2nd 2019 | Link dotty impl | + +## Introduction + +It's not straight-forward how to have a quote character (`"`) in an +interpolation. Parsing interpolations does not process backslash escapes, but +rather passes the raw string to the interpolator, which then has the option to +process escapes itself as it sees fit. That means there are no lexing rules that +process the escape, and the sequence `\"` simply terminates the interpolation. + +Interpolations have a different meta-character -- the `$` character -- which is +treated specially. Interpolations use this escape to splice in arguments, and it +can also be used to escape itself as the sequence `$$` to represent a literal +`$` character. + +Because of its special handling during the parse, the `$` could be used to +escape a `"` character to represent a literal `"` withing a string. + +## Motivating Example + +That the `"` character can't be easily escaped in interpolations has been an +open issue since at least 2012[^1], and how to deal with this issue is a +somewhat common SO question[^2][^3] + +{% highlight Scala %} +s"A common question for Scala programmers is "How can I represent a literal " character in Scala interpolations?"" +{% endhighlight %} + +Doesn't work. + +Neither does + +{% highlight Scala %} +s"A common question for Scala programmers is \"How can I represent a literal \" character in Scala interpolations?\"" +{% endhighlight %} + +### Examples + +{% highlight Scala %} +s"A common question for Scala programmers is $"How can I represent a literal $" character in Scala interpolations?$"" +{% endhighlight %} + +### Comparison Examples + +There are a number of ways to work around the current restriction. + +The simplest is triple-quoting the interpolation: +{% highlight Scala %} +s"""A common question for Scala programmers is "How can I represent a literal " character in Scala interpolations?"""" +{% endhighlight %} + +Another common workaround is splicing in a separate string in one way or another. + +{% highlight Scala %} +//with a normal escape in a string in a block +s"A common question for Scala programmers is ${"\""}How can I represent a literal ${"\""} character in Scala interpolations?${"\""}" +//with a quote character as a block +s"A common question for Scala programmers is ${'"'}How can I represent a literal ${'"'} character in Scala interpolations?${'"'}" +//with an identifier referencing a string that contains a single quote +val quote = "\"" +s"A common question for Scala programmers is ${q}How can I represent a literal $q character in Scala interpolations?$q" +{% endhighlight %} + +The second set of workarounds is dependent on the actual interpolator, and the +quote becomes an argument. The `s`, `f` and `raw` interpolators splice their +arguments in to the string, as is the obvious use and implementation of an +interpolator. But it's not the only possible use and implementation for an +interpolator and this way of inserting quotes may not work for any given +interpolator. + +## Design + +This is a non-breaking change. Currently the sequence `$"` within an +interpolation is a syntax error, as has already been noted[^4] +on the original ticket. + +## Implementation + +The implementation is simple to the point of being trivial: see +the implementation [^5] for the actual change in functionality and the rest of +that PR for the spec and test changes. + +There is also an implementation for Dotty.[^7] + +## Drawbacks + +Adding this feature makes the language just a bit more irregular. There already +is some amount of irregularity around string literals and interpolations in +the language. An argument could be made that this change makes that worse rather +than better. + +Because it affects parsing, this change may affect syntax highlighters. Syntax +highlighters tend to already struggle around "funky" strings and interpolations. + +## Alternatives + +More ambitious proposals around interpolations are possible, and have been +proposed in different forms before. For example, there was a PR thatshows more options +around using `\` as a meta character in interpolations[^6]. It stranded somewhere +between red tape, ambition and changing processes. + +I suspect the last word about interpolations hasn't been spoken, and that later +proposals may still make interpolations more regular. This proposal is +deliberately small, and intends not to be in the way of any potential further +proposals. + +[^1]: https://github.com/Scala/bug/issues/6476 "\\\" escape does not work with string interpolation" +[^2]: https://stackoverflow.com/questions/31366563/string-interpolation-escaping-quotation-mark/31366588 "" +[^3]: https://stackoverflow.com/questions/17085354/escaping-quotation-marks-in-f-string-interpolation "" +[^4]: https://github.com/scala/bug/issues/6476#issuecomment-292412577 "@retronym said: +1 to s"$"". Because it doesn't compile today, we don't risk changing the meaning of existing programs." +[^5]: https://github.com/Scala/Scala/pull/6953/files#diff-0023b3bfa053fb16603156b785efa7ad "" +[^6]: https://github.com/Scala/Scala/pull/4308 "SI-6476 Accept escaped quotes in interp strings" +[^7]: https://github.com/lampepfl/dotty/pull/7486 "PR in dotty" diff --git a/_sips/sips/038-converters-among-optional-functions-partialfunctions-and-extractor-objects.md b/_sips/sips/038-converters-among-optional-functions-partialfunctions-and-extractor-objects.md index 56b864d40..8c8138413 100644 --- a/_sips/sips/038-converters-among-optional-functions-partialfunctions-and-extractor-objects.md +++ b/_sips/sips/038-converters-among-optional-functions-partialfunctions-and-extractor-objects.md @@ -1,9 +1,11 @@ --- layout: sip number: 38 -permalink: /sips/:number -redirect_from: /sips/:title.html -redirect_from: /sips/pending/converters-among-optional-functions-partialfunctions-and-extractor-object.html +permalink: /sips/:number.html +redirect_from: + - /sips/:number + - /sips/:title.html + - /sips/pending/converters-among-optional-functions-partialfunctions-and-extractor-object.html stage: completed status: shipped title: Converters among optional Functions, PartialFunctions and extractor objects diff --git a/_sips/sips/039-right-associative-by-name-operators.md b/_sips/sips/039-right-associative-by-name-operators.md index 2d60be3f2..45b600848 100644 --- a/_sips/sips/039-right-associative-by-name-operators.md +++ b/_sips/sips/039-right-associative-by-name-operators.md @@ -1,9 +1,11 @@ --- layout: sip number: 39 -permalink: /sips/:number -redirect_from: /sips/:title.html -redirect_from: /sips/pending/right-associative-by-name-operators.html +permalink: /sips/:number.html +redirect_from: + - /sips/:number + - /sips/:title.html + - /sips/pending/right-associative-by-name-operators.html stage: completed status: shipped title: Right-Associative By-Name Operators diff --git a/_sips/sips/042-binary-integer-literals.md b/_sips/sips/042-binary-integer-literals.md index c4fe4cf39..f453213d5 100644 --- a/_sips/sips/042-binary-integer-literals.md +++ b/_sips/sips/042-binary-integer-literals.md @@ -1,8 +1,10 @@ --- layout: sip number: 42 -permalink: /sips/:number -redirect_from: /sips/:title.html +permalink: /sips/:number.html +redirect_from: + - /sips/:number + - /sips/:title.html stage: completed status: shipped title: Support Binary Integer Literals diff --git a/_sips/sips/044-fewer-braces.md b/_sips/sips/044-fewer-braces.md index 9f9c08627..f652919a0 100644 --- a/_sips/sips/044-fewer-braces.md +++ b/_sips/sips/044-fewer-braces.md @@ -1,8 +1,10 @@ --- layout: sip number: 44 -permalink: /sips/:number -redirect_from: /sips/:title.html +permalink: /sips/:number.html +redirect_from: + - /sips/:number + - /sips/:title.html stage: completed status: shipped title: Fewer Braces diff --git a/_sips/sips/046-scala-cli.md b/_sips/sips/046-scala-cli.md index 0316c6340..2faf8f498 100644 --- a/_sips/sips/046-scala-cli.md +++ b/_sips/sips/046-scala-cli.md @@ -1,8 +1,10 @@ --- layout: sip number: 46 -permalink: /sips/:number -redirect_from: /sips/:title.html +permalink: /sips/:number.html +redirect_from: + - /sips/:number + - /sips/:title.html stage: completed status: shipped title: Scala CLI as default Scala command diff --git a/_sips/sips/047-clause-interleaving.md b/_sips/sips/047-clause-interleaving.md index 6f731752c..1d1189626 100644 --- a/_sips/sips/047-clause-interleaving.md +++ b/_sips/sips/047-clause-interleaving.md @@ -1,8 +1,10 @@ --- layout: sip number: 47 -permalink: /sips/:number -redirect_from: /sips/:title.html +permalink: /sips/:number.html +redirect_from: + - /sips/:number + - /sips/:title.html stage: completed status: shipped title: Clause Interleaving diff --git a/_sips/sips/049-polymorphic-eta-expansion.md b/_sips/sips/049-polymorphic-eta-expansion.md index 89a239461..b419fb716 100644 --- a/_sips/sips/049-polymorphic-eta-expansion.md +++ b/_sips/sips/049-polymorphic-eta-expansion.md @@ -1,8 +1,10 @@ --- layout: sip number: 49 -permalink: /sips/:number -redirect_from: /sips/:title.html +permalink: /sips/:number.html +redirect_from: + - /sips/:number + - /sips/:title.html stage: implementation status: waiting-for-implementation title: Polymorphic Eta-Expansion diff --git a/_sips/sips/051-drop-stdlib-forwards-bin-compat.md b/_sips/sips/051-drop-stdlib-forwards-bin-compat.md index 15cad26f7..a29c75d4f 100644 --- a/_sips/sips/051-drop-stdlib-forwards-bin-compat.md +++ b/_sips/sips/051-drop-stdlib-forwards-bin-compat.md @@ -1,8 +1,10 @@ --- layout: sip number: 51 -permalink: /sips/:number -redirect_from: /sips/:title.html +permalink: /sips/:number.html +redirect_from: + - /sips/:number + - /sips/:title.html stage: completed status: shipped title: Drop Forwards Binary Compatibility of the Scala 2.13 Standard Library diff --git a/_sips/sips/052-binary-api.md b/_sips/sips/052-binary-api.md index f1c274e22..7775ea75b 100644 --- a/_sips/sips/052-binary-api.md +++ b/_sips/sips/052-binary-api.md @@ -1,8 +1,10 @@ --- layout: sip number: 52 -permalink: /sips/:number -redirect_from: /sips/:title.html +permalink: /sips/:number.html +redirect_from: + - /sips/:number + - /sips/:title.html stage: completed status: shipped title: Binary APIs diff --git a/_sips/sips/053-quote-pattern-type-variable-syntax.md b/_sips/sips/053-quote-pattern-type-variable-syntax.md index c553a998d..cf90b393b 100644 --- a/_sips/sips/053-quote-pattern-type-variable-syntax.md +++ b/_sips/sips/053-quote-pattern-type-variable-syntax.md @@ -1,8 +1,10 @@ --- layout: sip number: 53 -permalink: /sips/:number -redirect_from: /sips/:title.html +permalink: /sips/:number.html +redirect_from: + - /sips/:number + - /sips/:title.html stage: completed status: shipped title: Quote pattern explicit type variable syntax diff --git a/_sips/sips/054-multi-source-extension-overloads.md b/_sips/sips/054-multi-source-extension-overloads.md index 6c6352f97..1ef0ef243 100644 --- a/_sips/sips/054-multi-source-extension-overloads.md +++ b/_sips/sips/054-multi-source-extension-overloads.md @@ -1,8 +1,10 @@ --- layout: sip number: 54 -permalink: /sips/:number -redirect_from: /sips/:title.html +permalink: /sips/:number.html +redirect_from: + - /sips/:number + - /sips/:title.html stage: completed status: shipped title: Multi-Source Extension Overloads diff --git a/_sips/sips/056-match-types-spec.md b/_sips/sips/056-match-types-spec.md index 3161b9b29..8bb84252d 100644 --- a/_sips/sips/056-match-types-spec.md +++ b/_sips/sips/056-match-types-spec.md @@ -1,8 +1,10 @@ --- layout: sip number: 56 -permalink: /sips/:number -redirect_from: /sips/:title.html +permalink: /sips/:number.html +redirect_from: + - /sips/:number + - /sips/:title.html stage: completed status: shipped title: Proper Specification for Match Types diff --git a/_sips/sips/057-replace-nonsensical-unchecked-annotation.md b/_sips/sips/057-replace-nonsensical-unchecked-annotation.md index bb6009dda..6b4e9a149 100644 --- a/_sips/sips/057-replace-nonsensical-unchecked-annotation.md +++ b/_sips/sips/057-replace-nonsensical-unchecked-annotation.md @@ -1,8 +1,10 @@ --- layout: sip number: 57 -permalink: /sips/:number -redirect_from: /sips/:title.html +permalink: /sips/:number.html +redirect_from: + - /sips/:number + - /sips/:title.html presip-thread: https://contributors.scala-lang.org/t/pre-sip-replace-non-sensical-unchecked-annotations/6342 stage: completed status: shipped diff --git a/_sips/sips/058-named-tuples.md b/_sips/sips/058-named-tuples.md index faf5a3a49..1f58dccc3 100644 --- a/_sips/sips/058-named-tuples.md +++ b/_sips/sips/058-named-tuples.md @@ -1,8 +1,10 @@ --- layout: sip number: 58 -permalink: /sips/:number -redirect_from: /sips/named-tuples.html +permalink: /sips/:number.html +redirect_from: + - /sips/:number + - /sips/named-tuples.html presip-thread: https://contributors.scala-lang.org/t/pre-sip-named-tuples/6403/164 stage: completed status: shipped diff --git a/_sips/sips/059-multiple-assignments.md b/_sips/sips/059-multiple-assignments.md index 198398304..924ee1722 100644 --- a/_sips/sips/059-multiple-assignments.md +++ b/_sips/sips/059-multiple-assignments.md @@ -1,8 +1,10 @@ --- layout: sip number: 59 -permalink: /sips/:number -redirect_from: /sips/:title.html +permalink: /sips/:number.html +redirect_from: + - /sips/:number + - /sips/:title.html presip-thread: https://contributors.scala-lang.org/t/pre-sip-multiple-assignments/6425 stage: implementation status: under-review diff --git a/_sips/sips/060-alternative-bind-variables.md b/_sips/sips/060-alternative-bind-variables.md index 8fb4c2984..7d4490120 100644 --- a/_sips/sips/060-alternative-bind-variables.md +++ b/_sips/sips/060-alternative-bind-variables.md @@ -1,8 +1,10 @@ --- layout: sip number: 60 -permalink: /sips/:number -redirect_from: /sips/:title.html +permalink: /sips/:number.html +redirect_from: + - /sips/:number + - /sips/:title.html presip-thread: https://contributors.scala-lang.org/t/pre-sip-bind-variables-for-alternative-patterns/6321/13 stage: implementation status: waiting-for-implementation diff --git a/_sips/sips/061-unroll-default-arguments.md b/_sips/sips/061-unroll-default-arguments.md index 093021cc2..fa0f1b259 100644 --- a/_sips/sips/061-unroll-default-arguments.md +++ b/_sips/sips/061-unroll-default-arguments.md @@ -1,8 +1,10 @@ --- layout: sip number: 61 -permalink: /sips/:number -redirect_from: /sips/:title.html +permalink: /sips/:number.html +redirect_from: + - /sips/:number + - /sips/:title.html stage: completed status: accepted title: Unroll Default Arguments for Binary Compatibility diff --git a/_sips/sips/062-better-fors.md b/_sips/sips/062-better-fors.md index 0e68b8500..54eaef5cd 100644 --- a/_sips/sips/062-better-fors.md +++ b/_sips/sips/062-better-fors.md @@ -1,8 +1,10 @@ --- layout: sip number: 62 -permalink: /sips/:number -redirect_from: /sips/:title.html +permalink: /sips/:number.html +redirect_from: + - /sips/:number + - /sips/:title.html stage: completed status: shipped title: For comprehension improvements diff --git a/_sips/sips/064-typeclasses-syntax.md b/_sips/sips/064-typeclasses-syntax.md index 77a8f8165..aa7fd5eee 100644 --- a/_sips/sips/064-typeclasses-syntax.md +++ b/_sips/sips/064-typeclasses-syntax.md @@ -1,8 +1,10 @@ --- layout: sip number: 64 -permalink: /sips/:number -redirect_from: /sips/:title.html +permalink: /sips/:number.html +redirect_from: + - /sips/:number + - /sips/:title.html presip-thread: https://contributors.scala-lang.org/t/pre-sip-improve-syntax-for-context-bounds-and-givens/6576/97 stage: completed status: shipped diff --git a/_sips/sips/068-reference-package-objects.md b/_sips/sips/068-reference-package-objects.md index 3470920ae..cddeb46d2 100644 --- a/_sips/sips/068-reference-package-objects.md +++ b/_sips/sips/068-reference-package-objects.md @@ -1,8 +1,10 @@ --- layout: sip number: 68 -permalink: /sips/:number -redirect_from: /sips/:title.html +permalink: /sips/:number.html +redirect_from: + - /sips/:number + - /sips/:title.html stage: completed status: accepted title: Reference-able Package Objects diff --git a/_sips/sips/071-into.md b/_sips/sips/071-into.md index 992052de7..fa85c85b0 100644 --- a/_sips/sips/071-into.md +++ b/_sips/sips/071-into.md @@ -1,7 +1,9 @@ --- layout: sip -permalink: /sips/:number -redirect_from: /sips/into.html +permalink: /sips/:number.html +redirect_from: + - /sips/:number + - /sips/into.html stage: completed status: shipped number: 71