From 9ff6a34edaecda2a36d0e157c582ed0bf35caa76 Mon Sep 17 00:00:00 2001 From: Heather Miller Date: Thu, 3 May 2012 14:30:40 +0200 Subject: [PATCH 0001/1870] Pushing uncommitted footprint --- contribute/bug-reporting-guide.md | 4 ++ contribute/git-guide.md | 4 ++ contribute/index.md | 70 +++++++++++++++++++++++++++++++ contribute/partest-guide.md | 4 ++ contribute/workflow.md | 4 ++ 5 files changed, 86 insertions(+) create mode 100644 contribute/bug-reporting-guide.md create mode 100644 contribute/git-guide.md create mode 100644 contribute/index.md create mode 100644 contribute/partest-guide.md create mode 100644 contribute/workflow.md diff --git a/contribute/bug-reporting-guide.md b/contribute/bug-reporting-guide.md new file mode 100644 index 0000000000..33640bcd47 --- /dev/null +++ b/contribute/bug-reporting-guide.md @@ -0,0 +1,4 @@ +--- +layout: page +title: Bug Reporting +--- \ No newline at end of file diff --git a/contribute/git-guide.md b/contribute/git-guide.md new file mode 100644 index 0000000000..a66fb33190 --- /dev/null +++ b/contribute/git-guide.md @@ -0,0 +1,4 @@ +--- +layout: page +title: Using git +--- \ No newline at end of file diff --git a/contribute/index.md b/contribute/index.md new file mode 100644 index 0000000000..b11a73bcbf --- /dev/null +++ b/contribute/index.md @@ -0,0 +1,70 @@ +--- +layout: page +title: Contribute +--- + +- This page should contain the introduction as mentioned in the Scala Doc team google document +- Subpages or subsections for contributing for each project (i.e. how to find tickets/features to work on) +- Building and contributing code (contributor's workflow) + - link to a proper git etiquette page + - link to CLA + - how to run and use partest + - compiler page (links to compiler-related docs i.e. reflection/macros/compiler-plugin guides, links to compiler internal videos, and useful info from wiki) (or should this go on docs.scala-lang?) +- Link to how to make a bug report + +The Scala programming langauge is an open source project from École +Polytechnique Fédérale de Lausanne (EPFL) in Switzerland. The source of the +compiler and libraries is hosted on [github](http://github.com/scala/scala). + +Some aspects of the language are easier to contribute to than others-- the +compiler, for example, is arguably the most difficult part of the Scala +project to successfully submit patches to. + +If you're interested in joining our community and contributing to the project, +start simple-- often Scaladoc (Scala's javadoc-like tool, Example: [Scala +Standard Library API](www.scala-lang.org/api/current/index.html#package)) is +the best place to get started. + + + EPFL Typesafe Stack + _______________ ___________ + | | | | + | stdlib | | Akka | + | compiler | | Play! | + | scaladoc | | SBT | + | documentation | | .... | + |_______________| |___________| + + +## Testing + +Partest how-tos. + +### Lukas's new build machine + +Link, needs repo name and github username and builds/tests for you. + +## Community tickets + +- for scaladoc +- for the stdlib +- for the compiler +- for the doc site + +## Process + +"gitting stuff done" document. + +Where to ask questions. How-tos to mailing list, discussion pertaining to a +specific ticket on the issue tracker. + +## CLA + +## FAQ + +### OSX + +### Linux + +### Windows + diff --git a/contribute/partest-guide.md b/contribute/partest-guide.md new file mode 100644 index 0000000000..1b3c098cca --- /dev/null +++ b/contribute/partest-guide.md @@ -0,0 +1,4 @@ +--- +layout: page +title: Running the Test Suite +--- \ No newline at end of file diff --git a/contribute/workflow.md b/contribute/workflow.md new file mode 100644 index 0000000000..89c71102a9 --- /dev/null +++ b/contribute/workflow.md @@ -0,0 +1,4 @@ +--- +layout: page +title: Contributor's Workflow +--- \ No newline at end of file From fc99948bd01ccad7310366e17a16d3a75b4a3c94 Mon Sep 17 00:00:00 2001 From: ingoem Date: Thu, 27 Sep 2012 11:45:57 +0200 Subject: [PATCH 0002/1870] Some work on the contribute section --- contribute/git-guide.md | 76 ++++++++++++++++++++++++++++++++++++++++- contribute/index.md | 61 +++++++++++++++++++++++++++++---- 2 files changed, 130 insertions(+), 7 deletions(-) diff --git a/contribute/git-guide.md b/contribute/git-guide.md index a66fb33190..2e173ec7ec 100644 --- a/contribute/git-guide.md +++ b/contribute/git-guide.md @@ -1,4 +1,78 @@ --- layout: page title: Using git ---- \ No newline at end of file +--- + +This is a step-by-step guide on how to use [git](http://git-scm.com/) and [github](http://github.com/) if you want to contribute to the Scala project. If you are new to git, make yourself familiar first. We recommend the [Git Pro]()http://git-scm.com/book/en/) online book. + +### Signup + +First create an account on [github](http://github.com/). You can also use your existing account, of course. + +### Fork + +Now, go to [https://github.com/scala/scala]() and click the "Fork" button at the top of the page. + +![image](images/fork.png) + +If everything went okay, you will be redirected to your own fork at `https://github.com/username/scala`, where `username` is your github user name. Make sure you read [http://help.github.com/fork-a-repo/](), which covers some of the things that will follow below. + +### Clone + +Clone your repository. Run the following on the command line: + + $ git clone https://github.com/username/scala + +This will create a local directory called `scala`, which contains a clone of the remote repository. + +### Branch + +Before you start making changes, always create your own branch. Never work on the `master` branch. Think of a name that describes the changes you plan on doing. Use a prefix that describes the nature of your change. There are essentially two kinds of changes: bug fixes and new features. + + - For bug fixes, use `issue/NNNN` for bug NNNN from the [Scala issue tracker](https://issues.scala-lang.org/). + - For a new feature use `topic/XXX` for feature XXX. + +Use feature names that make sense in the context of the whole Scala project and not just to you personally. For example, if you work on diagrams in Scaladoc, use `topic/scaldoc-diagrams` instead of just `topic/diagrams`. + +For your initial contribution, try work on something manageable (TODO: link to the subproject overview page). + +Now, it's time to create your branch. Run the following on the command line + + $ git checkout -b topic/XXX + +If you are new to git and branching, please read the [Branching Chapter](http://git-scm.com/book/en/Git-Branching) in the Git Pro book. + +### Change + +Now, you are ready to make changes ot the code base. The [Git Basics](http://git-scm.com/book/en/Git-Basics) chapter in the Git online book covers most of the basic workflow during this stage. + +TODO: refer to other development stuff, partest and so on. + +### Sync and Rebase + +Before you can submit your patch, make sure that your commit structure is clean. We won't accept pull requests for bug fixes that have more than one commit. For features, it is okay to have several commits, but all tests need to pass after every single commit. To clean up your commit structure, you want to [rewrite history](http://git-scm.com/book/en/Git-Branching-Rebasing) using `git rebase` so your commits are against the latest revision of `master`. + +Occassionally, you also want to sync with `master` so you don't fall behind too much. Otherwise, creating a clean pull request can become a lot of work. It is often a good idea to use `git rebase` instead of `git merge` to stay on top of `master` and keep a linear commit structure (TODO: do we actually REQUIRE this???). Read more about this approach [here](http://git-scm.com/book/en/Git-Branching-Rebasing). + +### Push + +For now, you might have committed your changes only locally (or maybe you have pushed your changes already to your fork on github because you want others to see it). Once you are satisfied with your work, synced with `master` and cleaned up your commits you are ready to submit a patch to the central Scala repository. First, make sure you have pushed all of your local changes to your fork on github. + + $ git push username + # This pushes all of your local branches to your fork on github. + +Again, `username` stands for your github user name. + +### Submit pull request + +Now it's time to send your changes to the Scala project for review. To do so, you ask for your changes to be pulled into the main repository by submitting a pull request. Go to your own Scala project page at `https://github.com/username/scala` and switch to the branch that contains your changes. + +![image](images/switchbranch.png) + +Then click on the "Pull Request" button at the top. + +![image](images/pullrequest.png) + +The github help page at [http://help.github.com/send-pull-requests/]() covers sending pull requests in more detail. Make sure you submit your request against the right branch. Strictly follow our [Pull Request policy](https://github.com/scala/scala/wiki/Pull-Request-Policy). + +A pull request is rarely accepted right away, so don't be depressed if the reviewer of your pull request will reject it or asks you to make additional changes before your request can be eventually accepted into the main repository. diff --git a/contribute/index.md b/contribute/index.md index b11a73bcbf..9f90154c85 100644 --- a/contribute/index.md +++ b/contribute/index.md @@ -26,6 +26,14 @@ Standard Library API](www.scala-lang.org/api/current/index.html#package)) is the best place to get started. +## Overview of the Scala Ecosystem + +TODO: I feel this section belongs somewhere else and should be linked here. + +[Scala Project](http://scala-lang.org) + +[Typesafe Stack](http://typesafe.com/stack) + EPFL Typesafe Stack _______________ ___________ | | | | @@ -34,21 +42,42 @@ the best place to get started. | scaladoc | | SBT | | documentation | | .... | |_______________| |___________| + + + +## Basic Workflow + +The Scala project, including the compiler, standard library and Scaladoc is hosted on [https://github.com/scala/scala](). As usual on github, developers work in personal forks that are merged into the main repository via pull request after having successfully completed a review process. As a contributor, your basic workflow is as follows: + + 1. [Fork](https://help.github.com/articles/fork-a-repo) the [Scala Project](https://github.com/scala/scala) + - Create a [topic branch](http://git-scm.com/book/en/Git-Branching-Branching-Workflows#Topic-Branches) + - Fix a [bug](https://issues.scala-lang.org/secure/IssueNavigator.jspa?reset=true&jqlQuery=labels+%3D+community), implement a feature + - Push your changes to your fork on github + - Submit [pull request](https://help.github.com/articles/using-pull-requests) + - Work with a reviewer on [getting your request merged](https://github.com/scala/scala/wiki/Pull-Request-Policy) + - Celebrate! +Read our [Git Commit Guide](git-guide.html) for details. + +## Building + +The Scala compiler and libraries are built using Ant. Read the [README](https://github.com/scala/scala/blob/master/README.rst) on how to build, test and create a distribution. ## Testing -Partest how-tos. +We maintain an extensive test suite that is run via our parallel testing tool `partest`. Read our [Partest Guide](partest-guide.html) for details. ### Lukas's new build machine Link, needs repo name and github username and builds/tests for you. -## Community tickets +## What to work on -- for scaladoc -- for the stdlib -- for the compiler +If you want to become a contributor but you don't know what to work on, here are a few ideas. Generally, it is a good idea to start with fixing bugs! To get some idea, head over to our [Scala issue tracker](https://issues.scala-lang.org/) and search for some unresolved bugs assigned to the community or click [here](https://issues.scala-lang.org/secure/IssueNavigator.jspa?reset=true&jqlQuery=labels+%3D+community) for a direct link. Here is a breakdown into different subprojects: + + - [Scaladoc](https://issues.scala-lang.org/secure/IssueNavigator!executeAdvanced.jspa?jqlQuery=labels+%3D+scaladoc+and+labels+%3D+community&runQuery=true&clear=true) +- [Standard Library](https://issues.scala-lang.org/secure/IssueNavigator!executeAdvanced.jspa?jqlQuery=labels+%3D+community+and+labels+%3D+library&runQuery=true&clear=true) +- [Compiler](https://issues.scala-lang.org/secure/IssueNavigator!executeAdvanced.jspa?jqlQuery=labels+%3D+community+and+labels+%3D+compiler&runQuery=true&clear=true) - for the doc site ## Process @@ -58,8 +87,28 @@ Link, needs repo name and github username and builds/tests for you. Where to ask questions. How-tos to mailing list, discussion pertaining to a specific ticket on the issue tracker. -## CLA +## Contributor's License Agreement + +Before we can accept your pull request you have to sign our Contributor's License Agreement (CLA). + +TODO: Heather + +## Compiler Internals + +The files below are recordings of code walk-through sessions by Martin Odersky about the Scala compiler internals. Some of the information is somewhat outdated, but the clips are still a good introduction to some parts of the compiler architecture. + - [Scala Internals 2008-10-29 (Symbols 1)](http://www.scala-lang.org/sites/default/files/martin_ordersky_scala_internals_2008-10-29.avi) + + Handling of Symbols in the Scala compiler: some details on the symtab subdir, Symbols, Definitions, StdNames, Types (Lazy Types). + + - [Scala Internals 2008-11-05 (Symbols 2)](http://www.scala-lang.org/sites/default/files/martin_ordersky_scala_internals_2008-11-05.avi) + + Handling of Symbols part deux: more information on Symbols, Flags, Definitions. + + - [Scala Internals 2009-03-04 (Types)](http://www.scala-lang.org/sites/default/files/martin_ordersky_scala_internals_2009-03-04.avi) + + A detailed explanation about how types are represented and manipulated within the Scala compiler: data structures, manipulations of types, coding conventions (audio is not perfect, but intelligible). + ## FAQ ### OSX From 02337f4add685cbe0155d8e7e0f12ea29e536aaa Mon Sep 17 00:00:00 2001 From: ingoem Date: Thu, 27 Sep 2012 16:42:23 +0200 Subject: [PATCH 0003/1870] Add partest guide --- contribute/partest-guide.md | 64 ++++++++++++++++++++++++++++++++++++- 1 file changed, 63 insertions(+), 1 deletion(-) diff --git a/contribute/partest-guide.md b/contribute/partest-guide.md index 1b3c098cca..e681c569fe 100644 --- a/contribute/partest-guide.md +++ b/contribute/partest-guide.md @@ -1,4 +1,66 @@ --- layout: page title: Running the Test Suite ---- \ No newline at end of file +--- + +Partest is a custom parallel testing tool that we use to run the test suite for the Scala compiler and library. Go the scala project folder from your local checkout and run it via `ant` or standalone as follows. + +## Using ant + +The test suite can be run by using ant from the command line: + + $ ant test.suite + +## Standalone + +There are launch scripts `partest` and `partest.bat` in the `test` folder of the scala project. To have partest run failing tests only and print details about test failures to the console, you can use + + ./test/partest --show-diff --show-log --failed + +You can get a summary of the usage by running partest without arguments. + +* Most commonly you want to invoke partest with an option that tells it which part of the tests to run. For example `--all`, `--pos`, `--neg` or `--run`. +* You can test individual files by specifying individual test files (`.scala` files) as options. Several files can be tested if they are from the same category, e.g., `pos`. +* You can enable output of log and diff using the `-show-log` and `-show-diff` options. +* If you get into real trouble, and want to find out what partest does, you can run it with option `--verbose`. This info is useful as part of bug reports. +* Set custom path from where to load classes: `-classpath ` and `-buildpath `. +* You can use the `SCALAC_OPTS` environment variable to pass command line options to the compiler. +* You can use the `JAVA_OPTS` environment variable to pass command line options to the runner (e.g., for `run/jvm` tests). +* The launch scripts run partest as follows: + + scala -cp scala.tools.partest.nest.NestRunner + + Partest classes from a `quick` build, e.g., can be found in `./build/quick/classes/partest/`. + + Partest will tell you where it loads compiler/library classes from by adding the `partest.debug` property: + + scala -Dpartest.debug=true -cp scala.tools.partest.nest.NestRunner + + + +## ScalaCheck tests + +Tests that depend on [ScalaCheck](https://github.com/rickynils/scalacheck) can be added under folder `./test/files/scalacheck`. A sample test: + + import org.scalacheck._ + import Prop._ + + object Test { + val prop_ConcatLists = property{ (l1: ListInt, l2: ListInt) => + l1.size + l2.size == (l1 ::: l2).size + } + + val tests = List(("prop_ConcatLists", prop_ConcatLists)) + } + +## Troubleshooting + +### Windows + +Some tests might fail because line endings in the `.check` files and the produced results do not match. In that case, set either + + git config core.autocrlf false + +or + + git config core.autocrlf input \ No newline at end of file From 9ea42c156a8025f1a5d436d390586eca4422a33e Mon Sep 17 00:00:00 2001 From: Eugene Burmako Date: Fri, 1 Mar 2013 16:41:26 +0100 Subject: [PATCH 0004/1870] first 1.5 steps of the hacker guide --- contribute/01-post.png | Bin 0 -> 172693 bytes contribute/03-fork.png | Bin 0 -> 46172 bytes contribute/hacker-guide.md | 106 +++++++++++++++++++++++++++++++++++++ 3 files changed, 106 insertions(+) create mode 100644 contribute/01-post.png create mode 100644 contribute/03-fork.png create mode 100644 contribute/hacker-guide.md diff --git a/contribute/01-post.png b/contribute/01-post.png new file mode 100644 index 0000000000000000000000000000000000000000..cef3dcaa46d8d4206f3b601ff7157c127d7eb55a GIT binary patch literal 172693 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 V{he5NlyEMeCkpEFC9+1o{{!U6U)2Br literal 0 HcmV?d00001 diff --git a/contribute/03-fork.png b/contribute/03-fork.png new file mode 100644 index 0000000000000000000000000000000000000000..abf86df0199e4d59dc27bbf4d0c2e93d976f1a66 GIT binary patch literal 46172 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 Date: Fri, 1 Mar 2013 18:26:56 +0100 Subject: [PATCH 0005/1870] "Contribute" landing page and sketches for two pages: - bug reporting - documentation contributions --- contribute/bug-reporting-guide.md | 53 ++++++++++++++++- contribute/documentation.md | 29 ++++++++++ contribute/index.md | 94 +++++++++++++++++++++++-------- contribute/scala-fame.md | 9 +++ 4 files changed, 162 insertions(+), 23 deletions(-) create mode 100644 contribute/documentation.md create mode 100644 contribute/scala-fame.md diff --git a/contribute/bug-reporting-guide.md b/contribute/bug-reporting-guide.md index 33640bcd47..a60fb15b07 100644 --- a/contribute/bug-reporting-guide.md +++ b/contribute/bug-reporting-guide.md @@ -1,4 +1,55 @@ --- layout: page title: Bug Reporting ---- \ No newline at end of file +--- + +# Reporting bugs to the Scala project + +The Scala project tracker is located at: + +> [http://issues.scala-lang.org](http://issues.scala-lang.org) + + + diff --git a/contribute/documentation.md b/contribute/documentation.md new file mode 100644 index 0000000000..05b2455a5f --- /dev/null +++ b/contribute/documentation.md @@ -0,0 +1,29 @@ +--- +layout: page +title: Documentation Contributions +--- +# Contributing documentation to the Scala project + +TODO + + diff --git a/contribute/index.md b/contribute/index.md index 9f90154c85..a92c5f37cc 100644 --- a/contribute/index.md +++ b/contribute/index.md @@ -2,8 +2,66 @@ layout: page title: Contribute --- +# Contributing to the Scala project + +The Scala programming langauge is an open source project with a very +diverse community, where people from all over the world contribute their work, +with everyone benefitting from friendly help and advice, and +kindly helping others in return. So why not join the Scala community and help +everyone make things better? + +The following are typical questions you might ask when first contributing to Scala. +If you have other questions not addressed here, feel free to ask on the [scala-internals mailing list](http://groups.google.com/group/scala-internals). + +
+ +### I found something that doesn't work as expected. How to file a bug report? + +[The reporting bugs page](bug-reporting-guide.html) describes the steps to take when you find something that doesn't work +as expected. Filing in a good bug report increases the chances the ticket is fixed quickly. + +
+ +### Why contribute a patch to Scala? + +Just to name a few common reasons: + - contributing a patch is the best way to make sure your desired changes will be available in the next Scala version + - Scala is written in Scala, so going through the source code and patching it will improve your Scala-fu + - last but not least, you will make it into the [Scala Contribuitor Hall of Fame](scala-fame.html). + +
+ +### I'd like to start hacking the Scala project, how to find something to work on? + +Depending on your skillset, you may want to contribute documentation and/or code. Documentation has always been very +appreciated work in the Scala community, as most code contributions tend to be quite scarce in explanations of how +things work and how everyone else is supposed to use them. To contribute documentation, have a look at the +[documentation page](documentation.html). + +The main Scala project consists of the standard Scala library, the Scala reflection and macros library, +the Scala compiler and the Scaladoc tool. This means there's plenty to choose from when deciding what to work on. +Typically the scaladoc tool provides a low entry point for new committers, so it is a good first step into contributing. + +On the Scala bug tracker you will find many bugs that are [marked as good starting points to contributing ("community" bugs)](https://issues.scala-lang.org/secure/IssueNavigator.jspa?requestId=12111) or [that are not currently assigned](https://issues.scala-lang.org/secure/IssueNavigator.jspa?requestId=12112) and that you could pick up. Once you decided on a ticket to look at, see the next step on how to proceed further. + +
+ +### I have this idea that I'd like to add to Scala, how do I start? + +The first step to making a change is to discuss it with the community at large, to make sure everyone agrees on the idea +and on the implementation plan. Starting point ("community") bugs are usually uncontroversial, so you can jump right +ahead to hacking the scala source tree and filing a pull request. For larger changes it is best to announce the change +on the [scala-internals](http://groups.google.com/group/scala-internals) mailing list and get developer feedback. For really complex changes, a [Scala Improvement Process (SIP)](http://docs.scala-lang.org/sips/) document might be required, but the first step is always to discuss it on the mailing list. + +Contributions, big or small, simple or complex, controversial or undisputed, need to materialize as patches against +the Scala project source tree. The [hacker guide](hacker-guide.html) will explain how to materialize your idea into a full-fledged pull request against the Scala code base. + +
+ + \ No newline at end of file diff --git a/contribute/scala-fame.md b/contribute/scala-fame.md new file mode 100644 index 0000000000..75317be820 --- /dev/null +++ b/contribute/scala-fame.md @@ -0,0 +1,9 @@ +--- +layout: page +title: Scala Contribuitor Hall of Fame +--- +# Scala Hall of Fame + +A big thank you to everyone who contributed to: + - [the Scala library and compiler](https://github.com/scala/scala/contributors) + - [the Scala documentation website](https://github.com/scala/scala.github.com/contributors) \ No newline at end of file From b09e5f106986a3fafdd42d5ad0ae0f61982b58a5 Mon Sep 17 00:00:00 2001 From: Eugene Burmako Date: Fri, 1 Mar 2013 18:29:10 +0100 Subject: [PATCH 0006/1870] 1.5 more sections --- contribute/02-post.png | Bin 0 -> 114529 bytes contribute/hacker-guide.md | 153 ++++++++++++++++++++++++++++++++----- 2 files changed, 135 insertions(+), 18 deletions(-) create mode 100644 contribute/02-post.png diff --git a/contribute/02-post.png b/contribute/02-post.png new file mode 100644 index 0000000000000000000000000000000000000000..533ac99538d153d433129e59513a708d02fcc429 GIT binary patch literal 114529 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 Date: Fri, 1 Mar 2013 19:57:46 +0100 Subject: [PATCH 0007/1870] tentative fin --- contribute/04-submit.png | Bin 0 -> 166407 bytes contribute/05-review.png | Bin 0 -> 29682 bytes contribute/hacker-guide.md | 116 ++++++++++++++++++++++++++++++++++++- 3 files changed, 114 insertions(+), 2 deletions(-) create mode 100644 contribute/04-submit.png create mode 100644 contribute/05-review.png diff --git a/contribute/04-submit.png b/contribute/04-submit.png new file mode 100644 index 0000000000000000000000000000000000000000..80acc36cf93e380c7257203ba879ef1636c82641 GIT binary patch literal 166407 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

f?AQ{Dupipdlg;C}}=T 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

5V-fPj1J=6v-5Ui*9vLJ^IReprT1O{yZE z^w=7y{t@jz!%D%(pK40BcU6~wf~6~>ZQB;SPuF2&V9`RWc6H6K>$?t@YcFjNkkcZx zTWRk2Kyptm73?@F+8PnHS z#mrwmG+LnX zr0f{M31T#_1>!BR^zh>LltdNA2q=M#ygMB8x9Pk|NM}5ii`xHNynHout_aMWFbADl zH9@Zq%~7>hU8KdH#=>ups6-SUv3ZJsBP&)0@1lc|gGzop`Q*u41*F$7%1H{5Aw{xd ze#(`v$o{tw?PbxeV|yjIrtyAIc=&)r8~e*3V%cU%L7;IHlb^yD)5axhpn5|keamb6jW(>8~dV@4C~3h zoC{oq3t&_F3FSZg`)R0Kr7UV!EXFP430S#!F2;Sm8lJ6(qD)Z=*cY~_aI$||6bGWb zFf{vykgq)XBeW$<2=^`b89Ng9y*LM1`wDPnt`%C=tz>BX8C$ecdG&8nN3X=ho;|CA zRj@4wOFQtShCDmVrm1sBL;@)zPv(UEjnq5ouf)jx!mQ=BoFyfLgu)pbt z_MO|}d9DnMdgMX;^39Vd{??Ot_|30St!z>JHtstNXg&tv?382=sqCATJF!)#DTJMj z=0Q~pqy8vF$Pd#`O|zZ+XB^qns#xaaL;7G*{8Z@K5~YiCfT2(%ZNur@i#>lvf--8# z0Y|e`qm)SnJE985U85vK?w|sRZ?4EoUDthvxm+X%q7aQJT7)(uAJX@z2_2uAX^A+% zX5GtHHb&cK9pP$P8-~A3C0V*}Ix5ufiGsY>E8~QeSt)9k*)C)+J{fVKL_7IVyhviK zADS0=$~G)7PNeG8t1rH2S+Nufgs}g#nJnUzlIo2>ZmC-K(|qp5S1l7E!6h(ed;_qn zVOrwG?Plf6$wQ?rn27#K>UDNT5_q`;T0Ac8mWFO(ytv9;zB0E(#2a-ktY8V$t6hUi zsvy-yWT`)m6U0D2>Emgn%uo!~t3|3;DIb||5H59Fhr9hlVq zx$BSOJootp`1@eXZ?n*4KwlJ@w;rYVMKv)#vWGP8H1`_y$AlS2*wQ;=?r-bRv{n@q z=3poX|3s^&J1P~4`IG~O{+xhB@j%E^Prc0z{9U+zlXoW`-iG(z+CYIgQ(XZRf9Vox zwYwE{N(3WF6bXfSV}WfTQwPN8-Uh#03f3v&$Sc+u6 zKe^F1coyaij`X1^xl>rK1X4FHaBxiH?F_&nRl_8-s-dh`>D;@D(#i#N;fr;NjDfe0%3vYJ~k$ z;C*oqo_l+$@=xKN+5W*H9H_ZMMi;4(X{>woT6VxQJ$yyfA| z4^_C29~;UWEkdzzy)pjCM?Y-UnPWmcsqk)R3JtPlNQ@i;Q>%o$?Vv%^c69j^Cyy6J z{~?d@mIz*v$1;?%bBDhoz#s8*_1Au`Pub=sM%M$GTc0@iJ6``W3oqZQKzEH|@0aXt zUJ9N@?hu#E$yPWq>dHeti&lul?8y@_;+|R9zkMyvBnP2Uok~2oHwc$04ApPg5J8@t zfTk;nRly@dD-p)(Rg3tf(!$OmUzHJI(6E`?pg4JOa^o8qLYt8{@z?EE<&^K~9NQJ- zY9b_&Y{Vp%XidcM1|2a%--=UK#s`!gZ zu)Qi)Pft?XAj>X!>qw=DYwju}$xuA9+~P(RItUEPd# z-jBz=x_bRq=tUXo0Ohq{=GJw9cElyPtgI<9C(&%c6K;sDGNL9hd%%@}q zqTk3DaQ56~JoDc7*v0)ZlizcME8X#4{O^Sa5WzzRvC$bgy>GVij7{WeZl5sR{m3&| zyL1-j&!37F{BxK{y!+C_D9T8^} zlJB`;c_#m~X)=(5M~}9wbR6KNqOxfic@p6}QQd*KeBKEI8wyN6Ze)Ap+$25gT}47> zOs5a7QucVx@Du|A02$HP$YHDH5@Nw2#-%V^v;toaU@>VuGo%E+(#6AQ^6>?6l{;v8 z=WUZZ&GE_15Andj&UiriuzMyqvi@w-Si!Hb~u(xN;A$m_6r2M39b*52+WXj@va|3GdG6aQf*k zOnz>8#npa>AnJ)Ap8ltPg3D;^UdXqwEcb1O7AS|JHQ9;NLB)~$uwyD%t_`YpF2%M@ zcXpf#KwB8uD;XGEm~*FUyz0n-wO||=%yh!#>p+IPq;G5=5E7~o?AdaC7Z2^GpL)R1 zPwlRWDD2svWO)Un*N{=%H(3Z@O`Ce_Ajtkj(VPbI3byCp`4*+BOvI#5KgCm{e^F_+>U=vM9{o6abZEwYHVNKA!6;9k z;6Mu7j3?*^7orBWaR3iy@ylEM@>vPGh4Eks(d1+-6OpwV;gKHo@c~!T9%0sx7gf zm;Oz<4{bt=$fRH^qK+R&<&xDY3}qpP2h+leSHo)~%i_OZ%)`_%_kzkbWokEUX0!3Z z?x|qex|lX+IbMG3PE;)(fFD177ek(&2sFD}Vde--vCOX|+q;2-l!H>LkQw3FgLoFI zPz!IZS&y*~_do&Gp)~fHN!&vo&XrC%EM1u8VCLOu-z*Q-CvR?>60@5EWAhqiaB}}< zjPBD?x%r8-Nuz|zl2j;Bb0_BFi31q_G`Bc(dkoEMlMapGBOD&xvjNliwZitd4@9G? zrIinp;p$`obR7CN#t(b~GdefLpl&Ud7BHRlB_<(_H)j+;r~4m6-%-zCSnsx6l@%>S z8uzJA;}fVASq|Cz4x+H!t833pStSsQgKwk=$2NYM=Pd4LohLs!;(ANphLZi ziia#J4R-H6fXF&^xsTZ>52yOcN68jwO$_5!9??vbp~hDg{l3Kr)x)P z=YkfABNFjt&Z<*6!wlh-G?JMsHIiqUrHiV0(O_&(bdZ3&A0{YjBs~?(XhRaCe8`?(Xie(ZI&tEm&~fxVvuP<4iy7o)RAOBjaCvd4KA^XT{NCdVdcg5FsEh2nq8 z^mRR{@qsS``ejurqvn5N2i0hzdneD(*E`mX{P~4SR|eQqa4>i zHbg>635|-{iLZk66&BVjqe)K${fk;!#0^6A*iqmDEK@LgPlEXQ(n~5GPz^V>D?80} z(*d7bE2XbM_zl>JKK_=)zknTV@(jnDsRj3~*baE8m^N*~lt-~C$sJt!&xkMAF3$CS z-kOvQ?_&8n_qO#vg4nd5fFL93MA_w`dQqf;j=Rho8fm}8PD@(| zp!4@fc59DgYyz*;x1ml@3hMkbMUvVBOjr+DE?fJAg{C?Sc$Rrgso;Ekeky)X`K9hF z3{rv7=O29BzH#cc98_|<6;T|O??J?(+jG`;PBUH zU3$-qwj}4I#*{;fIZLV9jP0CJ>DId`2|~^h=CdTh$U_je5J@aCVPsbbLON(!@u>*K z3vrh=#8N}NI#*;zZZ#uCpG9$cq9yP$HQl}5Rf0NnA<+qTafmPcT)0o`Og?|Pz&Y;l=^uC}dZ|4DFYe|Hj1dN&&RB{ZO>3xR zVs6>*Yl(+#v*0&6n!dHix;ht`Uc?4xCqEfh>VG1pnPUfXocjo3L{^M_rq>~fs9*rKK z`wLUpHg{gHGj=?^q6Axrzz~ZvA@wuG)D-`c$$J=goLFOoGggXdm! zp-xXEwe^p}Vcui|vg^=tU8~W0h_n<>Gf|H|;=s(7|34qHl0Rx}yvW&cgGXSt%GhdD zhd+@0@`&PFI>*E&^X>(UC7Ld-K&h(oz8prSGj>n5O6V~-t&qH$Q$kZWJJ#w$tlUUU zj|dlp)e`^91u#%8sJU%CW>T@@#I@;pKm<=A;T7T79#*9}7?Q$&{NakT<*R>0H6%8Zv?eYqK&;8Ft%=hwAYQ{oX2s9QL`?@{#@J8q>eR`mX`XYg(* z?E7`UG9PCV!)Cq@qJ!TRYLUlV*vC!Ym7+P*$mphB{rkwwY|RW^#I(SdEz?sJJpeby zS-b>DM!@nEHz*Kc3Di9;4{0DqY!EMk89Ua0vT^vQi09SDe2bM1m6(t7pW;n$WcdwK zfr7TeQQPBf^hexq7n5(;O0|2T#{}M}T<5RWeBw9@%E^KGy6)JyPJ73fr}73`Fo)hc zD>CjHcCpr*f>zflz0Lx4)tsCx*RWmoKC{&(E#IimQ8KXnc~SE9N@&$QCg4MqT z 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 BSkM3f literal 0 HcmV?d00001 diff --git a/contribute/05-review.png b/contribute/05-review.png new file mode 100644 index 0000000000000000000000000000000000000000..330cb519ac2c6945b9e480262568025fe49b7c1f GIT binary patch literal 29682 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 literal 0 HcmV?d00001 diff --git a/contribute/hacker-guide.md b/contribute/hacker-guide.md index 298ac6a307..9805ad8795 100644 --- a/contribute/hacker-guide.md +++ b/contribute/hacker-guide.md @@ -136,8 +136,6 @@ with your hardware). [exec] Resolving [943cd5c8802b2a3a64a010efb86ec19bac142e40/lib/ant/ant-contrib.jar] ... - ... - ... pack.bin: [mkdir] Created dir: /Users/xeno_by/Projects/scala/build/pack/bin @@ -188,6 +186,7 @@ reproducible by throwing together a simple test and feeding it into the Scala di } 17:27 ~/Projects/scala/sandbox (ticket/6725)$ ../build/pack/bin/scalac Test.scala 17:28 ~/Projects/scala/sandbox (ticket/6725)$ ../build/pack/bin/scala Test + 1%n1 ### Implement ### @@ -219,5 +218,118 @@ exclusively as a folklore. However the situation is steadily improving. Here are * [scala-internals](http://groups.google.com/group/scala-internals), a mailing list which hosts discussions about the core internal design and implementation of the Scala system. +### Interlude ### + +To fix [the bug I'm interested in](https://issues.scala-lang.org/browse/SI-6725) I've tracked the `StringContext.f` interpolator +down to a macro implemented in `MacroImplementations.scala`. There I noticed that the interpolator only processes conversions, +but not tokens like `%n`. Looks like an easy fix. + + 18:44 ~/Projects/scala/sandbox (ticket/6725)$ git diff + diff --git a/src/compiler/scala/tools/reflect/MacroImplementations.scala b/src/compiler/scala/tools/ + index 002a3fce82..4e8f02084d 100644 + --- a/src/compiler/scala/tools/reflect/MacroImplementations.scala + +++ b/src/compiler/scala/tools/reflect/MacroImplementations.scala + @@ -117,7 +117,8 @@ abstract class MacroImplementations { + if (!strIsEmpty) { + val len = str.length + while (idx < len) { + - if (str(idx) == '%') { + + def notPercentN = str(idx) != '%' || (idx + 1 < len && str(idx + 1) != 'n') + + if (str(idx) == '%' && notPercentN) { + bldr append (str substring (start, idx)) append "%%" + start = idx + 1 + } + +After I applied the fix and running `ant`, my simple test case in `sandbox/Test.scala` started working! + + 18:51 ~/Projects/scala/sandbox (ticket/6725)$ cd .. + 18:51 ~/Projects/scala (ticket/6725)$ ant + Buildfile: /Users/xeno_by/Projects/scala/build.xml + + ... + + quick.comp: + [scalacfork] Compiling 1 file to /Users/xeno_by/Projects/scala/build/quick/classes/compiler + [propertyfile] Updating property file: /Users/xeno_by/Projects/scala/build/quick/classes/compiler/compiler.properties + [stopwatch] [quick.comp.timer: 6.588 sec] + + ... + + BUILD SUCCESSFUL + Total time: 18 seconds + + 18:51 ~/Projects/scala (ticket/6725)$ cd sandbox + 18:51 ~/Projects/scala/sandbox (ticket/6725)$ ../build/pack/bin/scalac Test.scala + 18:51 ~/Projects/scala/sandbox (ticket/6725)$ ../build/pack/bin/scala Test + 1 + 1 + ### Verify ### +Now to make sure that my fix doesn't break anything I need to run the test suite using the `partest` tool we wrote to test Scala. +Read up [the partest guide](/contribute/partest-guide.html) to learn the details about partest, but in a nutshell you can either +run `ant test` to go through the entire test suite (30+ minutes) or use wildcards to limit the tests to something manageable: + + 18:52 ~/Projects/scala/sandbox (ticket/6725)$ cd ../test + 18:56 ~/Projects/scala/test (ticket/6725)$ partest files/run/*interpol* + Testing individual files + testing: [...]/files/run/interpolationArgs.scala [ OK ] + testing: [...]/files/run/interpolationMultiline1.scala [ OK ] + testing: [...]/files/run/interpolationMultiline2.scala [ OK ] + testing: [...]/files/run/sm-interpolator.scala [ OK ] + testing: [...]/files/run/interpolation.scala [ OK ] + testing: [...]/files/run/stringinterpolation_macro-run.scala [ OK ] + All of 6 tests were successful (elapsed time: 00:00:08) + +### 4. Publish ### + +After development is finished, it's time to publish the code and submit your patch for discussion and potential inclusion into Scala. +In a nutshell this involves: 1) making sure that your code and commit messages are of high quality, 2) clicking a few buttons in the +Github interface, 3) assigning one or more reviewers which will look through your pull request. Now all that in more details. + +### Commit ### + +The [Git Basics](http://git-scm.com/book/en/Git-Basics) chapter in the Git online book covers most of the basic workflow during this stage. +There are two things you should know here: + +1) Commit messages are frequently the only way to communicate with the authors of the code written a few years ago. Therefore, we give them +big importance. Be creative and eloquent - the more context your provide about the change you've introduced, the bigger the probability that +some future maintainer will understand you right. Consult [the pull request policy](https://github.com/scala/scala/wiki/Pull-Request-Policy) +for more information about the desired style of your commits. + +2) Clean history is also important. Therefore we won't accept pull requests for bug fixes that have more than one commit. +For features, it is okay to have several commits, but all tests need to pass after every single commit. To clean up your commit structure, +you want to [rewrite history](http://git-scm.com/book/en/Git-Branching-Rebasing) using `git rebase` so your commits are against +the latest revision of `master`. + +Once you are satisfied with your work, synced with `master` and cleaned up your commits you are ready to submit a patch to the central Scala repository. Before proceeding make sure you have pushed all of your local changes to your fork on Github. + + 19:22 ~/Projects/scala/test (ticket/6725)$ git add ../src/compiler/scala/tools/reflect/MacroImplementations.scala + 19:22 ~/Projects/scala/test (ticket/6725)$ git commit + [ticket/6725 3c3098693b] SI-6725 `f` interpolator now supports %n tokens + 1 file changed, 2 insertions(+), 1 deletion(-) + 19:34 ~/Projects/scala/test (ticket/6725)$ git push origin ticket/6725 + Username for 'https://github.com': xeno-by + Password for 'https://xeno-by@github.com': + Counting objects: 15, done. + Delta compression using up to 8 threads. + Compressing objects: 100% (8/8), done. + Writing objects: 100% (8/8), 1.00 KiB, done. + Total 8 (delta 5), reused 0 (delta 0) + To https://github.com/xeno-by/scala + * [new branch] ticket/6725 -> ticket/6725 + +### Submit ### + +This part is very easy and enjoyable. Navigate to your branch in Github (for me it was `https://github.com/xeno-by/scala/tree/ticket/6725`) +and click the pull request button to submit your patch as a pull request to Scala. If you've never submitted patches to Scala, you will +need to sign the contributor license agreement, which [can be done online](http://typesafe.com/contribute/cla/scala) within a few minutes. + +![Submit a pull request](/contribute/04-submit.png) + +### Discuss ### + +After the pull request has been submitted, you need to pick a reviewer (probably, the person you've contacted in the beginning of your +workflow) and be ready to elaborate and adjust your patch if necessary. I picked Martin, because we had such a nice chat on the mailing list: + +![Assign the reviewer](/contribute/05-review.png) From a541a62b5602dcd4aea855867ad3f03b7c1d65d3 Mon Sep 17 00:00:00 2001 From: Eugene Burmako Date: Fri, 1 Mar 2013 20:18:15 +0100 Subject: [PATCH 0008/1870] polishing the hacker guide --- contribute/hacker-guide.md | 62 ++++++++++++++++++++------------------ 1 file changed, 33 insertions(+), 29 deletions(-) diff --git a/contribute/hacker-guide.md b/contribute/hacker-guide.md index 9805ad8795..f5a4f8724e 100644 --- a/contribute/hacker-guide.md +++ b/contribute/hacker-guide.md @@ -10,12 +10,15 @@ to a nightly and, ultimately, to a production release of Scala incorporating you influence a programming language of your choice is amazing, and I'm excited to demonstrate that it's easier than one might think. +### The running example ### + I like string interpolation a lot. Doing debug prints with interpolators introduced in Scala 2.10.0 is so enjoyable that I often wonder how we ever lived without that feature. However there's an annoying issue which I occasionally stumble upon: the formatting string interpolator `f` [does not support](https://issues.scala-lang.org/browse/SI-6725) new line tokens `%n`. I could go the mailing list, ask to fix this bug and then indefinitely wait for the fix. Or I could instead patch Scala myself and get the fix in a subsequent release (nightly builds get produced, well, every -night, minor releases are pumped every few months and major releases happen once a year). Let's get to work! +night, minor releases are pumped every few months and major releases happen once a year). The latter option sounds cool, so let's see +how it works! ### 1. Connect ### @@ -47,7 +50,7 @@ list of people (Github usernames and real-life names) and their specialties: documentation: @heathermiller (Heather Miller) cps: @TiarkRompf (Tiark Rompf) -Martin is the one who submitted the string interpolation proposal and implemented this language features for Scala 2.10.0. +Martin is the one who submitted the string interpolation proposal and implemented this language feature for Scala 2.10.0. (TODO: how to choose a mailing list) Therefore now I'm going to [the scala-user mailing list](http://groups.google.com/group/scala-user) and will post a topic about my issue. Note that I put Martin in the cc list of the email. If I didn't do that, he would probably miss it in a bunch @@ -57,19 +60,19 @@ of emails, which get posted to scala-user every day. ![Response from Martin](/contribute/02-post.png) -Now when I have an approval of the feature's author, it makes sense to start doing something. +Now when I have the approval of the feature's author, I'll get to work! ### 2. Set up ### -Hacking Scala begins with creating a branch for your work item. In our workflow we use [Git](http://git-scm.com/) -and [GitHub](http://github.com/). This section of the guide provides a short walkthrough on how to use them. -If you are new to Git, it might make sense to familiarize with it first. We recommend the [Git Pro](http://git-scm.com/book/en/) +Hacking Scala begins with creating a branch for your work item. To develop Scala we use [Git](http://git-scm.com/) +and [GitHub](http://github.com/). This section of the guide provides a short walkthrough, but if you are new to Git, +it probably makes sense to familiarize with Git first. We recommend the [Git Pro](http://git-scm.com/book/en/) online book. ### Fork ### Log into [GitHub](http://github.com/), go to [https://github.com/scala/scala](https://github.com/scala/scala) and click the `Fork` -button at the top of the page. This will create your own copy of our repository that will serve as a scratchpad for your experiments. +button at the top of the page. This will create your own copy of our repository that will serve as a scratchpad for your hackings. If you're new to Git, don't be afraid of messing it up - there is no way you can corrupt our repository. ![Fork scala/scala](/contribute/03-fork.png) @@ -113,13 +116,13 @@ The next step after cloning your fork is setting up your machine to build Scala. [https://github.com/scala/scala/blob/master/README.rst](https://github.com/scala/scala/blob/master/README.rst), but here's the summary: * It is recommended to use Java `1.6` (not `1.7` or `1.8`, because they might cause occasional glitches). -* The build tool we use is `ant`. -* The build script runs the `pull-binary-libs.sh` script to download bootstrap libs. This requires `bash` and `curl`. -* The majority of our team works on Linux and OS X. +* The build tool is `ant`. +* The build runs the `pull-binary-libs.sh` script to download bootstrap libs. This requires `bash` and `curl`. +* The majority of our team works on Linux and OS X, so these operating systems are guaranteed to work. * Windows is supported, but it might have issues. Please report to [the issue tracker](https://issues.scala-lang.org/) if you encounter them. -In a nutshell, build Scala is as easy as running `ant` in the root of your clone. Be prepared to wait for a while - a full rebuild -takes 7+ minutes depending on your machine. Incremental builds are usually within 30-90 seconds range (again, your mileage might vary +In a nutshell, building Scala is as easy as running `ant` in the root of your clone. Be prepared to wait for a while - a full rebuild +takes 8+ minutes depending on your machine. Incremental builds are usually within 30-120 seconds range (again, your mileage might vary with your hardware). 16:50 ~/Projects/scala (ticket/6725)$ ant @@ -149,7 +152,7 @@ with your hardware). ### IDE ### -There's no single editor of choice to work with Scala sources, as there are trade-offs imposed by each available option. +There's no single editor of choice for working with Scala sources, as there are trade-offs associated with each available tool. Both Eclipse and Intellij IDEA have Scala plugins, which are known to work with our codebase. Here are [instructions for Eclipse](https://github.com/scala/scala/blob/master/src/eclipse/README.md) and @@ -158,7 +161,7 @@ navigation, refactoring and error reporting functionality as well as integrated of occasional sluggishness. On the other hand, lightweight editors such as Emacs, Sublime or jEdit provide unparalleled scriptability and performance, while -lacking semantic services and debugging. To address this shortcoming, one can integrate with ENSIME, +lacking semantic services and debugging. To address this shortcoming, they can integrate with ENSIME, a helper program, which hosts a resident Scala compiler providing some of the features implemented in traditional IDEs. However despite having significantly matured over the last year, its support for our particular codebase is still far from being great. @@ -168,12 +171,13 @@ Therefore it's hard to recommend a particular tool here, and your choice should ### 3. Hack ### When hacking on your topic of choice, you'll be modifying Scala, compiling it and testing it on relevant input files. -Typically you would want to first make sure that your changes work on a few small example and afterwards verify that nothing break -by running the comprehensive test suite. +Typically you would want to first make sure that your changes work on a small example and afterwards verify that nothing break +by running a comprehensive test suite. I'm going to start by creating a `sandbox` directory (this particular name doesn't bear any special meaning - it's just a tribute to -my first days in Scala team), which will hold a single test file and its compilation results. First I make sure that the bug is indeed -reproducible by throwing together a simple test and feeding it into the Scala distribution assembled by ant in `build/pack/bin`. +my first days in Scala team), which will hold a single test file and its compilation results. First I make sure that +[the bug](https://issues.scala-lang.org/browse/SI-6725) is indeed reproducible by throwing together a simple test and feeding it +into the Scala distribution assembled by ant in `build/pack/bin`. 17:25 ~/Projects/scala (ticket/6725)$ mkdir sandbox 17:26 ~/Projects/scala (ticket/6725)$ cd sandbox @@ -186,7 +190,7 @@ reproducible by throwing together a simple test and feeding it into the Scala di } 17:27 ~/Projects/scala/sandbox (ticket/6725)$ ../build/pack/bin/scalac Test.scala 17:28 ~/Projects/scala/sandbox (ticket/6725)$ ../build/pack/bin/scala Test - 1%n1 + 1%n1 // %n should've been replaced by a newline here ### Implement ### @@ -198,17 +202,17 @@ Here are also some tips & tricks that have proven useful in Scala development: try doing `ant clean build`. Due to the way how Scala compiles traits, if a trait changes, then it's sometimes not enough to recompile just that trait, but it might also be necessary to recompile its users. Ant is not smart enough to do that, which might lead to very strange errors. Full rebuilds fix the problem. Fortunately that's rarely necessary, because full rebuilds take significant time. -* Even on solid state drives packaging Scala distribution (i.e. creating jars from class files) is a non-trivial task. There are quite a few - people in our team, who do `ant quick.comp` instead of `ant` and then create custom scripts to launch Scala from `build/quick/classes`. +* Even on solid state drives packaging Scala distribution (i.e. creating jars from class files) is a non-trivial task. To save time here, + some people in our team do `ant quick.comp` instead of `ant` and then create custom scripts to launch Scala from `build/quick/classes`. * Don't underestimate the power of `print`. When starting with Scala, I spent a lot of time in the debugger trying to figure out how things work. However later I found out that print-based debugging is often more effective than jumping around. While it might be obvious - to some, I'd like to explicitly mention that it's useful to print stack traces to understand the flow of execution. + to some, I'd like to explicitly mention that it's also useful to print stack traces to understand the flow of execution. -Docs. Right, the docs. The documentation about internal workings of the compiler is scarce, and a lot of knowledge gets passed -exclusively as a folklore. However the situation is steadily improving. Here are the resources that might help: +Docs. Right, the docs. The documentation about internal workings of the compiler is scarce, and most of the knowledge is passed around +in the form of folklore. However the situation is steadily improving. Here are the resources that might help: * [Compiler internals videos by Martin Odersky](TODO) are quite dated, but still very useful. In this three-video - series Martin explains inner working of the part of the compiler, which has recently become Scala reflection API. + series Martin explains inner workings of the part of the compiler, which has recently become Scala reflection API. * [Reflection and Compilers by Martin Odersky](http://channel9.msdn.com/Events/Lang-NEXT/Lang-NEXT-2012/Reflection-and-Compilers), a talk at Lang.NEXT 2012 in which Martin elaborates on the design of scalac and the reflection API. * [Reflection documentation](http://docs.scala-lang.org/overviews/reflection/overview.html) describes fundamental data structures that @@ -262,7 +266,7 @@ After I applied the fix and running `ant`, my simple test case in `sandbox/Test. 18:51 ~/Projects/scala/sandbox (ticket/6725)$ ../build/pack/bin/scalac Test.scala 18:51 ~/Projects/scala/sandbox (ticket/6725)$ ../build/pack/bin/scala Test 1 - 1 + 1 // no longer getting the %n here - it got transformed into a newline ### Verify ### @@ -293,13 +297,13 @@ The [Git Basics](http://git-scm.com/book/en/Git-Basics) chapter in the Git onlin There are two things you should know here: 1) Commit messages are frequently the only way to communicate with the authors of the code written a few years ago. Therefore, we give them -big importance. Be creative and eloquent - the more context your provide about the change you've introduced, the bigger the probability that -some future maintainer will understand you right. Consult [the pull request policy](https://github.com/scala/scala/wiki/Pull-Request-Policy) +big importance. Be creative and eloquent - the more context your provide for the change you've introduced, the bigger the probability that +some future maintainer will get you right. Consult [the pull request policy](https://github.com/scala/scala/wiki/Pull-Request-Policy) for more information about the desired style of your commits. 2) Clean history is also important. Therefore we won't accept pull requests for bug fixes that have more than one commit. For features, it is okay to have several commits, but all tests need to pass after every single commit. To clean up your commit structure, -you want to [rewrite history](http://git-scm.com/book/en/Git-Branching-Rebasing) using `git rebase` so your commits are against +you want to [rewrite history](http://git-scm.com/book/en/Git-Branching-Rebasing) using `git rebase` so that your commits are against the latest revision of `master`. Once you are satisfied with your work, synced with `master` and cleaned up your commits you are ready to submit a patch to the central Scala repository. Before proceeding make sure you have pushed all of your local changes to your fork on Github. From edc6f1520130fe52496f48109bf2fd2a1eb4fdb3 Mon Sep 17 00:00:00 2001 From: Eugene Burmako Date: Fri, 1 Mar 2013 20:19:06 +0100 Subject: [PATCH 0009/1870] removes the git guide - it's been subsumed by the hacker's guide --- contribute/git-guide.md | 78 ----------------------------------------- 1 file changed, 78 deletions(-) delete mode 100644 contribute/git-guide.md diff --git a/contribute/git-guide.md b/contribute/git-guide.md deleted file mode 100644 index 2e173ec7ec..0000000000 --- a/contribute/git-guide.md +++ /dev/null @@ -1,78 +0,0 @@ ---- -layout: page -title: Using git ---- - -This is a step-by-step guide on how to use [git](http://git-scm.com/) and [github](http://github.com/) if you want to contribute to the Scala project. If you are new to git, make yourself familiar first. We recommend the [Git Pro]()http://git-scm.com/book/en/) online book. - -### Signup - -First create an account on [github](http://github.com/). You can also use your existing account, of course. - -### Fork - -Now, go to [https://github.com/scala/scala]() and click the "Fork" button at the top of the page. - -![image](images/fork.png) - -If everything went okay, you will be redirected to your own fork at `https://github.com/username/scala`, where `username` is your github user name. Make sure you read [http://help.github.com/fork-a-repo/](), which covers some of the things that will follow below. - -### Clone - -Clone your repository. Run the following on the command line: - - $ git clone https://github.com/username/scala - -This will create a local directory called `scala`, which contains a clone of the remote repository. - -### Branch - -Before you start making changes, always create your own branch. Never work on the `master` branch. Think of a name that describes the changes you plan on doing. Use a prefix that describes the nature of your change. There are essentially two kinds of changes: bug fixes and new features. - - - For bug fixes, use `issue/NNNN` for bug NNNN from the [Scala issue tracker](https://issues.scala-lang.org/). - - For a new feature use `topic/XXX` for feature XXX. - -Use feature names that make sense in the context of the whole Scala project and not just to you personally. For example, if you work on diagrams in Scaladoc, use `topic/scaldoc-diagrams` instead of just `topic/diagrams`. - -For your initial contribution, try work on something manageable (TODO: link to the subproject overview page). - -Now, it's time to create your branch. Run the following on the command line - - $ git checkout -b topic/XXX - -If you are new to git and branching, please read the [Branching Chapter](http://git-scm.com/book/en/Git-Branching) in the Git Pro book. - -### Change - -Now, you are ready to make changes ot the code base. The [Git Basics](http://git-scm.com/book/en/Git-Basics) chapter in the Git online book covers most of the basic workflow during this stage. - -TODO: refer to other development stuff, partest and so on. - -### Sync and Rebase - -Before you can submit your patch, make sure that your commit structure is clean. We won't accept pull requests for bug fixes that have more than one commit. For features, it is okay to have several commits, but all tests need to pass after every single commit. To clean up your commit structure, you want to [rewrite history](http://git-scm.com/book/en/Git-Branching-Rebasing) using `git rebase` so your commits are against the latest revision of `master`. - -Occassionally, you also want to sync with `master` so you don't fall behind too much. Otherwise, creating a clean pull request can become a lot of work. It is often a good idea to use `git rebase` instead of `git merge` to stay on top of `master` and keep a linear commit structure (TODO: do we actually REQUIRE this???). Read more about this approach [here](http://git-scm.com/book/en/Git-Branching-Rebasing). - -### Push - -For now, you might have committed your changes only locally (or maybe you have pushed your changes already to your fork on github because you want others to see it). Once you are satisfied with your work, synced with `master` and cleaned up your commits you are ready to submit a patch to the central Scala repository. First, make sure you have pushed all of your local changes to your fork on github. - - $ git push username - # This pushes all of your local branches to your fork on github. - -Again, `username` stands for your github user name. - -### Submit pull request - -Now it's time to send your changes to the Scala project for review. To do so, you ask for your changes to be pulled into the main repository by submitting a pull request. Go to your own Scala project page at `https://github.com/username/scala` and switch to the branch that contains your changes. - -![image](images/switchbranch.png) - -Then click on the "Pull Request" button at the top. - -![image](images/pullrequest.png) - -The github help page at [http://help.github.com/send-pull-requests/]() covers sending pull requests in more detail. Make sure you submit your request against the right branch. Strictly follow our [Pull Request policy](https://github.com/scala/scala/wiki/Pull-Request-Policy). - -A pull request is rarely accepted right away, so don't be depressed if the reviewer of your pull request will reject it or asks you to make additional changes before your request can be eventually accepted into the main repository. From ca55cb4757fa02c89bdd469ca4a66a0b2476b5a1 Mon Sep 17 00:00:00 2001 From: Eugene Burmako Date: Fri, 1 Mar 2013 20:20:17 +0100 Subject: [PATCH 0010/1870] removes the workflow page - it's been subsumed by the hacker's guide --- contribute/workflow.md | 4 ---- 1 file changed, 4 deletions(-) delete mode 100644 contribute/workflow.md diff --git a/contribute/workflow.md b/contribute/workflow.md deleted file mode 100644 index 89c71102a9..0000000000 --- a/contribute/workflow.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -layout: page -title: Contributor's Workflow ---- \ No newline at end of file From de59612fefb92a5e76c50594070e5d1cb297387e Mon Sep 17 00:00:00 2001 From: Heather Miller Date: Sun, 3 Mar 2013 14:06:49 +0100 Subject: [PATCH 0011/1870] Fixing issues with images, formatting fixups, moving maintainers list into an include for future reuse --- contribute/01-post.png | Bin 172693 -> 0 bytes contribute/02-post.png | Bin 114529 -> 0 bytes contribute/03-fork.png | Bin 46172 -> 0 bytes contribute/04-submit.png | Bin 166407 -> 0 bytes contribute/05-review.png | Bin 29682 -> 0 bytes contribute/hacker-guide.md | 32 ++++++++------------------------ 6 files changed, 8 insertions(+), 24 deletions(-) delete mode 100644 contribute/01-post.png delete mode 100644 contribute/02-post.png delete mode 100644 contribute/03-fork.png delete mode 100644 contribute/04-submit.png delete mode 100644 contribute/05-review.png diff --git a/contribute/01-post.png b/contribute/01-post.png deleted file mode 100644 index cef3dcaa46d8d4206f3b601ff7157c127d7eb55a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 172693 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 V{he5NlyEMeCkpEFC9+1o{{!U6U)2Br diff --git a/contribute/02-post.png b/contribute/02-post.png deleted file mode 100644 index 533ac99538d153d433129e59513a708d02fcc429..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 114529 zcmZU)1CTGxl0G~$XY4c98QZpPn`dm>w&yptZQHhO+vfM)-Tm+08(%-s5mj0FWL9QZ zL|0aHhs(=~!9im|0|5cSNr($80s(=j0RaIELW2Jz*&Kak00M$VF&7e&mk<)dmv^u= zF}E@X0uqO-QZrRo8pFy~O5hh4gc9bLJe5f#)bW7J#s6a!L`2c>tmTUJ-hVAhr(=VWcK&m8@ zTniv0Ne3f^KA+2=L1NY;Tz+5}d0;4Y2lq9_ozYRd+nSk<3m^ilnpLFcZvTmdVxy+{&7Ilt9Nvi*C4Y>2zm$;mX(ZKyiqaRiqj zzQ43=M;S7-YOinz(O}O(F~0`a=3%ch`(l4glhO!6->|%3|H@3r#=-~MqD^jC;j+UV3VAE2{L;{86cGr(UCO0OVv7r&(UA(e}L3RXwB&si`H`R$QPrmU5~ zNC9F17bfGr_D%m1M7PKxhl0#k33UPk0zwc{0VxwV6@@hyS?^dN_S(rE|5Nze8;dP5 z)fRja-Od;hZa6R*nlS*XXE<($W-6R`pV+HOijfp97R)=75{8f&^hY9&hh3MDRUw9) z6!f0nM4CnnO~`B)gP}{=9udL-1KWfwAvo%mcRs3*1@6Oufzcf$9zrQh2`oXKFceg; z_XHfVEtsQ^k{@vw1QXE@1s{0J53b*z4-%t#EiQ#W2Err&R^7;IDIRSeS&{6F;0#Mb zpq-_^FMEI!AKWV})aq*%?|u#+;S;I~n*TYBO&k5CpXb(2{iAo^uVdea$oh&Wnuo}Z zU6tU{lFMqtmi=AZ>~12=Cd4h=3KZc*;%)gLhXKrgg#K6m?_ixQotCYW`0pJtX?S9Y zIH6GiBPuH}7a*?4tlnuuv0BmI;TS_1b!?Z!-U0h)w>`m-QRw(RD@5=Ha-jP@y0NgH z9%G4b83rqV{V6*Th1wL*!U5JhHU#@Xg~%U$5qMOJSwpPF5buoGy;eKNR2{NSgqI-q z5RPGuR@&O3k%6d>{cSt=O#BaTv>#q9tvJrqtIfW;!ay=RoHUMrH4Zx(;GeX44#qn9 z#DVAFj-tP?8AN;0e+FD?8(cvLx24R0+y<~Vm3}V=-)O7C0NH@u{t!3wu;zjIS%UQL zkpa=~c%Mk?4(tG3Cy8;nIcQwR!IS9{w-!|N_Xt8@03rW{V%i7F^oO_w_QyvN_QQyS zEFNH?21%pe*Z7O84tp;^p#F>1kFgf@5{Ro0w-%2%fM^$#{TFQjydB&oF!U^#uAlBL z{38*hpuj04@|*zdZ>B+Tdw%WTbi{~IV)=2x#F)Pck%VI=g^~$_#TgVsti&wh_2LIc zp$@s{!#4$S@wY}T50NACn3a*2#HQx#OR3HyL-H6-nU%v#^4w1uolrF+RP#ILz#l<9 zes_gX&Z3*)fzzW#1!L+rr&1lqiu{#Orz9Of`wONHr5b)Ul)k6g89-5sdr2faoW_pb z63m1dFtX3h4Ws9WzGwU@+X>7Utk;LP+x4o3lvOBJPtXQnF9c19V~$Leqa;uPz{krD z{Io?r#z>PkjG`H#x2_|PnIEFV<8RTNPhcj(jt_o;oX=kff zx{JRgLaUHV0o4tvB?>3mwAGeXTpF&)*JxV{?K}l6VxCdQ(X<#{zK_;C$}^gDlD5^` z@LjB3yxzaQ{(6^vlYRl-dBCZE;RP}WK7o(Gw!@``=!O^!JcW$Flph9MewP^Q}z> z(=i_wCq^myYR0Z3x&yq6KH=UCUzQM-5ZOX)11e(ehH(diBcvm02iC(d!?u{d3*l$X zbLMSI6$|L5=%#58x+ga1N-0Ju&?(r}>DBSoBGo6G;x;}uFk3OL-cGJAGxj?--zlM0 zV(lZev8Kq>q>!Y_GH!?Fmt#+x*JZZ`o+O^u4~lNs?v7nlU3l-QueaXi-r4V(Z^dud z&)#RICu9#?hcDYZTfW`CQb1^kIP!?IxTU`_u+`Dr_(s{qF_h64u`f}$*;+}0P>|5- zSr5U*at00-9Xy0|1W!VlTU_sUF$_#sEZQDRMqY#&|4r=T^*29-@!cr>+b>3>AjggPOzRhFS;82gSon!(Fim zVRSKS#8FbIId%*RYzmpHiNX>QQsuJe8A$BL1BumTvPusnx;Z8c*3XR(3(h5`(tMmk z&fu=Y{zi%pUia09Gn-+r+m(k7ub=&Ba}EvEnrnc%xx6r8COo($n13b8&@IvQx~d9G)g6i=ydt zDn@Ol)}!Z1!DHnO@t5XnG92l*aT}y9i9f`?aTiHi*&q6_DO70 zhUu(zi+il*>c#lLew0&YMpKS<)UWHjE}*@F-9$blN0KsBeQ0*kwaFW)s3|_R2dUa` z8@^_W_z)^3b(Xr<-Jgy04X#jaz>RP0queeJ)Bnl)S6Yu}}!3q|XgEKbTaQ`XmYJUUcY@|^G6ueX$3 zT`!?l7aCVwZk|0Bd}0q z!ez2Tg%Da;J(=;|tuJj^#G+yn@s>E--!Yz6>kWU6JjA>-iEDYtLdtPlWX*Y;81;`; zl#u3F@cnUl-%QJ8BAa>7=JA<+*o=R;K0(m4>zZ|&dovKqP}<1b$@1Y_yx!cl8#_`| z3e^&GJPDdMOzEP_X+^R-npBxyid-Spx#-08{5p;0pW!g_`01Y+ActkZNT%r)_e~7E<7yTTUa-RpNVmT zaCYU+x$nFPeiZSQ`_4J{Rqbr_a=)d^=~?$c_UOO3F>G2SnIXT&J($TrPy3)Eb z(b_tg(lKywaL~~+(lIj9{G&nR=x*br??z+eNc7)E{+}ITV@E>=b2}$b17|GoZup2lwG|L4iZ@qfblCqTM?jnFaB($oE~?SH7;|B`abo4XlXsSBH1 z8{0Vkd(W~(-A^z=UE1%k#PBz!B@ zxJ#1;VAi!oK4UgxfK0tPafT!aF+niD;7u0>Y;pTOp+>Ut)3&Lo@uTmK_k*ZhfkMNS z;J#~LdfLl%#}U^_w&yj+$@U4RaX^MP=zjtp3dBCN5TykX9r!;H=vSfL7PU+G@34dX zZI@Ib1X-+=80q(K;P;}2L_j_y(fFu@smKT%x+W9|R z`L7Yt_c^d2foO6;%q`;bcdi8X^&yH1R-ais&$i38LjE5%~C2J6n+{t}l7yRKQPHfu~p)0$!OTXXKxr1LIe*|2A2_$lgN8Q5bS1 zB~b?)G!(MEAmcN2PBySJiUVbe2d~43{mOH#K)3s7S!FixIALSzK;ICi{rKaDUa6yT z8CsBkM<@}9Vx<*WMQ}*ThweE&x~fVc0mFCzszUYQyQjSt8`hhjasyD6y3i*ZcfK$G zD39f%-62WK%)i@!2Ni_PNk~2_+HSn7(mgC5D#&LBQv_V%zl1py1+Jr77A498QnZ68 z8nvCDv`pw72fhyeGry^X_!BDS+Md$TDHb=_!~A||{?){mJ*q{ettB1$7odenc`e?%XHpAsNRwa zKnPm_jz<{*Wwo?-tZe;qT^T9GOrDtqGuoWjV)j^`C;H;p#2bo#1!(dFT$&^&WI(d`jsPh-2FR8WD!#@*+ z1}!9`Ac@;iYTcugoy1EbOs3LV>1F(R9r?yh;yadudQh++7INYmUN|ozZZR;tfh1m0 zvA40<{7Lgv0I8_(1ugi@&x#p{!n=S8k)}?ItyX-Rk_{+K5tDg@zo+yy3pJw5;gA=> zM?-Vb@s-LsI2FTr5bp`UWb%%El*VDe!^x*hKMG^LNiHlFHk-MLU_t4@A-~#z`--?$ zaxlPQ1h}zGK5n~G&}_r4c5PWB-h8;*{QWy9#Bm@H$2cOlmY9S@lDHa&KN4vauE=fM zlXWIPN2c9U|( zfi4&kU?bJ`;}I*3wNR_hVg5!Y_WL&UK-;~~pO3R7`XgwHZJAb=-m`huVB(FPNZVg|LxT6#6^ zc^CdjEpVh6zPDnD z4kCG2T5mM4VuoTc{}WXC=6X0s_gqvlVukuIf-~1rwf+4EkWq4#I%*2(L4-(|s3_=r zfSZ#N9k>{c)N-Cpi`I6>FJKKyF|&{>Y)FDpIfOI;)jt}JjpSj*NmV`)jJ3$&MnL!u~}bo z9mP$UWm;_!KnNw#!@b_^-CMn^Td(a@jz}cj-kxY-A%ux5;3nb0-wogTrEwGz{yMyi zhTI-bQyeCcj4TP7NAcysCyu}Gu> zzRbrv&!cc~ddR_Cx3oglxJuoS&(|oc7nayIK3K0(ILvaydA+T~{w_D>SZ~>?eXDz) zk4Fu>Uwt_VDcrhuwchK9N4CJkx=OVv@;(+v=FcmCE`SZ?iiZ`}?<*Ud>{}_j2BIHf+R5wnfu# z+tZSdeYmFq378}{4aQZbp1w#h61!gb@f0|zx@J|~&oa>QEgw<$B-^-TO|CI$%#qIRL(tC)k%fhRAK4t) z&Lz?b85Y$V$USY}S_;EPqi@Kadg`VHOjiyq?WayNIuZqmo?!9Hq&jnmANG+zb}Cif zq_TQKFC1Dfw4bu=w0UXwE8_GW59b6&7KQx2j70|*u0fda`cH4qflq@T;XUO zP?eL*)3H176wEuVu0yjmPVpptTBqx?JEi;O<%8APh1c>IF9*o}8T|AQS>@y)*dnll zdAM_NcQ(GRTi2gh8*F~YF3tTvB)lfCf;rC!8FEhMK`^}t*;#>o*TA1oN4$d%pQTbW zG$JDF^xZ!noXoTAf?bwgm|nEnoe}h7)na^uj-+*jraF5S3)?LZQ_l~6NmLBhG9!@n z^WG-(rTf33pS-UIM#mosb6!v_3ygvo#gv$2rX$P~@@M5D)vyHQjA5*RX%K^i$PS9k zFvS>ER{HeQu>GZn2k1SCYbaLl#Ad)xUCK)~pLA_=6dOm1T=!6?(`9 z^25BvQ}7Zbd`m7e-t$(2(S~WwA`-#z*s%KPb7F{Ww1J4Stk3q_u#n`7;RcJMdzNJF z({j)RhwMis*=57(E`cVlNppGEt%^=hbJfTHITq%-!Hy^Qd*u=2V;PripT2P*d41E? zY_%Ooyp6yc+m#eyu=IXxdGF#qg!)TL5$;{+E8_}@s-a8d2ZvuNb!QLlE~T$gUY4^; z3g!5`MV``Ge38Y>goMV_SG2HoLDoZpq{sJAaZ|psrpIfLkS_NH^2cj?Kttr~x=3+} zL(po7c#rux`t8Xu#CqYN7~V%#OpmK3tl~idB{X@ESDYPm4ezedEYGBjj&<3)FylN9 z5u5NUsOxr~Dd-PJL^uqeAq?XZNmRQzT=>arS_B%kfwtm{btj8P#i!rt;6=Gws^^$c zTK#Q(Ub&}YH%T1U0LPxs6u26TWCTAR6kSWBS>?$u#Rw=x){mkcmk$;N2oCY}(Z#Vz zs!wLsgSBPqVGbx$t{QrHdRqi8W3VDkFHU}wMGjW14OYG~U#7gY@tioPXk&?O3a}3d z`=1J)QCbPMaTPBEZbPiD)fMib1Jx4@*IdoF^JSYyN5ta9 zH3uQXg}2P?Ccryy)}*2ybGR%S(}4hjan|iJU*&wWsm*Q2J~`CPRtCXk8KN~eV!*4tJ7r2@ z*u5kLe`v#RV+V)+egH>w8jG0@E`gzmeAX?AOd_*@!w_?TSynsQ-&*TeqE4fiJr&U&ROUA=OMo4jN0wdEY8VO;gu zOCPD_afUI4g`FSPWaz1Zy87R$cNJk>0cc)FbAoiN_qqkXW$v_hQSNyCQPPU^MvPY!x6&cM~$CiJB)0wa5QXm(SiRbc4B zB2*_i#%W4Dkd;D(#A%t4SXwDj6&bwkQancFKp7yJRzW>MIY66_Vk|?+{K+Bd-afJt z+}wIP_^s0uKChh#{PA&Z&*bU~TUhjlXKj-`Mp-7af&Sgv1oYhU`G{l3XBg4kduYkE z7Asggh^~}mg8f12RpmqYO2?E%+D$Sua!`;Fy6K_2Q><=1@sxC9{eHCkIt%mL-Q%&YlRU+O5hhrT z!2CDSBua_PX9R3zW`^`7b!8|^xMQ-1w;CQR8>~LVnce+7tdOPuF$BSszqm*xk}mKH+)@zbd{) z<-N|tnH2hMW9Ack=e!SXxgvb0xMrPt8$+K5nD-|e*`YS^$t(%45d8fygNM{^^*ZCL zjJ-|2+13o)nyJh557VAb#!OQ`UQzIV05W4;E&beWD&}D($_4fq-Nwi4%$*3&QfrkQ zN5Vmfy<$P((mPvwoOHHs3-b~=XuaZ+eJ4+I8{R;o=3V07KZC!-8Mn+Y;0ZIXOJ8u= zIB1?7E3vw`VSze?NXGj+QeP=qPv6)&6xx}Q#o~{#r~>`7{j3V~+b(yh@wR;vEUm0J;qBih^4xd1V2husb3dt!K*6ue|6KW z5+^&hwmcnjOcJ0B8swXtwP;w+a~pk`=4Z7w$6|f@=cT(|a8Cx${<9kZfn7M?v(-+2?&1Wm>Eb;msJJUR4F(Z9eQFl_D zMu3mIs7^<%f4PfAp-RAgCyo4lFUrS_6NJ_BE6TciH%MFCUXWE*CnGk?*?D!DNAiUY zk95`gu|6nPDtW~CZYu2?2}J&RccQ^Yz+rgUTo*8ghmSPvDy&7q|4zfCuuO<=uXw-!2v=E zccUirM-N1?cHN!NvNO)qdXf3E5vjDpJ;0v(=Sm7^Xjvu`{)zz|J=T(zS^!uN^h%oQ zq+~x9fo-?x7;(N6MOV3(*T??%K@L*Zn%~ z)WpJ6!?N35u9pq?&z#`V5vT%77_){@KZ2Cw6+wKAW_I+^km?3>g4o?6JRcghow~#b6_|NDh>agRZ^#im5o*N|!@6YkMHSE6)eLX(F{%C$I?Bv? zTRN6mtln_)8v3+jRZEdt58w|WXRSdsN?Bm6Qj67>Us0}H?uivzvcxW$y-5R#(2YBM zn^EVynviQvtkulhjt02f1N^@CTdj>|x|}hZ=`o%;HhmQ`jUd4nSSjH%kaX8Dy`j@| z!*{4-2R0jg%XUll*oGAW?omB|(Z=-B{Us}1#85o_6o{Y4i(k_kW=D(9v(PvBgweT zufWRRVrF~AITN@EnD0a`hm?n7bZ|1zJl_(Yd0-tMXs38uGTI3lv&$^e(z9Tb{u9Z?Z-z*?qyR_dp)H<&~#>fAsab zDrXFLjr_!C`=p@Sq~A}zFOxdDt}%*B8hpBX7n0`zY8CQYS-fcD^s~n zTjEN_<$!r3@1P^&#WAt#8zz|OTWt`xj$sw>u(O5%B?HUvlq`)f_d$u2VM$YcYI*47 zeN*UWc_arVH#mrkQf)s`dkpi*WzTdl%KG^gnw2 z@-N8d=?Ml$Co#Nj_KA(})8jIINhK%v{$FRLLbxrIFz5?}W>l&Kx;L1Asngv9#!Xcj zzxQ~C)UzcXs3XHoVB11G+VdhJXeG(|t!%6g)%DKHx2Vo7Q(rbM(WHraMB9fBWP%s838YNFh zflJ~Nn_@)ew4Efo6)G2bNi;|oP1+3W!?H+uxyH)Nn{_6(G!@^AEjC!lim{7yq0@&t zB=$ZJx0=H{sk{?IC^B8Wsud~+wY;q+p38BSSzd{d9dz}vcvG?5$SS&uoVFsVgZ8C*rcU#c#|4OyWZHB@3ZWWz2e5t}Ao*S- zAm4!eQ&Q%4SNCd-Yai9Gb_aWNOFKj$J%#VE}2M45`}w!H5ehGx`WVrTD5&BOMkKu#kyB1TKyPl)Ad zR3&*p>4<5(zaQZC&*98j{UcG*QDzS<9*hyFgmkZpDVjoE#K3cwj+?y{x{&4Rmu7Mx zmE7bY(3>9TP+wuV)Cp$d@DS$w>fFxOPA?QUo|wvPX1{Vv4Yu#Gg)X#=fo?g=T+l{K zO*?W6_nN>?8N`a+l8;rJ@!ROs-CR9mgjG9=T4)W$srNt#>8HLSog6x^r3eTE!%3b6^4KFl8zIC&(u-T z3YDI&3XR9yp3ZcM#G@Sw-q(iFpf@~OT@1%Ml`mIW{085W5tn7QY%4GNZg6ddxVDf| zGF8Kn+n8eGa{XXk`!i`b_1GdDW11@M&K-PP@LYM8BCM?k*pvGjZ;GJU;!~y8cpgTb zI-lh|3wOqA1|gwf0c(t9SrXwB2DREt)h?fpb?}P|l+OaP={H=I1BX+^&P8u;CYz7) zka$H&{punZvpzpW(WU1Fn61u1q(|D+yB1>5v8iqk#j2ZMnsi8tNTsDH2Ilc{?Lext z>rDx?dunF>4QVIK;^3Z?9Gv~ zH+IFUo2AM{S?eua(QSP4AU-f-U7pgw*iXWg3wjruU>CqdEn!bQoi$+}i>q`N`J$wM+xx-B&@J?{CxbOsM4HHBg_Z1ubS4hW}K0s$EG zHqnw4)L*Y~RlXZ%F>W^$?ya|}(x?JHpxJD+V{JPLZec$-FZpC2O=clU2zZr8* zpt+JP45(09X_4dk{TzqqDgn$F(X*G@^Oez(raBk$t8i?%(qoyh<0VfuuJ__dcrm0k zi6|P@Hy2R5(iFl+4n6i-= zG@pu?tZ|bJg{!1Rn&%)pT`h1rpI`IaK)lZ8P%)g05HFpr=r8u0zSoz+ms=arHJdxp zB95)h%Knx7$!CTX*hX7dX6Hk(H#VYhN0}oV;lAFsP|J$Anf69lJ`eA?P4a&*hjVaC zM+Q{1^&JVmf?rbfjl&ThO66JL7;sbj^P|yfGRVnv&!Fcxw_|;Ka{cVPaB3P=H!@76 z3lMf^fGO0<#Q@esflh}j%>b`DmZ?DTe5lq*hFRv{)xN>$1gKPa2a>Eec)bkDg^46F z$RQx4DJf(GINgDNZGq_Kkr+~JGHsx%rkZ|{YnVf=DN<^kofe!fEEqa3To{3@m)&Ar zt=Rx_k`pv-_NWWE#yDQDKA7H(K5{n9n)tF~c4QVyt&b$9nGE*D*1~s%nA-Gsn71?KTGCPo(lVT>v**) zrJs2Pw>N#VJ{sp3XZtyBPhQwdix)1&kfZ=Gdvg11L*o`fU)MHpn0bdkv=ijGfV2!P zq9%Hn=fq^^TSn(0i;Ob}S?*c$A7O1?kfVuAhk!XL-sKqzPsLLW5l#YiQI$0Q!-5e_ z#&N*R%W2+Uadjw}i9GzfQcMD1r9^`oRl<4ZA<+w|*XJ~GK=T?~AxVSBL!&Q7C*7}v zjmlz7@?`YWjk|g0KZ!@7U@e{;FYFu?RlDK>TWCfxH)_FDTb46i zcWK~nQwcN+%$H@!ic=ot%xtooSo(TJ!CoK?o9_1>TRl2l-$-aI*S|IgFcfOpA6rSH|OWLn{OU`Eh1#Q&cj&ADTTZL zeE*jv6y?~8g%V31eW2BT*RldOE3)!*QVL2TBlSRE{X}zTcujo&c0lKpuHNOe{{rc5 z*UFZ37Yux94Nn-;$rO5L=~8~^?(E!1PFrwv)|A!7?#~e5erbtBvn%CrpddAYArcEr zM8SlK*HMpiQvg;LlU)7BNvX5F0#B>;H7_h;ekt#{E)qX!^_6d|td7c$Cm73CT7sa>_N!8n-o^v?G1L$C0$G05wU#9QFH{(kf6Yo6HEQ5@szzHt2%8=I zM&q=Zcs*O~yj(01VoDrT21NusHt~&Nc~CYpi(hww!FZXSW9;T6`{a%!Kj)^}#Bqx{ z>!m+e_{a?Kj%=5F_-x)Md>qUD;CWn2(JlHa0X$ce?*crzLS2Uz4FG;s{4`P>f6EdA zS&J#<{ziad*e}7Kvu+u(HseOE5n@FG1{%zqx7kl|Oi}ev7^wr{QXT&EMwKR=*f6rZ ztU=M$qx0X6(NC15e@}tLX6ZL}M2E&2b3luI3{mhGoLT&SkTk@Ce!EGimu5LUkUV5d zEIiUA)nSZZSRKpTK|VDWk1Cev70c#mNCW6+y_% zvvLdp5=Sb{vAKSeME)xM5_J*9s|#h?<`FTb*hm`54RFQy-wHqMco+@Wn(vzvrg*F&IxwuZdwGrS5k*Mwnurk8 zkPT7iobz|--lb5(DxqewSFhfcdq@W#Z)rJoQtF4iQAF1gI%KZ#q238KFB2ENs%nvp z$DvBptu2i<>ieyw{@TfDs+Y+FE8SIVr?uThmFU-g-{)%|+$*s#s?lkU`hNP1&qaZi zUyS@xE`4EyA3>AfJ4VDt@(Yxui6Y8=wwUd<^`<=Bkj(cRN2JMIoNacw1K26{lt@)Q z)_9l)px~VyUUAM#!!s|yBeA4eJD?%&X;o>SA>GbuCz#dHziLx!qq-(y^3JmOtDoh{ zbW8~yUbw(_IyH0nJHt7F**_pNKLLJ5>!S<}EX+5iIxYS|aIbGAU;0$)W?F{bUy}LbmMZWXUU);*;ZfU3Y-^Fua9ogJ(sasT zb-skx?4Kv(7Abj$4JucI4Wkg3<>Lf?+#pj3ik_FnZs5#Ht6`~;egrLRvZGox$%L)> z{Q{+#Y$g9X*jO*|B%5F`W;;gxn=zVkpxPvCdA`gjB;{bp3NnJ;@2T*0oVK8p9n&4k z=fFD7YHk=AP>jiBe)y|tj3T!9yn$WsUMk~{ON)^K6q)K0Gp0A*=AfH^`C5Fl97wX~ z8a_UClY-jtF9-Vj)>;_GV_96d3{gd^!p&ocJOcMT8Mt4Wd^9@xD1RDLGXOxN8wrvT zDXNOO?v}#I<+vV1`KJaKAYIzZlBTmJ5MzD7<3`hv$(^tb%W>z2ENzr3mDE3yjHi$E z!e?}HYzF}cj`EpVLDb(`UDVjN~Fp5oCHaN73IYTMDbd4H4oVI ze3dy2s|?^hSZXR((FPl1m0 zFuOcid|a|gr@rpqXl;UN;a;EAVfJYtSzFTu`<~GUdgseb3WcR4sUH_1s~2LAZ$`G= zU?a*I=ZzsDbj?5AZ{^*qNCb#?DQahNI1ShXdI-HHE{uL(Ojev>adn49N*e5PLLN4azmm+}5YY{RA|AgTBhKc`2`VYSVv(s1}y6%@Ix|**Zx| zJn3&qh`?^jfUE>+Te}_{ixuast>t5WOj8nBM^maFsKFrpDa+Gw!L^~|4yF}2vOOV~ zL{NoG(`ojgp1l~6`_Yb+)SOL3Qz^_#R2V$3U^**Vnj&9g)*$Lf$S}nL<7kM*{$=&h zdN_&E&7g~`g^*e|*!iwfM~+>h@;V6|ujn)qk?ApMw%@qw1790Fz}3qHC?Itoj1)e+PL zWP_ye=4s2D=@#P7McnOs2=M1&HRos4o=n6~`SEcMaW;e-nrl;vW9Aq=qr_88vh?>; zF16a+kfa@G_N?KA9aS+|bm;YwU*5;NwA`(`-e;D%vBX#uGR0 zz$glP?jRbuP?r$Ew6MhuASvSImCnEWB%+eNv&nX~6)dAo=~6pg(>ft~7P{Cq`}g%- z_@8?_#LV7SG%gi2=Y8GbfGcaP!2lJGS5Q6Qyuxs~ae$1X4l=9el$pUSZNA?c(BCD^ z#3LsEmp;TQ`AWX<3D2x&%M$zOv4;3ex!ZQJIx&y$^EuE!W`OIokma# zk;LArr{Ji$TEMIPug#j~V8iD{Ry-(njScX%=DfmMu80}Akq#f$!bB!JCa~$q42+RS z1IS4CAaRNf1?{*&nsHS`Z&E`=%CNrYVSD)B9c9N#Tj??m$0;JhhAa{wR^So>W!VC4 zre+#OnW|8MU)I@B=D@x6nIvi9T-tedORZVi$1dR!fmnN@A$3T|tqqk?UfqB?^EG8o zrB;}$cgKg>nFGFc_sv13MtbuiD#42GXgaq287&a2umXNNW@+z6JurWz z1#eD(OD||IMXBBckB3g4!UVxCJAEsoAq}PR`f8lEDTmwtXHzQAolG4%r<#c|gm+8Q zBt?J~!Eiw^t$#noZz50o(8drvnZF^0tre%7*>}K&0(H{IiOc%6{%z8DhrTkQYOq{3 z9K}jVfsemI$@q!LcR3ub6Yhn4U0+x<`^1O*PHKhq*FL`wC0JCFud`>=EnWh%-M^YA zOH5__bq67bHH>f8c+19R%1$<)GYh9VZHHqw|vO|!_ zlFzW@pCk_Jon{;B5g9r8lUOuj0E>=d5QJHlrv+^~t~Hoz>pqf=0uA8(;zyYmwIgdlths!Vm$RHIggdMsLdl$r+0JjB#~hyxop?{yP}K~B=9UbA2uaIS74;J)R`TS;U=vR6 zOZVIe5u#UXKr+J+2$a&yEMl|rLlX0GOLY)Hr}oRUpKORkt?Q4I-dWKmC!UOYmZJl$ z#hWG}E?mgOYnQxwU6)0U#+{-_G@w@7vQnnvl4C-C+NXFNYH;;e7EN< z>diCGe>M6_h#P)L(JAGDJeDzgsW3J2!R@dgqIJkKs9MB&7MY$4CcKNfBWPIEtGsn#JRf^+v-VcIIU%eC*GAEr7 znj1piCZ|uGs;DJ|7aIY^I2<+JQ~)$*Rcy?Oo3Wu@FIZIpfwP}Zx$A<@X8+7HVcP?z=4mojx#;_fAkrd#R*;0?*vppM{E;{bH z%#+o*Gk&0MH~y) zcY4;a)iVxw%q{+BXpu=)${}PFfl!D5xW-}Xek%$SR6amG;3W5*+FDj1qgs5|JHHVLC&Ia`a-RQ)$vlezcrds5?* z8hmN%`xcacaj?}eV|)7kct&tIJm&yH_FatXPLF#)wpW5Y=QY8f9n{P?t033GjC)OZ zo7{s;b`kGt|Il)_z4Sj!*zw9F`gXbU&3vEt-$kAs=j!PiS8+50O(Zi;2Q5p2-IZ?$ z8eBBXc1p;QXW6UiySY1iw3ovvRK2Sv_qcq(eD!FYheFA6W z4I84lar-^J+u=IS|Di8gE2&4Y$jN$)8X{OO@zFAOkWTbXEe4S>k(AZ^JnH7`oVUpe zKCT=YKYN|fxQJSas52nh>5woMvKJ}W^wry19smrEP*;0cRO-}kIy6Z!eRx36vT(yX zd1!Oh1ux^RbJWF$&g<5u6I@c$_mF2v$}$?m8>V1H8a})&S7oh^s9aBMQg}UXdI?QX z-yc1xP40b+hLB&n@6tly%&gY>fP1$*+*Y0+15Lx)?u*aJ44LvVqkCevRivI|Owr8l zp`vv=bMxlKFk2Q~*fFLDzYOHXGH-DG%A*FW%BTa3Jdi_PWfPyIIaa;1iwY_`Rk@*2 zo^RGShA|ezbyy^cmgP>gSLuQ4A*t3=^n>hOJl~X|w*p3QV#Q6I_cvTyb~(VI^z1W@ z%aSKwM++GXMyw1Jyj`~HqfBN&YD2Z2^eV7=CAftXTkK)wa(DQPTo1ah-EW4EOQHz^jG;qQq#YloSfI?;%-_woyT=)A z7(6GbR@CIu0yf!Azs0p@ONT&QN4nLSMyKTL&30|LxpKS0Pj1gfe+{LMLpOMHJq4?I zMsurHYRhPGo&bb#8VGS~tS^{s^C0bin@P_{VRm25iE7(h;G)^Fd13xgJUM~g4u-IH zZuh?)a(jrC7LH*M`6PY%LoaOGGJ4Q*2N1k|Zgxrvo^Y{houn6q&u zT>WaT;%fNu>>W>{_FD9;HO|4iaI-4`4OxQ2&mnyw-ih0fmbte#(D#)VdlCa=SB;Ve zlg-1@e%yGKV``w=eN@kR@T5xRol4twZbyi@Xpjj?{T-2X$bUs)u}(nc=aEna2)!U( zhTKPhEU38PltSC?(u##`vJZQHhO+qP}nwr$%}=R0#} z&b@!ZWd4#XGgf5e4y=gS`}yQ)=*g2jeS!?V%EC||!SB}%jPK)OwUuW6p->T~p{w=$ zi*%<>(f%fPJdXei2f6D+T9NGGU(R}l@rV{nNrrjt`oFyK<6-J>%kEZ}*U(pRf*D)o zP*gh<^y*%xrP9!@@V_|S*k4F=KA0qZ>sh$fyY-J$EF(NB4sKzh)F|?s?pYf9E#Co zF~CTEWq&@=mE1Z@Gwl-^qw0(`buK_#^2=sF_;3SD@o^0w$m{WR7od z)QzETOnls1&*g^&O*T#jbU0tJeDm!FB!fdqbO*_rVtL$K02kt6w9o@o!1Oz1=V`|wJ(VzM^cas}<>x(qP~065<}5w?r(BMmyPcZDqX zXAy{fvlj zSE|VmS%>xUU;9R2)S#y{VtEQDR>)KN{&E{Axd)s%D#!)7P(b6j76MbcVub~{%5g|f z1DG+HxvmbSaMUu`BPBcxlzRq>LQOAsaW{``?;(9f@oCQ%`G|iaER+D+G#5Ao97E{y z-t!skyn})`#g$wEFOy|n6Z{%XnSClxZ91}9nnr9SMGs8i(B2>6Rc~I)y-i{a`<0cnT{$0 z*k>HSnxeyrFDH^YW$ugp7Q3C*BWpR%H@bBxjF4VodQArHs~hxqwXjrsTUOR5Sm_mR zD(N{^JAVl>5-=c72Pc!>vwVU{ebwbo< zwe*Y&bP{CtzoXi~;cn8T zJP{R-lK%83MF6R>u0H-nth$@s%avqPp`#ZXQ`>ULo@+(!dUT-$Nt^3lj`Hdda#@b9 zcuzfXyaNIksa}kLj`~$ zam5S{WFS~CP8*(7PQ;MslqcRBTPSxOvX~AxV9k-i9_@-iZu1z%bh!lZ+wx&==v%r+ zwrXz`6}Z!Kg+4)*AchmYqL|TWzblL}#gRB95NA-g(>U%RmnIo!t`6J3$5!YXQQ|s| zd$hI9d+qazOiQ?8iXy!K(i}7E?2oB0d95^OpQxrMJ(LIrA73l9bAa(Th;|Z`VsIb` z5y^U{i?WAB^)8G^MdnE>PAoAwBZb~OdC3MWVk}2<=+m4HF@+kY&wCu2FX|}llxZ(QA$e4Wjx}VbO1!5!mpu&+`K>XHXGm^8 z&~!YZy+90mIaxf?x3(nF6ZOq+FGgE$Z$aP?8~EKg3`ya>$MuTF-bD6?$1tQM|MpR+ zIM7Svr)oP_bl|X%c`Y0uE6srT#QIdmbp!$!7P246kq$q{9`&h;AsmzVw}XXh(NSZy zx5&+m1+=BHLrd7IW08_%S9onAbW{jDERlD3PE`BmCVP})n<11R_7H3KAD#XKh)+Az!+crKDWsHm<|XdQ>do?B*8QiC zX}t~{+SiP-rHo0mUc;Py-U08=_0F6kP~3!xh_P=NBlMx zXLSFlF^wmo)|xXFlq!@!oLo1JjJwkzZR&%#AW++#6EUYwdy-$B1&Xo{OdVljSu}>c z;~G`sA+jKiuXI|S&Hh=W)kY_8Cr!w0K?u!{M3kN>{ix~Xs;m#=vFg{Uesdza(&Efl z$r!QXLovn<$2Lv-bj`N3bdwU`ftH3I<(f~A9G)-NP3{RcG{k>S;)FjrdWucP2#-=J zut}R_kbMVq1eIn=54~KCFe+vqiE>tdnxY=RSSIJH?=c42bPUM&Z`;u;{j)DeIgBTM zEUq#~Th2_5X7=z*%xb1*H#rnb#7M^LMbv>JQ_ye4V^t@I_35~>$N@{q3U#EF!_iIt zEBCXJn{2I_`c^&GWJ)7{fV7h0r_cqK7nkW>#vWxyPAO z#Z5e{;_$}#b_;w}aZsKcNkG9eQ?9oVtwM#bfdnX2f!)>nj!M*4*VUgDnJ$UUt2He@ z(|4s%eoh$LEqO1Cc$QdCN&Xg&>!pearQxKHFo4pIrrCD&Zo8&X_ScZC?LJ2@|Egu- z9Iw4n?O;<}zc9{tb+n||ay(L8JxiyHC=#Ula#&)Omr!vCU?s^9G-dpLpznuGp6u1D zkGDjk?N|u`bnFV_C#K?ox0!O*I#3`Md9Vmk;k|ME45M1_jBVGoWA*oE@@O$`DAR%7 z;!NS-`SFqa5-uA<0|PXn5E8+DMoOab--_*m#*4JSu`>-s6+9BThYsqL?k{W^S64D% zVJ|o`S2z!wJ-v%uq!gRugY#YcN1@B?89v|&rt1rd9e?sNo94;8PqslS#_na@umioj$7!}jRTJvNrs7kT!X*F_qnBXOo zCkD``3@HD-k@M;kGq#Yl7Jp3L>3v2i7Tu?1!O!NiPnSUa_xV4fIuQ zxN0xwd7rN-974;gz8k#A&L!!KYDyZ|p{5u=8pjd2nGw{=KUlxF@sQ?cXVJ%L;ePO7 z(MUrnFm|M;0bJ%cmFeRH?|D!zbHL?DC7;*l_EHC-bW~$B)3L{}IDgOn>sg|0c%-R^V`R zOnab;%QD|I$IdFJgRdkV5_+J5dIOA61Zs;d8H_5mB?!Li8DbY}oMxa^CJn@#wSc8b z-8Mp}RS-PCeZv9`HHaw}z>#W9f z+Gis)aa6XX8vpzBEB~dsK5)Qs6XBNh14a13ARu76#XjfLI;vQM?^xRptupnl1sB-; z4;aDMnHy-H9JiK32L;+2oDz&Y`H-t>kSz5hemwJ}bj`8gV1}J=ERn#WAzuLg+m2S0 zk@7fPrqE>c+2vPQnPTeua}0qFrApx1n@-%LTdaUusQQX-v`;{B6j+TGsYPpCzNUOI zw+PLz|8N0D3Gy;G(3JZd<##VH} z587+{^FpzYAFM30*NeL0KuE$pU*AtM*P;IhvG9Xd$O$wCI1-WzF>oZ_$*dvOe`+QV zH5C4!1%6eYdc=>T9RO88i6-{6 zz=GpYVjQCfg&mT=)d;f6xB#y9acMcnMrBBKX6do}jss5ggf_+a|H(?g1QM#%D|U=J z0P1Sn1?ft5KHWgV;lZet7sNyVX+vdAznbq1Y%{^A%M-Wk58J>ATw1mNyCi?~K^#UL zIkef8l~VrEYF}I$ASRUeqtP~>|2Iy71_(T|=bt)CxI)iE%YCP&_YNQMCCYzOEN+~A zetr5wX*mz62tJQBY6ueUeL2C~{MX3_0iwqV4VTCJEc?HcD*DlXE4OlFlwLn={=fW$ z9>JX$!W|0bU@W<2-v3JO`~RE7z9~QRZWUgBH&3aTM0O4w9;xa$r}+OJiJ|M$gRfjw zps?r=kyAA9zx!7vi#crYb&Gtv*B))>!fE!uzn6}0Cx%kFPQmf*b@-ew1NG$39cXaX z;TfGSX>31YIK2pJ8?>Gdl@fZ1S zG33OQ`4-@k!bHB$F^ARi`O;vzTOC<{-s*0^wplL6+>Q=6u+1N*g-MgBVa z=Xz-8X0x-s_QH^}{d?Z6qj&ocg5u+n&}L>#@!_DU+a2i^lGlqO<^mW@$j37?e?+>z zCu|BAx=&V20Io2XvD%Yb$?JK|m++>U;}lDxJ#(6)8<#Ci9>A`Mef==tjkiCxihKNA zD(iB5^+nxqn<+3{x%y*>olD-GoP_e88L}Xg%DB)UH(^Yeg7ZvxoCTa*iO#D@saWK5 z4nA6NRu37%DTzW&dqWY(mbjQrnY7Y##psZKZ11nNwRL)~GeIXS8aV{joLWOkk0H0Y zPj@_shi8ykTp0B7y@2EWy_m#AGPvt@ipU^-6KgmEVs3bH(faKhjv34X$3_1R3*3jz z>Fd^yFQl|GBD;ijEZ-8wb!RGHaWwDgpWD@M%Tf5 zWo*#6J^M#Sq!<{EEz3u!SN`wH_3imB{*PSFQIqf_&!SN|h%jO4)8BUF(KSXwP>eh> z+h3ulY)zOTz5&El34xB3bc;+wNvhR^DqL~%iuERadn4#=>n{R*z-|H8$G-3vqje(i#PzqM z0B9doxdnKpLigK>>bfuPX9Gs>fJ;D-Yb5cxHXd8pgaE|sXl>}gZ*4dUozFH$aKxpxE_#c$iB{! ztLf3>3V6C#!r81hA@HGUEir$(pW?{W*Kpl9_@T`F06DN?>ruH2}PL7ZN;%hnN`xx`MmM6;&T>7Bo{Uva9N%MYnr&Q!Ut!odvQ)SqO-k@({C!< z{%U_542nFz-0oy{4|;o^55J7Ub%%n2mJ0o%sLm{UyXqjt&)a?~zRwzq`*r6+_50v< z;I>^;;Gig#>p|n8e(7H6HSHubnnNu0&b0||BdFxAGH4YxA{RpKk>fn|^!abI!%#8t zUcYj3Aa%IXx1>OamciJ^2okkJ=4Z4ADh)kFQ(84oWVfj^D+5KjA-kqQ;u|;bJw_~0!?csozE>K4Y%Hx zwu@sz6^Q=IzsYXv69{w^9h zp=5JLVJ}ydu21b-vN?+BgZi<^MX>X(Nl4kth5E6-gpw7U8KX=R!m|m)RySy14n+vBrr2Cr18QAmoTHb{S3)Uoy^>2e!HCZnwbYOHEG zqu~1P^Ui5%iXB_z53ZT<$6vTu^?%slhk0zsG4n>0W4yN+2rH~8K}>J%3hbQ)nb2+k zA$CoLrwr~c2Ih2Dl;gt^a`J*qqDjSVs;Irp<-1tz#GJg`ydfddwHhQqIyOvkDl?XR zf6ghYLdSnf7y1_fcrQlar&@m0b|$vK!bFJA zjVewdHoLaq_rZQ28;dl};1e~Zrf^l6KRM+;cNdtVon}3@JlX4ub78dJ_U%lN5Za6{%XD$2GOlChGMJ_GS|ah3Y3lV37k+fR{LVF4DX@cYxt zoX95(woBVI6#64n7+X8m9| z!&OzJP}R{!=WpUbVK84tXodBzAJrZAtG}!2Wx*qbwWz2X5lF8)xrQZT<{dpRI=+slYNJv*|_@83nW znJ~309XDy99o=|%<|FE#wfDnGyOJQ83h7zJ-J>_|a@F(0cTI}p#Z(@t9-4uyA zsosSHg>XWV&wNHKkBMRET9rfEMqJBMsCR(@UPtAIL<;bj82DLZP%|?#e>_$tc7C|x zx<4AM9)a$5$VS2p2e7tP5-EP>$(9q~n1D1TTMms`_YTXf5|R&deZ|!7I+$PjiUCpVt+Obd^vl7KsrG|r zRgnB7p1v=|NpD!QYOS|&`jnKLW_>VKv zcDlaR;eJTpJM{Ifwczlo)L_af>Y$Rg`^3+e)yYQ@0}XklGVpfiH`xXP#O$wT!v?Z| zo0IG3oG@GI{NI#M<&CBg#O3ujq28(yeh#!{%`7{?fU3accpZ*o+q3=?Loaf~DFbP* zsW%2yZQ^rEt<*qiEn!g3`MSTUQD?eNY%u=yB`MpHiRK&F!Er2CZVPaW@QX@^CdVMt zk&PR_^foQ3O#5lSo#CEdTTRHrhNCXMGTcNVc^n403Utt-zii=}9AsN}OUTJWgcqZJ zQ}M9Fecwex$EF_ierZm=yiS|V2!fU|k^X6S0=4OT6@1xwFKw|uv2ZW^-$_>^R{3-b)g&y%UQhDi1@;GyBJkKsAS=W;M6w(>3jM~05yxz?%3riIUb z{eUNvzS&pb-UvMJ?tmJm!3U;iR%+Z8-!AKS_U;6O4g$9wmv+*Tzl0DAN1V~X0I4)d#>9OugZ)bpQicOKZWA4ckbA7+dQmm>jd%qq04&Z)`5x~ z9!J;H(uuRMt6ilYpr2f1@A0^|l&##Gp8Ct1))3BAzT5k6v9?l>d36f(aN2Bx?EdR% zJLPRKc$x%wLxW`;N$|$iIIPOQUm(mf>BSdk!Y$&-J z<6quimc&_`SOwRgV|6zJo6UQefHqj%&mV_t`L{C^$63?vJ*x-Kx+!cKSz0vU z>qE#TImkyZXd@#564%XvIUb}~Yg3FldVXxZT6>ZsL7o6>RpfKac{igi;6+z3z z9yLl+A>i@(6I59HPS<1a)3}}*pUd@GGJ|euUynjrF+Hn48h0fUu=ylkk&-UHirJ&t z{l;?Tz9X0+eOT6Pgz5D(uYUU_?FFrz(VQfvP5I?AE-lk({%ceL3%F9T<+dHrqx$`T z>~WJ9AE|dYH1E7`zy19?srrT4<1x|YVv)q-S{X1H=jZUiblK)M0xw5A!;_?ljA#%CY&?`mS(xUm+u`R7WJ*vjGYirHAg;rt79-1Ft$+Dz8X z1E=bJ2FSqf@QaPKL3>k*GN~|HoeK5pEhIaB;+kaXnSHUj7>-zY-VI#|r)Y0c<(Y)6 zxRyasGoF%xd*0tNU7dbm6}oi+0g}Ie3x~@_J2*82HIa0_0dqjxs~vSqko{#=*d+46 zU|D6+uiC2+>K@f-Z-Y5i1YgS6iMHx}LXRpt-R~_^@?|dhc_&b@mF>Gk;o~;heK()@ zD1DjcA5G%inB?Qj+Vb;UTuRWm)O0W{eH7+zA)7@~R2@}Qg19)3m9{P@IAzj3^<`Q* z;o_3lAtyl|jN5nHW6O8gr)9+V2)ZZM&sxsBl_DcqRmohXsoI*aUZaY(9FS$ru@_1+ zlj)6SL}%{VuxFW8v#qU&bnENBM{Uip`l!iV*;ZV@*O<}97cVf+W0%Fjq3f_^S;&4F zRe0Dxf^`k$Mc>EupxZ}WoKQhf1*$a8+sNw6A*s9Rj14L-?`*~E;mk*##W3g+jaM|0 zB<&qgSnid^S{&BR)ks<|ee@;l#7LcNT;~rbQm?yv?w8*0ACYQHGFk*dE*>bWhuiNk zhW(q1&x6Kyb(^PE;*?}bO8C>#u29sqvh~~X^tGGaYU+OXADoM^+hwYm$MKPphQ}&b z#FE2qE4A$9*PB&`;JCc1)t~TMs%MJv?b&c}oYOwV2t!VDOO`{azs*}M$g~|>rU~T( zM6@3pNDfcP_qI=I8V^m6d&k>rQJgqt1E@S)aP2J2drie3FWcEwL-6(^(h5sgorah= zo*l5LGOclq^kn0UVF(^S_f9NNdLp;02l8p7_n@`a1Y1*lhOah!+e6mfrzrTFs8V+6 z4LOd!Y=1VuQjmeb3p7l>k_7Q*IscVIPwsW*L(Cy04*VvkRHQ-{=eu0YH|GZCG2fXxMtGy{90$T5Qku~(Ewdc zqauka1+-M{9R#)W>nL%0Fqr3?yKO426{Gl+ixzjCXG7q*=V*V}&W4#W35Shm#L0 zv(zJ5;<9z~Iy%2Lxg8|u97}gTT(lYL>gV+5gr#i^B8my!ySXf=EM?ehYib0ad)|-4|<4C}aaSFg?v-m#38eb!B4b z20kU+p8orEh53)efA#y8G2G^^_Ep4ao%77Srrrq6I5Q#a zE6S^3Htaax(0K5}rK714(^!@q>jJYk^cV?!P)sq2hI$~dcwxVi`;(1=G@uhZ|7GRT zK0=R}gNCCHBsqKC4>r9m((Vv{%eAnS?dwECzIbfLC5}JL3Ir3*#&Rg>$fiv1HohFxwl66WC4B({nO<$9?? zMS@(N{B7(swLmrLXawb;Ert`Fb0vU6`8)1V{~V{!UV1tAI)rK>m*6`R7hAlmSWXz# z(TNX8E2QlC;C{55$|wakGJn*RNJRNbU6bu-gFl0RFsyO*Gb7@DnszXrc5YG|x2JZ{ z*2EHecMJ|iuD0%%s)Uw=^hvHE>xM3mDdlP^G5gDHr7%GvN`Y6K{SRF1W0=nWf=vy0 z6t{NGGk?*_pB|OIiFpBY`ejIBr!YA!1_cms$9~%KCNE6D7YxeqL&wo*qk=v!Q6Vop zF5JHezrVS6Z<}Ri3p+GF+HnR@<`JZZR6YH6a0Hpb-Rqk#qU^=qi;kD3V5y^MX9FhY za<}Of4OFP0isn7-P;k*YVX|JLOKkD}&z#~9+Hdz0Y?F8w|mn!17Dt+yL&=e0Tz>C z6d8djkbc~{$U>&*h2fNx)R3XNoL?h1bV4oflD>t63PAO(W*avT0xr9?eEVBDj8LVb zfn){NjO67YtR83MFZ0;mgK*#P@GwKKHD@b`wx@^5`zOTqw_Dy_zX_c;Lbty^f=$k` z2mB7pZD!wT`d3MD4fXV!x*o`IJoJD&$U#W{9U7FtnHCya=tKB^(HtBg-@8CL$uUCu zA9+HCiX2;UJ?btX^8eYagxj=b1kMg7A1E~-A<4HHrN6NuR_m}~?t00j-KF*Rgoyq) zMR`F}ciL;Kzx^7g8NwP0KVN0XW5_xOkM5)h40Jt`Sp?PA2pR)zQ$=3*pTvvqSTZhT-fj6T~u2NTE&P#&2xS zP2Gx+m-D$GA7GE{ic6VG%YRX#i;Qx9R$O1TpULc(SjQknYUYlmNXljJg{)IXfBx2f zeUw*`mG$Xdcitt`{-)XTUP}{wm2-?4aQF^vS$E_ib-c1DK)F4FZhTp^PMcxv0Tm4p zZe7VKJWBl8zq^x*u{7e5Rr_C+KxuL{OrWZ*p-jqE7mhdlL<9 zYK!@5PJPwlh^x;aOz+Hxuw{RXrKWdBH_#u**ym`UUgp|mW5sepH-NWkKc{I?ILPGJ zjgBzr(g>eGOWsoq!0qvTZrmw#Pun5H8O}-fT^>7f;c$}h3nUz=%7 z-JuYi+#z(ZicZrqB96qGu&saRkn#!|H3`N7c2)f2tm(OcXCpft!wJMXYv}lukxy8K z5p^gsr?Z&R6-WAqvOY$3m0&!9^8Ul!m`xOLd zsx*<{s!O2dPMVt)lZ*}}d1-u)M(-aa+RrTG<^CJvMC1j&93*#zem#*4 zMK0{53Sak4dpmM=y;n*TlC!^m*FWRLK1;MNl9baIj-a>9_mu{rdI(yiyRhka3i%#Jra z5{$$eeewduio60Gj26rzb~0y4N^ezP?48;BN<~%MDX?c{uOJ>{D=(>H8T09%LwE~j zYgxjNis|682nFR=I#eM;Iv9SzZR|xh{kF0x=y{!pzlB|cBd-y?het0BWXcU^BATIxXUjuiS}6`R^G!l(ipx zzG8SZerlSB?-B{^C%O=5#0`yesDkX{v7-UIYMQLy{62nX_t0mY%wg0bTXJ%K^I1?w z2UR&?)^Kn9W)vc@b#ddRM>K^t zVCc`n7Xs*59pm6>P5qZ9{c&%uL49;iL(zBcTaLDd$enZKiGi3Py$~O>VR@ z%9htP5`QVR{e1(UsF5XMc1@23j=U{J@-_}^QBtVknWxe)e*k!0cNFTopo@fh#|$lm z>gk1Zarn)B^65($#(Jr9KwlEcW6`0Je7_rpuB?{LpMxNHN`i$R|%U)_4L|u z)T31#&i?92MSIQ_bU zjCE69EDLI*0o#8^u$~eI1{?NzGqtd}m@PI_VQFR*+3Hxq$+;f8Zz2A6vB2j9M9m2% zE}^+Z-4#qZkuXO}>}4oVqX#I1c4&*Rxed(~7mCB^>FdMq6~9lOFq)p@1$a3z8Do6V zAQsRa&BW@W&Gv(BduID#rHy%-fke;m-4!xxm}plUwbNudg8;0@{e^zKx;8cG z&#QuSG#h+LanXP#CA_ju#x*-LPByx+TIe__8{QJ#*l19s%#8Tjwn*i8r zPi&t!_Pf4}3+9{i;Vzl8e;LBbPM4V~0gqOqu&*!4dYIZ3LxDgM$dwk?KSn)nW`%|; z0;_ZKjqd^Y0|m9&jcZ>%0f8CjKB-J(B~7`gR_W{E==90)#~^6e=AbSJr2+Z0Re+e$`8Gu#zxWjn%bMDZ=Ni=GcZAB5Gtw47LlOeePoP{g~B@NDfzQP|lXmIm!y zm31NMFXaYrGv+YCPuERS38(@H>-KE5$drlQ1!6kxbl_Y(!)SL|5W6gUY4t{dPdXOy~h$Lc$I` zR9HqvZfvoU^y+1~-{tnu)#Ygd{^1lUK(qThjA|WX1A86PR|})6wT@FO^$TX`<_5QY z4(8)!9=GL6dm3*fT55w(c&BjL7;y`&VLz(EvHK$;MSK{Kg1~3%jl1SLaL}c{5$e*k zYNg8&lbLF9q%>UEO_$lP-+eEXlw^0&b-vb96W7Xp{Mc2J>D{F*FAS(a`Tfe}#n+ZA z`4}CGn+=R_gXrcw8j#aZ+?=cb53Pdhd}iJgG|SBhtg5vFl|dS30Jk0bb|IX50fb;t zQL+cOQOvT5LeWndc<@k2fS9z~-+k<+kC6*T?#NUA@9~qvl~S6}@#(_l53e=>HVFU^ zgZl=x>7Yz^)wxf^F$3lyNfpTZ#(1fo9oVrT*Kl9cSEdb37lsj7g6F<~!j|h^z`UjH z65(Z)HNvCm7hqrpXYwRbfZYn$$Rx;QzWBq52kGU`^b#%12+&yvYu-Q(Nj@%^122)7 zHTdq8JD44ipJL1>BJ=HGB6X2PJ4aZm<1$ZjCaA>vJg6wGGb=c zR{Mm%IToHTT0Jj~W$W@U?vXc1#IwZ1zyPEG_!7v;CS;(p@a zj2FnSOwJLwqBoz$#pe7p5c1nD0erH)!raYQ%UYkFu&9U-v+fqD`AqugYLe`#MSc$# zQg1wPcyb?z-rfo7PV`;pE`NrHv^y)DLX_AunuI%x*IGDxAU40_=BkpG~)8M2(6y5u4KN@o%bZc>VE#)lKbjM#9I9%a}v!jS;fCxWF=JGhX zB}u$+ixwZdGl|f@cY-x`)am)(UN1V%S5MSKN5GCLcQDahHugh_0nbD4RIH`78&d+E zE&-w33{OipBZ(9cm9D-j=uNvf<@u9nZ>$Ar+08Hp3+#%jQ-0teXsvl8iUUsl@t_^(2Xn=p5EdB3z zw_a=O3)+w)1I=GZ7{PE(1AeN)e*t5dP7jyr_v-LL+sH!MwC0ERheq1bg7^Eg?b4V9 z;W>%c;m4$4WVt1ttZ*J*B+P*uzSu&|;hLOKiNGF4#P3kSLZ!pK`HHY#3Ugntrwe9s zlokPIS0hoznvb^g0V(jNt!n=nH9%#3Xn>3uZ$J$f5lQXUt?gvFJJ?&mZJZ@>P_xMc z8y@XJi8kv){A=JW{WL(zksnXFyo_UbV6ZISvnGvs&fy8Xy}p0tOE7 zfc#Bl`||SO_og$M{$%UgmzU2nlf z$3QqhJjt8Z#Ua|@(PSMTDcIXshhK5G^-s%d?=Ihn1OtQr!DFXR{}PbmI;H^Hbg@dR zJGh0Z*bj!=bCF{JJnK&~+VanIsykbm9)oBq3+9>tq=;n8_4R|JH1*&oEH{Ovi16#o ztzYaAd5Hr{HX;BiyqA^gUfR8K@GN(_qz~h{(4c7Ov zDQ5i0gO3Qcc?9d-oKa6j4j@kBq75QWwOP|@)7noGZM)k>@h)(Km=uP z#1>C24-{>F+h?8Xq;5>Y%2w0I@mpjv(GQbvPDZl03;YK1qTnPwI# zBh_M@_V&d~n)|AAH2S#D*5hCmL$m!gkNR`vK_+@X*iPi#Zb9}D1^!afcNRmqHI|?( z9e`C%`PVrQDbqdXkC}eRP}6vjKVX_5e@TkpN(eq~u57llxY}-)ZU_Rq>u{O>H#8_s z0MNHeix_nYFlu_uu1-%a)anP(pXj(fS=hanid`b-pGE+(5X31z(AyO8h2bE{%eJ5H zymd5PsaO!Ivnb|wbW5!xM<=gVm$Y9%(*P+Ed!zO|>Zk}Rgy&3}ti7so^X)l^0ja+|OIDex(1iaoP z$7Fi7x2hRQ9W}o|AQY$%Zm19aU5e;62%0UK9ypeI>%2;FSpL@d@zn!q`O&EKDMbJI zu*-$f3o9;4Qoro}*!vhYXoiw8ZF4@@pvniAMs-nGp*Itq9=bmy$SQF|T;A~v1zbnT zE|5ZA_r|tGtb-KwQt@nNE)Nxc?LfKxyVVD=*sgYHW|E?RK1a0%tKS*ubG+e@3^N91 z6BxKY4jeRAoAW7@cgB91QcOHd`B?W&f+$19?!g$Fy7FY}{HQuw<}_;wK((}-#K_FD zmVGMc!@4MqBuTzx7}8a25jbO21izWUy&zP#1xZc~>k`_=vr{lZlV(K5ln^PaJLKsE z@#00MI$`;?L^)hZnG!vKBy~o|j^pb15@RRV7w@!6r*-b;u5{p7279*Ze z9+(CH#X-)SS48C%0aMiWHJ2jI&kQ7q)6x;|EUXCXF;*nehQw_Q%4eS-X)wkiZlTZK zgY`8uV)__(G zkbmbXjp2)l<;Z~S`DX}_7*cd07Nlx3od~^)xZUeWVFG&#@FJysAa5Pj6j;Kb&E?do z{?YIU7xXHSmYm#&JHI@P=7oU|_(|8Hz4N%&% zK9!O@^}K*4uu%Q4wj%}$F*hyA2PTFNGwDA8A2$VoKzsV74aFcEvZJ6b>-X~F;)PS3 zU@Xm!N5loC>)R$h;hlyfM%g#|uQ5>dJp&FWP9q@QEsX)er053H!Jk%IC;7KJ|NRj& z_%@f6AzO4dw6AThX&{)GzY~s&h6n<^G4!>zNam!ivLXFXu;|oG@@SYbV<4D~eUJl1 z(9%xYu{E`pA=5j1_QP@f&@b1j25(j=ooveM*MV#}FQGK(RxPTIwB_C&K9EiTOX?7LF*GBbn-ntNGVSMN`BASdXVY%4N$X-6QjqsO&9is-x=v!c-seiw^{nB-feMU@iSvhqEr8?snWoVlthIw0%<%G%nxu(vG*VRw+o2Q=w_S>S(6@$sDwB*rNisc33i z8YlWM+|Z=^{sh%ux}A)`2V!BI?`WO z;@X-~#emARH4I1Ew2E+SH3;Q17!rG22b?myrs;Atzr>X9u&|d})vr(@w7-9I6fFPz zc@uV~Cg}~|v_NtBzw71ysURDCq`$C<#l^*AKfjc%ts5==iL5`=Q(O7TQ!K{JNi6e1 zhUxxOE+iFN2^17m%$!(C&+GpJWI&t0etr!$OaoEldLcxxq_t4MLIDc}EEKR%z(N5F z1^yir5ao|-x)TAbq@+YSxjQ;KUNoonCc>3`uW9KHaO0Bcj{slAZ`z z5)8qrj2f##5v)pz6=J@=zAzlcMD1osgL*E@uZ02@3Roy$p@4+~77AD>@ZUiJ5vC-F z_04c>zgUKN1R1$`8&~@=NpsLtHU|Ui6)V+t8Ovz8bF=EfQZPB|ee* z9332$s?Ej4MfqEa21_I~!~6bRLe~GjR!jdZMXL=$bzd_jV5`agFJ79r$-l1+OrPv% zuJ&Ywjq;7M)$`w^mkvwLC20xwT(mWCI9nQX+>HCPrM;N%4ZQx7Wu6WHf6^{zgZZC) ze=b^{EAD)7{HOU_FGKoF(|)7#wO9}S&S=sIOUGC5C(X-NaeuS_HHY<|c>ed${y%}a zrHub33W%A|&{l~;NH*q){9?#1{{+_-pTDW2Q1t!wWNeJj0}oI@HD5T`+u*UQBN6OP zDNhpwYANZJAvZTy{fQ|sFfg#eNlYX_`LnUHrLgsP284f7rT?zHG6?*=LGiz<9{&s2 zh-UR~%|HJOm9yaZk16m^1&Du||F0_`rh)(d@$%nKhrg!Og{5c|FfT0M#Z9f~W&+vT zobXri{}dY?e(S>ZxnOIY^Mx-3XTuS^HT(@2=INzO;c9cgZKIy&3(tW2@4QOAWEY{} zB*K=+FXyV``QXw-b0rx>7P_uq2psKf@crIQI5R~}O&u1jPQ-mfLlN25nL7e2QCX?~ z2?7m>n8pRsYFS(J{0N(R6cy%C3s&2NxDAL|*>E?ZFC6}d1+d!ca^w^iK(pehu13X3 z6MI_+v}xl3JJwB@>7O=~0s3NHOH1=nP*MgrcW-z&J6|lYP2f~ll&dm4y?tPB(?A`S zro5y8WmSNWk0-3^YLHh@1SdClI6F}5c|k!#K~65Lon7GW;*7H5d{org!pF1CIiYA; zElt{msHJw6&DBDaR!j z|14n5Uh9HYeN6?DPM$(}tp-mIPdL*W;Oc0HqT&*`d3eLgp~aAG2BYPz>Vw5)Xyefa z<;6v?b#_ym6t)f~_y{vylS z`oi%_n+V;DMRWb0@lUQSQ$9C=&3>o znFz0n4NwF7r`yxu=V*({s#+}hGa0w^_C<6c9l?l*AQKW20(W6JOc=Xwz4vF?g}v$r7Dzm0+?6N!}}q)25=4bmv}3IQY|gQ?Mk zD01HWtN7|^4^G(ddEU zO=;3dht}#LB?zrFY~HvKS3maxK7MC2?jAgt3duSZC+))&LQ)l4&_dy<$DQq0BVR~; zk`M2~qc4Ai`5%6Oj(*O1d#dt*UF$x>k_~k%e=4+sleogSGhW$x6e9mC*zkGV#$1qsvYO`o>vD~H3k-uUP2V-8hk0B>xea}|DUV9LkzTv}|o}Y%*Yd2xQs2dUJX0Leg(=Aq5^xDI4vXSwob$Un#71(9@8Tf7O zpXh&q`Gua+#|<0}JoPvFuk=f+`bw<)^j*C6+0O`T9|7k!Z4eL~hEaoK@cPU}n6~ge z^ojCQW5i!s1RDC_k)3$x#jo+)^AoVDsgU+HWK-0*V>Qp z?a7daelGMi;0OdMLoY}8pbTqQt$|;sLFf_HR*ggE<78ur|DHQ(dg<3Y*ZqX;N0SjV z=t^ACCt45|MD;?o8f^UOd+a$~fZ?OAMNC9s6Iz)kZ4JxT=&I5&qgbQFhx+*Lb@(&M z3KMU=LRqC)cx#{<-sxppA?tKJ)~@>lr!$MuA-WqbyKE=|yj+{$Cz%W!v(6mDAM5`_ z!kJ8X2e!x1VOJogLr_Ed?Bo+zM|er;1?bSZ2Zjy11pb~a;WZ#)x;bkd%@P_o7_ZJJ zkE9h|k&_NYrfD2K4Jd!_+CsPzFoK|itu-#~;s-k$Yka#q9d>MolJXk-d>|J!)osw; zqgEZgAm%_(qlrV91jBwQ45fm`PFe}H4;X+E?E=`)wQN#rSZmeDxAulJHDnTOI2jwk zAc%PfXm}?*%Pg38)P^*|ux81O_rl2LFwOHCoMEJG636n4_hv<#Zmm#AKeP(X2ID$D z053axu7*pn`pj?mW$&BVS8azQ&%X)}PLhIDLti41r3~{yNaD>0O>-R1cHcY?F;(Rl z_?qVvgr#luD+gEZLZ!-0JzG)JXht$sUmag#kW$Iij{&>!P3w176yoZr{b=9?vt%MT z*Vci+46{M7!{|Dn)BJ%e&_9^~3_54M12DDDsPHLfyCeV`=~!2T$Dh$a5&C z=E{l6vfb;y!w-84@W@jS!pG4D<&V}NJR%5%CsK$bd6x8%V8i~3^X(Ol3p;5EM*?IH^t^R|?9Mx2qS0T<(i+0}@%b8CwQ8#gty zOKW)Oa3wR#Y+i0dJ)2|0)TVY&#WtjC6qw|FbDa4`GB)&KW|PMjuo__7+Tr>q-bAfu zuqq}i=@=G%vJL>TR74#WIjW#*6hJA?GCW`{AFOkkM9 zQRQ>NDE+psG!w5cSco|v4%3SiIv5%CH~;=$w!^-k-@#+=Za~}XpT@DT=fa(nszJNb z%tSmg<~AH8ChfcQ(}gP$fMqeO>SjVwc#5};b=51=_-s}c6ETH-(oXEcRei65AkB0BZRi zLHXQ`R8Bgc9MGj4+D$dLu_b~jz`awR!rg-gH87JPZ4jisx)eu~5>N$uM1^;Rn>{sU zG+P}@J_&11f}PuU&`mNF$l{LfM@C^0ynNcDQ=m6aCMUwqEdZUULDM^THIBp|KsHt3 zu(n6%sP1U%?y6{1L74HU65#3`hPJNOICT6FO-R-VYZr~k0MRb#gHUxvAr2fnj8gfK zqmu`EP`Y-dHp9SI0WTZD16-hJ~uhK^UnpKNW|Q5>X=^#mbgi z#*XOF){oc;bFz1lfkaZ5P>`35(^+{GcCr_uKs1h>r7iFvqslb+_zHYz(QW_6to>1PsgIwgbhqb=G7wL?T$U<2O9jnN+UG*c%e zBp^4xn4s+7(>559;lZkJ2rlWlB?xNki4*bhG(7@-gcsF5$N*!y>gC$lIwCkI2yQO= zj+&~nA{;+{97VL}I=Xlus$&#QO!`@NsINxiv17={qv?t5*{(wr0)5?CParq#6!NOs zw^@#Y%zkzz@dPv%AA|+^s0KbO4NVh-ViYn$70tB z(4E}8(4|W>T&M|_ki+(`uyTe~Wg$+b=b=MXN7S+%?cF?4Tb#`?JPU1n+oE&lj=H8+ zXinTp3$tenVJlgC3PdN``43e}T_tJ*`p_QHPvTEBXS^ydr8e zM#umpf3mvKeXvaMBoo`bxU2*v^wp}Xq=t*>q@vd1mqdS`^1_q2^5ve$tnYw5^Y@@v zfCq9?;t>1bP@vCL6wi4bc3KIRESrIe-z)$U37hlFjhBtZcl*CY|H1EI(-RNDy0!=( zeLf5KeLf%9%QQ0o4ZRjy9)1UdB14f!n7tkzigx{ON5{(Ll&TrukAJ>i*zm$04DHw+ zML8$&(xQ8?faU|m?OlP9*S&zn6Q4q`r;Dm<^U0ga4`rUJtf)jS{mf)VoSd1C)701n z26d$%$3d&E3?F`U1LmzbfghIbr(atS)Kq5Uu?0P_CW}Qau0pic8T5Fm58y#z&*~@= zJ^*fb`wiUF#SPayIuYGRUyFmuKLJDyQNUf-yns;cBwl{`3xIgS8(8`5QH<%?8A-?1 zYZzc66cGYJ^kC4zmT7ARy#c5*>=c`l~UkHY&KtI+S-=keo1J(w6+ zzitVJEuRP+;e)`r9Ju4ESMlmy4d3Y=m^Jq;IQfUer;RoC?%0j+Ava>?vyTuD;kiaF zk1FUqe`M82aasv^vPpw$TvS(3;&8F!B0>0=otT~3wI&zu%y|jb6zr_3iV&AvffrwX z1=kEA(d){w>g$g&bN({)<+=M*yP0x)ydboA*MgtX%a@chdQ5!l`rYd>FttEMl< z{Ks#?AKxs(bMuy>&yXReJZ&-S<>%2mDiDET-Ekd1B5KdNAN=zNyfkky{KF$*!?F&= zoxuao&%)T@WLy)0jCQCh&cP=OU&qQV3Fy`(5_#z-u`jU{(`V1d&BJ;j{lq~`d;WEV zcI$||oD$fwPaRIF!i?Fh%b*xDy6cOK%EB|an}g|dU+=}`UA^$m%gZ#)bJjw9_`@bdMs+}WHU;%!7tEYH3j;cZVBh-Buq?3yK7H{{D0#8I z3M=M4fy$v%Fn!!``rH{bTuK@aZlK4@vtK~3$N+^GE6bL$qJ<|5Q*XW+Q$AXSQ3Jb> z{JHq(wdrKf9(Zs5Goxh5K?C&Xd-H{YTS1?zL>cZtC4 zS6)E3FfL+hS+8$|H;j5EDc)$UUd3#y#fv|Mqo+UCeE%U%rjNmO1G{4cEeIX~!5Dqx z4G8elCq|*eUj<`~@(B#a4cA_UKrc`9yK*!a1}4Fr9m`luN;}^(Vko99+l(vwwa3bZ zuia zfWZS|kaTDp0{YyD>5om~CMahd*!&&dTXhV6cBNSS@dkYMnOexIa%;-)`!C;O{(=Qq zv-u#rgJLl4#TPJP>=<}+jN0_WV(iGUgJZ!FJo4NdSpNHNj2+gSb(1++hAu0l9p0t{ zs}H{T0Xe_FfHg&xYD_(My-Xa&v3vM~Te0I&e zcy7XN*j?a`w?6v}*AI=sC$k^NjKx3Us<97Y?#yQq8=;RSM&D2sXyvDl3Wkf~f5m~h zMWB?dLJh^hT_Bu#5drS|cn@fz-c7W`nC<~S)tvwk2%^PJp8!=2EsduOr6R9aciA#Lbn zj-C%*sqN1wP-Ukc->SLZ2Cc^nFKRV>b8yF(8iq2>L&LOhwrtUM?D$dZF^SLPq22iI z5|wAipNlononX+c$F=Rp4r{A_`$)r$O!L%at&o+HUU#~x<9p9pPjw8&; z-Ly^*_tv^T+F$GZP^1PahjsjBZ@kJ?S5>Uder2SF5zv0!eNertDofVxekxGI#D3c0 zyeh3a|ESjYA?CY>w3+jy_SP3~Xn!0&r0v}OjfT;Df3JtOXw52Z%eEC-%tO8!7XTWb znWSwyv{PHKl8?1& zmCE20_0aG`p-J5*?B1Z=K5CTq$m36Fk3aUP_UNPf-{X%xp-sAPoc74HceDzEsLD&w z#*G=Rt>1M*<)g5~abJgBTb8LkdQ(sBUwF5JU2WzQ_B;A7=f@}pLCP<+Va(=H+9;YZ{E_zO`f9_ zRGPSvbm9U>#qa(7a}6D@)()P|(bLzKYhS(jly=kP1&SW0_HWWg_aCV0BGs&BT^7xp zq>X?2U9Cc|wxSpZ7L~s|_k?!q$l==d!ztRCgPXO1{jb&HGmBMRVMe?*;kpsp>RpLi zP0=asx&ghlUpF6BarG62+B?(k)@FXZNkfaJ=z1ejnu9gKSkSrDqp?(V&22rv_(IWg=)2h zkB`+}{Yoze#Qyyfl&jrcfa4D;Ls0I zT@891-Ts?4uGRd9R5~O7Ti>o%&+*%TZc(qV$s5-{Ank0xW>OQqOETlN+pis^t=*>6 z(cnQH3HAH8eoWw7|WQQC&xCz+;3TlCx%?fQG4)DE6ZS9y-_TC4TzHc(r? zJ3&1k-meJeYTOZR7oyt^cl8XGO^eC<=vYtN&Q5aSg1kSf}&j zFCRR^_s|wD{Z8AnXP5Tn$MeONB z-*fE4+Kzn(v=vKUQ_mm%vQy*Y_y!nZ?al;zzYTo18 z7qn8dF|G*$rUxmP2cj!ErbgtKe;8WTT*a`TXS%<7R3IBrGU>AD6xS0PF|S5shi~9r{ISZ*J**IXbtC zK)D+*KD;wNJF^fc(q2I%S4jy)%osTtPuw&fZK-)HE4T`CzyBI#w2_n)C1drmuYh)) z=+Hj|;UVGBx(-B81n|YdKk)nw*TbLA{S7!OEQ}wTbL_p~N@Yi_gA1~15|Gb&f4}u7 z4B=|Nt&0t6=zJ~iL1tuQy>m$)nj}qNtb`6#5tw?@qZmS`MhV-tvhK9gPv+p8G5^AVu07yZl?ii{P!EKj}) zAMN`RPh5X1I(g|%>gMJ?fo&eDH9Pbicqszi?Wqlt%2~mVMI74k8;%!=hD1`+H;d-v z1|rBSJp$qzHH|7|YezR|m1RiF%|$xRZ=Qi|>9;5Fbly}q|BfH7Vyb+?G3@f8a29Q} zix*-C48rVy`5yu#(?C66fIOygRYTfDZ z9vosH5pgg3y7pH~ni#hnfOx*|ZCnTzU&^scA_}$l*cK4(QUm58he74aIkl zWIwG%SY$5@>em&t!mhWDZ=(?&UEi&<^>gy|SqYeRPu4O!`F$jMHl#)NZ?iPvOK zk~TEvCI!$Grwad1{IEPLYKqI?j9z`N047~ZmyPEzkaRt;a{~wWv54&$h%Llrs>u(z z-nuQ8{ICW0UZ>A@y<(%WY5r8irE|_;(0zg~!GgK7(ca|$B=1FIr2^~h>eChx^1ykw zl9nS!BTi58m%p`ab6fJ|siV6v=(6io`aXA0gB>;N5_~(+Y)H2t!%t7>EPY*$VX7*~ z!0bse)GCML>#$NyCaT)jSyajrU^jL<(^K{nK#o(95{Fi?%Yc&nmdIo2xscuHu7Z zBCr(7|F*n}*{7_KTdJ8gg1%8k2=JwCjPC?qEhm8t*>)Z1f)`g_gGb)ud(LGZo-CiQ zE9h`9W{Qn=>QMzz%+tNUrk1KGfgtY*NeVAf@j+{f*|{juo3aBBxBPx4k?Ly@#e}8 zv0%?90Oc;w#{_LmLY2zFA67lT_B3czr$Dy`$5Yb~>D7@VEhpjf0#JrS_YM(CuoBB& zXh;WK!{UCZVtm5{WB_YQUIQo<6sn$or3yCEw|2GTc_g}Lfhm?e%~Md60HpEQhq|&; zcz6C>3eT)D2Qe2{H(WA&AZ%oyVcYu9_rr-WR1l$pel&GuXIkXxcS&EG>Vy%5B}j1k zh28kjlc;0e7tMVUDFv12-e&-A8GAdf9MV&@i%QEpQa>3t4{rVyD}GrITjF3VX%EdSzLeD&UZIQa(S$`PY6 z_O=_)&bK|Dnm!lHzW4$&p8OhB)=n63$rZSD+&J{FhXWe zG;Kssy|-t6yWiR3Ul^N&sa$HjWRv&}HCZT#a~xr~m5N$an6m@SV=m zE{?J=(1Y-_1Vsj`8rZx0Amz}Xn9BvI97!XtA#QH27#JO@4{c27>F>unGm})6bQGF< zcyItykNOVWwqfDemzINqVn;a8568`9f}$1!w&b6n4&f+Xmn&;^@{Wx8x>*qQWmxsa zGWr1>XSpt_jIwMItO%lV+wCZcOtRcOqCx=sIYmYS*-cy%^ zAOnn$RW|(;WF+CaJ3HXLKdiAmeiLGX>Bq=$%cE~#>mQvkuuFSW7F%3*^Jt_VDN+1p zdTF}w!^(8S@Vs+0!YEkPa{+Em!Kd3LV}O_LL|)C?I)5^CTlytRsHbnAKV30H`a~(g zO5VvFB8`4Na-|4X;x{hB;zf687iQZKmxZ;5veiJ(sen%3z@t}&BdRUWilO7GG?o-> zFs5`SL8x_P$jO|%ogG}&WMIqF+*<_Nb{(V_*IKLdp(MVRlavTfGN6i6w37>+5UF{I zPfi2+>kyLD4k-b{ik)2;$DRH|$SuRO?~0OK$Q)a-?I(Xv1Aw&6s@ zBr@!Vw2MKsPXr~R{q#>OR*s9TrYgwBGyvOh&?&6SV}|wuhIOTkBjc8{2ik}b*AN)P z|FvqhuNPm(i9qnshdD{e8t|1Por$X|^XWG>5FZ~0-kkUY?i@A@$?<<6_OUUr?XTBC zwH?joLwY@h;i2AmaOKk&{q=juj937Fs%WfbBLc~JIx|~gA@$11&&4rn(BLSmYZEP0 z?Ad<=!)ksYQ`|Q7Nlkp5$P$!D&F0${0A!#O9E;PA;n_#Wqw5XN;n{oo(1$GqPE~2R zZ~TKz+pq-$c|pAs}QtH%NME1B8^9PSWMp`ljo8$O$;aq&|v%9X6G^9&ubWuH`QNGjXP%t(GT21QQ*@LeiUNFbRx16yX--FZ+uA#` zEEjfbWrtjuOPswh?wtp5-FI7XS6@%Ox{)rzpLOF1nXbb#F~Z6ZX5ofOFCno1XiOP9 z5|7V%6Fzs2^%nK!0X)k;+VVL;rmtysT%BYxZR8`g4AT*tqkH?2il zVHKR+Jah@P@(^|(-iy4vGx+NFW%Qn-=83CMX_Tl4I`C51n!DjuEdAqm{J#DR-2B~R zRHp!CJhI-_j^=_cgShRDCa3fixVZVjSu4VaKh44PAD7aRQM5#qvMJTNQ96}Ikf1s? z%hBpUSAR@M0eH26hzI17a15t&~Y&B9+86WZ27`5f=sQ~M1)Jx)HzddtKn|PG|@)+c0re@p44*H zV%^S_1WYg@G%;9HD*|elufODGJaGFIJjR_mhQ%#!#5p=r!(_ryuKGO(XSS(>N&PK+;y~IM=@bC+ zn1tfIeD2Wm!{wI`Lzj+`@Z^rA!w2@^WUf6wyQB-CHf(zvqYUz=9UUDNRkRwUC7(uC zo=AieT6Qmk55xrLWZI>pr#1bOu1>5&1HXx(z zHvNq8Q)VHfn5%m7nvKjVM$z2y7uvZywy*l7MV|YnzJl~(5k&P+Q<{ON?!FEy*6)Rz zr!Tt2_QkNvE`d))p886HN=3M;4ivmIlTOk+a~XyW?t`$9KvdGavt`R}?hfRqtC(1* z;!Kl`iBu}P)Z5+={PbcQekGmks&wJe6ylUTZ0s}0s$iE3kHXL^N1%7t4jfpmkbZ1G zZW=xUyA!hE6BvrV1Bc?$L4A;&TcpMmYpxs&l-{NmD~WPyhl0Lf~SPf>mn|VaR}P+;=Q} zni>y#M+)-7OTuIRDlQaS>V1$8lh_y z$K0Y~4l?%KP0bAwzpmMW+~NvqZC$xguEx)w&Bx3|--)3>nOWE+P5A0`bfRYd&p$SE zC#~*aopUA*->+QFBM3qe7#@NU`!uZExK&va)WR+~4&N?cfxdmC1tm41J8?X&sVqj~ z>1+%eemVNkTph^8N%pD3*b{$>J9Kr8j?gh+xZ2>O5>1lLo$6fi= zLM_sZ;~8qRlwdXEp zkvW%(w6#m;WAU$XG%;R*>qd`2sJ|1woAxBezdBMKO(9IuI1k7e>xlHdhfz$jS(_F` zCuvFq9h$vKCXrbrG~{9ZD8n`hdYq1HlZa*y0!es9K7k_&qkkIA)gua48xFMp8XTz9 zuykl|^5JHYOl?gSl-0Z-B0-Rs2}hnq@)Ok>UouAHaR3K^Gr(&fKZe(~@RjhpWb@)5 z1@&JJoIz0cV2p{m2WyvojCvY zO;_BFZxcSDEt@;^n0)Y{@p$Nx&+zWjC$MbI6I287B^58zrhSd}^odDNEk!+LhYjA@ zDm`PV<)LEE^JxnuxG+;#ITymsUgJT>QfJoOn9P*@Y3CygDX{Hat&W!+TOSw-=? zIC7Y2+OEXy%P7EzqDQLUn|}eoy|=uJE4%4F8H4(b1%CV;bG{spIg}lh$x-@K@;Y_g zg_x9f9OtwDK^~vLt0^cP*8vBvDmHa|4e42HSP{yb&*)50O>GI7X7lh|9zGb1>pG9c zZ_B>KmCuF}Ndlq(i6Y?hy%hZJz6G`P!@_Qw1-XTE@#8U(bgj=jjgQ}6jtAcS0HN-7 zI7Y4ILGJJq%aai#&qLSk!#xw2XF_A1hu--R9sDV@5(f@3JYpmex7>aQCO`EAQjXt+ zaPG?cc?EaJ-f$-(+xaMPLMB1kil)lW{V&CEWkv>+t^EdAJwf z{+W;07SjK!qYrMru0N(eI2m`3zX^8qfBItSN{oMc4%*OXBBVnvv`JWiXJ52K@Ae+p zyYDbEGfttXRNrybgC>VZ#vC9G?`ojoM{h01ly^<^5NeqCLHfF=BRfQOMaB;k(QfYN z@Np(z+6AJmLk-@_vc{Ya?F~{R@60|_biP47i{Ds9(i)5%`!Brn`m=;t%iWKKYDI2j zDCNQ~*PRli3OXH(ILTjms#*RME%WEM(et-nuP<1yC3-uX>ZPx&MQc`z{VTr5EsvP> z12cxzv8l(e?>~vTha$1-n-?ii*5jA=p1`YdQB9ub9qx!-U(HZo*l1b{qc(Ci+L`{U z-~NDGAD^e*<(=Awx>$}?rXctw9omly9*H19(c$zTxZ{=yn780%TsL6~_B?n$?s^~@ zw~iQy(}%WV`PLLHT6n)Q&6H5cKb=RP1f%bfVXf`lP!_)#)1S{_{|?9R-za?M&=h=j}nIB+-G&`Sq#_vcKM zXWU7xb|%(u@rhKgGoJA zG)Z*PIIqB_uB$GjDa|zI@>#mnk=?)H)1MAu%Ht0s)RPCovTdZV$(Uko?~aiVKZnux z-;Uv3f^kLfNbKM618$%831)w~Mx6&(aGEnpdSq9Wwv@cf>vEJQ{|^79eiiXo&?M6fc1E3u-*(+T!;K^YvC zoX$Fa>|Asd%?cIy#nB*Xj zp9M)wKE;ug=f$+|jFRMi==RtM+;+#O`0T#%wEvPpd2Y(CL%Weeb*9D@b40r?=o`~j z@8tPu*vWIUY+Qmduv>R(g1G8VJC6N47s%5u0{uF7Qj&dk#tH1=R`Xn%6zv^7(3Ljk zt~9e4gOSk4ph;;#I$<7SS=648D|Eh)hN*{>s}H($jNuC1l#@PJdk<`;vnGWDCvWua z5{t6j(?~6;M!#M|DQgwr&;7f3oI@M*kL^z_mfpbTIQEb3MBlAy>^ry(X=QbY?cA5! zo!yX=c?x@v$I*e2PPtt=qlR15H|*Mo-G>nx6@w6eo=wAqdI#69 z1vESC-o2kI<1%>gyqn&!-B6fv3=R>#GKA18!@1y2nK6 zCJ!Pg=eH=t*w*o!*p4NhMpc~+&pHc5Y-}t%sE#*aDZ)x6q`mg-;dxFesH1tZQ@7p- zp@0{6ED_PY2Ewr_3;U0rLDxP~7fvV)4Rz_)T^$sxUYg3Ttth}wt{OukVi3x+u?n+O zuz&wSWagFdEF%weFJ4nCaAjdPX_V3?^Gbx!ogUtz{9XcYmTW58ggmC|vb6g>@ z0qDV_Ta2=dtHu-5k5FscB!4FJ_dQ#F4)U$=Mw51CDF*yHo&&XGPh11N8`@W;F@7|h zJiLz@LF_P>tZ5aQPchjwm-m3J6v z7OXO;v0>+awB_cYb^%@ubUdAw&jT-G(S_%WmE>h$?_SbBuaLaqjc9JNiE1Y+WcKxh zLmaCd(T{yn`aVC8fOnsH2&K^@ae1czBqg1J5B)iN_Y%IgZ(!%NlSi>HE}oyss#oW` zb??!gnro^n7?KkXBE8HB{Ry+Cj0?40dytZm3tOJQ)|<}scD0-<*(t2ajOt_=6l41dZH}zC}IP;;LWY^xO!kG9N6$Z zuDkq3B-^r&)uv%Ok2~)9CZ`<%e%!+>{v&HD0jvM@+nJG*7It zLdKD82#gtoUw53uRUNru{W7+P-*6T*g=@PYkQ&2u|*qU%9(q5yZI~$2=_w$hejfOOe zZ0)-F&&9Z8*1vG)$R}~%H4_opM#HindCtmLOX!pHGiG1Ua|pQ77Qd<1LThETM&#Dg zDR`|XZeWJi$~4}!meq*+t82@=(l|N;8hKmb+%l7qwDoH%>07`w%XzLiBU$q_=2)BG zHy^NCj=yLY7=K0L;o7crWt~n;+Y%Oa4mO*?yq#LvrCs1^}T94JC zoj*N{(wo)w+!ZkjIj_EIl+e8XjqlI@?!xNTv`**BYmPzFTz?1arVyHvvT2-@+ZtYH z>sPAvX*Oz+`f(pyoTjs6?H~=Iuc( z4r^1%6U6Q5yDU3->quV%-e2KkUcS+eWjP7B_1ejJYxOVa;L#}93M?ay+!xW`wulE+ zySjVPnnjls1|hu&rBVmMSu|8~n5hIA51Nb#e3mo4^mqIoEO#!wb&*cBa&e zxg@I!h6d}W4p z7ev>(>hG=On0Psk$K+-Sh_2L)9T9fyt1DQJ8IZjxMTbP%=-QXeD>}OG(SnqBj`8wDqMLo8&D}PUU%fd zM~2b8{AQIUAM<0!N*@JT@(~UFQ(;^Vp7K-;ged4A#W8V1*MMikXujt)U3E#-HdWog zn6H$V=y=T(7dg7>QIIUDLbiGh|RW>CX zqoa9p+4T-4mPPYZ@-wHVoz73C@x*{7RApj}rSeT4R_ZxTL*8yal*UsA=Bvs|Rt%o6 zw#uRFj`{L7;?ZaP9V1R0q6DR|#+;`-vaMJ|?!2XJstlBk8{4|}QinAsm1XAoBVzWu z?;GXIxqGCsXw*eYChI`sB6&4}lZ8$LS_zBFpPvnG%SR|ny{s8+qSf`nij^vh;;DFX zTjM%Y@@v_ckMuJJvexL{sw15T$Ll()hZ8famtLpvyw=I4dB`-BhinxxUq$cPHdtoa zo+(P<$#__8&|=SW^5={iecoG`zGda&R9$0Wo!ioG8{4++w6T-Mwi`9Jxf|QIZQD*7 z+ctOXeCav&-0z;>d%bIB&0d;kJu_oR^T?haGl5*vEixjeSMzF1UAh{+#wNBrWQmu+ zx$%@_8xvqRHyE9n+`9}u*Lo~US$`_~n4t!Ye2AYCsJ*L^z)mT~#rKS+Z?sUvxBT8n zhj+1mWR+O*9)(7|5>=x4%55Iz;6C;07m=vox;b>;vdS3_&Gpn-_Q|Cs-~`XLtY`(b zVAmRB`t#Zm1>RQ`t5og|iNO<)_)2vE&-Fs+Mq{~VNOt0eA8($Tt!s1HGSmDON4^9M zTx4Emh`int*7i=KLubjimZO_+Z6l5C6{eb6E{(vsy|UbgAbgGUn&{(%`D_uVqY`3F zh^yf{i573Z*JE6|LPDdt87iYWmON8F*yh_Glmz-(y$mpn0 zr`PMTG>o11WAB*9USK+)+!cwb~rLnD1vP1tTOiVNTYt!-})X{jo_8oJ-!Jkl%c-Cu)NY5fD@D|_R! zND3@iYdU zXqx3N8c}@HT54)Rzkf?CDg&EY1_&Jz@7YK~6 z=k<)Dl*Oy*={*p!VSna{ugXQ6&tv(^{Qn43098XU6&)z?Y)cDHUuRlU zc!N9o=+JZ&jYeK$#$Ycvp3?IYJsr}KNrxhBFq(-%VDeALpG#8B$xAYLqYHx4vRJQN3 z;IfU^^+G>0>VF3Iw{FYupBoe$PmAD7e)0quFQ_$dQwel5%n#vv_Kaz^A=R9?fUu3Ck{<}8#D%Hw}pz- zT6YLwy7<0TRwsvJGzSI*;hm7N)^^1Al62N}*aG1|4R|K2_?v(`mVe{JOr(!t$p;E|t3e zQqhjhgl?|zpcvukaOUSNx8J_6)|GhFM*<2h)L+Vj|MX&fx%#cKxi4oCwtxL zC?P*N&zuncYFS^d;Q2cUp3X8)t}Iqg1pqk+jXGLldxiQGsQ@mU9KP|_0AG+0i#85M zYu(x28s>_C4TzKKz7jEcRRYx@y-1SP1ZSO-w2p0SKYR3GOL1BC)PZj zd|WJ$QMsG$EiW%Wtzbk!lkjrIs$Q4k;O4LZ3U}eiuFDZIm#kZ?wr11xd6z&cz+?d` zz4aqib#z#GC?LSPkcj>4W#$MZ@>uw>C4}PbMj5Dkz_0>CJz^%Ow$Fc$FK~|V^H?;m ztP0xb>-r)8#w=|kh<5Jbb4Z2}2lxy2amAI?SR1m)dEHFRP1f1{}FGF0ss&CP` z0CJ%LzZQwl$Evo0B_V7zj;Y-0T2Xpnl1DwR+9Qg7K{Gvn!-;-xj8@F5EBa)F=2V9e z$**R^g&%h8t*R0gIQ{Vm`dyefPy00zq47I8&z!QRdPo{Fmz%@MYEE@=LK%k)ay;Mk zcm&fj+Yg3!V^Qcd`wixoq|w#P2U3L^Ft7E(4*On4cL zY{0uvCw1(!rW#+-3{r$n5Q&LEAj=*s7UBHm!^k|%`uq_2*9v~CI*U0oDaL}taW`b1 zPKEKUbC*$u;$)S%!mvhmv2PishF&+OX=m4beYs4pwv^>+({aWHo8_A4J%tzmAM8Tr zThk>aFLXf67z@A|JVA6YpKLc*)q!|>X10edLnC&(8P{dMM%be%4>DENDCe0ha5K)- z^|(9&=X#29*8kh~wb%|8&5S#!%hfdVvB_346PSd$_+p3$jui(9RAHJEqV?El!O<$I zg=B?*s|J+Y?XvHxS$y*hi>LkGd~#~(AKS0~v3)6E-hYp`xY`Eqy;WCSr<~O0z!FZh zvskT06b;_v{k!#64y*_zh|FC7YvGV%3Nrj`GR z=cQY)*ie37f*v0RO3K&~ir4dY1M&jZA7ubeq>(7dzJUM{<1RFz9asOs(`Ad1?p{vbPJWSSpU-HYRGb}Ng?K*2u}yYs6Ir_K(st$A1D79AiUSl0TU zsLTbAu1nz)uIFeA-koT|1HaRR&#`Hd6V6`b!1KXy)~P zFCh6z%{|_=GABX6*qo}@a;pTR(9U#`5V+#kvXx=GBSDu-zTYdL;RF3!a#*oL$Ph9U zwx^gFPC5ybDJssCdrQhmC5WFwcIdemJ_hPbi)gU4<0?WSu}xdu-0 zcv&@r37kwXae35;e{unY3W?024#5<~+h9F!Gue;-6sKI25{}s0@=A{u9T|$geFfEv=A9TL9mz(sKi*T%lF_ZoS1F`oNB)g2HE;pH18l;pPHnpIR4t%5 zaXliDPd6-QThQZui>1kR8MSORUINGp9-C8?PESI^o55a{$wc8-b~&&eoJwI8qhZhc zGQ#aDj*@9Ni5`M>Fj->S-6B|W0c!`cDHxlk#Hc&1e_g%VpD6zWp?4BWDEjj8SuAu^ zpwrx{CwYdPs0>V7p;kvt;mhw?6dPsvBkgH?o4IpuACcwg`zeafo( z(_pOi2W11(i5b1w$hv*7XZ{b78~)Ze!9j<_a%-IkE&0y|Q|0f%-7FLOzkkW)S!qFa z;!_wb4wJ|wAV*riU6T@1=z3e}DL?Eb7jB+TBD~UfpaRHxq0eJDO-`$e)-s$U0mXPlL~&Zwxoq&wVsSAOf2QQre};ASgB$`KX^ z-FV0QeRS{?DLaWV4L)X{*H>qr`x$O6@{kcnwzxm;=4EpLo*crhCuIRD~@z6lCsmWj*^Ri zS78gHJN*8S%OI4gR&zg8{&^HCUNX~Q_SOYCivh?qCd{G|(*ltJYGKo#@J@<48(QzO zuqOhF$#7|FDt>vM#fR(8jGTc_Kjs1>w`+_$y7mAZ$_g0{`>ekKw?DPG&EYcI&$KKw zUOwAA2{ql0bmripZTp;@cMIwA`ZyoF`wWv|d|rb~r^2XQF@?{j{XY zx&huF)mYYA)g9EyKSQ1h4AQH`Q!fQg@1wV~v+K*?aqp`!8tr>~eHQsh!Iw3&v{%{I zrZu~G*0Y7$qmw|LaRO#b5r0Jf#N)nBw*7u+Gu!&{2<3IJSLO27R@)DIwehQin4>){ zOu=ZooC$G<>J&Ir7~E*pBEv2CW_q*I#F1=RA9^nXkH|LjdUn$q=!I~bM6Q#`D6%U1 zCTb86+IsY~m!?e2=2hC{`*MHR8L9v!-(()%lz7gOVdQocGuq$l&>rBmF|Ju`lg0dP zUyD_CfZiJLnTIpAFQpIK^`c5S7^X_S4e06JrhB!A?+tX%2W)A!20I0+RTqm{=%$Li z!ELwq`xBG!s$MOoi@GYS26z4-S-U`X{pygaEcF(yKXxuLoI9U=rQLq`$-fdUvdu}1 zbO0k5AhSx{Q@Je4z#&*RV>>|>T6tg;(vThsOJxNsc5R{4&=dVIps_Xk5c;(|P&`*j2&^th*1L85!&;~jp}YtxMrxZsXsQ~@$jf$g$D4B2Y__2 z{#xd8RS>+rExLhLVkpQyTH9Ag^xAK3J%QfKHKSJNP-vK5?OdBAWq=a?qJNdAxEKFw zzKt;a;99x14Zm}V(V;`sYwGm1l~bphBm!o#We1A8YG9k>j%d)6H;jIq9#Or4jJhOt)K=@Tat(z z#kY zoCa3uHa9a-Tb?idzx?>n%A~$lgi+w(#l^6@ikpuuOS#I3z>rUA? ziJ2AIb_zRYW??t82FeLpG=@lHvhv!+CcVbrG=K%S;-uGup20jj<+v&V?(ZHyfA}mW zC()a#bX@Be7qtU#4g`6wrP(;KcI<)%=~v0my@b9p<_B3|JYUV`UX40G_xG(Rh!~mX zV@g1eq}tp2l`j*O6pKD?2`RKi5r&MG_U|ncdo5a^JP!M#HY9tkh**?pla|Y%U}g}G z%+(Uv8VW4beECW&ucWrUcVT2?QY$u6j>eTx2rWzonTmG5^PD#;y?Uk+AgmnE?r->L zr(H}bYwT~9N@-XyPK_k=cI$qcqjt4IRAULx^n8b>zx@g!tS4SxRN@rU_s5e&)!S39(dhS|T-%c} zOLmGSybeAl_J=Ya*OIT*iS8;G@0FAw9>5ukgaJipR=QuiBx$czH^z^|)ZXxK*V-?u`L=}B{XZ;p^K7kAr zUjdbF2(|_UCvH`0ZD@a>0#<-`A89Q&L7`*VxvnjH&Ab9#T==p zn0BQ!QI!t*$Z0Vzb}HZ9`Q{MM--+n$66Ty70~#Exn1!aubhz0uG1m$|F)=4l+X);T zp75HsdFX@cE~zRC);}9P+!O#WsC+5V#S;sW~Qq;PGfBfL#) zUzjd6o;}6;psxZy&cgz~LqV|_E8_IBLr>83@?s18?WBgL8G;98)bu(G$?ZuYeL;q5 zFc`qh?V>6QYCpzUkbqe4gi+B%Dx9J~1>+EwV;NjmGpZt$3UjD?FzgLk7gRce*L1vn z_XFAuVMkQ_M>Oj*xuIRb% zG(H!+@gyRDSub`vHG#PWb)8aC8VPX}7uCAl7?tz!ir$t9hX5VCc(#59$iS z)KEM*@SQGWPIFX-=T)C3fa$;w@m&(ybgM+H?Z~AP;nSTR;JDnxNiVj>4g^TScEc#7-aIe+*YBpZZ=1eg)lUYOownSMJX#Z*JI z&e=kc&VD)%cI*5eH%E+RZ{)~{QW63-oi-lNyy2v(4t?*hEYRM(tI@8#iSv)N9u#Pq zU;85ygsR+)$N9@v7@=V{U7 zpM%uME+{6Br`TnE#G$&6sNEc*`4-9Gt?pDAN&#HfqE9PKXW}u!wZ|Nxe|n#{4{R=} z6OdTXNVKtD8^uk>q;r`JTrfobE?5J8=|)!`8%wP0{jU{ncQZeB3`u^+ZA-&$LA`zp^7RmE*lKxIkK&+j-y#RbY z&moHw;X->6?5UJ!^z@=KhW(J5h5`TaT25vSu-`{R>YdRCUw)4iZg@x3 zyllR(^>Ph^smVqVV%d9BP)`Qz4v#c{bOVNjB47sybB!oz-hU2AoEKX1U~+Q%<~DPE zH5{oIgOw=BWv$^{Z&bMq+vTcU^Ha1${znypS#X3!RY^HBAE0926uT&drz;&nnIaSc-d-NDSSw?j8`mMVS-+X08dDN>Ud=o42DaN1V|o2K?ZU}#F?jjvZnXFO0&&t@!Z2^udkh!I8p9n!o5WFa|z6v z?<_eb_G6W80$!%q8iagy$pOz!59PM5PgohYLIUW(Dz5hw(~BEanui<3lV(_1nZ`pS ziJRNAaxrL&@XRNflc)wy^T9zDoUKH45WZ>bWo_gDc_yBH-S|o?8rqQ244Rk^R(2q6!GI%kZ6k zYz`Kvdii43F4I6M>1_5#Yt=17nkZO_j~t#96)q;|Khy6CuV^wvAT%IUBn?^-!t>3v zh_*})-h3i;`u*8>{Q`Afp(EEEIm+n@JWN3Z?he6)wloY$pW=Nnu^IUv|Kp&rRb)5lTDKR!)^&BPrDwCKNy3d;)ExEb9 z7utFwJtglixma@EiGCn^IN_tuWf5o-ztv}!)RH&}zk`G<=#SY=0%N(pIwQO$P9=tj zQgm&;P9Q>Wmmu9UqleVeq1XB0;?8|(hFH-;h?XqmV>>Npsv65tBUsnbC64XMsM9ix zfWedME#z9C_2|`RbD|^V)*h7tiO52U3SxKmKsN5LJ_$Eu|MVk9s| z@YmT9&QE@earVOKj~dy$fno4k^2JX!mp3@>BU=xKM^oo+M=~lQv;J`ZF>De6l{k@# z?)FSLByDHzfIs1JEeY2n33CsIcir|QX-ycN_7q6>joq+}d!y?g3VSj9ValVf8fU(9=Y3#CTL~{eU6lavCab)>YA9qh&A~t=t+y0I34_m=7EKGF(Vy|@#@}pg;z#DbIkey-f+7P7e`S`{x#4vFbPJCZdt?tgCoDog@_`#p;9(W_TX#Is|zsa zB}D?eP+g_JsEs{V0f8U#XdG@9Et4r z5}F(fW3T8inE=dd{0z8;J*CT8yqP7K;PvnEmGP9*DxN}!KNxZYW1SAyE}dy#^ho@y zvy=?YM(L!Jca1Z1CDf;qFsvi@+R|C^?#v@-6l7|VwuX&`r**AY9gRqP4%I(izPPMx zjK3@N=0Us;yx$FWa?WNsC$ir}O7%?K2%o#=C$j23Ihh2SzQYahryQRkorhPMD9jIl zZcmN&Oh#kF5o~m+F_WK~a3(eHeB=$vkyYY8R~KM;-I%IIK|Qu{+gZ(+b+_#$e)_!A z@?$BjqG>w}H4KL!kcFP1KQZ)K&w+t&arn362s>wq&(ajm>XDF(Mk2C;B&LklxAY7* zFIf*p7RVh43ccANb}h$BJjsSTAt_PbvL4B2xaDwJJU5A!%au#4)IAyG360wDQHXjzm5;o5&ap z4>O$j2FeABFVCM2-VycEd}>@>A!s!h-O?oi^IF!6eFXAf9C^I>Owq|n&%j}OLKi&H z^|)ea`?h8PKJkb}XqZdw<$o)p>J}aDf|;ot$OBU3s47u>6uJ(ZFBNW@JRfTD7BX zk#_dhT)7IK$$nSht(4$uaH_tYjr~68s>7lC2INrH=mdsYS7(A>{^ZgTnBW4jx3}N3 z>fReo3>6B5hkDAXqokpUZ3SD>Rm?@NTZl6bxv%6ET}5$92nrpId&E`i6h5DHe_pDb zwF=fqO>#dlsvGi*5fj@4i;}6{_f72UggW3lynkqZM}_&>PHv(e!4d&9jJBcv@aeLI;yD4C6i0;3h}Vx2f6uL;8npdPm} z$K30;r#p)0cftLRHuj5&4Q-rPR#akKzLnan87+Pu`ZjmB#z;IQ$w9P4N?Tpevhne& z4yi+Od2(I&rQNg@zUE`}Oe1*W_Zn7#Ki)J`*e{(!bIF5ncAWkKp|+ScvWzzf2Hp+Y z?diFZyFpQF^hmD+I?1c!*H%ia(uao=2iy00uHjDUJ{D~_b3UAY*;LcSroC^kQ4)G5 z{X#5?eb1HWWbYclmxB<5gYxGmU#PYnxAvwxZ_n*fS%o~nfTUUM^iw8kWanBODet>l zKhIqRHqAW!?z5x*K7_jdM1aMWHL`l0EQL7&gOzpKhQj)1Uc1Pm>Xu8(Py}SlvZ5R& zy{%KyD{EBikGjjlt?IOEI^>eMPDwL8o~{Ro4B8UQBaaj6J5u#7XXj9H3E#{tRa!?! zr?G^BDqVnV;Smh$jtOl5i~W=B$H8N#v8|Nkn4L6?@q%zkS@l+UM_%TUok;kF$BDSd z6F04I&IP{>R0E_7Y&Gy&BKS}{H3o9ub^A^#I|Wng)H->D`tnP_UXNDhthza9Oi|Rq z7|st|-oV@+j=Z*EJkT~7v$eu!-t6TQ4nt09oaYdJg%3|C2^=q;a9 z(A2|MH#SMvbzy%Q4(V$XC#1rtJhQu8W}va2H`I1OM?2HFj5@HP#3Y_KiH)^fY-`5s zt{V?N7SQl`I1VQ4oU0m_3iqwEK@MG~eK-rdE+MOBOHHU(pfjcVlM$Y_CEMX<<1ERU zuv|&EmXTnh6XdtR)~eo(9KV9k>xb1|^lN zXn{L%Y8_n2{&X&Ip6-#Bu~s)C(*~on;ycQVI9#Y~udAACw-i&^kNoo<%T3&+4R#L| z?^L#?;gfB^MHI8|$*d?*MbR5Pj6$;ec|=@uC_-40B;Ypxk>%K)t$ei5F?H^cKXaMW zRglz8G?G3= z#MeDAwPq)pCj^{OUI!UPM^oPUGM#XqVl2qRNif9%sQ>_7x_i7ooW_Y%?kI8BFbr)q?x`fP8rTiV(R!)Tr&6eqG#S$*kjmi3lE?Es2`AwOcbzE+CRlGpz-ZHsaIDl0 z?ptIBbvX8hLLtvZNH_1VAl&)XK%V#G)Q>6%_AZ~P5nWTIQdn++X!g!cEai6`X-TDr z6uT#};Lw+n%P9HVw@Y@}0TPb+YjxGK(Yk?pvF7dHrAN=+hWUbCULBgv+ZQl3+xfrE z%7z{!_-NEMrpy|m;sQ02R1_BvG<6k6;;lS76S!uoYnRJfOuKbu2o}d7J}WI4 z8MQs=0u>_pXTlshK5ECVi+*Y>zA5v=+AA?#l@1fwbou`4*&ka29EqR78a@SM7Y*$# zPwg@^tzF|**1Ik{a09v2bc~{tk%g{s$15n&e(^{o*0~038V0vgZ+j1NHPhA^mA}nl zW1toJY%Z`eQBUXPYEaQV#o7_g@-iFjMDl=ir{z&c?7b!PHXk-7ad#8Ljswk9Ivlt_ z;bB@eXAAc@=WoB{a!SHMsjEvJN??~Ywyd4nxdJ4*6RZyifwoBNnbo1-C0(^lnhM1*ciVHEmQK z^Hgs(*pF^@-d|1#hm2!QL^gqQgeYc)MLl~$1NYNF?jq4PwBv$>`}sM=?^t<{W-S5t zxa(?31%)(;f#Qo2y?i^zh;ozlr=LqDEj|7mbOdmpA<7fm-#d8NlTZ)!>j&mE?%sUmAATk zPjMZ0!?r8R0-qLObWj6^j29`wYD?^Dqpps#D;o%e{S>OEPIvhHtHb4}Ux0PAM{Je@ zpJb`J+xzkIi|rghV~29BYAQoUpicVChZ{-ozf4&dFHZAF7%O7ibef+>Dpy;Iz#X9^$6k zE--Zr%q@NHg7AB;y2KJ?f#|!Q!(s3HxPL%^#10Zpv_|XxaZw!2L{5!98BGvPu-5?A z2Rro7Gyz8bIy%RxG*E$kqm&uv#m((u4x>wdvXGYNhNG~|9<9@8o))}}N2A;MtNn*h z@F2PwnJ0|5QPB$n%hwOL~|aI)4p z=}m<|JIZEJa9>NdFQ0cSBsd zFXcM+WRaSixviS{1$gBT!+^y zyg!eyaA5y!fwoDxkQ4|CUQUM`j@kwpJbmz@M(%4@We*L*s4`;*h){@Cnqt=YdJ znZ)mnoT77oqnQ&k`hWgm*F_+IDXl7P!xG)YvvS7p(tn2dmwE_))N?B&)D8a^L-f*E zG)p>;27Kxi{iT+TOwsFqOoQpIQr@f&{zIT^zz{`EsDr7CRh z5}gTl?7!sJYEIVuV}`$Z#+D&}RCy0w^D$eNk59&!oB=e>93;2}G?RpX)D(pV^^G)z z{jZV_8$^@TdlDDuu+Z>6qkA!mzLsR1G~i{ZtR-@`>_!gUG;j(`H6yNdN%&Bi4VxEK zi4_bJj5}=qFh#pEk-Sx?RACpbt2N~iW_ykVpR(d*kP(Q45KG$b^=|166? zuLWWJrQ^-|o3nN4HoBTH1=v~M+hxpBogNr&w`<|CGBVwV^6pa{-00Sxu^`ihdCx{N z&@CCUJ|!A0`QB?sh8$&Lk)ffisIT^eD0qR*7s>u22QnXr;OAQ&+ENN#S+C!tv22Am zVF&IJ3r9w2Xai5dAN+@lj%c6X%oMSL=%qyMuyIo%0XtA2BiK3f-pL2#+rgDrWpyD* z*WB1|8sjaiv`c837V0tHkDaI`Cg@%N&li3XM>0X#3#m2`={-^k;Ww{}OF&2jx!`vD zWc~ZPC#L>2`lI6S5k%nTtFe&H^B$F2RfE#c?hsHrFpm%P5ZgC0QX@7$9^3Pld?xa( zTE9C4A+?2FYF)GCSE2|-vVBqkQKblR?n9)4!twR(?qFL|qp={~gdTN!Og9})^eFSx zS9@nDtL9e3v*qVWyeapg(}IH>WOCDBn@!AWn~L6FMOQpXv{i<^OZAinwfO3G%U3U**mu+Tz- zKdc)CN&89XAF=j=B=bDlJ%?-11GY~k{G8yvFNpD-M$mlcFC@G@-IMG!X2^&7qBh$pKlpZrPzyf{MYxIC9)#JEMyY<4cQ6@2Jp*Uj9&OTxCg3%Fn9{ zu@`Z1d-iByOk&DULJtQGphMfU7NXE`MP+5E92^|POic2$x*b}E#>Sz?$7b>x8q^=Vvaqytcu{$IJYRwJ zp^2L~>r1mKWkmX@6-Hy&8Zje>PT7(Qu|+)mR+XA^;zH1NjfQyRr7uq&JtAJiv^CD_ zw`uFv#kNL;0j|P{+q6pSM3N=JgmD(k~KC%D2VjRwOZ4ci)*xMCw4=Hd8zjUl(DtLFyF_ zXze5m@ok1aiOl$k%NDE*L}TuRgHbs2YJYGMsBqD9<9=+0ZwRWbT%jlm$*V27u6p{3 z`~Q1>S9QRr6Q&pQa`X6N@rw_jWpUVT+oyNyLHR7Ea0L5pHJDOH#`^Jjr(=m{%3Ya^ zJVIRfIZM0gpxg7|Z4ehVMu4J>XGO#WSQn?WS(<4;xfVPmiQ_k3G{9CGLN*#6%3?G4 z9>2As3=-XBL|PIOxC2aWV=^^i4te#x9FZ1yuy9Py8&A|}MZ+V}mzx0m=?L4^Pm z42hxVWV{-J=_P>C5F@hhxV+CmTDI-o@Z0($Il`-KM9*FRS``2zN`V>LIKncL!FJ|5lZm`+h!ew*KV)*S@J@8Unfbi~TMAzNJ)M8x|i+}CcY8mjm>$=TN z#a8{nt8>x)Og3B$OY*l`7P5E1>I}v^?v_7HriAF~_?I+00rYbhD(r=f4Xpby++V3J z&~2OyAGzLV2?TiajH72b*vhOqw5h3n|H1VCbE5!2)=4z$v)@<=bUZznkmZ?XjhK$m zkmMpSEh%4VXz1t?&45_HGigW3vBG{N5AVid5kl;2!^KEX6;yPyRm0bm!E))=EBva% zMAWod2AQl^c*w}@p-mWKKDXI%eSi$x+{{9sG#kAQ_N8}uinHK+x3aIhOhYOOJ%Vf^ zE-P#ZVLDF5>45*nA7t1R4e`!w^*RCXot;OC8p^IbMnBYJxx4AtgLEe~G%J^A&ckL* zY0EIT3Ai*T1=fH|a@>k|=P!bCe`;>SUS^5+>XygHT5^{&$6K8O}0q*(?TFR)> z?}SBoGzN1Ir{2(7FJhD)=D1=~lp@|^{#5VKJ*$I~(ceQiFnDys5B8n9e_6dTkH(Il z2Vfbz%BcuR6lp^47is-cdWq=jT=gHG@nt;VBO4;^be1E0yC}tUcrAb>`Cj;A>Yp@J#SI zJk&m%r}M7h0s`&od&A-}8Z@d)v(Es<5Hy=B)p#;oB+$;hjGsoog?DA7zuF!_(Mz>c z;5p^o7T$_yWlla}F+t{i6{{-?O5;~)13~#-SE?96$=VjH0ivvM-uEk84^@BgJP*3B zlCrn9(xC^CVI7#+p!#EiUd7IX@!0Rqfy^rJ*0evbE{^5qBXwZk=cU$7**9C%?}egG z=_;rk{Drr7=vB&9;QOIfkol0so}Y9M*-G%LiUMZ2avG6`*lVBz(vE!}Yb6;g-toh@ z9zW?no%XJ5d_>9Ld{V+#sg9n84XS$(ukvKvCDqW}FRIi+N_OZ|XdwXt0M#HEx~k4$ zLXq9kNkGbBv6IC&TXj;-K$qBl1)!emt-c4E;Jpe~gwjFEyw-m&pf+uUlgEyOWop$s zG_r8t_Udj8S9M$UZd1fS!CiW-oU_dd^4l&^N$C2sKPnxbuA~L(DKb~-U5JGd@Q2P& z!SEiKZ4Svaopk0Wv5b93$HGt_p=6t{VYP38p4N;54#8}-dsH1|X@8$t=b_T@mp0X} zo5eY64cu(`-0|RQ`>o@l$3M~vR>-8TYYqiw>Ryi^&COo4&p{qhTx3`Qozu@|Kt?Ib zXCUIM5{CL{LlksA8nrcX@#SL4fdLa@56oH7XRQ;)@=49(;E&6!X zch%+pt*J#gX*L?aPB&zNYuZSN&{3A^aDfvNjKZn6+5{<;W!`ztn%Reh%5aNtb$5s( z1xR<<_4j3u(k4M;Q>lWU9=UuRt;;yx{^1wvL+qF+;|5tsy6a&w7TcJ=1INb&N~25J zmGD|8Ct1N`w>@}a7d(Q{?k3-1$dhvS!<`$*k96mJFTi?ccQVHUnR`fDUYJqd$HxE( zveLX*LT+DO6LN?ZHjMf$NQS--?!A7idvs;A4cE?0F{{cCwdvOTu z>RnOUv%xBN_|Fc4Z_>`7o8t%9(c0TF>_1QGyLvZf37LbOI25el($n_yl1PB>55=BA z%`9*-3MpC*604FYed8?*$iQdtZHpAnbf7{Dw|&?`N3$5oZ#t)vk~$kRnRK?e(N&y( z{H@K%h(GRvMfnxkOo*1Vhma-_n-=Nn0O=es6C+wu9>7Ef38UpTk)bHkn4RpZ+ zNu7pS8_#6ydpAyy_qKXdH4-_df#L4C`HqEozhn^BDyD7B@RvgG7k)VB)yPP*^I^|S ztoX)4^z8tRd!n1?0uVY%2Ou`?dp9YSZ-_{QsPxdmBZB#rAf+!JXQCmQzHljeZwYal zG|WeX$6-Jn5}=1IsN8i0Q3Xb|lzu6^`;_5T?_=V*l~tSHBnR-!BGGC6hLd=pLXxsi zXY8pWy+x0Ty3j+B$20#viC37B>7AZB%4C_wfbZc~AX@0qXNlny;|dO1?V*f0?FxZz zjUR-Af8l$-z7(F3?zGi85uiWXn6Fk>j()9jTi}1ap7gDq;vBmQV=bU>=V%24croab z-GPFYcWF|{sN(Ex=xGN3ZoM!-n6&FKKWH|3Jd+syi#ub4T zRCzTuNY0qg?e6#A4GYCItaCf)Fp+x>2!WIm)ZkQFqBTEXH7c4-zj5M>1f;cTG!0#$ zE|DST4hH0!Hz|a{pV0|2V}%t=s;lMYiZ{BO<6963V6r8#lG#O!U|XmqM)nzU2@1Y4 zz4S4LW!0vvMvTvD)HZy=b93w(^0JWsayN+nE6gy7kqOxhEjG0!gTfO4rBXo^kekjI zaC_6!1cmjWxA!THEqUH=#~SYcZ6#`A~So< zv*Kt*3h*M$L!(m8x-fh4auY$6y+32J2urt{ak^T5e%H|as!~pqXF4yJ#x87d(Bsro zUo{V5EEO!QF2gZzN$VXt;`XGjO~~djKRUVkCnEPRCwO!5d)Loe@y{!b)`qJV-iIIV z_tVXh?~s^6McJ*&+49tvEAluRm7UYJ-b$9C@zq% zoNL=x_-xLMGsN`E7tf&)QaS09W;N@ZYz{U+%_$=SZ^*C2eEYN&Bm$lHe)O+g00hadV0ay&ZhK$k%drxc*6BG-LHD(prBuxUv@D8>r{u5HPxm0tSa%t&jW8mH8fWP zInqi0g&E!sAnW4o@}>C85i`*+U(G|{qKAM<@qrKotCHvp5LD=H)K$ewhK@OoqHWJI z3~^3T+ub3scy;vg@SLTn9ybD6^_wXibJJg(F=*fuhKEIf4xgx~)LHXIRWax&3k~WF z-3pAC4u2~QFKjGhs!9%G*mQjEyBFKxo2f=0fYymm^FnF5=w_vTqL#ced{lE9_XVVN zvaQ+kdR)lJCRZtZq-Un~^oKNA$kTG}N9TtwWR*z)GwKg^9jS?O(D+FYvm-)NL5iT# zmDeF@I-KOtWd0ezY!{6@2(5`%K})dn-6qCvM53}M8BIu+bKhGG!5(+eG{;2Z&L0C@ zo(Iw9e~<`vp+DHrfFByIWxH7r5<|f{A5748c+9Gs&*2qk>%Z5C4`|llFEgk6czpfC zqWjy${#f%}nRtI`E&L&LVm(gk@qfPg0jlxAPsB=E^9l3$!}$KkHNgZ${SWq7fc38- z6h;0G{QdA`9Q!x?siIzi+3|tc6=8I`dmTQADFe-KI?*qNTgmF`qF~#kI^{VcQ4f;! zU|#8BD*f9c)iM&UI0p__pc@;u?Zdk5mA1ub4`Ft1q^~ym>+9$>BsLQKpLnjVM(uDV z+ujz=E&%Bp)qeHS`DaKb^>+Pm3hya2I=LeuqWb#>;yXw8g!b+Lx^-!>jD$&K+jj5# z3@x~A?rW3qPLZp6*4z!T{e%#p=42z9m1X}&3a1_Gv09zyg5O@&v>GV@$)goy*@-r+ z!2nND&HdZf%cpQ1@--tni)P~(+Zk#zZ*+VVavx%x}* zpNVTLDto7;Y0a|FF`;DGDaR)gld!Yp%%SZKjf@D;Ilm1imr~LR zS_#5I?{-6d{my_a^HH|w0{xL0gdhAxteHz{V`ZVRO?zschG%AGh zuoSzbwLhY3*C@p0D8+5#PjfJ5xsq$gny(PuqdWE&s5qUMzSb|3=B%z#9!s`*c{f%T zlFyS~m0QWI@~X>8mGf|Vren8%>o4fueH`+t)VvjQGT3{RbM)PRj&d+zJCj%I^BW_cfHohA!$9Bd-BkHWHjM_ zhi6-&vK&rZ$4JICT0eC(zv}ZSkEbj;Uy82hJZU&W({XtH!Mv_r%Q%kbI;zLb^TvAa zR&11kRr!0-t$TO;vSpvV=dUj`mfo|z>*rtBChBsjlSzkp%CG%WMrYNLpL@-KuKc{S z+qq^gdi3auz4_KN*$_M?It*_Pv|NKY&6i`{vNfQQIa8lD_ql7){gP*4r+~`BbiDKW zYsj=I#Z*bBGf`K~Phv_uNdhZF~3Vdp+=Drn=9n!$W0N57P!|EMd&$I7FaT(}LV+j^^8f@@1mZS-+#_M#m2^ zoS1d?r5L?nt%RH2mE`kR>vXAeBYf&a=11Sl+aLF?_!%Oqzp5T@ANTnZ{AQw^%#&_i zf~;#L?ofC$jYY@h;WRp3kHIHm(T_i&S9mZbAi2)D45PkNatW(L*PTpbAFXy5NoPmb zhI#0y7L|n(d3)EDjR6uu$*n_m8JIsm?Cd0#R1WQYyghX524$D>XhOQGveaRtquk|j z^I{quTUXw?5an~H^CYGycX$*0n7L=!n4U{^;$QE_&!d3=AI0C>i^}F92Zu5x7sRuU zIf$Lce}>hTIH@c%;p~~8q*Y)jJ{&-<9*q^RVw(P|%PQNT2N~BFwy2gel+W#_G|aZq=bq#0WvcS`@>1=bvun&Xg}0(tJR8;p^U>*ap86`|tc-m4c}%ZD zJ8E|OckjTh)9*q4ozrEkPH&MO#!rWHc{OdrJosK0S<@U@R>f8G(P{L(&agvIh zM$pTu7xk&mvUFT}-7Q#~P#}{^MZ(92;;8=J%Ue4gTORbtca zkK6y@{7C{z&k|YV$PeqRoU9A;l|UX%dsl6w9zGU7&QZ5_&v+gmxSl-2xXdhrCvNqH zGIP35P;x>n%EE!n198}WAO`)T z!{Fryg!l=h9ZW`2;vNKah`_KBBN5r59W_!PMD>h;R|wHj-r1>pP%1(Z8SKE0oe7k- z9r_I(hL~;<6w40>^?m_b;qXRreg<~$O+)v71JNrgLUwMt2<_U3p--Q_2=R3yC1DqA z?SZW1ok+AJ3?1?9!#YD_VQxH#_mFq zjXGm0%kW{t5H8E&U9T)zDSJ@q*AX54Yp`QSJiG!rVC0ywh$K0-uG@e-TQz$08I0kB zddvPI``|v5I@%#Dpa!vVN$?F0$H-Bm5E&XIWmHddD7*;gv^|L^@#=u#1ADVz@?ozm zEkM%#L+CSjIKqSdbg)dz{ZU><3X=97fZgFjKyVmN7&;W4!btISIj|=&5$!v7r%pH< z347BK6dF!-Gy)M+E?sUVgwDlFwKk3ydS8oaGcigVMjD}L``^}#^>8vfo? z@9emp)>f7wE-n^%MHOfl8i`S(M4WDmr2jg$bm z?B$3{*o&xM{Sg(}L5AgLrXVhHFKQ5oQKLqpoSw&aoqMBuq(7Ww_-X37*Z4^$?mtRq z_17IJJ(|95X|oFe06+jqL_t)xstgHnamXnsLvTbFnP+>ck<+UO)kQ*lJjK!5myaK! zqWfUzpcpwgmgZ;UU`{Dwq9YN%b0=(epj+>LGTzI}7ZH8>0sX^JQd&ywj;wv&L$Gc3ZM2C+>udbcw-i3Yfu{e;P z10VljoIq{2dqf9m!BI+8Z53iQ|LvO*6Ez7PeW}wY*HrtX)<^%SU#5QS zKw6Hp+J;4TqdsRCf_w$`$L*Bk2)E~?NqZ0y z5s5;os~j6J`ouBR_XakZhFGd+MV8e3IqndkhrQX3)>H{nrbJFojz~;Q6f0J&5UHuD z!e+CH($Z4-tEs6GwY9bK$Ml|#w0N3Ds1@)1>uiDX_lfda8A2~X>MCl=#go@gLFL9_y^Hn@WLFK)%S1QEaL}tQ*??~Z?S1l zmW==Itvdw5?+^~UE6hj`r*d8=-7Hdb%49stqUGMTe6HlRJvB$XIsIa{41d4pb&;7I zCuTnLs;Hz?nY-7E9#ZB&F>X|}r2EICuZvO=j~$mzm$9NCO-#RFprkqJlyQpZsH;VC zZaGm^iEBK{GXM3PC_YAv?H{4&DDM259~I9&e4G28%eP?T9?nL5`+8mYX;aTpG|?A{ zgtP(~ziY*}6gEf{&_c0!Gp`~4M3HT?gd~cU-@G8xq!w38dX`zsy=}?YiXXa*Q^)mD z{xfe8hl=b%I4i`RqX@_79u|$lKKhb>Q5{h{In763_wQKlrkyxO;c@GK-WJ77?y!kF z#&!?`MvfC5C9aC!BhS4k?zn8SI~{N)m913r|K_DDDEtb+$+(< z*eI^LFiqTbUVq7>Dg38B|CQuflDSvhe5Q}2oj7TtymtJ{ZDMa`iH!gD^;>0F{kGOm zY}uPB<8@i(jmIAyURjtS9=>{vZr&#{YEEN|#L<|g8bZ^aBF5A0sl#8p0e&*celA8ZiWbKml zbC&LuVexCfw|IMtD56ET!Sepw6}u?DRy=&p5G$VItmi)JqWeUqNBd+(PN(WW)-Qfr z(#K_SO;fnlujq2x@(zkS&+RB_CQdn3UZ?!?F_B;4618R7;*o16$goo;O_o)7S1#>5YuPt4EWLtzDRwR~|BV|c>}uKH)Rbh4e_yNGW23SzQ?imiCHb6n z|C=Ipf2=s0F{a<-NviDZU$ZMk=CE@a_YDvu8kFy=l?n9BB#W~DsAOi@_&4K4-To@YSFb)I!+H)MFZx*Vw?FfdsIXUxXRkj~#&Mdnuluhk zud&7$&b`4nbL95^xu~*|ZvN>Di)XkP5TxXJ|2x$_T=p_?_i0_J3?1D0u8mI<32Wvb zmga-+RT=_7VP*avQwWrml?nc}*6|xvvt47#RZ2>V6r`l2MDXvZlq)HLYG{t?QgLfE z#4B@`sZeUPk53y;4fHfpkkVvW{3@mN{IGs6-8;mL!4Nmk{$9o{{^()Zn7>@MS>ETS z#R;-Qi2L4MB=5hUO$y7@N5!F(Byll?2VDA)$SJ9jak?|s%2nd(A0)3`*`z`_%f$`! zK)o{08a$|Da7d9|q}2SA=x!2LpD$vU&ynf29w>D4)jW4uo%GK1Vi{MMwo}r6E(aW^ zxNk^ZS$_IhmF4T@+a;}5aL&5>X;Dz=6!y{_aodRyQy=?8#{cxmza_8Fma4KBXC;es zsf_16{JxA&Sg9WLeCpHk_pFt)3pX)_)O}YMkwOD;_bc<{JxvF=2Lp#KLyRIm*F5!+ zyQ4{uRm#!#Ygn8@5haq%F!pCq;=XUqGqXFVk2pMGxv4eLVW9M~l9-&wSg?u7XMt=k0# z-A8dQv0xS}*oW6gLQbXFzh2epVfZiO0iW=vwshOu3nb6C|8+X?87pF?44h}IIGJP| zf6pu#|Fea+yR99H6J&H1552!o#xsVEIn~l#;_K&G&ha8KU9}Ti{y}jC4Z4>-`8g%4 z70+GYS)6pot8UCUEqq6oIkm(oDl+4x|EUib$`=LBXZ5_6;*Ks5Z+@?oJ!V>wqhwyRmfD=7P@F;h|2E?# zQCLAZIV;7S*^kTgi`VTY>RR#0IX&tA@aKMkN1I~4zph*{l@N1YWV}Pg)_ocBJ}qIT z%g6vNcuPJOo^MvBW?RP#kW4^?j+1enqle%=(xM9O zG{->B$DgJnmi>TRFC2pTF_$Cto&TUqsGpqHJbVp zb))Nh`25SSv29l(dY*U|swlrPeQ2m9C+FOy4`>$>B7L8K@g>%5+y;AKFI3Rf>Qz%m zlKH(FUNqCG%i^$8S^D3BbEk}!X$B7)BCj*9z6=qxxWm6gXN;S2CK9vNPD+QJrZdj` zH!hi~${yCWFYcW?6APdH0Hu`D&zBb@g`kF}G$Q+tz+K~k4;QVKJhS)5V%ApRqBBW- zAm_5yaIxRJT_hGAO2zXxUjR{ML+XM3NKVV*D9~yQrhqLW0k^z%C&pQIG-ULNGG5n_ zys_#iFEtqpDd4r~vY`V(XtY2)*}Sm0qP+Ma7Ov(I*IqD4?JSC@2CVDqusU zOSd7t7m*e^gwR_cgpf)KA*9#&{^!i@y?bwN0t)*4e9SM|yF2ByIdf)q=FCpIu2)cu zwGH-W=lUpzU&s1LOirbGWq=DldK|LJzl)YXW=J3>FG^2|rnz72pwEAuLXAKJdNnFj zy%9}aIgJiXn@kajspPJJyW;Eg%tMB*Rjy0JpU+FzQ_{$yIfBo2fecu0GLj-`>AQ33 zx%YdMCv^7A=`$1^pH7`ey+pr$IGb){dD4?FeMyIAyiJ!Ql29UrHq3pU9!8m}McnDc zG3|KXuvR6ydg(l!^S?|bAQKM0=lm(lGY_4{{m_?sP~{TrGw4Olns>r4$+E88ST1I} z^Yqg4;nnj~NPnk)52{pBmv7w~-7$j7Os4?<6S%8JufFs&macH?;Z0BV8Ax192Tq^I z)sx(yj_5{lZw7szC$A@6yLgVaBYMnheW-YTAal=0&%V@OGP0i)*JC1<>z&(uRirrR zl$6Nj!t#c|GgD&d=aF-1?82qgyp~=%tyHf)o%B6KZR=E}`mMWBz@ zET6?@z<;2GHjxTT)f{>~_cRp%zg~q(Q^#jUKuGb3wekqB1Ce1C<;jck96$q$f$Kf> z##MUni!C&3-Ds*+LEDFB4?af|pC*dN^0;J|Yoa4m_M7x}qm)cVO*;3cOQ5x(1FhZ` zTD2YS_IOvSSgt%(tWb$w95tUVU!4M%fh-EWdWFtnDH$bTn*GeaxBs z=F=_)N4Nh>RQ6e_P{adE_*j|?iKZI$J0i<6zz(JhzQ5uADW~*KSWEvI?jBaZDlI#& zJX-I}UpF^JCjr4x|2iXvC^0daidSz&0T%=4>2~!gJ~oOjUO0>0nwnM&w!s+eHP!)5 zdo2Ymm)p~KjSmBTx`3r|4zAkUk#iT2l82J~&r-k7U&B&xEo`i)K#`Z31ENN?v$xSB zaBtz@=FmPQ>fYsFA^};3z7t-|-GV%@vN_w{2|%oeb92KRjX>dhM3EQ#X*h;WT^1}t zQAsr}x_!!nxcPd)Y@~A``Xh>Euz6s_oFY3-2F#< zLLZEJlWLU7OPSn{8bNr0KLtjuVB7<&Xqk93e;lxLGBquc3NW7tSaK!r(q+gC*)Y_F z&yWWdEmZ?42Ph5$P+dO-01h36dm(!Mov*1=k4Y5%ZXY^za5F5&AZl`-?s(h`dZknF z$V*sKp^5Jerk{6cqmb7Fqd)|kZ3alsJnptS!l9GY2`0lV7}4 zk|%udYBhO~5@rQc2K*N|AMB$H-MGf&hH6s2yqedHjC2A^GH~T&p#;8hX+YTVnW403 zS{C(lsE?oM^_P25tyT}x_O**>$TK;}AEdFrNLETR`2p(q(j^2s>$j)7Cv>SMo`dOT zVj8Lhw78=Kg%6rt*Xq#~2+foW>oNQJaR+Y=3SLtAI~1j#XMRH4C%-}I`3h1JK9$j; zb!+POa#P|jAl%oyy%afg<`Pwe@t(AvXwCbbBre_1h43osqxXYZ^L4G`Rxe~!0SKKKYff1A*@vo3#m02OVq3Vgc2F6{fvvFIF5!kn`_?a_zQaG# zc#Uhlhc&I34w9IH1@#N6JY*%(k|`5t!i--W%DiK1=bHFz{85n5VYA0@aF>vQdW%>_ z-Meg|fGB82dLlJ>pcz%@@FIDjJ!J8~6t7U-yZmlTZ`QH})o9zDyeu*_i80}uzh=Cn z{%MKu<{k3#petwg(wnvV(m6A;{5F9CF)!KewL`W)pzqxCC=V@D=k`{wYz1j=tic)4 zc(1QeMD&FzO?T6>axT-bQVl9(_-#7SbnoF`C4oB{T=8txpV=*#y99Lu(z7f^PDJr+ zj!xk?D6;-BGC2M4z{)guD1^yZQFtkm!P~U^(XQ>2==)K%sncWQDB}ElDpL?n!;Hf$ z=LC`sBL`2J{n3eL-n1+adc5yQO6)%zZ}b=FnC~v?JLo@DzFKwa`)ErL!1U;@DHXFC z^;^6 z$qC#E<4xF*d3ex8qRJ0opuo7Z!-Fu8Uk7$)Wq5X3p#Y{(uo6dHA5ZihMTxJxW2ujq zr~;ghdq2{Y>bHDc%l``Ge_G2w4)R~d@<*SM%5uu%i2)5>v=j8UezUIQ<0FIsZ@d;u zCkA}V)EN-OGGpoTKg-VOyM#_N8v|h1`w*WSG;Yz4G`9B>l$v-GgVQ{efK3GnDR6JW zi@c|IWm-J(MOwIGGvyCvZl9+X^?CRK_=ez@ZSker#k?p9dgAGpK@s5*RIGe8%1VSR zvjwIK!T8Y+=2h2@byuKsR$DQ4vi3&3UH7L%R7nBD>6*~CE*vCk@CMf}^bcx}6+aUJ z1_d%qhAiADe;(cOCmA{**fA4*8M)1YJy)=!PVp-Pf*qs{_N{O92AUg8Fb7ly*Nxxa z9h6a^36JjAoix8msCLeiNYz5ai z2e15vru=&FND1M3^l|d6ZDQiMNHl$&CS|cv2BTvP)fBD!{(b8E&RkjvTI;)@ zRbI+4x1W!f01&d$uG9O^+(&c0`_r!dzErhZWjLM}pfQ~bP;8o5Qc!2&k|M@M^TtS|+G$CFSOJ_!ev3zwS7s^(s-BbqC;Mw~q_0%A6rK19vpL;ABEKKTIHX5LCs5h) zB?Z2Qsd1QX!vi}ItwE>i7|j+MPY2iDR<-TKnk3s+K?mi4K6?OGIca1+&S_oSge znjfpZw!$^*D<(9L;!6amUN%wb%s7W6O)#q8UT(qf&3rz%H($coS|(FZSvo<>Hf4 z%#+k()Mk_K)P&c3d5MGCU#4S{JRqcLH;}j&I`NG+t2gn zFHNt#Ks0FL4-^)YEFEPEDpE^Xd)U5qO^sCP)>@p6d>b*asXS;T!+SRL2N=zs%pZ6uzd#1D= zTp2>M%Fdnf)zHgXf|uDq(6cWW>Bdd7{qswkuJ=4eD$=w!+t8q=rqShateYa7-M@*( zEQ5Aq(7=Ib_OLCM0xn}#4B_UrE3|sSbj%DD#{edsuK3QU3Vo+iw;X8IduEHG4QYbX zlVWM^QKHY^?oAzAH^Z*zQWSRK2z{}Ss7zr!lP3fMS2q628g3AV0gJz>X|CJ8Cq@n9 z=vcrt%2%Ku<no4WVtM)m8|ru=S6wCA_wh-->jaF!!JXX0S5Q32NQ2lPEt zc~YfHwWM^m_Exht+S^qK&Wqe3N~`>;RCe7)tJSPUdrt=mJd%;v^9~E!x;Lw{UBvl+^KYh6|TLtxS|Buym>=qn|`zNOStjhyL zM$%PD|79!hD#{SY^hYND!qDNg`V`W7s(523BBxJzjMM|-B+ThgBmH?5hv^9p8|F%I$ExdaelUZ%Bc$>pz1270e5rT2z_Iac zkak#QnEcNnD(IBrxh&qb_xV@T)T__yoi=O5u{=$|WT}UpdBG>*IoO;^4{OJMm6@i# z>QT4~5mi^d7b7Iyck_=ze-L}*8sY4|^%D2O`!iIEt{|J7 zO_~#<0#rAlxsv*J_FOfr|1(mC@qGHz?|_t{Fb+{qyQrg|HXjvCtUDY`mLAy**Fca^B@%*!%o1-3d14w%+#O7d7aDoZT(sD1R1*<(-MQ_`Qu+0zfw!5Jb~xu z;6|;~xxLys-myN~DgW?zbu;XoIBMr4|6aiR*k?ZqOx|^fF(cr%Qd7U2D$eZ8^X}8Z zlK#u*-H_JHQP-Xz)#jsxk{;r_RcKthTkrUDmcg|EKlOmXC-w2<$?EBrjEmIjJ*TC- zR0lR1yxC62AGxTVU^7INDQfw*VfJYV}Kz? zw@KXLt9mDl-oT;tk{!~`cGvCAFIDhmU&;HktMb9@5TB|Rel|?o-`v`SSB}&v|~?>?;}0AKYlfHsD?$$$R&WQFchQR4yXT3nLazh=6W?f1?&HRGEp zsJv)C7DX#7G7=Ljv=Q1D6-vZam z>uP)-y(4nugpbwmS2X@P0#?_^|(3O~17(n~ztPtBP#Lp{^FvOF_=n~(C2#0)jDS1pON+G`V^v%X)= zRo~hEXQ-vd?nG;QYu0}}HWwi|D^WcG+!KG+8$z;V2Wu+YsNQ5`E%U%D6I3*B;^1ON z^OJ{rmw$u=?v_J4{OOF>8))UN0u+-{;VS{;6cZDJqhTVbTD59avSdl)Z4HY&`SWA+ zuHO>a$H(f2#hT9R*XMlqQbfElG%vzXunG`M?6?&2OVfs2NUnzR%;r0}8$cHjY z)}$8LTg)LVBY}49*iTjJHlrF9i_@VUTk#53n_AYZPJw3*k$;p2J=CGO0b9}OgS+Tv zfy&gTK@AE#i}Xl$dJyS6!@#~HK0f=%t5i*D*Ss#?Qt>_oLYa=}kN`Sz`Vu|Rt}~S^ zm0 zeMd0Wa@N;}!m~=#LoMsl`tRSSr)MV8zVBY5)A)u?-cl8*efv&Sy*#D>5Td}3-`T6w zrgJAM*=){66yY*+yBVYdh4@Zq!kwI!&l%CG6ui;0Phc%~9t}sh#$YpdCI@@bTEQa}O1-*?=10+e(*F@0X(7sB^~_#H{61 zAB;Lz`S0FEZl!Bb^SU(z@AdF2w0oBiz7qw$D^#VH@QJEk0aG%l`O9aI04H>*y+zj! z?V|Yn6{&TDT9g?dNuvioM{Nepp=UeQbC9hmkGRMX^4YzI0>iLWz~Ay})t2hl#4>~E zA!fk9%jMID>0)Fib?np{vs*~9$ufgZ9zH-v@C~#itVvYIOkCU6EvP8IlO?*c*OzKG zXaRaLwTr;tklKIjEH!S^nM%VSN9(yAo^E$XNEIkY9a`6=6Gx7rjXi)i=2X6QCn{YC zGd5YNw*)=fr7eYHGentM z4XI|uVw8}OMDh5((&@AQn1(D(waR%=v-_IUyqzZ@uLg8*`)2YecRxMg-0q=MH7q)1 z@(~tzmi*3#QR@z!s04o-OxiJ1V&^e7G6*gKJEcC$U^b#-$M#gNL?L{p2(<3sLq|`X zrwq@$)VytHs)4oHL*T7h`$s5$N*L|+^QV>_AH;Xf^bAwT<3>5*y@aDMUzreC=4y$ezOCJ#`n=JmzPjAfpY6h{a4`OvBJ+0z~B26@?k z^%CG8IeCssR%=Qf8Ew~a zRI)}RYJl&BMTYppUi)RU*Q^-!e&!G8J7&zXx3`vPZ|owFMn_;fys@dJVU3DFpPRIHyrlAfN8{d-5I>ZJ^W9EQcgtQWq|fU~WKdlqf^;VbxyZJ^+|9aOO}cevW{ za2_+biZj!)|7Mp)_VPS{)dL6T@~-nb(r$KQW?APlPNFii32*#hm4hXb6Ks!Ms~V0q zPA4-y&YL~OQXIE&VgB@7mo7AA!wKvhEhhd$)@2T7x^1N`3|MY$$#RopLU!HJSsm-e z@rlbgv2VfVvOFSP$`R#U<+p&7+mxtt_*iIN`eCat{NS2NoZr?Ts9D#SY44dZYFoFQ zrHC`NIq_&OlD$OsGG=Z}A7ELTmz{4vqQc@Akhdfx9)h(yw55 zz{{W6Ey%`<72Vaqi~BcLJpSh(j@8J|hRNz{!2>xq?)=a9X1XibIi*YI06dtPwUx(> z1Wq&Q;I)41GiPAB%+8g6880$PS+n5?e2KAN>~PHNdZ1zQmJ_W4+n|+Un6NoNe>TAr zj-8H|;2dO<%bu$AJ}Ru+hx-_&53E zUyfngt#l(&f-`MJldS5cYTh^q@AX9JN)VWZ(cbg z()HB5?^x=F*>n!<(9e1CXULL4;u$|$*ZwH2COkt|7#7ndJZYF3AJPrkIrAr6v2F{2 zy3H|7Y&)~nKl1F>hbP;!y}q3B3571&o9-JJuGkI(x8M=JUDcJnjO4p_`BzHdj%KdH!^5dwy?Ruv zSTR{HWX1IM_Lhdl(qcnk?Rfr`68r}+W!Mu6xrk#<;BVTpc>~$5?TR!paHyxm=rHoZ z(qvwAa&6({%3nBOGo;O+tCIKP{)hxjIqNd_B_Te)^anUAhv6&#UC2O4Vyp zlZN-pvXYs_q1^xb2fH4GTsloB@QIBy%u*FETM5VT;MgN<&v(?D|Mv{vW8j_y{@+R9 zZp~cX(cp@GuBuk8N+nCd=L$xG4MRbEBvZd>+#6i|omyo#+qZ$$MbGtz%HIZxds*yn z#`j(@Txmnj8s|biT>#hk;r}8D+^xaY9WM*Y>=bY9|6?u-e@|7w zN{b=GOpVK6r1P9`4mn&FyWL1OmK@B%rgOPlr90=(?V0K4B^O3{%g!A9GHx6G9F|cS zpDj-gGQ3rKZZzNRG);@1;{W5YSsuEStNQvgd@>wYu>Lr0|I8A9MkaPnL}T^Ru02w8 zHwRU-0Zd0SJSal$+6X zB_v!Atek=4v;Y>qrWpYe2RsxqHH)_B|>7kr)RJCT=QFbbcxS(q|vY0 z;HOP;(iG>+4Hu_5*S8hAtFo@*tYvb#*Lbq%;MSEiZT4ac##h7n-6kh^ImPD$|Ifz% zRd^uUT!Sf(P@G6`1D`G6VbzJf>uB~58*mzdV^Nbv^Ecf^yKpRFe=^J1W8mbSo#0)d-f9v;- z2Uq59K^EIBm!tl$Z1rvwE@qB`xl(W4uyl^-t2q4kwSI(e=?P{TR52_pgK>xoI!AB5 zF_0qSQ{~weWK)T(_$4zgc3SwYhfNmm3}H>;`!xFM^-lEbzSFq38g_$vIP)&;H<0$9 z3zBs6P1eL`6tZ;)uJB79r;AxWr~I~bqnz+yv?jBR<^dUUpwXV5PQUaYNCz(j3p8Gq zGzT>%EEAudOh}nUz%yrz0uMQraYdUmJhRTy6C-Kh>#tMrHT{heJHDLn7?w$=lppd2 zUAPh{1(-)O4IfsctwRUVx)YbR?tySDtUB<)4>sB?_Zo(gHwRK~#iyi8S-YOua2YVo zXOm{8UyGTgY}G$~FIvcTVCbz`-T;^LkH}0XU-12v2K4@cQjH^S1eS$&&Sk>oG_$^u z#UWVfLd=jJtq%bwH__n18|7F` z&TF=5JB_+WOiPNQfllqhge|`ooVK#SX?CzaD?g`NA1sH><=nZ**8!;O2b=wN(52i3 zrn$v80-fvw@1$jQFlkOpxCTDoqzhMd``2}3z|O%AI@F^pIWU480+*F!3onjYUE4)F z#9O2r^qBnd3*s^ytiJfbIYY(WvJ@3?HD2mP<{D}tkS&D(R z#^r>OGySW>9SyEnnAWoeozI1GB{{PZThnAqy(K~`9#@62r4}FFOUJom8E~3sW#PJ$ zin1t#SzMRZPhN6{T_fAhIX(DOva^wM-`tuZnllNLTi znCTOGje#3H{3&qh87fpDufQ@JxgEM2mB#0yOBU5Mq~YVNcKF=zz#;RB|4bY!#PCHT ztofYgBG?B6I2Je!XIX1ra@029J!ZsNVVac2 z-{50qDpKA&%ptxj-~TJR8Sy2bLMAdXZKEj*IogLay6N_itzDqL<)z5L>0qNw8;IgJ zFvzWlBX)F0qj57>4k9CcYrEns3){WE(J~U21ukrx=n`h&Z2WRgez7&VH9(+{3D4O+ z@TXEx9D0Xy5s^KQHy@_O$2Yq2l)1aM+SUev-?4o%y-WpP>~>M=#M<|XZrmc>RxfCG z{PN?OhblfoRJNdLs~L|GZmCb4kLy9}ZkDul?(g)o=&^Z^cAJW}%=8y2RgI`&Dcm{M zJD2-k2zNBNV&%TAvjs&N@cld-Ao|(c1L?=@hi$Swv}FXRB4St38 z9KRxY4sTyez42i^o*}FEXir+d3tvb_3Rl;jH8W}K^fmf0SI&(uM$ex(l4h;l!%ukT zvkq@)BY?ZetLNy`QLoD9BA$J1IBnW}fOCnVl^a}4!;}(ziN=o}L(A80q_=xNB>21c ze~S*D36iYLd)&1knmu_mmG{ac=_5X!Nx@MGNKd2bV}{c_+)ba*kKX=pCM9KQQ5&LQ zMC4hr5S=}Ckfwe(jPl|W7EiqRI_*A&uT`@;a?8(5qHQY{QmYDH0{_|mqv+VBP}XQE zFN8=##9d|zEtoukW-k1Zro20d^5A^FhhG>-yZkN)JbW&h=70VvE%@v$7~r0@bLq?ZOKI7n?|?rK6>IPat=s8`uj(J9r|WrAUeG*r{I?Vu zlOX(O;0w^J7JW_CamX*%f3N<-A^$6YWaXbBa}cY9E6X{HW_&Q5R_;9}DSS!09!T#D z96L8s`QSDvNM=BfM@3 zQwjJNb(xtGmjj=ioL$dGem0A)UW=2oq{xdjX~H;KzjZ4O>(w6ho`;5f_$^(z8cfS) zeMDZ6Ta7l4)7o9f1UJJ=j*Xy&UyYYEmg|U5W>DDm6mnBH>EofV+@gI3(TG6<$@f$M zW=E2rthA-zQodAu6Z%%3+Bj=hq!i++1( z+(%RBr}HyhTm5&rYAZ#LtFBq zGF2MWm-Cj>bsS91bu1ko+Aj~9E*Pb?6CeKi-Psq(fs9GV8zfU>vt6y7&Cp`E=CM^o<5nqiZZy8vy$ky6$@-Os$0L2 zbo64V%wFtW{T)3!bRp&6JDa-p8IF@NaHu?B=mA6~ZC>~pjrrn7e2#)4<9tt?ve4_9 z|Ii^mtB(WP(W1{r(TvqTn#OZSX!Kx1mx?u@SwC&SGAFk=qDy{z>5X^BQKV&^bN|Nq z^wx)S_jHktZmDK$QdegyuS zXn%RUYSV(Ht7*yyV`=wMZU4FN^4+;UTi?e+Pw5+A!*Wd*8?=NTZCVOvw7S#O8T08< zFkZS$+auiKl7l{#t=dHNDJCIJ%lGJB8vWh`TEBKFb;8G{*=`IQ_caCK-GH6 zUG!?NM{zc69vc4PRDALOGA1yL7fuu3|I#li`?dq0o%QF=7BtQk#Cc@jzKQesp880o zFxJcj_0fMCvfWf0_n#9w&g@w&&u4KC-02-Z$^D4QbJP)EUp05iD0!Z<;jrXg_Ek?s z&wr`RV+6C(6Vzb9>h*;_XYlmSmB?Q}g#lSse7JhC1nghA=hXInht#Tt`g|@b(_S49 zjuUu%)>>AUKJ)2j$T5BP7~oA?xLo<{*sQuYVEg%uiojW83~xYVer}@H{k})--M(I* z8Q5}=3ca4Fj_=tdXJx(q{v@?y|1p)Cf%iNFyfN$Fw0Q8|QTTb|6g93# zD|vRN@$jW6q^GGtm<;%OyH}9svk`pO7u3g6 zUy0!-ByHCTraM)=1UkN0q0b%Uya{2)C4J=%KDRGTjcCht2U^EYP@hcwR_#0RyTYd{ z)z*WTR6N3O8#?EsY)eAsQwKN zJ=+F7`+dDW$c!FPV975}qQhg(xXQ3oFRd3Mn#OT>_?j)ykTN&N8 zhU6JM;TyGgpO2dKR(E+mdO23b2I}%ZZ`U}v%)zxYklsXX+MsD(zyBgft22A_*_=)L zf1;AOY2%E!w_qn;{bsd_kGU!^smma>bMHa553(N6mFudxihxauy0}l$t#}S^m?Lp) z|2XJ2F1NK{|2646gwOjdPd5Yes-AJbMS~-vxIpi_0@{~Dj8=A^8L2M0n#q2h#rU#b;*@eX)hQ@6p%Py3IRPWIXg40V@#lyW2P;(LY*x1GRp^c!4!( z$!1AU3O_B+EBBsLu^}hrzTtn~0gb+D{V#Ln`Q>r*B=4#1`aH#8^E^e2N>@%FfIKh5 z^6^=ly8Mn~VR*_?v&N$D053nS+pc_mTWLEtaliY@*vEkpleVuB} za>f6u-}PCb2iJcu&(3|{-1P^A-@_Z`<(htA?EsTNY`<(t|8&kT>hJ*{^~N)e%F|XY+qhkAUbRG?pL}nQq=#SFFV9cE^{F~^hYn9H_q|Zyi4|f^yO}yEyyG3+YYVhq<|h=xvLn|>N%g~f@i+SRYHVr*k3KRchJXoY8V%;r>e6)zY08`v!Nz&D*XIjiCgr$Hp;`m*X&IP zbh=^qxnWDdKyb{%q*@R9TqT-O@nPyIlo>vAql%9V5Ln->*kyySQesq}3Z<Zl#Vx zM`I4w6ySaESU%NZFl1-I%SyZ^2Oz)p?ONo^P#-=De6M}35_BJ=VlMj$j+v|W*l?u9 zg~>tKJtzLGGBVQC*e;}6zV1llGoW$EG(KcDLk+|6iQlf}@)_zK3|QI^|IXHlG0-1A zc~McvkrKCc(R;wxMFq;?%t}T3>rQO8l;_+^%^324sy=wO+^_uZW#sRxLZbCxDm6Aj zZQZg(1xISb&b*uTWglFHqimWQT!z$lYwWU1j5sB{uJb{Mi$j6m>qM&U>t872{8W`- z7~k(^FIGdJE~h&5AEzSX_!wx^SXzSCtC?%$dE>khnvd&jwh^-8)ob^WdSlLd$Sgq( zz=7E>f4ao1X_Xoqte)k1or`*q{JH{kACsw;f73r3pPM#rR?+B;PVUkN>blaiA9tR{ z0lAljug`zpE~M~f$%Gd$h0{%i-qiGmpY)MDhx}vI6~E1Lzw@+RZ(}YWmbl;i0@V3~ z>*PM?_Sr|#bDs#V%?nr#oz;~XKDm}dl6t2VsaL+$`nhf<4?;WJ=-?c_TlC=X657z^ z!}@^Ztw%3&5~}T{8ihmF+rRCsL+FSed`I0h&LK9`TbHq1&B5yW*<*nBSrus*jst6_ z3r{DnUYFdNsLu~D$a!$sSJLrvWPFGoe6QMh3Qw78d^b`}hkT`90x@73hvye2;XrR5 zXcr|la=sn_te>M_fT(smb@6(pN(t9`w*6G7iVL}*#*Ue!0;BB~?D!6S0JL8yABUW( z#&>sD%`AAvKS!#^gau3zLJpi}rmGDLzEks7@73A(iWk*E^}iDlE?RUgjUpkhN$D?Y{a+u4iIF3Re5aYOTS z6KQO_r#soGm&=hFB=$k6E%OGe@&k2yWrJV{ zWTSoWJrkqSqs|K6dFu_^3|N;AZWyYNVE(~%E~hrK^F zZobHo;U`93RE+`CYJ-gTd@!3P`ZRxyqdpDBOTvI}^b6&=J=!k(e*6l9ldyc+YlPGQ|~rmcE);gJ!Ssr4ij9pj9J(qVLuYBX3OYe}9f> z>9;K?4@#t`rjZw>8(Tm4AEJ-DQ`F75n6h@Kt2pY#3|JNB)iLokk~pEQD!FB3QCKiL zmcK}Ks+GiaGv=Y)J*YwBc9KoIe40@7FT5G#=DrG;&oDyCqNU}|9aFZ^QJ7<;|4_qP z2Zch0zr^-Gbo(0QN zw|Cmpuc5IN6MBuX=z=Ntd315lN*r>VOoa*;q93p-NIn5H1ygi+aO8~)O&KEK#h*>4 zr(bJM`Am5EOVP8FdeDFNUZ8JZe}vMpk*;-*x>SHy&JeC&!?GYk%civ5Ve&`x3?B z@XI1a3X&c&h)(oNs4XA8U!@sFeE{?N{002M$NklN2oC9ZkiOjfF-`nB&Qv>bHCzzfaov z{Lk~$rfqvFfy2W6foJc4;14-3uV|0{rZ|mk}RE%f9^#zF_@m?{6D$ zh_ojK2gXRQ%|3qA;H8HkaYf1DP{rqJfqPwr`HGbw%vM5=d5y}Qo)|EfK6>gk3i{{` zDxZ3hCaxh`H@X$tSw8AIaR@!XWDkAxQXBgHmu)oV>uL1)@V6=C$`wjWI*;=AQ|-#7 zsBq!(H0quHLt2k5&n+$n_D4)lmED3~?z+vI)D^8zi-tEvR{ub1S22yY z2F1{{Z@z{*#w@z>)o?n0Xf;)NV=|S49-rCsJ-sw#8I=d_tc)~>AP+TahWQ?ZsK{t4 z;NgM0E4n#KEXxnPBx*Zu%EJ@>fswp}8=-N%I`YdkUaf9Js)XNkc2so^cWSGLu&DL& z7}IerOyh4@?>@l<(?b=i*Ao1K9_?T$QkFjC*!Q*KzHib53JDFPi||nB`&mnezEP)t zLRZl44(%m+eSAaIIQK1Clpp?2{a&s?r&9H9QAP~5wDP-qIqB0``fbAs+J1^?B=m^` z`&n@)TUPghd|#^S{a`E@K5%JtcIPbW_32V7UBE;9|2#blP}`?pA?klg>@?^9Ukh4t zcfd8Ty|Pm~M*6b8pA#svkryaagT~=Cez%_=)s5dt?ML;Y$J-U9cczY{y$2eKQoYl# z4!LDU3n(vh(O)zHcEv-Jtex9oCNaQbW5R*I^MnKK@odI$EL(64{Lpcen-|ucIU~oj zKf$fpPfzEjrvp$);Ep5~v+{O)Q5?(D@X3 zz`uy?C$D0|orzkueux@YDNKpU>EsFDipL)7N=1rSG0I8nutNnrjB_+RBUT(!ISzx{ zbo7Ol&=HzJoM1W0Akq*Ed3qxc{GLoXntYoydcx@&u3GlM^ul;#gkT`ny9sq@)qv7c zl5l>RCv|z`aT=e$2o?AC(1t5M1A{UYfMYG*3=J5D5CDS>VgU>qS%S4&JW1hKF3^Dk z2k7^WtLVjUk4yf2@X2UXw~{!mn{{a?M&F^TAqA=zu(~V*(W5&@r%KfH$Qh|o}k}a7}A<6jzhZ+?Ww3coUCEZz48^Hu1~y7mFv_b?;@pW9Hvjr_SxZGvwe<`_PGLO z-)xND79oqBoo});HJsZ;4tU8B-Iruo^)#aP1E^Dn&bUnjt%?df+=X6zb3E0pQkeL(qk7+;A%iSKNvib2c0M$!Hr@$I0Y69d1aIXivM0Hzq7AB4!KS5E+zPNv! zTGXo|aSdCbeuj;vBfbyP-m6hG>#?5Xb#fu?z+k6x$Xa@Q^gD7^=k?%I^g`u^v<;;O zyfvC0?AC``wtRs4zVWWD&DCwuNnl#>JW#)y#MyL7p7ceZ37ARi=6_1hygH7`w|a_( zzW5lu^YJt)+2=9n1bmRJ`Ek$BJn-aT{K&mwXrP?#&`-z&sv(<8kjm{)K_>j-c?t3y z`q4D1?#At+6*UfuriPW_V}bhQ&;mB9L1jl9Rj`%LHeK_0huzO@CGf;oWFI~a{3aAcQZgT1(|4By<5trpSq#Q<*7=w{kKog%5soA?Uz zMk~{p3jm|Bb;S;@GIcf0Fw{e$UE_^K6+1O)b=lHwnanM>B#8{SO7BSNn4uvrun; zw;*?%5WQPodZ^C~`gp*2diU+=^l-CURI_d^>Ri;1UhFx9+H@aH_g5-J$}2xT3bMAJ z@E78|&{=S}aAGH}U8!W@ys~>x`3H;RD5t5k1oA(K9Ul%#8A}R=qf8}q2xYE} zt+XMbm$;ZVu5xF+XpJx%vQ9Cy1WHw~SOrAQr@(N)g8^X!op9|6O*@Vmm-4(r0)`12 zbli+xXxZ!wM3JvD(a8(28VIsGEiI0APToPa$`_&h#V{Fr-aVK=d@1PjFrUdi#7syLk4SCq7!T>2{*tzf`>8SVp=?m0T;)!BXksgpLq0X zdTYc7R2ODq_~#2Tvx77Y_IMCu8W>>!hcPkn#L`Q;!B+q`#u zf0_#NpcH8w^e>3OY~J=&OXxsQc0P{qb3#_M~3W;kJ!yQB*_}&Ju()h4jKQFz5X4 z?)j(?-l?+bP#HsqI1_?{+$9F}Ep?eryEn`yx^Do@n*BYk*|deWZQDvqe_29bPR3k- z??O6!8g1SUvtQ6#b4R6sz=e$=%Z@{V($#3;C;jO^Q)bXN9}c1M-@k#GKs~stQl|lR zZ<$PE-ui%2Yd=GEYnP)YU0p97v!#&oKq?SZO5t}L?jn;|q91FP{1)>G(#bu@a|VCZcJ@`k#* znQvEu#eU(JA5<1L&S)N_j?#Gm;z7kLV^($5ejXc031VJViv5&cA0 z-7f0j{;jDC#o4`Z(foKKs$TyA7d8sO5g1k;=n48=ev$#4+!-%c4VpeksmmtP2UFjq zZaunC`Lea>rB}PqyCbo&BCa*Hs9#IURqOZ|En2pd@NNe4t^0z&i`ov9!0~H%V?(~{ z6rYTSYJ~91sO!q8Ycm4Bm`J9w<;zG+z~vzMWzocigc2r$9PFbc@&y3yhOOor;83cJ z#((BqfIRa8MC8>g6oMytSl%tzV895P_Z0UEROV(7p1(tZ`_6FhE%mib!t){ z`#4U4e*|9Pp|n`qv&@$YS#1#bVw%#RPj6<^r}mT&#!t5^0V5Z4kj@XnPZVb6^LSIe z2VbToi*^tuM#X+}dH|f@sU`X`!ya(l|5QLDyY1l0=PDo|K*imRQ?aqJ>iYHTDkq;S zMq)agMqWIu@Q#71t)`9!-aty4`qFUbp8WG~20dBuiTaq^g_^%&n+gpNRll!VD9>YN zu9rMJmra%DB^!6Ez<~4W+X;i@`R!Tk52Vzo?b=6*9oo}lgH#*9s@3aVb>`Alb@I?} z>H(qQes#=+Lp!F!1=ecA8JppS9p5c+C$6QcwCe$?8p>CBX1F?j{<6A!;e;B|{eGlZ zQ0K$hM<_`R#^g%Veq+==-*XCYOAG@32F5QO+CO|&I}6WWwL^u42B~?I-xBz{&x9an zhWh%=4)VNe`vDaa9H>@&|Cu~bTdCK^@pkC|Z$hs&k}mQJ2~>-}d`F(OzfPJO0D8X$ zE=>on={MCU{Tm}s4Ylpy2^AWASuOmM{b)#SIK&RSsp|d5D{GieG+JSPu|mV#`LnK% zuNJLVfmg4peZOh{l6r4^Cpg#6=K2|oHF)-CusfOWILiDYz?Wp!kOr#At25+r(fisF zdxOtW6&V?+_HESuIx7vQQ|+{?VI>+4>)ZXFDlj_2W!)nk|)iqx} z?9iT}Ua`o6ktG-o@ymbH4yAruf0F!j*Bz4lL-C^C$M7XuGZX$Fp5VjWNdb7%2UJnL zzS8~)dsluVWv70>O!@g9P-9u?ZnDRCNUJ)UdZYaQv(a zymVH5HcZRe=TxxdzjooE!k8L3xP9_w4_ECoQ>~sgM3I*ZIef8H;9NbiUHE!o^w;X# z5A;2hKFL`|t#7f2T=H>^4L);gWhINOb}3HbbYWq_h+@3jUn^zguB?)u@c*5ZTbM z((sq$a+iF!2rWd#)nVD-0nHJaW~!g2YFqQ>m%j>%z$3ruyrmyg=dWoWG@o_aF?_X; zpNhR6qYnJG%z#&0`314v)4`6Xh&p(IeFl{}d2o{&Id-ZFx(?%oAa=vB9T}*@hrmnM zw?9*t!=hFAmGf%y2>96{ZaDk`g+$l}4yNDhiQlyxzxipi*y{E3;g3WE#1}I3w2zd1 z`-=rCFgQ#d#bz9a^}&MQRbtcyxp!_Cv)8a=b*B1esB0Vb#fp7`f5o@2qI?^*X~#Z= zos1GEY#6*`CPk{j59bjaOSkz+`ftBzJMzd7_=g&PcK(O8ui)FCFHo0*L)D2x+Y}b1 zly~KF?4P0w?C=NR|3`AMc)d{`yLr3KCQ_SC*)Z>w5O{nud}VJt#|pg5R&T>4(`Du|9Fzc+9F#BVUyK z!wj3J{g+7{3yl~2eA%^j8uGj>Iuv|rr{o{?)nXMC8m6`_n=8-tpBMv&cCCw=cU$p) z?9JWsx#G8>+YYVNw9ANJ0})X zht6q7Td4>r^~!mlOC_;l@c*Z?mnwW^SZGd+2~(4YWB%Vr8~pxcbY#z{_n|->&hA~O zs?~i`g%~X~=0+Q2Z7#Oq;d`UG@f27mlJ`ch5%S>YYbz zFvl>=4TeKJ9ECUhpq+``NF^GBl0NaM+7@^b~Vd|?f7$|`63KdGo@8=8GDnpc#hX6RVT2C2^s_1;4jZL;9`+y$EermwUaHqK+}LUL@l z`s)4cd>Va`x_a&i^sK3k7tym*ml=dgf(*5uo|9*8V;dKYQBRGWXB%8yJEwQ@>^-eJ z?hyZDYRK~)ZSbh>qiWNB9(3xEbsO!I@oZW0p{nI9htb{C$a(9fZaB~JJsVUfY{D@0 z;gJ`HsgsvA9lX=7R=p=}PROFk8A&d5XtoNE)dQCBQ+m_LTAwpQEZZb=v&_LQ3xTJ& z@(bXdtURy)L^KlpUIV$zACL5h)XBgQ_4R8V)tH5wBp+WglEc+g_3u;b4Y)jr%1n+{ zLpqYG(|3}J*J@_Nbrypk=4s>pQvxG3Hc-9Xfz-f{7b(MkS0%@WsV_$Lk$kmkl~Fa? zy{LX%`h#j+t(;opqs!Uwpe*BwGX@j;w=R%!e!=$5HjKy^lc*EB*QiRYUtSd?-}_T$ zsc$EbQ0-nAt8SPM#KOKvRmFx~P(yn*le{bNvbGZ)WBJG5SLV3ZZ`T?HZ#zk6zD7=& zC$yx+oL87&haI%Hi|;>zu9kU51;9~1BmSEDW}F^qnsv-JD%p^iKL(wxifFid&+1*! zW__8wY+CRU@S2to3`_qt4zdAy_ z)AtcIe&Ghqm0>qca#)|Zp2<_|(+5*#ias@aZnSLrxF{PU>Z-HGiv!DL-@aO!vIsXl!FE%j`_k5#;((+1~SrvKpU-5OlEF^{O=+X_$&`2Z)7Q%p<@ zMMOkUwQAL3VcDrDWoRmvFZ8zfu%c{HJ4n*1=H4P@E_qNDs%aWojut>nSGyl ziHPB;3=J>KBQKRGQ5@^w90`$fB6KwYj@=4NB?TZCM;r=k=Wx=8uTE;>O^UvL6TVa> z@zGIlA;8N2jhHA(#5#JxBE_gkLA|VFLm{>XxbWSZQLPJ5=Ia~ivp$c~^{8u9uy`pd zluz@{wD5--dD(!M0yx-lD9A7h&Zk*a6pp?5z4f%aE|Z4u&$*`21{2f%p5{_4;3nO? zL9y|PSSamg_Ra55}FmAa@ZV=#GtvrX=RS zDC)m}QU9ihHFSW_4l5H!Z$wAOVihPKl`c^f&bwGnMP2YTIe%o;Dhqb1aISCGE&lG6 z2bO`|aIdhO%*%Z2<6-54Nnoc=f@7#BrPA-~H&C%UEvfl^=>9ll-lPH5icqQX>uB-- zI5YtlkV}%a4qWjGgCt9;IqDhY<4iYypfyWjImT#Prrxrgd0JoO3Ww^b=omN}yHT;? zB`BXbuCgg$y#>j)XrGeDg&bJMrkqS@>F~dcxsH19^rjM6iZ=ZWG4qJ_i8hb+$u!wz z;aZ1S=h1@2PO$H#xx~w{92j>d^9}vdTNZqL`OxzCb?l5z7#%E z$-0LRSEBy&z>aWm#=~)mQ5UJllY?pc)=gBsC_C{RCWRA?keqOnuE)ibH~XU%WKnr)FmrY0p&Ol%x{@Cs6?;#kr}uWS^F$kt>4MN$EaY0L}zT^uxW zJ=bP=^kM9u#rDzk zWkNO`?vkxG_(;7GOzXEDrj{MMP^HpZ&hfz~sc_{+v~KS?daCXHs7c)tbM5<(=T_+~ z5AHilLLS~8&{?BzG#GRE$x)y14MsP#({%iMqOF?!nAmgZ5HCxb?JYGa9&J4iZZp`> zQ6LXo4Ki|Uj}FNHK@XTL5^4$+;x_f?!yONR3y0tvtGxMh6nm8S0Vl+eSU>jDh z0L6W{j1~{;VFPJ}XN$DlxJq}0*HXkK-;!>r8+(4#m#|^w!k(Jjoh#ZH7<-;L=!6R( z*~%KSbdfcOC_}C}q~;u*LDTwq(eTAYTlOBND#i1X&+0k!`Uf*<*U2F2*r2lb9-198 z!^uXgj=dvXQWRh$j_UDhER+&^%WksM105BcI_u?uPR z*8y}T#z*QgSGrxmca`57mlGZawR`mp+I+P%efCxlXnS^Dw8GJ-v*)prls&&S)s+tB z)NUQ|Fx=d1)E{nkj$~P$T+?IYOZ4W}cEJQ_D`!UhiC-&>TggGd8^XxMpxqOLc6#&; zIy`kSd1u_DIpdzA85^5G*H%H-yv0UvKk8uTghv*)?)x130bsaQdM-R#dC}P%>p7RA zMw09LxpldJUXHspxYE-`cfjB6?iRcq6wVcF4$?$%4FIBWmV3T6)6M)wviunOEccRb zC?H4Z{5dO;Gd*0!8s`j8jEqBT$elK%G8H!Z8NQVV^WNmoIh~(v0dK-pU+6&!Z(tnw zjgx0bOc**}c3#c&oN?q%qsfE7XJf#)S?ES!_*RiPQ(%>+S;qX$iME`EX;xTLHd|er zkonh{5>2;>lj}ut0fvrq%^ZKVBYX(EyFOZd0f$9LdY$R^Vrj~Q_i!W;?S;=Xln0AXnkmP+PH6Bjsq(@ECV|W z)Iz9PN1RUwEoTQjF9AL|JZ}={DipvuGVKVR5{s(U1)g@tr;0%&%$S z{8pGIEoOf6ne(|0T3Tj)&SNcO-shAqFpWC%C|H3){Qc;dGNv6NEk8l((ttT0T}CGt2z1{NB;b zRd{$f)vH&JiWMs+%Y`g>Z=OQLFNZswx%ywJguBHjpYO#>U1r0)TX65exqS&(4Nz)I zGL{eVnF4&;LN8(cFPoa%m*GDlr<~1+>f)n3{>pGGJoe7(ucYE0?7ve2wmQXNJ~=r> zmZ$UO%WE4Pn*HbBNz*-Cb_x6=X0BKX_-w)a@PpwcLF>rZPU?UE&ZLX!wch{tDZ9HA zuz%RS@ZXhyO~;^XJg72*bzr6!s-%s|4x|{Xp zO5V4^gKEAP{$I@NmRPWj;fW`@67*GxS3e*Yc`+;ML#vs3JxYxsHoJ!JneEM`Zb z-x&T~*6Ln^{A0TCcjUI~o1P-)XEW|@;Qu4A?uLGt`2LOUC#U*gxp6Rg&ne%X#{XS- z?v&1ZmV?zX{H`0DvJ?9%1kqqhpI;~KwqHoaATSLrG_r19Pz69>o|9`&@{wfOY%HWEL;{g`F zIdj`|^0sDPN;Lm-Gu50|25{E=mI7wF9l1W|P_kqu(?`wA(~=!WBzebAqpA6rpRl2u zg9Qjbfd_o|!}tYl#@j0*Y;@}7PbqA>=yIADp%eM}mxGyR%WR8t!tKDDQ(BJr6&>EX zoL22Pq`?D*t6q7#glLsH}!DqF4`t@k-C&n7+m zYyLB>EDD~Z4LN^^zL~pru*%@5_@{u-% zkCw#S>9yi!8f^JZI+20ntZ9NA7vWvtX?i%1#5wS0_YJecFy*BW!Dfh=G^1-z3Q2N3 zsNx*i%4_0TEH=71pAJHamL1d29lFr!ns?zF>CXHMa1*2n*}%tno%2J27F}SuFdh73 zr^n8_mW`b+3p}P-GiHIux})WwfjVC8aI8E^0S6g5)69w1vbm@KF&c#j$i%sgFy(oQ zR-!GNHc|_mt*Ccy%+rFW^Sd216Oq6R>dC;qk<2iw`6 zMwMjAxo7+x7$ZV*-MieAzvlfXR*SS4^rK38mrt!E3e(atp(9UmVQdHMVq3b+~} zZ@xuKmZt^{8&H0DkQ!O+VDJ&X3#ZRe{*q-WJvNNaTneV*V zEm@JOmD8Ug$VyG1lc xoUN&OmQ6ci4_!+GCuP!j}x6{hY}YRM!_+ORHC2{m`8rQ8RXBHkidW^#Hq0a(EOHtFNO{s7`e54c|6?ghcH=^j+@sl{~IF0HzX-auh zVkzFeFx_9RJWh@er;EYSRJUP$oa=^;5S(2LzC__SvZz7*+W4Ry$7GTJspAw79D#$I z3sAi#O{hYN!ZHZt52eOlyGkcOPclAWTB3AC$O^DL6s)=*gs+9*(mWniQ!vil+qGwSm zmM4w;{7&JR$->mQ`2$oE-)cLuZ$CxeOreU^>rkWntD-y)?6~94pz|kBP*7;3z^~W1 zDOD(`KTH}I6^{B!$f3Tn(`?o=)6PND<%Vbf(*jcJ`e=X>(7bRT3Ci;3aIfF`7s7g&6*TLbsJPU=lE$B;R=w;~JIdU&pma3Q3 zGgvG;4xU~(D-1zD$?d(%Jqg^CzvlYp}XU^H(#xH|sk_RkhH&s9oROTT%aZL_M} zu(hhL?X(*5@m!T;9GRd$lW$yctjqAWV#}q>V~;%~zfZsQnUZ6-vJ%ycfH7tH?>0UX z!%j$^l{@%|i465R(!W}@OVU?;*I!kBV|XYIKERG&R0b4Uop-cJF)FodA@3%GXb2d zzIz36FY99iK>v?lkCHsa>a>twqW^2}I^d%!w)dB8dT%5INFY>c0wP_Cyrd@#?wztnjKADk zms@7yfAI9B#&4evP4y$^6wY7eIl{;zgme7J2hYe+K3%OLJ?x`w1hZo=zRh~@W;-3Z zm;Y(=?4vf^m4()S@4m!5>oa7G`391$uNSN~`TyoQcW&$Y8eqaYGDoq#HsspJh>*OP zxXyRhng!N4Prl>Ej`HLIYxbgbo;*HieAd1HaI1f!E#s$i?PD?=8AR^Z{q6HDw@*g9 zO<6p;;-&j9H~ID>M{>0oIbuC01>LeU{*Ro-+{Vf8o?`M{Cqj`}{;4^e-#7q{5o{ z?gJ)npH7rH^>Awyk1HuipKtZ_ly~I*auz16EB^C}RZ?S$Yb~AosV6`FK4Y8e^&`)j zdow?=k2hMHV;=z}M@Fer1QY>9;Gcp(TOEJHxA*OLt&yws>$mT0LFdrstR?m#p|5^E zzcJ%)r`U&VE-?ol^NL?IBmoe)!zPyX%Gbt&GggJS;lPdhe-g`D{OH*``8C z+A7Q6Xq`@_(kb`6VeVhL@i6)yW2I-==VJZ*<(npr8~*pP@n8DA5Vqcp=cfsw`}D=D zEp)!poHMs%<~t_*XC6W!=lMN*8xPG4JIgAot+%E}pv{ko9@d0B?lPOzEsy^&Q8=zZ}P z9x{CVU6vdN_5Pz5G3>BrWj`YZ)`@q$Zo+@@noW`?eCgBgLOs%tkdp!%|6$UNC~mBTUVX+^du6o*z>KN zEjGXv#Tn*MTsa3&+;X0OCj{iiCnlRS%B<=l>xpZR;zE`a( zyFk{a-@i5TelXJ}fA2kUu9b4m02)cK8X7x5tP zLhA^ocf>UhoBH6van>7;U2oF+)N`Qiyw6|deIIL+=Rh&#R;G&dLlIB}{vimo6}hqv zE;xGZtRtR6&>H`@m5$hth>Pnw80*s4;n)NEnU#BMRxL*sr&V|;7maAQwjGjqTUPvx z8(+K~Lwj~KX>{H1U_5qiJYM;Jv3)ifXDT?h7(esjTzejQ`80)T?Mikvr#tS*!;#XV zBRa$eV)9jw53_qZ=Rn11`1e`w^StWg(J|VEmCHF*y14+|`W;A1;y1B+ zLjmHF(irC@yfyhtDnPx18O) z?AM)v5AS*lTjWeYs|HBD1jij>??j%M(g)X`6o}$#o-b!|@&52beN8FQ>oOdDAdg?A z>)o%9`M&1N35XBnbZt~3h8%b>HWpRWoXo;+-~1Q7FM1rujUC8v7D8i^aPbw7@OlY-chy9^d&ir|t&}?9{Fn1-xp2mvUts;B2M`n7fXs~>u$8?Rt3l6l(VnrvoAQUUBYw7?10W<)=b7LrA?jhg)3#e znz-IG6@^tbSTScRF#Zmlc*tOrcSO4sytMLnJagfp@NeMxb#x6Pmw!BFu1m+m7as?! zstoJX*I;c%mht!ZwBjLjOdFJPBkxGwgR=m@i>z)KK*Gq zGM2B#SG>OAoHI;)z!ia0CZ1=~lg&`Yg>ovFnpOJ@P4h%Q6ahs*5l{qLBH(SJ)6#Fd z?uA&1lW(yX*|w8#+*mQxg^kO8z`u??8!Nm6hYsQJx%H4NLFx;EPD!?{hY&Cq2eh<- zC*bEVH<4V?l8B?Bw;7d_iu3KA%^zJG18xS0h_GR)sjEczm^e)Szxy%c!OKv`15GO{ z$}xEG08G5%1k{$5U?sz!+Ri3c)VR@xDhS;M496zgzce{HnAVYo-y*C(OUnVvs^^eh z{1#3=WIEFGNfzoVFnHKdqzpZdhXMOxE3-#n7 z4Xuz;32O16PI0$fehQW@T0{EENwxm_Vc(Rlhzv4b7<=?Nz}-h-?WTJWym6sX2ihY!d2vxl>;Z93h-9^`DN9UE^SCM&UmV&gD`-_DCqsIiRifH3Fu<<=^i;ngVu zihv@pHzVLPxpGzu$~FvQ+`TO)V}W=tn)MM5B(Zwp)emsUuzu*;vj;Z*^ac7Ha5Onb z>+$_ao~o*4kdrhd47Cg^=3@VT*HUx9c`=UF71VS%&gCaGLa5x1Ih!bUM_8~8i$4eR z&9jSe$7`SAwzI~ghNsX6aOdW78n9Q^2O%NG&3AYpbBpMGD4WPn!my=e4Gn~y+~vCv zbslXJLy;{K4CC*Iy6Vlq$#>(|H*ZED_Y|_2XFUl<9u2kIQyW%UQ;B2GzX25&U5E75 ztMJ>xnK)rB>Hg{Qts3Q*4W(=N;6|<}S`I8nrZ}sB1(Pz5&hh72WWQipmWBPg+pIW{yT4cGuR@>U2jkqEpTNS$4@PR2ZV0d0i14I7 zgxQu=O(*=rwR{P1olEvrH>>oG4o3&GLJs9MJgr>iKF@+i1%tim#g(b-p~nI~@wOjM zKIM4y>)jJ!ewCQ>HK#!^lv52`$Co^!dMDx5=if(WQI#3&vezuY6)&v7S!4Q=Trm!n zAz%Nr0#%-I?x!E-m@ETj2^3vWDhY^36XEX)Li{#H27Bs~OV>PuePBo&j=yv$?z!PT z+I>8(%cRB__hB-&n{tbanS2I>{zOY?!<5Dxd;u9Kv-x9=1zMRJ-Q!*&4s0S0;9)p@!YL-*a-K;g&c%g!xkcqhWM{P|^)kkx1(ZdLYbyms$Ibi3;RP|GX= z0$9dqhp^bmxq_lO@V4Hp{6%X;l4sWn!+XfItWa~DD~MB0Tq)?sdhLJMP5AziNtnNe z*iq9(y$wG9=yek`txHF0{e%FeG)}qN^)<|{ui~cqdhNcmF#MYTLv_8AkBv`lRS{kw zb9m&cGck6=V07l8*IBC;;L*82Qk1PJ_48~=Fk|L?kBC*6{@I(n9)h%#7;1&=v|97; zBK}5$nY0};o{6rPJ&8J!>)yjoK=EtWV}X=g(5frNbC>RqBkuZ~IN0qfh;3&}Zh?{M z%u`Rs-~s*7E;EMK~aX-)a+I)vln+-WtYD{m+H#E|vDfeMa`;NE2 zHeuhsf2@UZ_cyKH2$HRk>A|9xou%X3y5BVmbu)6F+p`-j@`fpe`gE>f&7%du`fYmkX|{ayE3 z*PMT>xxW25JO0wy@0<%7Yk7tk(AQe`p5EK|AAII*Ts>*8dTcV- zuCb;*eXH?5{-SHGdv2v6J>w5K|1PV5sy+wf!VR|JJ35|a<(jhF*l(-sQ)k)6((gQS z9Me11Dyy@@3)T-E#Z{B{ziG-&EtdKARK4}yW2e~RYwhP{n}0F#OrM`&hj-Unk4+#x zM?GMS&#Q|zTUQ?&Yr@?5;KSC1Ck{8)|NCIJ3IFR?Z<+h;sjrXbEH!cLRe~OQ-R0Jk z*GU;*-Tu(i)zuG%Q%GTNt)hm>O)VPs@all-FikJB+~tw)Kx_mreHSOIJLBzg zVpCO9Qv+s>!oou2@EDG+UArP7A)(RUDl{~d+8X*9@G7_Kkr3*0o$6ruF zqwgM^mKr`V4T~2nM7!?$qF*dKi5)55mfg28tK*3SZ#y1G-+!q77cf#5w^RTHr z65~enYt*3F`T3z>b2@%qo`Deuj^k8{Y{V$jQ+_DP+l<+>=3sr6Os6Gd$na6<*PX`o z0v-K}sg3%6#&_7fr5*zY_Q#Z~M#BGs5AoEb6U@{~-lo;~VeWiv$SlBskz=`cP!J8* z%Q1S)P}<0FYOt~dKh2$uB`eo+Poqfgl|@YU@7K6z)%q2`VeZerpkPZC5>q;3#Ha(1 z);`XZJ)e6S&7JoP+|)E3a`+*%SMs-U_Q*y6v3UMGEa1LUm2Q7@Mhrs?r^uXg zb0aVOJZmQ0F=-e%u!kV(DcT>Donh83Ux2l=6FX@1{?rVbn!wVZW}+-26(jm}GwDc; zJEE*#J|Als{y>Ho6Ro=Pe0=}oZ|E~{BswKhQ$&r`@`ZDdXC+|FkiN!lsHVIKKhBXgKy@*y?HtE>q0PW)M(0(X4=ovS)Zc+xZ}3+A54F7`D|0a z?NFPd`jr~Jx{6}Vp0qS{~_bnqyYW@jR?TYvOSZHLY4mf`o6Sr|Tc9QQX1Y>ZKF1U1AJr_H9abLMWUiT~=f)W@>c;1jO|TFa}oXLc@4%X(VJ#Q?6pHE}MvM)3s7&=Y^qV94Ajl z#+LqaFUI|{sjcJwD6A7kzZC&RKoQuJ5NIoM)znk(Wa*_-7AN0g)c$8qx@KAFB;n;> z1}X1vhnO{{!!Wr&f;(}S(TrUpyBp)!VNHsS&ux8WR2{*xE)X0-aCdiicXto&4jY#Q zcXxMpcL~06*Wj+fB}lMGa?ZWUUF+>Xv)0V6>FTPU?ytMQuF@)|*=^Y)3J4EO`L^Fx z#Nr*zd+Qt=Yc_Sv@F5f43W4eJE`=56M|mt8)bOrQ%ODdGk3z>caefA@Z@U}`S#bkX ziP75`j~=5&&%DeyxMa~;6)%>ssq{+fa zuCpnW#3MXGfx>32Rk-r>j=_>GX-IVbcb};Uj_M~4o~}25LvXeHhxjDRqg}T5O?^x7e)DYIT>aFewQLTjJ5IycP4d+n<6Bl`&ET`g4DHL{mn)W4 zFUi(MIGlub%-4kG0Fg}eB%4nYYYL0iP;u{rt5E9)!IWhb`09zOXiYE87QjT zwj`_{zkbg^8G>Qh+;Ewm)rZcez`3COQUy)yg=(ioN^fPjiL=_sm9TU7=#Cw@q(bfnj>(lwP&!e&wubzFeQ%vyEVW zQ<*~qBYRtQ^f~CRa{s0C+nc`^ZXO+s=G7yY0k1_qw1f^{4r1M3-m)_8?tTE{j$H0Nk;t(v8Cj{ z!go60p0heIX)AaY5cfLnYL0&&F0CS7N;#1koJBAAf7LFs@c8qs{?XK6O037+alaBZ z5#aK-toOd{47w4f4H?m;X=`I6vGMuuGeYPG6DKm5BP$^xp{#dH|55Jug&mCFvf8;R zm!0Hq$%^3VBwGmw(i(8=P%0PyU90(X`K{39v6Yam=-*f8LbDRR&%Rf5Dx6)a30yrDlz{3vpdl=`JVJF3i0gp^j4Dds@|6b^5xq+vfk^v&E?D@ z_>E(C{fqaI7YhGz%I`1jjvm~zz74t5b;wGnA`kzuZFwm%Eo$@!w@79BS-I%~5d#HW z+HzZ|1INvB-U=$SsRwkvntsGuCax-@!2dCj4Fec|9L>zFdk)=^V_P%F<{8}Ka%y82 zH`MnW9_+F#?yX&}h_hBwAp|69oo>`2GB?o@!xCdtyS6KUfzB0%ZTiioXon45MuDxh z1tJ05O^L$56U#x`LlT$FG(Q(s&ZM5z`T9@0f~*GGnp@uMG>~6;e{CHOf^-?C6IN{Q zmPL0|?UDhT@oWE6DLKaVd-V7b7OvLY?`;oKp1Mt>st7^(w#nVyw)Pi~$z`HMs?24S z!4JgUOvC0{zBq4uJE|sX%U1zL%9r~XImVhfsK1zwK~i8Y4!`%*5fS|N0CBOHMZDrdX@9hPusY-vl^7zA^SFj|pQ#qhg!$*K)u}UZS zHWD`!orXN`!>^0gPlkTpr8O)5N!BcJv6vxEW63>eS)oV1UsTCIq#Z}p5qHA1yF`k8 zZ)63E2C>M&(O@u$n-=vY^WG@!z&+E^QIBvPNjL3U_*_~@VqxQ~9ygi09x&#?$~qyp zX0;iH$N*j;)Kh&x{R4TC?*UW&)BJpLjj_{+s5N>Pp$io`Q$vGd0>oMMUOfAjyguKH zG&MA1wqg~5EY2}A7)BF=@Rhn9NDMyLX!Iuty!@uz#rz%+eE~N97|4_+6Q8cUe#LA4 z?3torkxj$!5kSk>@ImdSmEw5h=1j$T`CnC0{W{S>bJ#Q{t%QiwnZ;TQs=pN?YLAw0 zJ3c04vJoy8uT3OxvUrcXsy+Q_rlW(2iHK>^$L5WR zLMxC+uNy3r-3}%4b$R>glw%3pvUF}CFiP_{=x;lHFq@`dNzZzpmaJx}6x<$UNlG0D zBH(eSUVQIjD?TqV#O>H@{Q8fhuy!>^abfVO1$Oc@o+RNRrU(iVNCD*me zV5fZog%S-RqNYdUyFZR-sQH%l+9`)gZr4@NPcqK&h#uA6`YU#=Hm}z<#PU(fsoIy& zN8~zELlN=uHdNiuU4mCzkBfbWA4v%nCSRs%{)tSWlUdZCq9WpKVz6p@Z%Bn z`jwWI2|0e(D@G@^1?&)W*J)W5J&Pb;4$DaxTsHy?&r|}vi?BzJ%zvYFo$vE)H9R0ZC!r|i-6E{6AxVXoP-ae{n8ENAj{qwQ4x&q(*~VZTl^zXMq#3dN=61^+&Wz!c~Av(0aG%;aH6$a@r<_!Qja zDH6M^M$cre7Pl}D{!<&zj(ITKr+C=DU*tin4;!*M9}{gf}(^AIlz zrP>`ALai~kgr;WOlW@IV-#3aZ>0rfE)9$$^!g0N~69%PI`G4&M`cT=%Y!WKSO=>B@ zF*L)o?K760lj}pf%0Fh`uS86P>ux?AMVf@_$C;Oe~f!8E3-6 ztTILzYFb+1f9Bz*o!NX}iTU|AcvD2*1L99C!aCYsc%L^o%Entc65GKMlZaiCb5wy_ zhHvhS!kl=vT(Y-JyojDGWJ)%TcQ>)#rv3HPb0-od4GjyJxVSRPZotj^kY3pLwJDdQ z_e!W(y#TfjMS1^%Nc|w2D5yuOi#URa>mYlSQo&tnoJe4@g_P(JMw(Z`%;TVtXm6y= zt#9dZ#DPl=D4osqS_ND6=^v0%Bho|RNCq@A*MK{xoTa;;w({7F-y3f8k46!2m~7Gc znn2oy(V~W(?Y{G!x!aa6;qb>_tYL5=_FK9Z=9rP@B)xTfBceF@zc}p=B=`dENv<)e zn(kTgXVd);AO{sQ07&G@4JY|h?v2(3tgH$xT+{pqS-#_)o{e{Sm*6qE>)edvW`^TJHE{Rd_~>#w}z+Kzj5q) z4Ruwh(#!w3-}c*dv+uRA8>ra(TSl$*A8^r^bEUWcbN`P+e`}=|Q~~@~t3LqE;`czQMW0fk zq%~vpA5zDE+t=1bw4k$mv80$!cE?tvr(=th@3oWl?i8r&(qvXG*stD9j}*|&t;KnE_BR*7 zD_1wmPH9i-dUR3@pEaf}+CT6Zzq<7_vz@+9rZ%Y${gVBIjklS00{g+Cpq}7|5#nfw zWTQdkCxvr?Tv{|pi6VG^=Tn2<6 zZ#FeNNMG=zMEY7xUpMww4%luIVQ;Gy%I5LnzGhfn2*)h`m>fC3pzN4K&jd&;cJFkM zx%z7uzg!HqyVWv!$fWF9OI&OCmU+C-;Cl4^eJLYKH!SsD_S$*%iv>SCu447@|!7*ue8+yEY`V~-X=J+9svw_%z3GMBHU-jdJ~Sfgq~&u$p_-t+?C5WmirJo32ACw&n0!rfE;d8Aawwgh zt1r9_s}`-IFb~FixP$)TJfy8uct<1=;y{b5sYMG9m&EHehxlNTjY8w9@ru412GqXr zPrZe3J4l1GO{ZH~54JPMGFn1H-kQz!a2sE0aP45pMa8p2#2*XXx)CFBP@)onzT*BQ z@5@FT%$$x=%X=$Va0q6#SvtY1$?*JtEnVx4M5sm5DpB? zQ7UcsFARRXoZ+b>-^*{tO~q++y-3RcpgyU!Q2Y1`Azbu0n3?yd7R+Q7) zvUMXjqhgm^RVrox0S|KdE^QM2=8H)m>1%rO*E6Wc2UjJ$=j8|4rvk*Eq)$jvM6KuP zuA%TI9eeJ!E3`_8SS@5F9vfgZanmpti6c)NmY?XDlHHN@`bN8T;FjUw?}iT0Ox@1{ zn01`xzLEwhZ>$effVY6aHdyHKC)<>=F^{lBFb9ga$If!WzdVT%Wp;lIC@H~(?|n}~ zb&;shg?DJMySD0GHI&5YpEI@}bDeLsm&BIqB#rrmSOboOf(&!&ycd@c1MYI^;?M1U zkp1dv<*EbdE^eK8$!y-yEsQV{Aahi!QH#3xI<=vK|_cXfa?d zue;c--B@tdGT2{1z>l$-C_2l0x^MuEr>`MfFD{9`i1v~hqJ|@N;?UTA%dQ!Os~PB_ zM4?i5Fr%aIAS4KwtnQ_VAtMQw90Q?bhN$&aPIGC>G&99kmiJh7gM=YMzCO^G5#Cd1 z5@etAxqa2r@oFO2_e|=Ul__V&igibJ%JhO?sP&$tUgjy zaQGMA7gY%P)>Q92`iDB+kKlRPw5r#M5Aj`lySm?%g_P~k13-f)m2rBx(JNP0n7&p% z)ge#S+zmCD2d8<8Vp1vCi-G|4_fX}OavM3?xfee+4T+o0sB=5EyW9TobHMvt)CuEV zY=@~)i>#r*3o*9H$Zl%hflRTTwdp%=4FVHk@HtT}KmxxS$fbcy14FsABsI2P?KaNf z7I#O~!luZy1hY3w#p-r9+SRU8I0gAD@es;}nFdL*{K-H4>2KD9)?#k8X z2$JaMB^pU^;PMf;#=%X<=Kq0QBJ)Ck3JCE%aeH?;iPKD$wC_<}Pfa~$fu>wZ_Y;rs7A81(o%V;2xH9L&T14UsfMhd&Wun16=B_J+3f* zu7`sNY!o#c@Sb%rLeOS!=57hmi9GjobLmIOktp)DO}N7NftTefhRG69g}G{nx?(x+qxtu+Te+_Z4&@wXQ)8;Q|5@Pq}tI* z)QEs&UkrQ@Y?T6;{jP>=Y&8PDt7;@GXG%6lTV>%JIfZ3IbEYC3JI=1tRfKN6s7gf4 z1di^bp!{^byco+l{XEmsh(Uy>dj~TFYK$C&hQ+*#z2IAzD(iWrLWO{j6_u(;)e@9B zu}?|uLPAZCiMMpOm-d`uS0)1D6IvveL}~aWd5#!<1fB9I*Sb^;UJ!*tqd0=`o`X{a ziJ<>ZXzkezt@(Y3y_v<_oNjoH~K!g4#VJ5?({v74@XzX zP^&SWzFKjT%SfolDn&!Rhrx@O8sveCPl-+?RC+!>7Nqma9`stXo@SCt@Q4*d9uq(O@L~d3rSRQQ(Z}bx85qTr z6W(9QvWp~bOy3_sSt?tTysxnv##4Xwum=f$bofrWFd}@#%fTF^3lB5+{5^h# zfet$D*tGTOn)e&qm~hQqPdV<^f&#L`3X)Rly$gSIrebifWe>y2dg`?r1uh>sZW8Xe z=!e;4dB{gABZhP&0X-Qn7?0SmmI-5rXxm5quu8F#JvW-c-hQc%U%p1}HD0vL-8jr! znjRrRR8kcY7z_MzC8pP92R7+ECm06RBhGeJn=_3iaQFq*P9A# zT&XgJ9ynmrzMNcrEG3NEd>?%6gCtlL7L0jfD4eN6NH9wq0-ls<|1pG@pdj_J}t7?xnS4Y?nNfN};AL5id71#U@rb zj9cP%b#f1Xo0Sans_G_Mi5fs)}K^LrL7-JgGh!1?8B+eAGH2kt(Sgu|! zl8!`-?q=oM+{f?&#jNAwuuq1*OboUS?Hl!^D+Z=NE_~6sH9*cbUKdkYB~l3x{<1QU zR6}T$zVW39e!bj6fYc_#w45-E>#&cMRC@u_Ta$mXn*`lWcM!Cr9zEun2W5A1Oyuqq zRX&cH7iz8|8xZ5r`Qh?P`?1wUnru>lA0chNa5y1=>C0y<8%y;;g*7M;YEpMlSSto38G6fx7skQrHo&hvWGOg2qDbUxw()5)BU32UsXo_x2YRcH6e zAWqGGu8I|=QRz1QXq7~_$d3JN8PdG))Ao0OV=NY06bz|4Ju*?;42WoP%Tb6ht8;iy zlKD+hc^86;{&FaU%vhYO0qWYkteR->78nE8##19m7Q?Zxhdx@*58UVqa#9j@)YKz=kP|+ zDZT~cqM%Rt9S4LzwJ802%7E_1jc*4aF#4Nj|WV`^mI;XY}J#9DCzBlU@%08#mM{3 zLq2RLIvLwfErFS!x1CuEC2JRRLd6t^@BP57T+$3FJok3r-c)nnS-%TC0MY5UL@v2U zAVS$6t52(sJ?{Cepte(9vdiQMa%OCWUHg{GxyF+Rp7W*^WGo?pU8Vn_w{)9z>5>Gc z&I0MCiex)OBj}VZUo7#M&l{^s$!T5(Jj-5L-X{?D19`dOJfb}<6Oz0D6+&2MeI*>i z(E5-{XOCa4mCQ%{Uu#irB|`-o(uCz{12ZUP6Ri#?i?#G9T#5k+-4gi70i^NQR--n> z>gncmSP!S7#{RC2ro>dqWq5fAx|fD@0NWLN+nh z+k-SV;`m6ia#PrISCm4w;ORu3`g2?Hl_Lr;VlG>s#Eu-V(R~~0%{xLo6b=bM4s{TL zi?q}xr53%ZaNa(;s>7@YK*Mq*?VfY|VA{_hEmVFoCW1$qiW!_!kpchFJ&44dhQ8K! ze0uA=sPGw2y)FxUTK;T}hQ~!pMbOoeWQ!knQaOZ0qN7xayWhTW9x z=rE^=`)Op@lvvxx#3R%|%x_LL_OiH$zAfe&+j~OvTpxwhX*gLt?b)FMTI}B5%X0BwdBwV!whNGjs2MAL%f$woER-# zAdHhW30V__x1vKPkr$ENsgDY{X{KSOD0+|oqV$?7MyC^^B`{8O?BUsM&vHm;GGk9L zNSb3*?m7POlX+cPa5B9IG^{>cs99h{hQdl~V?$8Hfgc42IgIc<2T>-v=k4aB`wb7= z)jT9VQ>wQ!zB^8hX|lq#y*wZC8|0KAv3PgAnr~w7fI4}-48IUiA{+Z7QV|*s5626z zbt9*lV~EL<3ThNH0q*QDRUEBEBj}Bj6SJoIm%+>r&Mc>Mhndz>{dbBfyM}D0DO_RI zcunR?9P@B9MZLYS{l}7t4Bm>uk8zkfaJ%qEWzrrwYkcrextKEEHM#0_2%k1lBQ_~+ zyp_0^OEh*T=cJmY1UagUgnmUmy2~)0pU3py-x!R~gKJ3X+ss;V)<%5HUkh=>UpliS zm`Ti&VI4rddWEHERa#xPwMU)Aoucwk|7KyX?@CFJywJsvR9>$y22Q18$>_oB{ zFQ8Nk`D-h-Rc?{3)KdyzWXQu7S@q%-!$E{m;B56tYC=4ta}FVE z?ZnqH#2ydx&x#~)vap;#IUf6sjQJ78afTUPIs9k?Ec>6Kb0c5jX zjh>H7hCDzCav0-$bE^O#FUY%V9l{toJ69W6(S5Q2s8^y`m!NN>gts}h+g_W1Rw6zT*1q}IK8(q?b;&~fv}e7ehBe`u-_0T^qhv3&weaXzwD zkS1MLIT6e#AkG60-C<{hxAMmYv3dMDd`O2Co*o7CVo5%xkN$*b@j~!KABhbsQY`H} z`UE2Sik!6L5ju?>`cp}5s4DwT0XK|i5yV!V$YpMYNS>BXSU;q0E6cGx1v{$gMT{M8 zd#^&b$EJQjc({95m5r!eH)QRZ-18lz4T+2%&KIF5|K{BpTnP4DX00o$y80K*w$(c& zawvWFaGHjJX?69t$X;vR4f9kD3EEmYd01(0hXi!1gkE&f3<8aBn6~G^P!(kc945{g zQ|5O@SL-i#BDh*#{Fw*c48iY5VeeWlc|=ezZ9fZ-vaSf8=a9iO(x9O1ulv*KxZLe0>hSWHfJ%JY?GalO{XpCw zU?FGKW<^8kzZXW5z7+g&4^!TmnvA%ph`^W#Hdg}Z4UV*u&BzS7*Yw!~nB^w4xPCsk zr(t6=#c%6uqRC$_-?_PLMdbbBK{(0B{YgL>P9s$}C6A)6W22yCK86Dse*? z+r$HVhE~UFf1NuS(DQB%D6aXvQFNR<(jAs=nm+03^zjMG{ze73nQ946jrw5YO+CMd ztpd+@&uVhAx?jH%~?yShnvIdVkXjX5|SfM^`=m(oGdx@Rm1h$+_6LD1H~Y#%4w<;lyUlRkHNP$F%r@jt69tPmj%%Na zt@OcQ#Wf-$Y-LnCU*eho2lKP%aCWDpdz2VVcj6A=u0~&^9=69^Q{7FNUcXi#3UkPJ zkfXclV?t?&&{3C;V11wLD-8Rr+12j%1Rk`zY>mRXE-D8rcE-E7AyJYXAT5g=wE}?d zYq@ujsmUg4nh(FpS#Xqho|S$Cr4*U&+W1|>kvP2 zNKRpR+LdSaLuv=+ILRwTzJm@w2T#)%e~z6vG+)n+z}9n+)!-^!I+B+OG9f3d4@(1e zJG&ynVHSd@^(YasASuz0tP1L5l2UX4#r}3y2C>61D5#lz0u?e*Uhh1+w80F#Y->56 z^vR9=^rb8*V!yu~y==yE_IuhYXX+5{`thh#*q_!J)GUZx1k8fLz^4G3)2O?C*%60W zbc!(&+p#E++5DVV^FuUUN(*;Fy{M!Vu&g!^oAo-0Uv)1@Q4K`p5G^Pf)hqig1Q|L(<>Kv zw$L+sU~&>6Lg6epFt79N`I+3JTuNfPu407AS~&GC1055NjfKRooeBE>w>iS zJlYjpe@B4ncRipsJW(Y^Eu~I+@;)++e6hadm;}hR#(Oh`1%dK z-~8Bu)S3yqnv9Fl7(8bLGA#cy^?oCi9ANxbkaTm}w4g_>8;!*FO;)y*43uFbGc+8z z`W%@DUj93#He4|UAe>pZH)_NK#P~zFqlJL8E_?RNJCB<|wpU0eOGE4{!qv?JjAL&j zR(utx$q7UQL6SzkQ4Gn4Mhhn}P45|SwX3tv)UOgFUbHFpW5JmVrfQswh~)%s$i4!;uQp6=ZRBpG7I{e7ZOSp~jOaQzF-5 zJ1t<-KG`|sCvAf`-8)+&7It?)6w|$pG|3h_6z%wGv!Wx|~MG*7}X z)Glk`+cQthj0bxNm@6FMWQ|@CL}N*=)LK;LPE*SA%VG6g!gnpkUBR+S&?v!vAN!tT zFR;%u7JKf{`ZkMNP@aL+6_J(>j=0;b-#+aF@|*KvW7abK>Pl?r0uVKbabmm#wZMa^BerS$-o?|bD!Z-!oqi8 zP_`RQ?|L5#+pZ5x9nY2w+{cW$wGf0G%rUUQi0{Qa`lH3Gi~5l=U`kk+=cG?DvV_!% z$N6vF$Zsm}(RDjf$vVHju=DjUoQ4Z6KW2vm3; zM>z8b4IA@xea!J5r3z7=5sj;4q$5&|w6e*1Fx`Q6SgtL{{?w%wQNgXT{Xza>WIiz< z$L-ZWY>SdK;@c8@pfIY5F9!2csCI*-D?jtY*g>gTdMq$Ff;);9S-~X5*#r@FR)i@k z2T|ZEp*6S`8lTp8k6~(H#K}QkGfvw+5kQo$lWWlj&6HFx!<%M?$IA)U`6VdrS&ObB z>(tdpy1n>Sz3!Ehjw+xywrDYPm|FbNXpfdq`s-~qPMnJUl`He5blanO<{HnL9zG|h zZ4lE7X>?;+@-_rYK#~Ncl!OWQQLJW1HlN4Hjqbjv9nm8emd->=b>BBunBK-^2&es` z(Cz2qAn1`!OB67II@HX8$qAzZ+O6BIeEo>F41tngg%d2_sJcte$#lcU7!H8i8Donwj5e_hdvXm>DyrR909Dq|)QN6XiU?;f`-2 z;Sau?d>xUw#$}~k^pwH$BZk}wE)-#I6r?2Z`kJ=fHtPzTF#_MeSg_f%m@u8Bn& zK3{W%)govAqC@zjb^K*M!K7naz!mSygYlju2Goa9!DyF}v`pgn<997Fa4cOB%mJd> z&aSh^>jvhf8mOL&xz&_xR`yD)|m^50LqFC z!V;M+pxNzdbX*R0oJA7ZL4+ltOeWaQVeCRb#*LHl#R)-Yh1jK=%lTzglUBm}3J(KE zI)}F|q1phlA>W^^Ns;7rD6*Hil6e5nCoGG1LNYfh1*TO`lv2jKe$x4%#7(j%D$Ua>6YB_ zyh0v>I;suQc0dxc#_5Q&vnOfN$AYM)6+(a`@v%6uqRfzUNm}R83-;Jm$M|WB8_r3W&Wvw72b{!U6KDk2i z;vFQ#{)XC|zpa{&k13z($S7y?!1_KZ!;Id@ZCA~sbT?tQObF{)HM9F+1CL2;ndqOE zaxW^_>Msj3s%oI9i1?0dlWuK2*NGg-_{wg#qtB9JE7#U^=(DQxt3=^!F^JF1GTD}Gs9 zx4Dw?U8Dr#g&oQ)HTO-N_ncC(>+fBWou9{U*OZdzGtRWWGynX3mo!Iw2uoUtiCa5- zxoDT}XD_B3b6HZK5*ES;jY_ewuq=nw9UPdN;F=`m<=G<@0-Jc~v?V)O?sT`hwPD#U zZEzNkqQ2)Oso1Emkbf5#JI*=VO#XR4C0_1vyn@cLdQk0w(D8JBLD+vz-*8X@ecA~< z?0$k-2bbr_DW^?TuYyj;Tnbl*{4-4!W^i!O(G*i-TPYwZCkFtI-jvS$?$Q6H?7h-M zb4tUf`6c)esrTszPKB;!V-=oJjUiZ8e?vh9-4~#x9Y>@?s%>mUB_ksfmu$l@3{;Bo%HK=}PVuHhoT*BPo(%>kD zK_(-pc@~X(da8hbD46dD!_J^%8)CVz^oTu0IU@?59g05$bwjsU(zJ*`o>kRxhropA z#8zS3F>4L@c+f*$xbWK4&_UQ$_*--TL#lHlB;*yf0g7#t%=un3e7|1XrbOs0M9ir98U7W%$HjRrlenu|zDq`4tFy3JrqHTO=E8(AWf zUq$Xi((L1UTZOHd`b(>PuPh!kw1C5F=gpILEDgZ#_Fq$iisf>F@ia}T-H_h?p6>kR zsrCp7jwA&HdjI8_`Vvn=LQ}R`eL!S``PZ$u;I9P8A80?PDBQh(y#J)c1b zP4Y{cOxyVS1DJXIWzJH^AtSjl! zQa}aAuOrFZ(*n~(FjB|r-QvPhNpPt(5I&sBE%AK1?Dot89(5dNg1WBK?T#kcAi?qj z=n~CxEWu2q98DB^ea-_1C^!#^eu5(?fWv7xy00p2kBrz~S5LQ}fsx`>ub?%3sy=q( zFTD6$6M;!kSj+7K?^sEHd;?n=h#zwVBSC$X0Uk=gb-)#G8$%bIKQg?%JQgF6uZqZ8Ah>3;ngV33P6g1_RgS1AY+I6l8hDL)+6Io zjHU)a-7=fWFo3I!6nXt)F0z*c>CK3R)g2=aRykA|`i}-# z2$X)$G0gYYAf8^@pWk;NaKHb?AOYX}jnwBS_zkCOH8%NYG_09FqK1j}VjR{Sx)Rl2 z(!Y3;LTwybNxm%YXR|>24KqXbp$6$@>Nam4$9-;# z%OF$0#tM%Jnb287yMpmWWcExMi`R(t3`HBuYT&yj^z=JKx$XW69)XYBwf+uMPYrh4 z%QPC=-EAuQDa&H*XEXm5bT{Ev)f|tl%h+u zf$|jS9?UbO*}_;eINTrkwzp-EoI&#DjrH{dPdk=30crXB<}uqAB{=GKq5p^Ul|bfu$)0A>q){YB9vz?lp2 z+X|v*mkNw|+xu8XuYVitGEtn*%~A6*7MV(qq9wn)ulpA)4j8%t9NQjPh9B%TxE~3I z$Zwq3Z$N8nl3ZECXl_IJK~g!L(hi4u6^&qH}V& zp;T`C<{&m)|KUA;egysB*t@3Bavk7;LHfPKJDtz!Xqg4#b)>EF+yzj7V%Z}SG`a~WQnXURQpi$5Qj$_=g_Kg1Qtb)RG`eaYWee36Mb<^RI_6 zTCGy8nlFDGlN|+BGcAQ43WgNsOCm}O7djW_7upxNXlZGOXl-fZRR?GzRHRfNOEZ++ zb8h2`gzAf4=8NVI8dMwbv=A<^E|4Y<(hAr%bM9@e`9V5DRCMd7q%3W#XFaYDlhUG zW*BFxmb;2RBtt6EOX92Q)ru95vly$aD)}@)Ntalg^KAn89O9mlM^TJ8oxb-r0xHv5 zOj34LTgaW9oj<%GKMcG}KLH={uL3aiki-G(0S_?4h;2xz!Fs_){SU#zNZIv`D_!S^ zt~75L?aLC=)B_T>4VxvKCEF`~+)Hj@4xKjw=w)H$l4YYF@oMpU%EI$uMRzi1GIr@S z>8)vD6P#(89G-TzhD3H<8y&OnsX!CKB>(0@nQ4aXzxXL_7!3>j2%bd$iQ;)qGODos4(nFll-aJ#z zI&&?J`%}?xmd7T^hU%uEVZHtz3qE1q^&eKSRiafB2t#(b zzVl&!*=H?UmCNU`f!M&*JH2CDY~^H=WcXzKs$Jo6 z)n{@@rFh#gV+;_T9`FsIBI|ZwaX$L6aanq88ih9XEl2NE6 z{^+%gdwK<;CTa(E@uTtNRLSx_Xr{y*OsCfDY#w6wRVN@8AC_|C%K@#SF=Oq0mHncj z#i7m^lu)K`yVaOpC+({wa$)Bc32QaRRZJ4K=s_Oxu&8{`51|6N#c>v>5^%cF_|fT`q|h5X}L-E6dq5r z;svoZCRLMGpv}l>V$f(=ecZXlsw_|1b?iEzIpK@KH}))1JL}C*ZKDFRei0~b);w98 zRqr@8-;vXyf3)Z1?xcN;JE_fo)$6tWvW`uHpoG=H$gbI9ZMdAbBg%)Zj9tw1=^eKD zXOGe@d5FnIuc+I4woY6S`b#BwdL;R9TjR3U>kQs2$W8Q3YB(`n&4*zJTZg)Vj-KXS zXMnEly8dIjP!Od;N_Vkq&HW*XTpUWWR+`R0HN(%I@6!czApvvL2+ zpBqYTE+wupE?TL6>2%IiTdn%PPN^m5TCMu--a&eUW8qKfFX>EnH>-7^^3SEd%Iv1F z=FJVFj?UbBwpW~ol{#a{;k)RkMhR^Xxo`6PmYK62 z$0mKF<;8$(OF=@{*NxO1Hmd2@ECHXXyN$TJ%VQLM`_37+*%u?>bmjHj?MxrRh0BdC z`_V%s=rcp!wJ=?#fW8q?pX(s=f_c0DHjIU3s?5$Sj)qy>*d8K zU&Q5~ORNp$c6CSnE1yGRHQxog3`}uiD1LKKoR8}%@~wRAn0jL0ORdMi&w_)}-T5^j z@^rK_tP6-g`?ljO=w8%U{xkd3SFNML%l(=uyL-(8-J@M^R1c|x(Ifw^=;-3Pxzan% z`)S*>>&#dGTIjfcDyE8f+9&+$zQK11ICeb8q^6(N9qir77t6y;ayZr!00c)|GPk4! ztG3$dq(;pm=;_U7F!NEo zws=%aR{mi-Wy+bC$2`%2x8Y;Kt55@VbFz{>( z6%A(%Ss7kqI~ztr6FVbQMmHP#f7W1N{BFGeSQ}GkLlQR|Yg;E?HvzK$vf%y4|3}P3 zM)F@K&Q=0s8nOx`!gh|PBpi$^jI3lo;7LeG_#I8mc$GxN{xAIBnE;u&v$H)f6B7so zVg#`<+BpK5Sa^7Nn3!3aSXmkVSui-c+d3P%G1xkh|F@I>&yR?yld+?Py|aa#Ey;iU z8XDQTI17-G{U^}>Z2x_orfwGhFOsd(|4r*(f=vI>FtIQ)GyRY6e^CDaNO=`3+)S-C zL@aDfZJqwb_`$})%+3E_fd8NB|AqWtP|g1bW#QrC{NK?3rTV{6ey0DV@V`>}?|S{0 z^k2b#!1FWxPw{`i|C;l&0t5RACMhDM;s$=M3;SDjaPhP0N!P$nH>vJ^3-!CuPkMvi z=#{8iapUS)9F8OTydjD-qpMB|wHheY@1kjQ1=4X{357OHUr&?XcaL4|c61~c$mi{# zwN$q41vV!$TMKN+{(kHBdgw$-Y7Xv3aL)RLt1=#$dc?HDmGF=60KdZN~RCubYyLDOQ5u~ z{`?j;KOOPjdNH9^UI;6I_Dr|km6Vhee0Fx$TDq{2_DdKyerB$^b8@(VRqY4h2Otr( zwCL=A$hkF!ANmG>@#BYbA_@KmT`@Y-2v7l^w*#qvG zx&h(q0a_2RXzv@Dl-Ax7GDd@QV0i%DS-{o*6Yw70c= zee5i<-+k|I)%3Uo%I;QlXDw-PSyi8ErrU2Z>$MkN3~AY_2G#G{;8g40bR7N6v$;Dw znr~Z7wBte=d|0d0=6-^NLmw~BT3WzH$KU?AKiV$VZLK00OIhh~Kl5vkKG{68+i&e3 zo!oS_#<9}@WkC8hxvi*sT}iLO;%zl`Bm%9<9LwppRA=Mb*GE2`=3R@gyajb$9`|;d zu4n+ZT3a9{8>{7ctG-3_s+SN~SNMY{>x-n{jh^WC^S8l`t{@zcS1n!EIAl9Y;wl%* zi*Yj*hJVM{s;R##s*{~*%Xu$zB(_k*x~*jEow<9n?UHT(TJgKp*>T}vqjuV(ruN$I zNuX1`^TRujxi(Rm)beZl4Z<-NV;2(kl)UXycT>aW?!{ZL+nsBaqf1FLGZ^#r!s8k zv&Y5mwHi)D_X9|=CB|6d`bri)DHUH>DJuihLgrS15qFNfF0UwcD~_msGA7eMNd@hB*34G27x760LzZpi1CgSF z!gt%x3#8`d3n_L0Ed;((L?page*)Bb5_}Tyu3vHmm6yVnd!j8U*1kg1_YC_-1OS8Y zW^(;*CYV;ER`HPfkTaaCsn95!)PRQBnl+2p+`*OKH%q^;)$_?V-yahbGpMevE}P0w5R(}Ef5 z2|t=6%vqjd(}De_r$bD!Pn+UK#bF;v z2~#7lRA@Aw zY=AQq2)puJ+r87(ZBr#z+*Kwl3PHFS8Ihm>0MY_>9vHshMLxLxrx^b!i(hBN&qauD zR8^+$5n)l#9ECN;o{XHfE5949mJQW?z=QsLqo6D%EqBLaWn+y^`xEF0PbNA@nV?Qx zvM^FybdNYV+I+O#%j4EV6v^mmfM(MN1;HzqM@r7?$90QozuT`^{3j;W3uZ43?3IOR ziu}Zkkd8p+HEkg=A;AEWB{nQ94DR+2{k8xk-d-ea0%q6g zc*eYzmF*(wJ>&)507GP>(p){PDaTV8FaVC!Y}f~ejgFPE05Eg zt$VRPO-)U4gJsgyw7*3%7OC>cibi8zHX+q?ttS~}Rs`f?j+lx1=DM002R3EKHsDMX zP8rHYBMULvw9w6>I?uOJ}n_)R(AgGhRn4gUq#d$*T{PQ4#Ndn5QUfGhGjn z4B*t>{xx^7Az^y-7~dV~65pL`N)VO&QhTUR+{IvnTIYPv__TIyv#%b0c53CrxE2g7 zIy)-d6X<)13|z<_{2qmLwL*K&DeqVvs?P?%iyd>9)4bng7a1-PB~}g=a~h?wlHPvR zK03H8+C`@FSi1C17Rb2y_kP11ZqrpzQt-ZM2 zJT%WX8p9TFS@x{wOVv^W$*~wxB9gP;(Wg8fvvIs<8=p4`x$;2CP1H2B6b#tuh5#Ih zdA!clZg{G-7bb&cWj+t1$!B)+W#Y>$qPj!aLZT>7NA+N{e+d;qm~1?P)aELM?! zA<2r5kguj>`1D$U77rH-P#J&QSb=vNa5v8X>_=>K-_r)o0|abVZZD#Z`eE;c8RCVMR>x{`QRo=W1ZZMiKG(W4C2+E$%lR$uZG*&_`VX0L1T3i*1RzLz~&8(Bx3!Ky=?D0@Sl=c6WbSgY7wCV1zSBXF=^Jc5=zkey zU}YVn7opQ(X3#uQSI`JGw?IPe|FcKtR2tXO0U)>_skD4n!^Rxk|Ng3%#qMa$6V??r zl+BtH&z`KH7H&io^?h?~ritIfJ;IT8xDwr=r%`-(tSMZIu}{ zqrj~W-!J9lo7cynI1cYEy~sUYm^@KC3gp|Ph?Zks6!z^#TstmXu}_$^SWNF)iEYaD z;u(&I2p5L(H^V96KCK9}$`)w4@P_@`@|sA@O*qn=Ndr?b7l3ft7uqiZAqtYfmR6w7 zAP68krF`Y+1n(ywhjMMQWwF`BMr@NlL<;!BJ~=ExK(x_qnQ*pLDXgWH_7b1X^t%Q1 zcKZnqqT=e3wu*fNX)V17ujTXh_O`}i9#9XNcfA#S6;0Ls&9$sng-&JuTX3-_DxYFw z*y&tD1BTe&Q{h0@@AW>P^Wr`KMFw9aIVk;~_w({*$oY4EuKY9ZY7AvVj(xOTvgU<< zbD`-Uj$ikO%VtXy$r~)@iE437Gr8O8Y1vIUxtg(gu&FWMP@hdD(&A@>GI{0FQ-ME8gFUg0EJRd z@X8BY8yq(AL}d#L`LhEX@mI4vP8+>4TJ}y==Sm@bNxo zch(K#wo{I9nCAVnjkbzU8&1>SOL<}5Iy&?|DJ*c1!P)-1K;59^FME8Cr}J6(*`k8P{4cYdD+HgT4*J53;#)JAU(GQ!T+0)Rf0a-~&IAZD@S}m4Z2c0hJzOln`X3s~N zi4+cet7RL5_DBP&<=_62DwVv7h2>KU$N99+6`U^$^0#{jm3^ygqSZf!bn<#bAENZL z+4~1?j`9JX+<2!83zZj=dI?ps>qSDvB(i7CR2CX-F79|;8}8)Fcrhkr`=-7(RycRQ zUQozrQ0xwR^=3$EoHpTVm0Gz%0Wjt(HMyxWrymhaT|J;}?-0FC4_reL!!&ja|NDDq z3QEdUwjd8d1sNHc3ZCr}RUfwP%I#}~;&b!pQnthhpzN<~q2ZlXV78Eq7M2paQH|xG zV^v9Uu6lFy^WNq$%W34D{TAkOzG*y+8GTh1N;w1i=^2GYl@2?8a+VYA(!p@9ce|?u z+plOgrkEJ{o+KB+y~lF7{^jy92bHfM5|I&{caLqiIrk0gN-a+4m#s~Lw(pbZ8g-1= zQTSZHBn^p{s1m%j_cK8k3Dk$+z-lAxXXZI4zRHWJNXb#o=S z9U9tzetkgxv@`s7fA*w={Q9X_Z|FuCmc;j%(|WZn6G%rEx79*});iC26OUqlQQ18R zt3Neh%p@!Hb_sd?1k@kazv=|1aZpTHqJ@h1UXyu4$-SGri0cH=2YWGP3wtbnpKvX# z6n))0X3)J#YJjPZDPpNHo53yFQX5?H%dw7}(c-5ucj1^s+A_86%!m>y$H}=5%U@_1 z@#gj|Rr8`80d|azEGKF^G@cwDobC zlBMHS`nu1`E7Y!4XnG598eXzLRxc4E!YxN+xv#zrIQ0G`SBVR|vPjs?JBQ>toU~oH zLKWAQQBh$Zmb1~sPM790;;AVer`@wmyol*|7QKD7+pS*YY9U=gYr~W)}TV5NOuuE~a zf0wHFhdt&GMssw7UqJ#ryu)29q^JijdFiKaVgsXj@M$RdW=zkaL)U7Nrv+|MCNi6$ zY}$$a9IiT|gD}2F^F3-5Pz|dIpj1KgjWv%|B%tq1bw&>me?9{Vy!TdD^b~?&ZMz_9 z&+Cm>Kz5tgy6nG5^HQGGL46rxheY;Bi`3#HG~v2*R)%KfBLLqO{%LtEoahV^Vu4T5 z{5w!cF@W2fpR$XoF6J`y4PWe=VaD%ro{T9Fs7;Py5OIM$h{H?6(y?T11y0yP5nQeM zbM$&C5O#?zjhz*m)E5_jYIB4DR5Vf0d3hV3zSp{cxz!rLmWo3`2}qIq)#edSYy_b} z{g>q8cRJFs+;kU$Q(T?vczcxbZ*rk(UkTpco~ejjL&z3$*Z}C~I-!k*{?=5tr2s50 z&OIib(x5=Nfl^wg-HpTyKzO@rZS5ey-o=lw9_@C|Hl=(!=CHQKfa_@Th3F28exQnf zlOH>52v_rDvzeH;(Z-^t*|1!yl-8H6q^5tZ#RK)S<&vy})wYS$;o<5tEX1z!Tg;|6 z?xoMU&HLxn8O!eazh&c9w|Kf4#xHKeB(411a+zh8?cL|Nbl&BR2dnG;yuwgK#OSrp zMa{Yffab|;BRW&!PS0RNQ1>e&E{L$!bv9xFs+$`{xmZ?6#!>nHayB(iN>*P9RXp}j z%4si(msBFpR*NL@jWYS~x02>u{s=1A!EFNRpqUl#6=t9(utgC20$k$xS zeiaPtBjce0rrKI&VJ>g@x5t5CMYZHrg;AZQFx!>yvAXwHlx(^rg)q4&--5o0vnKylFNJ z*eO1WlprWZ988R~MW=ar=(RssbKyLoh=?ezI}T~}O&glGMx)C$D^#hno~dKvlU|kc zy>F>X{8oWTVAw6eUtoM`vEFJEc&`2|ahbv~|IxNQUaBj8QY>8NpR9zE8Uxh@) z&oY~K7{SNEiE1Ir?(grhT-vzhD{p@I3*=`z-u-4MQA zSIGR2??CRGz+RlMRa)n(m89d=)@LFdCL1!2qeTh^nCIcILP}AB=CNAuc}pG8OHgR& zrGGWh>-VR?S`B}mg3K$;&Fpzh_b;XSq?0Am^p%79k%g}{72)i?-ftwls?|cQcEea+ z*F*8P6opjOB2`8Pc0?f6I!ik-!mD;4C1~7cpviaxjq+VZBg{v= z2it5?+NfdIZ#5k>dp7I-u;e%a(A*4)0u5-k%M`Ro(G^_)Ly1HfIGG8;J-Nm`)E8|y z+Bu@`>nxZ3C^dX!aFcV&6G%pxuLME60k1edP=DJ0th-5#V~qh@=F= zq1LE#hj5yOV1ny|w+OES_L(ma7mElZ&F)MH&y{u7K=^>4Yaca+8}6=m1vQ+J>z!mB z!Zwe~`gw}OpC?;@2p7e8QCQ#M=Fe`02B^Objbw$)7L2ZVb(INfmA=e4G_xT55c!Uqw6E zT%SbbjBWUn|DL?L+|8TjV~?GfX8kbkCbmXl+(a)ZKAd8h7W;U8lFpw!1~^t+^2(SC zNtv55NOaiy&v8_EOi$BHS08jlSE~qcI^Hx#IZA!HP?cWNuCclh5i?v5VK4LHUA$d; zdz&q91#u%?d-86lyH)4pEm8wDavY@F1UfE5lz#$}ZJXx}%ELTpnqw0Oxi5yGWN2W; z3-K%PrKST){l{cKB0tOZL>&EcxP4*uJYTO`ZkJ$ZfF}~pwslX?bu;D5^J>|aRb@UHbusOn>sGd6S@R&LHzK-=JN z4cc5UUZ}&xTbipccq@Mw^0>s7UdL|&ban0quqP&z;$S|z_v5W09#jUX-WZv;pN#3L zu6#&pd$o>>yB3qP+fB85o9f1Yc1``26#X}_UTZ`cCidmea@&Km-fY7JX1N#rML(>{ zM4L^bt*&xy{+sgd*kL?A=zrBUm^R5b+o`V4E*sUmUSB7!DDP_BhIlcC*?U-q5k;M6k!3Po2wAmUel|~C zDD*(zRTq1O42VsZ5Dkh_>tz+x_Cno`jLH%-N-Ff*VfgOgXDRA&@r_v3MG-V= zTWJ+~rXX0%*IGz9?KDCrTlwPR7W>%MYOBW*`^*1;4l(mZ$CHi>x>wZI&la8?E41s= z8X{&QZO3CDKiQ#>j`1Gi2x(m+nV+gL~G=M+j2w?Z^Pux4+kWi&o-4P(m0AYp_`) zXm7F^0!b&;Uzi&7%hScCErMs(ryF2_esLL602HB%opUvg!qkP1a=+VlEM9qGKQ|wK%Xs`u6l+*!G`l_BO9C(i|%!U)u%; zV`Hq_E)aFN(a738({3PBthw~j=ya9$7D%lbo~U3h8K{O_8;+C6c+DolCEIdyp>yiI zEXBDdI`cPh_(*O#-Ruo6?AlpF!4EF>-XBe-8_(njnOzn*Rh6q(bG9S%dJzqBswvSU zp)&_B)LTZ}KCICf=jpi|>1U8V;86m^ zQPWofO-umAc{b~hILx;M&KGMzcli_t$~))`yTFJ+>GcA2(N((bS_e2BpLYpFLhm1! z-C?=;bF=y0oWUrUQ?097?`Ma}H#7BLy`xl_zhj2IgMGUnNf~+4`(Tgbc(p5EyjR#6 zgpEiH`hwW>4)pIjys}dXf>GSgbW5Pz=DxM5sj^AeZ-fBaw&sJ#)qw76;L``;Q9Zg50HBh(gPl2>30#o>6 zQ$P1qc~UwJ`FH`tDPcu0<1KrvUXAvU9u9AGnRL%+8Wb03YzkN`kP5A#!h)=c*h?>eI+@xc!#kQ0TQGPMn8LRU+ua zMVRiI9H$4b#vIcxmN|6MO)rzljBM4EXs?7mIAwq=cQEE8EVr^?SbDeCVhQ)-*&1yP zbRM`7RUezNNHmOuyR(Ox@-Zpm)$GQQ#vwO!tS{5MayKP9x`g?BeP=gQBx~h$w`g+D zf9h66%ie!X+#S$yOHrWI>~Qx;V;-9}B$o?y#$_{{dYlz;@{Z*8A-ErxxtZoa%$Xn} za#y3q3f(gqYBK|2Ttd|1wbh)$d;#lt2FcJM8r&m zB7vUAt^Uf8GdVmcuOGGFVQ+?1qtl4T%$p0AkotGYo$}i^_Hhz{H>35^#`NC=Kh+qu zLXjdtlSsv+sc0LnRlI`EUpCL(zMX#3b{#0b9ZzNyj(I-Q49k1H-S6=(9vrVOg=Nv@ zi7I)7G6k+oWA%|F4GoUXHZ0AJ7!C;Pe5nj;4IF)gHHN}0k3+By<14!r&BFGd7rujn zmm@=TUu}@SUbnvdKUXoGj@}JUyq^#0BTts$2i?b8sXwzDG$l8_n$G&)EGWo=E#7)cZ0)Q=59nD9-YwoZ>zH*O4u0x4d44ID9dv z=NtY}tN#W1CF5U3d?@UzRYPM)R3v|NX}_V^VlZJL78(ctH+ElcIQ&qBD?)ykfjlVX zJ-gU`xok*da4?H$%M+$p-vi;Y^XkXOzje+C!JQSq*F!4KQ*X%0LOtE*?J{t-TpH*+ zGF7sOL{((_P5+}-aHGllU#q7d;{{KGzsyIhcG0`|t7_GLPw_WDBbmfcUG6jKd+uAe z97Q0(Vi}aaZ#QDK4>z2#JVD^}mJe<|Q^(RloAPnAMu$0^t;aLX`{#1^L0J;pPD^?a z!#aEl1m*P4+lYeeI-|d=GN!&sX&51sf(-reZD%qHhI))y9tX`W4=D0G8BSAu+UMBB zK99OOY)9P40iq-OVB@=qA%glnsv8VvoAvlz*=Hrlf;VHZEh&(-YE~Q;aKMZ>Kt>F6 zJqLToS60hw16}^Hah)BrBK|y2be4c89=He}32PgwG(>18uJoxKZvvy?VPUc!D^P^7 z?SyPzY_pvN&#K^f8+Z-p_I2pH*AT(Tbzjx`hN|Om8K!ajP`uIUm5%-;Z$EUcXCAK? zjbGgzYx&ae=9&V8B}?DkmKThu7*NWXhVC7-TG}mM9KY#V1nm_G{_qpr@W6Df>O{|9 zcNtD6_6o0nVR=6nM&_^`i<@N+fDA?jzrGgC>L2mTyzVnb*$H1~9EL8g9+;dK3|D6S zMCW|pM(WToB|RR?WZo<3(!tqnY_y(AJ5vK%D#Ic{!voV|jvS^6praib>#R`SN$g@W z?Keg-9fm=(K#a#E!85dqU%H9`9oIr(*(^K7c{gjz6 z=D+ruwgrRZ$YVJAhPU;eQ5XfUFcP$P`|Iy^i*(jOTt?ANA&fq>hm7vDa$kd;BQXa$ z^rZ0h#j-e7h}%|HK>UDqy$L)I*s=+|uSZ$zbNAkKi|UG~^rw&EFtNlX; zh*+7macE|anJf*@_ud#9rR~CIzDU}Rppy+n8Q^7Bu%FT*axZ8}&1>r9>3FMdKL0^o zR_M|jgJ9+uVavJ(%nlezT|MEiAx{H{-@rGk*Cv&FZL%7IVX|@P~g1 z5MR{erT*G#i)t6392~Kphog$d^JB0|-Vx094e=NHKqcO<_-muv4zbOkC9FFtJrjyv z{8vA^|NiR8P@)-&nhd!(%N0x2S}81wJQLVx8{^8LeI2VzY%+wslbZY)K`2VDFaYPE z=gz9dY2|;_Jt11%OO+>Itfq0hsWOqpM?AV>>dZ2|Gtdp!Z20wdijcwsLX8$I1AW({ zT{W1Q9nSGQe%#PZ_k*if&-r}{fUEGMP15an-&tRcuwQdeCMj1WGxOqr!(XZzsB_=G z5o5g^?juPhC8Vo{-SjqT{S`4&ywTSd7+>R z>LZ${Pq*{vIXub}61pywu)MaC9U40m1Vi`Y+Ho_qUZl)|t0JHTc>J?Ec6BBK;5d>K z2f%}_eun4;%mg+kPo#3r(nC?FMq?Zd$!qr^SEtaOu1%Jbqgz9!b6NMiaBaned_HRv zF-G)&lz;rYL0N{00*=32i5XiA5Tgb1_%6M7P*$3pv6dW)B{C&d{pGytuNo8^&m7sQ zqPcY3097DV&zJaWhusmOl>6Co9M>^ujdxKhME<|O_}%6UF&s6gX2U{HoZYAhxlH|$?3TXvtm2EG&%t@mS`W}Bo1JNSIid>p*& z2#AF{w;siJ->|oZtc8%+DIvv$rDe5Q`rOQVZb5V%ne<*>D4|a^ImL z;CiQSn38aqg1@{Nvue5j&*x!ls0{bSHPez><8GaYs!cICDyFVyvd_<_?)09un`Fx* zqb0>v(YRCX z3x*E-jN3Jhj=6Ot#T4NhVZ1FC4d`kk{Dr{avnM^Bohj6239nceM0#{sG5ieD8+-t5 z0nI-jzdrrQ`IJ8DCu>iZN+DyQDe|U&=ia}uxnd>dS!I)t?!ipt^1l4}tL$)7sm@%< zURIY>lWsuOj2%h-X@9;u^@|Kdb-#%sJK@qQL133hyU(Cl&3}jC<9=rs7dO?w!;}QC z;vMO>6ht}8|L(mssBXL>X}mD5qs|K2U=Gi*Z7bvYsBuB1F{TW5B9c3t6=$I-$=@FHS+L~LdT`bfk3#g{#%ap z**4WA#Y4#*SwrRSXN+vQXEdI6ZWd%~PtK#=nTg=Al}NW~5l#5!{W#M7-l+3Sn!jdD7-k#o8EUyNh=HT3WV#U}REd%U!RgN2p@Zp&x6N z|3DG@A*SP~#w5eqV)=58%Nw#pcuX#y0^IF3xT-hUa8@){Fve0H_>q!a+ipq_7>XotVJ|g8m|(QR}|b}xk@}^bxHcQ zhS)SzY$LWb@=X5(XC-ueGqQRM-YtgF>EspM7|Td|zpTP|DO4H}eCL1WFBI>R8jbEtFIl)3igin~w5?L*y{> zTXO!y26I-j;x_%7;qZH!lcxzPH`k3Ccg0Dbiv|9S9(bIzik<5~kmEOtl@vW>z-(Z3 zWo5-Iw5?ctXD)!as}}Mg_j>>Iy*_thy5732RMEAJ(T~222}1|$xyiNgnE_M7-q_?n z@vFU=qmKQZx%l&!SXqE%T1a$4Od+I+lUiM$XO#{b^1J4XW0)GPj+kOZv#BA~(k%AR z5*tqaFFKogk!Mw{{(Qj}=R5G+np@%JOn8&hY-yws$H`M&ySxY1TRq4rp2Uh_1O&e; zRf^FsjDt~*E~IA76E~5&+h4gSv|GZ_U&tx|(ZEc1UJsWeTWOv*%-hHP4VvdkLeS2~ zG%$z5?tQ(@xLwoS;gwEEgYEn2*8<~l)uy$p6T5+;(JyOF(yGo&UN3%cqGb`XQZuZ8 zMwJg~8Jj@5uUmN5VZr`-6q}p$kZe)MeSrBw4LC|P--i>ygWnl%Qt1TyPpm^bp({4K zp*l>f=ggF-6hTisG0=uTmA(&3YdZo>4JuQSa%?l?-LX$N-*A@yQim5wt&nmg_sy@0 zmu-+nqbnxX1mlqTDFl~A4`kft+uoj^!^$9nkhNzuG<)ydGEeOLZ)Iff<$Q8}}*;;Wr0zN?|;yQSRYou+r6dE}({d1Mt3{H?2D5AJdvHi#Xc z-69%Y%xSK{NC3MR;%P@+*}+OVDLBmI{kefI;K=y)&d5l~c(|~sl4a|2^wMR%%DCM% z8Y^VE9>;0|JC20Eaf4nUfPRi0{CS+344^~Kd>J4(Ooxp3xuEf zxNz9ME}EKeF;CK)b4f>Wap6l%mPeK!r}YdE^4(2}3RWHXP-0V-R@N9iQf-vV4U8V^ zg%2WN8-2b*x4iygb9?vq%%TI>XRMglHMuUv9O3rAv)gTgt7mhh@X^cf>HEHY17_K? zt2VfM{oc2z@ijW(T^3RY*_k!#JTva|_y3#cCcQLz7TDPhP!*)K*2hQF)$KOe3Z8D? zPsaJ@DP58%PIg!Tv{U&e_P9&BCL;bI?qMgFm()Z; z0!`Ty!ud-^>y>3_laCXL-w0j*XsLs%i-DAV zSr}>XB95oTD4?OdeMRHxasT~ErbElUjD%Uc(qu~4{_QmHjtRIAa|u6?YBeXdBB7FD zos1cLvzT&TW{JJUe~ea}66%rWX)%~iFkYRxsOe)B17E5_&bP}TbM;7(BPev4%pkzHbW+ax$Z<}SXTyIID_BEJE>+9;= z*WAt6`fC%#_)3h|3WK&txH-Oc83Ii4{e1c2Jj811{(+d`d}YLq!iKm1^`*jMQ{ddk zHq5p~N13%vGA3v~uk3nuPhT>H84Sg3={l=MPQ1SkX4=OvRKlGIG`?h&fn2&XzIO?q z@4%?02xpa)DEud)k3-a#O|jL>2MWR7K9C{HeS&e2+ohi^E^7-voD$Uf7^^I()=0I} zo^pmVzAU0NLsv+5wl0yPV5ce6Yc&E(nB!jHxlbl1DWKE`?L+Z~U^3lq?p4bVb_+X2 zvP-;We>uf1AqP+9pTtpx1AXrdZ)UCWqW#u^lCQE9&aMU>Wfxd$nMw zjmCDPY)2viR)TM?oqV(O<<6?~`|ckn^0rorWSC@Pk%*oj`Pj5KGw|ozBQwM@^;y=` z;#pjj=?8-alXOnoq!j{h6mRMw$M>DZOreBI#!5ANlm%|656?Z7xEtMmCi&GL>+t&9 zv)Ny@9`7PFDIHO$E!_Q8&iez|HI)+Z(@jmi``w+$-Cg!Hh0#(gZ~L$vY@`s^8_dX7 z^%|>GMp@fv7fjRbSDgs?5H9_d&D((}bnPgWOxX7{BCt^aBiO8#2ayNPQ;d_@P?+iq z@(lb@!hKqsR`rYw#9ePJ>Y3vzlv*j62=g~NuXg>n2b-9BBb<5NtQC_)G@D`e`{o^a z>6!o!tB7Rs_@vXb#Z?sAsOZCq;i^sHj#rl0?ep{yjq7&^7td_b_9C&AuSFG(dJj>} zw-;(|3yz_Q%L$^409F~ki$dDBtp_;Wsc7b4NE&CViioZz>uQrI8A%bU#e=n`LoB&1 z^OksXGv{7Oz0L-sWgmDxV-kZvP^a^>T!`c)WAARDd{J0|>wo<>)etsA)mLt)UT=@b z2ZDhlzlG-9mV?E`OXBVhFIro^Z!t=hXFvkmo9tOXEJ$EmeS?D({Np)M$YX5(#*Ps6 zy%Fr?V!{WD%b%JH5Ov;wo0W2xtif4fR2>Ofv6F|$ootZ#vy;hQM}QTg37BL!yX=z? zy(Rf{DH~Y|*MEUCpscpFWRqY56-hkfyT0>CH@OuWIUIQn#u3yMk^qxCUKuI^jHfdG zI3>$Zr1N6kPPRL!wtdqatw81`K zYN90beub09^Wbf|e*!DFR+ir7Z>P8ZNNX~UJgBpA%hIP>Gb+-(duaVh@Y5GcwkqTo zT5JJ=9}E2#h;sS2YQh`ffUch5$zA8Raz750O*JkAc52C(hU%kUoRmGh?XI3d>o;P`(stPZTV zdsWALyB5->6U~bEQ020<0VszbqqBacKXht^5d7s**w~mdQ(y^ct_xqf(8}u#`$?NW-NuS zH*htR$Rk!i)SF3?F~V-UM|sKgMj+8huJC4gsQod4pkySCY}SyIi})$VhN}e>7ad;Y zZ`IMw#-bk?vn_BOwu#-a5n_|IX8*k=r|Cuq&(!I#e@{Q%exmoPv5O?!cn{u4SK(y? z61mYiS^E3t%CAd`1|t#K8QXvd4V!K-n`B6<&JB}vN=r- zJ~s^Qpot6kmdiYY*d+>>Z0@_?Uu#vsN;S?qxyii4`SjY+EYgz4UoPN_(9Jn&>F_U; zhxx8M?}j7^U14zHMZ1%!!Y?m2{w;y{p{ExLbOpMV|5(G5O*I|d**6{^)=xG%2#>rT z39Wss2#=zCk_6xo9KdgyUXhEQv|gD-G7$iaOwjIv(j31qaNjwmINdnBpNB{aUV*adzH|OG&QNQWpo(_I$+C z{FW#K*oU_d)Kj1)B?E1>g)!M+*qnOYvA5(}vO<(F(PXis=}2l#2gdEGtn=yMa-VmSJSF72= zDEr>0`63SOM0ZNxtNWiCxA*erhJr*`7PZEcqxy+`UU9~0k-FRV>09=$x_`$5I?Jx5 zJC(x3m)+L5Ox>8Z!uHW%Q6R@oqyrIxNHc9+uW8rz1~ZeAZQ`YUm)q{Nbk_dhgPblw zps;Uie{^`0@yxHDL>5s=jzs4c_SxSW-_{%LJ)v-(S3e6zHI2q8m?ZL4PMjB&U!pRQ zxSlY)fnTv$KnOuhA68deoa?q#3180@hTkgSdL+%$O_m0ya zf^=oEKp}8HaGYjKSs`e9qhN*q^ADyP$7J0zZSwJgow;YVRgkh2*6Zmh-&0hAKoe?j z6jr2eJB}s4Er*dAmf<$2GaHw_Drqjnwm@$r>eqNH5ulW@sGxS=VFDh+G$>~AD( zEst7r&fC0G#J73TJHpu5?ZmY4;)VL;Y92ZhX11F%Gs#n${(6~g#Q2>GGtkX#!V(B% z&SFPrh><9G)@};HWc~IBgG^dO{!IEU4S}_I=no4>@!0_465hTow za$4Tc7r_Kk@{~pE(q>cnQXK82YE8eAg`}43U+47GJekx@3#(cWJX3Fnv@esi&3Xrj z+QUPk4OCIfrVQJYpKbEqP+H5n==KuhsD3F>45r$pbi@W3kO5g^30*U*VGzyh3QENe z>&B*A6_hHUPT|lPT`$B+xTig*GLCRou}lXq`Q)K!w@JZ{KaNnCU35gZbL2Gf2AXvQ zl7n+GAah-A69u$7qO3IZhLApZ~>d3<(UXkep_#{2;WrHTWPBIHIa)F!P#QTubUS)5Oiki8$0mdeY708 z(a z+fFQr2i};3%>t%XOMA0fzdOmTIA5ZILD}F584;F$u3Pzcv}ws~*f!ZITEdKWlKX_=VM@;P~XRbr%!_@8&_&6~yi zW&Mqb!j{XSbGf-3*6BINA!?s*JZUTkFqieNL66qUn>C$l(eNS43&R%b-k05o6Z7Ix zPsteIj!Z3}H(iSV%>roQSdzjsB&-gxluGRV*V&ee7n8&tov_)4SN9rGu%j_k!fM_5 zWFAp~twat@0k{({8Cro2@A}3@nv51gIQ#SgIM7vfoLXx#9g#qrbY!)wfpf{bUTl^F z+#hiQlqctIkq{h?lgM^mzMmOH;P~R&^#HReR=G0Yz@}5_Gmhz_J-Ot>%sy~gu6Je! z!^U^}6)yQ6!IlnJ6XC^^{?BH1(pC$og3$n!OSd8uCKnJBx;5YRD<4P|?H<9?$QIMS zbxG(F^OfjFAIQM&|75TRQg;tK(0BCN_zUg+)wb;{JAI(FdHZ{1A9<`MD9~^&l5XC6s;sHP8)X^Ac0uNW{SC zNKnbjvm%SA)9joK0S-O#Opf6db0gW}aW=)5OD$xQv=B0Er%F`;-#FZ_8`P#tR+v{E zr&LwWZ2Z>RxFQdRDOHz@E@v33+7k|1p8&nJ<$1fO!tTDuWF1{+3yU_696##sNzt7d zLHlf5FU!07i|w(GBf9IqFqHeRq~CPR5YA@mnQ$@d0g$#WdumooU!QwJ$Tl_ZCO zTmB|&;)_0kZtJr*JA0(@CN`&^0Flmg331!(7~4KeOKP4=`;!^hr|@m;pk9H z1yN()u#@y?j!EuKB>OlqGy{`)Gko(sTynyAj|)4z%1wfeUEfZRUv~SEUXJs9j$ZqS zXZ%g9o&Jb=#V^)IFq!Lmer+GSJzmjx2Unz~*2~Akb7lZ&Q`jNqi=_6SE01y^hL^S5 zdcr<^tfWAx3wNawW!VWQQs1E7>~FjtQrTx}|1b{uv?F(aZ(fG%F5_>zy<%y;owqZX zj?5b8wXm_rK_ueuvC~EEL$JBQ2wLcU&Qm|tLWS?QhaIdH(v)8-3 zC~>r#3vqp@l=<<6G z`CjUsF%`5;L8BxsIx3V>iLkA!O*c)<5LPqlkSbN09DGO39vu_)gr=soMH>;jp84U< zfnw#Q3{@JkQc)z-SZ>*UM_H)*Ilf zyI)|P$r}dTOtSr?#*Ozwa>@6$xq;lUY%-|Gs`UVWZV`t{wkW2#<`bsNla=UML&`lJ zzkPV8lT7U-Q%uPfg1I^2aXbUc!B>#4!1*3`@LH_*+z&k8sIX-t%OhZDHG`S$`W_ec zRBtnXPS?ahS$x#mohy-ety^}%f3ZsA8$0ptELcn%fyRu;y~0Vt}adnf(AXVnwp-0yd zvvmGl%LRdATEG=u19J^#E3WQm@B9}m5#p(!6*hcc7=qHA7|-`jJvuth_|v2o7{6;; zF3DtvU2d`ZyFBjK4i#lQfHhuPeXonWed&v)UsTHK1gTLK86 z7MzaTC@5n#xr)v}Rla|ICv@&{H)hE*!|fE@<|)8(Hrt)km;-7R^&%rFhR&zI;Er{? zFan#AFuz~zCDXp3s#R=k=xAp99K0fqW;7@kyx6V;KlWq!^q!*AOCC4SvZdVd1m7HY zUJ743r_fKQr-save}42TJE>X+I${JhzNm_96^Q`nho~ z*IWvu-D9ypfA%$pezlHj+F9!|l^}RYeH?U)ytv+MSKn6%Qp2Bs6$vQm2m97>n@vQ! zjo`0b*!tnn8;zu1;JkofhHd{!TqpgJ9?|;nHRBu~s!2M$23a#4r3eZNwlW1YEZVr2fo;WDl z;Ccz%Gu)v4ITNPx1nUHf&kD|!dTX-m3$EVTM)8WS__xQh?aN^>(fTnpPF9w2$pVmy zY$?x2GsQ}eE<>*G2v)RJ(M7LMHElXuiHBIx?oC{tK6YVImM^q}$nw6&Yp~h|{u!@7 zL@LeB3dIV)`gxfr8ss<^tj#cqKb+1pl_J+CZG26SrN|opuyx1xhBCbu8fu@&{{7Rt zC*pS|uc4&;?=zNwduu?JbeZk653{71RTZ`6CL?WHqVD zRxqSGYKrR!NZVpZ3?}e6Bnn?^K;lJ>xW3xCs~>`X zv%RIItpvvSo$@1n#aRNaIF2?A@piv&YI*<1C+B2Lj{k1KH2uJOL=H3d(iwj~LlQ_J z$m*BmAKC>;&$`MZrgK@{B*fz4<@-1MKYnP&1Y{c0|73-024mLF%KAp3$9)Kc`9Qq#e@zv3EfEf=87g8_D&q^K=p)Fc` z)X&<14^g#eN*l3}{s^I#ISYHnaO#(+-iX|@O0Nl`VhBH;$a(7#_s)naqXIRAM)2c( z*Z{Qb#?{M?E#5*Ad?zm}X$Kk5cRT}}){65O`J)x*D9l>X*7{<*~>YmKWFNW3@NX_!Z|0d?P1IRFGo(Q3mrrT>S*4UaRla2VdTGLcZEyFtfJ-yo5ye6df$YY8AoZF_ zXQDD~$JA0+3qy7Sc>YiyUC>HtAS~!eOzV@j+vWQV4m9Ku)b1u2GSDbMwb$+MtxxJJ zU86m$@PP$zwo*#kfNrBox=k-F^S77|cqSJPTYP%a)Se~Ku`VF`!Wrom@4jP3ei z@%|%y@;+mkL1r&~hR^42IHt#>7ADsRrjV_L=UhVdP4e;f5T$?H?x#vt&m{tH&^&!N zoR8Oz^Oo$~?-F+-=w5g`X9hjLSzxq^K6_E1ReT~}MB*T%={+gpfGqb#s*?Sq7brxO zfCi{v_q*=kTZ!D?!HVFkXfkE+Q9ya=aRSs4uF0{EUMrBl$%gxuM%&xvQ|nNBx?a@~ z8H{r5ZS}6`5a>~wCj3Akm1Uk9G)TG zO{DK~)YP!5_-Guo$QiFR=u+$+26;nQx`X&cEat&_afz-gP=C^*S!?3lncQ0-7T1c!1Y>Rpl z*fw-}i7L4=XOPvbKLX3siHk{zT`GPSemP3$;ws51HMOCulz%{1vO7u+lXt7iho0ul8@0OcVKqyYgzmxI(b7%sQlHS7J78Ei5O>|$=X!zjTEt9F@< z*=htu+&V|ha9nK=Qr>+i9@3b{LJWM4jPCgo=vi8~1qnGEUGP})!RmyFES75hq}kL} z9fWgaT9Vm?Df!w%@Ag;w<D8-$e&gwjY^pwS9M{*A6Dtw3uqL@gz9gMZC>AH_c-Ceq_*Y{}rJ ziOWExT7?(0c4G`kSqpd!lGAJ~Byp%uCB}5^zkq4C3T`6a#xQ$f5kz80si$v3K_YmU z_4G`S?)ewwyH=9g(MBd{U;kNrxO`65{^hBF1*~^$pn#RU)&`1@>p@(SceYc|ou2O1FF=pU;3?x0-7hF13#f8^U&JV{tRSgQ+h_UEH zTq`FfN#>`~Vtm8QR!C>o|IwxivKO3tI)H)}m{e=CG|aJdqhQhbgnja|#S8Kd0?eFJ z(`5ntr>F|=Aj_qwYN=qEABAP&B0rnw*o}bE88Y6<;L4jXp#H+-XXhkGq$dij7hxal z&DiEWQOkk$ll?l)_mzwWMEjx-{0^^NC`TMvh>;}VgbmrNK_pn#03~iFLq~@#9`_CA zL;vjGY5e)rQcTtE+$VXJSO{bwGpxQK)-IRsGkOV}ff&cSNJFVt%fsJHGUTpY)wHN; z!P&V+8NqCH;uF`Am6tcNV0c@x#tCoWIeop?`|O_%pa3r_L5=V-VyZtd65soRROJI};VtkN+b08$m)yK$ZBVT3DIs3*dGC z#iCQyk$mf>Kp(4jDM@}`rh6@g@x#H5N|cke6C+b9Qs^DZ#J36IPnj6k(yCCI=IWUb zRuhbf?wIiN3xx1u7xG>HE&E!URJ8tO+?Yegv;~gNHp|e^A5wXe8%AmHh_MreyU{?8XG zoVx=^0HIQwE5e*>DiwlSbg(fo_jNWv)Q2$Me%f&GrQ8pzE~yO!Y;HDP8*P9~4SNYc z&2q+gWC@WBbLCOK+!Z*>PXLl{p-`hQf#5%QvJgnse}X!sE)nH&rE~3(R*sJKmGWC; z3DhMY5l_VX?dM%$;VhCCwt+6>gwy6`%w6%?u4_TcUaxEoVwvClw_2oD^PH|PPY3iX z#j$@~*QDF5Y5eS{^!DH-8cuBLH8s|X5C;qz8wSs{3#?LM4ehgM+1$#~Z2Zfi)m~k2 zhM29jB{w|d%}{7|jt1X-bEU|v*4fl5*tgM9Wj>w#o7v5-CAxSTtX9=BDzscjE6?g+ z{YUj=))$z*THI|A$j&5j4>E#|2LT23wFeK1B=?XVm@vb@D(wvo73q!CC3XgDp0TV8 z9}^A4+@7ku&*0l0(M|kzQM9Tx@Stn6=oP;e%nO>FL2)CsjHEnrEUj+Dr*$=DT&Xia zKeZTz6^tnOyc8KyL~aJrR_@JRne6Zo=%ckg{yL@`_b{et_G|{BU89p<2D}W3?(mE9 zKQ21^n#-a&0bbBYKrGmCLMyk~bc!;WO3a$gg;>anu*-%OouLYkt?mgMel?gET#7B< zDba5KSu4N~8qHDQSc}jIz2@hLZz{YD#j%AaQQ_3WX-2jh-0>OSK5gu9TmQ*VrE)65 z!#ttB)sm6i_^hie_7Ko$Wx9n6LL1ZqtS#<$PMgLr^Wr^7=xJokxha|m~=MYrB?$Edxm=5vCXUrTInn$~ApEUB+Xv}M*dzx2$4Lk%)F z>?+f}++Xj^Al@p&@?dn5(0drB&2OI)?z8qT^_dHzLMr=%oNav_pbe_^_i``ktZg`# zv99}Ln~J~MZx=kAyeuPK-y5i#Uj@-oY$i)Kq;t`T=-`}eG= z*}vk`TyH+TK%dY+7U2pS#pY>WT>Gynt>}50H;XSt`rV!xZy8G?_>C~SvtCjZMRMxG zb!0pxsfcA)3+Wz7)CrPTbwv7t9%i6nBxL0keJO}>O?ir_3`k*KRq)EnR+L(YAnt$%bRYTXqJ>UJM*IF>){`5~ zU#L+7zgh9ddH>&){&(dYq?K(*Ar%)>M<3?n;_LsWq5dCSR8vCP^zdx>O5FF>|L>vy zM|~T}7myKe|1Fu7{}+b$zmRzUDR*uJdocLnyP2LHF8+t>nr*}zu$WKq&g`21tI596 zJ-fla^uD;>MpwuG)2nVb;SS92cQ|)Gz5jl9{~H?nuO9(e2Z-}yY-76ie|q))PjjAd z9=!YhSD5)f%U}YKE+G4t#MW$s|LOHJh`)jT@b1pOTA}muOJ(UCE|XyP|LSfIIOv#n zN_Z!yOC@2ee;Ol~1wf(c`QCpY zxNq0t&VHK?Xgl?HNf{!P24DF8eW9SG6w#Bj3;8W?k{cioA&fOZJ^<(orVqT(V|<! z-zehZ;)ohrOXu=Wi?gMLIxTlhAR&({iS1ZFXeOaQa$+@zgwj8VUS--ZBKG3 zW*M`%n{AE)lBfnuW!)(9<8gQXuaGZ4rWo7<%mh^uCA>`!3*y}x2z&@+&$TgDO!rzT zv67wpw~@j6xQeZnbU0E(Q86L4d+geliLF~~96gT}EG93Hh(sBpXIe9BcWitW80s%L z=lL>`i3J@pGP10;GPoF=9HZS|F)47TM%>$cbol_}wN3}XQiWP1dS%@#2kSqEg+H#P z@GRTY|1~5#45B}TS44oz6${16zhdc_5(2&n@Dr|Gh3Fn-1%8yAh6WZP5#_FZQhGiD zw|1B1?v1nFWkM8ES(DEAskNi&BpFLf8hHhUei4Oq`Sm!)%QHkPa`fb(EC0 zL_6t}_;`OmKffIir^ef-+~PImcrqzO42{e@rXYG{;yTli*Y~uIQfCyN`Wp&4+=(|Z z`m(k4ub3EPdBY=Rb3c~8lzLcr_#`L?Cui#xiX;?Pnk2jFOwT{&nW`q6ZTLhvrM}VJ zfX*6J@Sp5aBmoc(#W53I_-5}V6n zBiYemLOD!tGEY!%aL|jgR5G!(!X%(PF(Ij;htrGk#ocq6O?Om?Qu};$4TX!({p%aG zMaVWE*D|THJ&ksP^(HIkc%#a{>iPBxsiha@3f64eN-~M%a{x>!ud(GT3bQ;?&2#4N znnPkjk`MyIg?6$ks`eDsIrs{qWqgfwE(-z!pJ3Fivf$SYTx?(xNu@eWD4a{!M$6SZ zU&O4%sGkeHYUT1p{!kJ)ChPkEAFr<&*&zp(zCGxokEErC>R4;7D>4`B3xY%)Sxc0twVkA6vDoT^ z{JqF%$(8J%w_-{5yi;lqGjIFsn@6ztUkfA$83dKU&-%=OwI?WZgej$OjhBmzEvkJD ziGq?&z%G=`Mouwy^Pg!O4k_UrlUI`k;@w(eO`%DuEGCMyS0`S#fru6VyodZ?AKV99kcotpc0RUv?GQeLviYZD3WU+K%tSXAm*p8HtnMos?l9R8%2h zeqkk$VV|M;&y-JF9x4NVd5~08If|#9&q*_Jhyw1@-|tTwQgq2ALO-*$>sxDt$I8Xo z*?9VD;^HEs&hXZL++xJct_1voNi~ZczlJsUJ!T7Sm(a6(oLvF#wvpm&ZJ5*$(G^Py zOaVt)Ne7EZ^U%>MesFlBzM1yMyrCPm3CuJa|B}5KtQ&d-p6-kfK4wf;<0DbWCoePV z?78UrTe@TO90?a@n@xCFzl+%YC{<0?1{pg{jhsBockF%LQ5ljxz>pI*Y)bLq~pD@vVW`kBK4AfOebkL zpRZ-Vi2F(1h{iKB-7uXzLyIGn4BIEl?Mf5xUZamq-P`=)#fIdzuwt_cS}R3ajwdun zrPgT}pTmY@i!PdWRufpTL*|sh`5ldeXXO?^ z8`_ofMy9|QO_+5{vBY&nB(-)J%d-JDyTJm+csez>KUJL*YUs&H;&w3s3o?(CmxE&j zb~Vc&<+zcIRV|Y>^hD+u`wR~MYCofL-ATqF;EpRkj~F+_;hAY*U4}uc#tN?sbuZei z7^VqeeRXW!b=*iAiq`+8)uhi5Je+c1gP^MqL%}3h5rhH9%% z?+L{(@N$*TWsNF&RE5+MgUSpd`C(7o1jO7A^KFM3j9=C_}R*X+9LVQL0g)P ziK#xio{V6b&ZSMYr>aTpRd##13;YudbcR<_Q);hw=SX=ArRlg4Ob2P}DOES^v+GHO zH5zTyyUj#FczTlA->3DW!~@+%W2mo2)MNYeM0@I}ei()FZ`!^IcNNvx}Fk*eV5WZgV_b6n0<` zm5+lRDugrV*NL%|^5=YW{ z&$3#pgQG}lBHzM4_PjN$G~%3XZqDJh@4~Rb3@1`zN>=;0HCv-Ii$RL)IyxCd8~S5f zwx?s?SeBzn44aKb8x#!8U^*$$^{rK9SCm>O6Aj01SB>Z9K#Mp==bMPd0y(+_n>99O z2KEo`?{LZp(+vBeZ2Ocpm6+^czdn6v)u@{s?mxYRir62n+dP)-=F6&sjM08-KQU;{ z@pAg@(=9VGUdo8r7p2oFclNKAI51uMBfuK8OzrR&2nf=EXJEkY&fx48)|KXdX*r#W zw+X6CaG|+|Krh5+d2)xFT##*RJW|t^@t^S8EyBihZ=6QBZT=C|R&IJe_tYx6it6PQtrW51wPynTyl@AOIr zQj}aWypWwXot=`jv7?d#7B`Fv7HJEW>vXT+Cd5mb~ECgEbqD#78;R!tJ z*vG9UXEV|aiOc`uqc1FjX5sc)#8x%J0s~zvH{tOtH8Kqj9qo?wjBaS~gLKq6>78E+ zKfw8JBYa3V4y;}K-_P35jHbkCEJ|?$4QA-s|KK{TU;4#>THL1@z1R)m8X5!2A)0!v zIlrfi3pxqw&~_GeP5Mv_#!?Lu5EexSGCB_9i>i3W$3OW;v(c01IMn|YL^42imGCYJ40}E#pD&U+?Sj2BB^&Yd;yTaHZ|VA;a#?>|`SskIeIv7}`ifU(CP=jUhf`lrM%(<2-q) z?`Ahy@1Z0Xlg0EmUB?MB_xqX0UrAp5fWL4;*v%J5QjzQOzoRbJLwCK>^_RjXM@A)w zM#A3=&L##Uswnt8q=%?f(xQKK5O5ee&ZJcxd-AZjERY!5u1HrN2UwO{4m}qtlu5_} zgcGV5oP_0@X=9PL5}0k*!?#-E(NW^Ynyd!h6n%Cn)3~^-Q(PdiV`@eM&ky97YZRxD z!;VThH?{}5L|t$8$WLU&sclh(@xV4?Wgnq&mBU94FGmUU1y#=S2R&ii-o0AQ5hCZ# zPjaS+rO-L zwLlI&sZlyV`&gQyh_uGq>C-iSkLbpQ`=hnQx1-P9ec9p_r~n>^;!Fj9|G?bnlQWUE zGSia;uCL`JyW(aOx^RDi-C%@^z5@Dgk-c1Ecu%N; zgJ3s;6~4rP`nP5%q5+FpEt;cpt2nD}x{Fp1K&B?zH*^)~tav<3vStR7dnLEJFAV}}2!%ekihdhJX6f)_8Qee1*NYi;%m-}nTaK1Y*T?4~W za9oXZzALsSeh zC#ziWm)OFoPn6SDJi)cL3RF)7iAMbxk>IB{MlMRzlw-}WL! zt$S!?x+3e}o<#Or{;F%hObVHZ6*9(u$7ZMh%l3Z5+RrXPp06Wps?ZAaxNgHDB}8g* zcqpVO0z=}>h~VH$NI;zh(GEe>S;KtQTPIk?9hAkca`ZXdP&xth1?3)26xBwc6_8#J zRWm2;UAp{G@f9ha9Hw_GUACfO19n^AZ3G-m5our4MkdBYY)v_c`UE+FkyW65NjKKx z`q2DlLjHovy^J5@67H6_q~QF8(m?5|NPcz0wc+fw_|>)1XI&M|FVNDq zn=n2-{zu#$9K=rm6Nz#I62=S_h`#f}{-eVX4tu%Mh|G%_OGBU)uabYqx%^_`PBJbc z09Xs)i9(6njF>GyXE`RM$?yUG(!hyl)5Ql21-D;X0hVKw&q0%Ri&lmA42qBa4aw{M z@~2~=18GPLFi~-5VV&b1L|p1|JKms0;jO&~r>9`LQm2c}uI9q>Xdajs@Nu`_6{skp z2m=ozin)1zXWEI;4L9i;H~crH>mVQWKwwT(K;pN`l41WihdU@3sz9Hra(YVmeI3JT zyp0h8Qq1R`El9<2USbVRI5G zNe|<5nk;wqJDx^yiT_S%aU&B?U0Wplnuk21HvCr1uJLR#a-s!ZSf)pOO*K=by6!1x z5K*l$B=wVEz8!)4WXzdXAxkqAd-K-xUX`6tZvd7$8;m8`sOMiZGCIce7D_469TaiJ z2yC$VgR~4HDBxDL$hAn7F5VEhuYi1e;O~+@ z9;3l{F`;eL5~BSBh05vsKvlMu8c6l8?paB%7B(G4>bRX_ez_Sx4Y8O(pYFI}Q6CQ8 zTMZ`Yiz0R#5nqj#HqnXzSYrnw5@0!s$=&SM5FUOfrCMw!uj9tos7IV`dj=HqrTZ`Icq3h=FAV)?83&mkAjh8J`Xj%wgJGsQGr_^C zqGA@v_m)F{zLw+IWDO#M%}Xm$r_SdH+2(Qaf!{q{{Vj)|a4A{W{u*h*zbRQE49Ko~ zB?M7ywYo(pMkf1l;@Nk)z)o9Qv`~p!1K6(KNi?18@wk12H7+)r2r{>~B3`fwe_}l- z0KRbdo!(_Ps~%@}8-ukNxgVdT%+%2!?Qm2 zL{O0HS$|MSReXb>m}-MP`&Cy*^YmzqEv@kDc$mmIJt{f;Y%k31 zZlo*hg#>!QbsgT?35CS!M_{|{)3Jw?@;ooA+@t9AuwU%uOsk#YtHjB{-IqJ%PGJvU z28i*+Y|DXo8=VAh!yTs^>p}9r_XqQzq*UDCKo`ECAt~(LUKMhK-LqdOPGhGl&PT#8 z538+1?p1YJ3~v1!^I?H=ug5w8(pK1cHxaL)Y2&SIM&na5mm&Y-SiXoX;yywu>R`=bjAa$O(3a0K@xb=finY{n#Ap zh*26g9mw}xnIT~9%(p!}`-tkUnDo5&6htUfd4cwbO?CtmFw@-s5GXz}JZ_aR0Z-@; zr?W`!E|xv*Hr;_{^Cr8d-auEbw%k*ktvqBM-@IwfR*~fR?zpkh(W1#uP-G1S?Yd_E=#(Exl8G?xghf3DIWlwtq|yFH8uq14c}S)`PQ zNk>hF7hG7be2lno0m=l~n3;?{YVX*gUZfjFf#@P=r33$yw?{-_(w=1KDFhv#h(Zml zF)Yzrwsq&JnRB~iD|SM!V{z`cH4^UkJ(v(WvB6CPn_;)*t!S8cr@jI9?7pqIAWXoS z{>1mL1o!>ic}_-1*D+l0>H_RC91ntoPiD|@mK*qe6G89D zuFB3EPL*grh0g+@lDw%>JHSKvBcQtIE9l&YAbeIuE3D-&RT64b1hPKVSiUKVdO7LU z=$tgdM{8VOA~m(_scH9VF4GwGRzjj3!~qvZ>4if-vBHd7Nu9mVdVIp)-k7lYS=hD_ zyxfResJ!$hf%_Z*Pc}Uev$SB$yT3?{BnN{_Wq~nF$^CcYO3|of1XS9sYFH~ACQwyf z-W+R<7QrPmKpnS_?h&gUD5vjidUL@SJ_)_}ZhLY<_1i(mczr0*JYhN*HX`p+nGBW# zi!H7*sj93#WMtFoB7)|yWYgM_DwHHmB`ATKSm>Ic@>bk(bq(@eJRVP&Ys>loq4~Rl zE|F#cHXizP)=%{RWIv+W^hJQ!(tRPpWI{xBn7$ydju2Isbm@4Tt2~)KXK_4V#fweF zu{%E2sCinqsks@ZuQj`88wegSc&dAB`OGDkWseK9F-6t-*2>tak=;}r5>zp`Y^2o@ z59|o3%ITEhLm}X?g@b>1V|RDvfjI<~wM)=V&TK)ty*@u)U8on5okS<#qcO#-)l9=>31{ zdaI~9g05RM!P&Sw8+UhicXxujJA{n{cY-?vcXtTx?(XjHe)E0*f5$m5r=RMnS68oE z)jev?HD|6JOxYaHQFf-`=;(Bv!;u8v<2HEM727wHD#F1|VeyUOTKjE9$J5EFjdl+_ zaCv(Bnx!A?yg$~{pNs6$b4c|8OS6-flF&NtYJ~w{qJ*_Zg&b1=qbzwbCN%b8y zHx6|(xJ4COEawqmU!N*u&hP9M)LqvW*dI#g>s1Eh} zXqvY?ONBbsUyRh3LvTM0@L8U4z}{FYW~e&bf+)l<*!;A|%TD*eMoT6XgKP8a__+H~ zpcII`NrtbPt%JmUqV1Um7|raL1MygJp1xx4z9Fm}ue4GS7S_#_NPIJ=TaC0xDcb2+ zpvHDHC%x-+A;@A30e*cS|no)!t2frJMsc2(v0 zL2y-LmGd<8-(O!}^l4M0ud?1Me@xre2D#+;cra47CA(R~z_aG<2oWgyNf7#en0G+2 zY3yWbuD9M{%1fNp-e4m>?Oj}p9XJKU$j~yek;I>m`wQ5XqCV|Gt%Q`U7+_~cfbNwS zyZ}lOHY67GRtJP;?}Dy|NXg`kRuy}C^;*=4AShG|;1G&LzMFw$vEBOA6=E=>9M$!S zeqP~1pG>D4@}er(|8f-7^GZKgYcr#k5BmGOC>i!JH4rw#`R5_c#Bnawm}H1{XXJ)&gJUQkO?IzKR4_XJU_vw#a3kD7;x}DoN@a+F4kyls@nKb^J?cN#bO%p zfe>@47XvpW5SZ+W#QSpZ>-pNj$n<*HuH38;rR~E^&wAmws+DCh#wu%~E3p)z;qG{) zvF_622;cSLv@YllPXaDObcs8b z79)Gr{X|QhhI|teJ>Dd}Swh+qdFn1syf0J(?k(F7f#;D?#E2tld{;=-L;ZT(a`3f5 zgeoVYn&NNh1l%cciuca|W4ztAxV~D)*OZo>$n2lw#$n#dQQtlj1AI zy$zBr@Y`Zls^9<9!_CYc4G0sti1-|O@Jtx`%+&hslr+T^A5j3lV!2Y5ME`b#KgQz? zJL}SdD3KX!x=)-92um(tAXrYuyQ)J`)AOg6Rb?viAjsU19u190YSf@X#yY4?c-?;Y zm1m~mn56>#JK?Qeo#~-Ec-I}ouEHIDS`Hn%-iomfbf>q$I}m;OuqrIU!w7rzjrcfU z^a{@hr3;VEL=;B;^O<05g9vjyfM6(S7u8XKHSTRePg57#I;LwA3^wUsnFwR;f|^oK zBWPEt;R*x_l zT4ft3`m2sv9=lz!DP4NJ@osjFaToUqKgQ%0*W(-g0Ip~xc}e>2K|o4Y#rSX!@K+sF zGc5y->FwE2mz@DTe{r=FTr}mnqkZapCnr#cKWU#vN$0eCsS!m=Pts$#ta~U0D*s(v zuh4THgm1T3L{Ag&Ba4^h=vn~8$BERuiD8oc0)0p7Dt=aLI%18l)rp?P*b1qs??!G7 zfkkXKMf1078CDzzl`y&rHdB>K$#OkPkQ=!%&q`TtJ^IQ6bB6=BeD1oug1;XKCs$1W=D2q z;}-4d=ut1Pl+miu^-@u**Xg5`HZ%{avbO7k1tUD|vqb#twW$Eqpa|1bP|E7GSh|6N zr4b5%c*tNO4o)%(h1gU^`L z*bgS!m7=EKi za1wy9R+MkBB_f@CrEBkWP$W~bBpazGZXXnP*B7Tal3>3LS`_EKN;MtO^uIlP=w znXQS(I};)wcVvNbbhXk3leGvlfC+?2wK+A#EhdP18BB7~`!ZQbuxzLC)|ALLV57Kc zp?3mT@=d*A)r!e!fm|y9Pof1t@jD(hENVWG&2&jZVbN&(^F$WD<3(A|{RR>yU+(pQ zSJ7xWI%oSAb07)|MyS7Ph)Hj#!}J1mJT23la;W1E(5-TXUMnJNitTp$mVdduWc0Sf zDf=<+Rj^g;*{T4mB**G4D>HK(ZIEz@YH`d?amMp0O)p@?;~7e2(jl znxa9|6r(t>T-i@%HgbZe;pOmtvJtt-9IuVP9iLQ3GM86Bl*jQ)VhNLZco!-Kh<4}L z=Y@d3vl^VjVHw@pk_DHfqBDSK)O$)+;D|K*n5ai5J=w^^vit2D1+BE0uv#Dx(o@v- zVAoK)WPrXZHze0< z!%TP*A@#T0ldmk(U>#aPeyJXpiwtr;7A#!xh5k;eaGp9$1|n5F#|H~O0fqSOyX zrY7D`U!4Y-ZMvB-#Yg6=oD`nuD8oHR$4-9JZS* z0`ht&{c#$5v_}%zEhb~TM|nyLYUfHrB^5r&2U@S~xFK>tH-OWn((s9L%v_V|&eUd0 zYADx|XsC2NSVL&Y&EG8$pz9e*OFdpNJk^Ag{EgmcOBW4sPgi+ceo%M!Vs;EZqW|YQ z{1p8G)o9^2Y2cX%03`EC&b{1e$7_t+Ftp~-6|M8`uN_OQX>2SdKb|89MB2LJ?p?hf zoXY8lZ82uBV?AKWOL=Uj(q3IoQ(AKW;ks&GM{s8{hCjp!+Z;7ER}jpaVz<%+*TG9h z#KH%W@*ud@ee85ws@2SoB|im!kR6GPepqODv1@hgG=kjkv@k682Zf#*UMhxaVF+3J zj)*2?rN5Gia*B#nMJ)1I2HhY70QYo=?&u&d6~*Y49{W4Y@*al?x7z0hcD30yN|z8P zHhS!6uMdebZ?Cnl_0|CI&BK0B7HKO)!Y9OK(mp!qM{R{_TxH#F$({Uv%%Dor3b0#I zu!gSpC+RyaK_|qBl^L%tQPW#mm3A^^4 z+Ir}nTuH(q7Kufk!mnVhIuLuC>W$iHzOI@5BFa094~xK?8)X&Hi+T5S;oz-dyg{DU zNXChsG)mk+#9Q2L%{_hGUNBkWRMweyHWXUEJ>0?!ti==+htT<$1c<$38=xuM_)6^I zG~zBUx%?%^|7*B#7AWz4i)1%g;uk&8!HFQ+zWRy%F{Ac=`}*N|e{wWkBFukpuMNF1 z*?}cVNDzvrQE+Lc)?-hD5{+~`&yEWvkr(UNc zVz!q9fDja3<+fvVt~=R&wL-~flo1zYV#ur(u_xt>ylaHs8S@gLzw40`R4>N;HYnoQ4GwCUteehOH(a!g_dWH9U zRU$Kf^QsXMF<%l?B**Hp0*5eGO&)B=-ju8INAe32cyX=@d*^~9w0+E}h}Jlo6oPRD zLrSXKP{L-1rEhr0z7HcW53QL$B2o^o`m7Wy`zz5FP4+(j0jQ6nsmvF=+tD_O<*_4> zr%BeThua9VtI7d!uxD)SO>Yk#3Ej( zBRw@liUIE0DaEaoSEV@{*25?)H(NSeH7I9DnHBJuB!A2!3hF2L>!S6}c0qfI zET45;8Opes#>)7e`olC4EO@MtaKGD7+YM%?;PZN8eB$_FRAQZj6X&F`6MO7~o-rFW z(v=3!%uY$Vi8Q%092y5>Z|kaZkUZzImsOW#hDHGXDoYjku@~4k-WP;Hvz0J!zB7ERdUV-mxP&1Uf{cRR*NK*@beli-rG!SkZiiwo6EX zZSB%d+JZM;!;gi7wKB=n@o=*>&Yn<-PZS|Tl z=LGx+`LV^s7Om;~Z8K}}*F4U<)78swHk|ErkpB4jR@4Y(QCv8&@3>iN1Gy8KML@SV z3&lVpYF?OFfiE7&@vGk*PTw^gHtgsMXk50H%1|1{$?UE6@-nh@eUJa)BD&C2Lh)DV-OuYf?9?Biy^z@ly{}|M%OC8ZLM=vg$YyBz(2ia@nw` z9(5cZ)>zZUGJy@|XMp(I?M$u@C0iLz)Kph$lxoW>+7Lzo#+|w0;;GoWFZ5IB{Z%x7 zq{@mPy1ZNf;zs*%vQyAZv$3`F9%u(pq1TS{_ITbM?TXU*n!ALpH4y4e3Pvp_JB>PF zy1O6Og4dSn4OMG$Y-MH6(tf+_y&Jk-HSc%XvWF<)%{y|l=CKzyy7JCfYZ$}5dXz1x ztC7`FLNrz3`A;=B+dBp~K)48{ccQ=Z^IZY%EmLt0!j-F(UIxxN`YrQ<)ty$Fj03P2lC~$r@AW;*sq4FzqA~Om; z@-3>&thc-175U!agA{@OI`EBpdZ~TPCDZ%t5u7_f3fcqbmzy_6rhpA>x*r__*s7zO zXq@;#*#i^7W!x=y_1g93%gqisUW{y5RA05>OXrah=1=#-0-pQP;mcVKNH)IdF(oY_ z*gj()o_iy_Gqv)xwi8t1`Ge6jd2V365gxlK-1Rtho+00tYMMIb7?&vzu?$ks$m=bG z=Dr5&pZ=zyLamGPNmU^Aw^K0dBfzu@OfaAJr*()Yl06bH=? zOjgp#^sf89vzZQSw{jB5aH^($FMfsN3j3%t269lE?S7i!c=~zD>N(5sqYcQUaa3)< z<>VwFP}6lZVwheOfqQz(GZaPh!+xysqQ&1%jSly(UU-?=p(Wr?bYYjL&`X5c>%GRz zyOvMVMn(tvVRkXsof%^Kxb-=Xi95AKCT^r9#&Fvp?v&eUYc=u`47g!W&}0JRdD3GO zD@5jZTSd+$4+WCFcwLa?3vGHP;U^oud*&L5Mx9Ri(Aw^;K6o=fridO7o5{^Vp``c$ z-WvmE8j4)2Ga190JD`Luiy@icK%fldY5ey;~2<@kafA)VUY(gYRJ*~!GEW`1Rf_Q~UodG`xbn?Gi!L<>k6y!xg_1{x@ZrI^F zcSWMw$@gW80kA9rx7pug5BKkdr;WHS%T!&haz~TPm~slyJP->}F+( zG%{B_S%qp<>!hgz*a(!qJo3OgfcS906$t!+hvOpF zKM`@2TM%fZ2C|m60yH_^RFvLO>@pU2IIHU58Bh-+Wj|)#&U;#X_WA5vfW|$0iIEaJ zDiW4}?FcanFF&f#^6NaoFS82^S6YCK4s-QZ10>aLp1Uo<>!(XnWJI<~v3q5!^d@kE z*PVT7NzV%-eSlR9-V49g1uOW1gskB_p!h`Q-uVb~yr5SWX7{uASb)7bx=5^AmaN_3zh=in9+l;r$lnTjX)0LIs zuP02%*8Mk*uQ%a!$2&H@>v@~w34RgbU<7902?;&dO(9pFJrLhG!lIi9pw|6BCaNVd zE`Rl*yLf6nI(66(O}V^nQ0?ilEeEeaPtZ90r$5nWW(_^VVG9h7j z(4k)RA5hYSy68jk=yqZsdR8GN4?{6U6jSu$X>8#;oH<(^vF27(YdysukEKVm0pHX& zjMMojvD?qeVH#U9qglQ=nj#fTQ?{Q7e_{APF1s6J|AxE(1%r9mz=r=Jk-&Q%;MNkI zU}2_>o6`GycDAF0Lj7fUnXHQl?9k+&Yiz#f8F;?8@w=$)2aZYX2d1jLGrPU#bjv;v zH#Ka_Q_R}*(Z0Q_Wb|Mnb#@s{6@ zak;?po&q&CA9r@|KfoW@^Vt8)ISW~<#3p{!fRlD9is**yb!5vfpdFp}^=7I>T_T6h zL|G>#rT>zoaOg|?faEGxhOmCc+;eGD>Tq^P)0->)u96VDn?$Y4>}EiCDh|0fr_194 zek^bgvf-^d!xwG&_3Y`y!udU9_hH9wrc40_lVL3|)K{)I`yDkZpTtFfYw$EpPuM9@ zdS)Tx?|+UYbHu+#&*RcIItXj9i!aY`?WeINk40dP9z|Nn52D8)X(E_Iq;m@Pv_KE$ zE7MDe?4~~6Edh;vtf`<}ZNioW-U*QeU;SZUDz7`Lyr%sZ`>U@jwDA@DsDmKp3Ws#a z-0tT9veLw;IP}H+f~i&fPEm-7Mk4JjP0%r?nF4o!`mzqRUp=`n`EYS2FC1sfgPQy~ z5z=aE1uHp!+|4Y^iBdFrj&Yg8VgP-g9qrh?e6U9B*7@?ZzSvO-9q50e8bp_yXki<1 zI?Na6V{c|tq*HGu?!sbWk9=eK^~6Vn`6%_Qxv2{NpiH#96aV^@%KLi1EC3ISiIgnI zoRABXo_P|QB|Kjq85Zm@vRtXdfc(Rx@C-RDrPzl8g%BQISnjCxPs>GWNyE$oPDvdzRu6%!3cn4_ppwckBK^4zcV+|TWdQ%J~)P`{}u z)g$-&TZe|k`>_V$uzH_fn^iC?S)%}|^_nsYJz19}K8pOjCV#@{X<8IQL{MP|(W(XM z>xr+p^oQof!Vr#!gHB9rXLfXkeMg$a8gicpq*~ZMA+k?`e3ts9lqB{o51CwUO(3ia ztz2753{ebDT$SS*;z1T}aEgX4eb+x5iZsDj<2$DCU#Rn(BrDYqG3xX7X7kPNAX(>| z*}c7)wk`5&#kB}KZFa{aH_?f=-+iCvNjkg~}UsXmTQB(MAE`8Op+``@l}yfS^93BUF{hV=M5r_~^Li8vb?IqdLTW z14~LFV^x;#$TUA=;gUZ?pagxQD;5b*T!z5SuyuS#yX!r!Hff%zJ!k}dg*XxbTAf~3 zf!vQ=KrFXs`?sWZ=wJt^7xi%geEGH%XFg?bJFMDw8F_j34~eRH%oKp8kQ@e`9S;sW zGw!T%`43V16!#zVqqx<{5z^+=N)A@+@u$dsA0=4`C)#jWeoaX7tzMUG_S2IVdtIps zVfpwliuSsAzu+sqhXNL`A9iq~E(jF27WDK!F9@TKe?W6S#PnSN?fSbY<~B+le4whP zhL&UzjYKioRXYF9VNvFya8i?Gjp?zWve|W;y+-k4e=SHvooi>r<=0&g)S;j6s=V`5 znS+{{V6k%aVgt)XuPe_|_L@JwdlKd5&e34G(Z`+jOYW(+$!ydSAv8~|2TG42kq8V! z+QoM06z*3_)1EJj(fK;wkvlhjk3JuhFU#XA+F%A3hctCpaO>WjaD)hF z)I+;q)3}g7)sWT4qcT)G2&M=`y^&~IcH`(}wk9NVCn$^!VWTn8)wKuU_=$``SX92K8ZU%3SF$=$Haq`-QGm!dD z6)McYMgcq+$}?4B2LE1<_cx0W%(KzeFl^Y0m(WdxLbdOe~<$m|bzot16Xu(0$-Cufi-0N|CHo*YzJ z?vdU>SSK>bX&DfbDfi&S+N!JM!ZIq%kx#$qu!WvJ-N~ZW}T{+Iv7Gf*#^7rM!AV`()v*p5!9XFJumWm3w^z0991D^m!w$a~$T?n&8 zZ6PO;UP)rlwIA(K_O=zdg}6rwg6v7st_wLQCT%^YMqHZj?5@=9&fBehEH#irjw4cP zP*5kDa!+M{QT^mztOzH0I-oT}Ov#^mx-NaNeOin_E6M1O2_T)BLN%U)4X4`1XtP`8NSyLO#% z*#n}lt=rNe@Fu(6tqtHFfqDosHhAn z-VeQX)KhgN=VdrwYt9)2JStwy5XBO3FUA#&jiRMf3Y@Zl(YA7hMRdVa;9l7pxbxsX z4PX1fgqQRn_fuw66+a1Ig>3>GQ|39!%W(4xyN|P2uJDsMd_oyH6igIjaG?3p_1sTl zELP-~!gna+l6FRKRRM(--t&9n9yhd65xJh^n_PQQ{!Wm;Zwm&E8e3C81nMN@1G~`8 zWRa#`Y1^tCA^QhsHB9Dj%%oYXiK}BJA3bYE6BI=b?#Af#z3KaCJKT^(?}tbH<9`Ea+!S7R1V*0JZ=p)%s@95<=ur^y(w|A7{RYc7a}>Ke>C z_3v&UxcTyxM4;;rj&oXsezd-|KSkm0kaQVOtdHhU+W~j4>Br2MVolFSF5PL3WGF7p z1Op1bQp}M)&DzmK_qNJtM-L?qh8T{!S+%La@Kq3cdo1Q`*+FQ+spNLADsCR+lS6^C zxan+l`;9IMG+{DumY$FwH#8%b^^!9CqitSPPKddPZZ-Be-KeESk@S4U7a2It@85q; zg7#pue}bSi8V=gg@C~C%jMylRRt~k-$5a%R`d^eKpUQB{pwfSshPtO4H;`}0EMZCO z1;Avos`(5WWLXE@(I0Q-7N*U=TV62aZoM=o2=t66g||c-DXnpoI|Qk*X2i3kw~_O} zHnFZ)Hl|<-Pc&7TI-wHscqpbXC#g=2PLg|Gcc!gx9HNoolL-FNkZ`sfqt~He* z!p@{a1m}uCjGdm!F6ANEXzmK>{JJ?p+*vMzogw?~hOnxzkr@gbuW79GuN4=IKTdcr{V&}r+d^&E~?$QXX;;T4sgRV-&-g<(8jz|0su zVI&uO<_SpkscMtc_3Q)qAC4Uc?Nb%4XHbo~;#_3eH0t`%lnX{?fG_R*njD~{O$?KG z4757%l-?%u)4!${pvixw2SM8pbmiqZCP$G(R^$SA!WA*db(?Qb^duX_!8Gguoke_b zrz^Rlp;2ZVRsPsvNj>CI-+X^7(|Wb8XzP`_==Bwbg}SI0`vdFev3lq`f-?pNcCF5u zmd2G9k1qJvmedv>1;@ZWJb9Yk!msi^oUZkS?6?m&%cb}<8o=_-M`^i6J+`~QleXxr z)9~mllB>w@G3-0YjZFWpYO)M<%M@tm>HI%xKC4XIEK zPdf=bpDH<(u~*PdB=n_Us1w0_2QKB!p4*5`oSK>;mgdiJb6hX7B_lLmN>l|lSDuvl zlzn@Yw7oB0^rjNmjn1+)gd&m|%N!xaUg!mqbDRh2YVOzhTem!_CB4R3|G`gVKgZSz zYKI6S5;Wh-EFlX-Aj#y$Y7md4V0>!^5O*;dY`EeCvpdMf}p7tM5EA@tUzte-JySs$I4yq(mS3uSCj12C2!#$ziuQM&e zv(bDrhQy3rFf&x+_(ExYO$`J}?c=I30Ah0O&w`pZuYLpRu>}>DL^dX_1d5Fqbw*K& z(N}B~OsRHpuOlK4r^H;)M+-Cm`ho!XKjTb#tixM8%Dfc1@Xh`Ie8<0Z(Q8bi(2=!w z3jJFYQL`%-SpC{shcSeD|Aqw9wLx35B}`*Ujn%K0vN1S~vMzFEePqSgQ0J^G1mPUP zP3q%*?eCh1faR17`yIDFlWKyuduh64=+%%3t$8n$w~>hV(ikiRUU$XIvNZt0g4S3d z_dVE@nD8U*b73W|%@8|ivjM~5-7?BE);X`m7@ub9M`vP$F691oXg!~H39AgaWdxKe zLZ;WqKBnB&_Nej;zO;90&FkT}X-<^@EV>5-YNAn1_1Qb6Dyq?7DV2H+bBvL($MCYz zPmC!AHq0`9^Y!u&FcM!vGQl&=T>p1%yN35NsqfsAkmadyDX2P4qIULBDMa?5zsth0 zJ_#*W)2h@?MzqOik$Y<#6$6ujl4ToE%p0!QgrX&U$5Rv=OD=uimb|zi?J~|?1a>2< zt8?2DQ8$qV>Yz$sFGuFZ!z7fQ_^0^~Qm*!ErP(#JMz1NyiC)J}s_9Tlh7!Pn?|2ZsV+!D(6!BiKyM#{C0-wRQB(A{pjfD z+~wNS$7x+lPAv*(dW+9rxg{9ovB&D!V6^ae>R!J5 zwOQ}WG5HF54AQ&=Vy*NCqdBx0-r5K1BX!;sfoXwbhROV_VC~+%J?i{brr2Y6mrv)c zOEbILi1p{c{$xZ(+?7<_9w`8w8x`%g4Ya$Qa}BH2<;cg*=t2*&hl0bOw*R}l9RZen zHGYfq`L`7RTpO|cT34+Hu@M1gq{V|6uhw^Q+VUJGVLn>i-CH01I9;FM{^8R9y26M0 zwxaE|e~lWZn3e4Jx5;DwY(H|kk#F`z@>M_h$meRyS6_MALTM@tj=A)^wBthA9J(1$ z*Lu2O)s5v{-zwk=_opaj%pSgQ*grN5$2x@h;%p+l0YugJs?BZbY|Y$tIl9K5$T`H?AymaeEQbWey=gn3}x_v&Vz6Bf}zsji`- z=igT#H}-kI-! zknF(|Nx$j758uiMWISGlIjG=wfZjg-qVQLO-Flx`yyV8#P#084CmJ+F5ECvKk}-?{ z_2D`XHm-*5uXIJ&)V}6?aba_m;j3-qLvM|)(gfs8oCzeXc|4E*ykJfnNMkL~Ly|@8 zfG`F|_!oY9R=gd2c^ok)Xsp=3AyUKi^#nr8=X@#Ns&2@@p`O~r#i2lP>gMG8OGOf? z+OV)0?0=fR&J<;&&W)CqV0=pC&&C(mQ7gDGJl^#AC6U{xM~0UN!blk1QvAZ|l_*uK@%2%j z0MGby>Tf9kpw_F&OCjxLv)*#!mzX0WT%Rx~+ToEsBG%*Fl{R$!OCi(4ZhaB@(LF7e zPr7tkmU>^5)MPq4$Hd|{1=`(8$6x-Gx;&)nRD=x%$RU9{!vF9TyZ`_6{hLr%5LkQ! zA7n$s`l zV_8F47r0=oQx9sFa?v%@VCx|#Iqr3zTtwVoqYWK~$YZ$D9S+%~p)OIR z>Hi7*46Pz$QqK9oPpy=6y?3zok5*m3s~m@a(f0I(=2v!FoUO;=#l8Qouc5c$)Lf;t zDD~OZ8E`Oy=S@E#3&fp|2-I^cm&x1mtFLaq8{2iu1T#jNT`wZ%p>H1O=M-w^sC?0f z?`$K7TyBlc@jg15!MIrL|6MIYTUDZ>+xm3;pQ`?^w8s$DHi7OJ_QvO_%8$;E1^kjW zUq-*OKS)Vz`Q7Sq2i2bQdE${>d8>Y)EI&5`!AZ!mggl%Rt81k2?V)>YWq+hnR^ksS zo?g=YR?Y$v)&NR~tH%Gi^?$eB|HSw|1EuXCKp1(VhQz0}-N^1P|9{$~{`W!tuR*t9 z0+>2zB>%5)_GqZv9L>}Y|K0zcu>UQ*|E5qu?w577eR%?tAV%fBYR$5nYw4%&yL= z%&aIyc}aK}92g)VAb5b3m@*I$NX_2{4h8Xd1eGj+76=Fq%}P{M5g;l`r0DEmZe?o* z1SADttzn_5GLDn0k}M=80xc#aeJYnqqUQ~tPlRt9N=Ei;2nmYjsiCY-TM-!;w}Gf& zUmHjZ)>s3hf149SHPx-&Q1oc#SDDZAb+1pZ#c|h3jz`a*pAN@Ute`-JA+%}c`PM+D z($1zz{r;DsLu4FB1VX^DionpC&R)NjcgDsXZ)#^dFMx<~YS&O&zSN$2ahG0$Z3%#+ z$ZX~JEbdu|1)zXdhEgV+fryZwWG#-Qpt~T9<*?z9_Gv(1BOFnKRKguM@+l}L2(8h8 zsOH;rvygzi5f6X2^AR@<<_p_W?!}NJDFm*?Q10Im=R)3QPEBQjZ9~_aO(4353K}wS z9{rSK(0GAIj01lPjRzh2y#RNe-JkGnk(Naq@rvUMXDBx*pMVhJfHAdUOTfv5V{8|x z5e1fgW7MPl;{cO=iV*q4(U@o@^hYI$m((SbKZQcVW0)r5UEZQaII?#prK(Oc3pI!_ ze59P$?=Pn3P{t*01vFH_D(Dkf5D?<$_>quw7?xn@-jT!|`spaLeKOx>85Roo1aQA>8dwrGux~&jKbJlUhf+Kh1=t;v zxh%aThN$H(7IU|%6B48`7OpvEa#-w*z(Q<4JN&ybGm95m5~NC`3V5<6Nd%Zd-w6a# zdl+{=jS$i<2sTn68WHeTApAg(AQV>3@5BtDcu4bLI89UA1#()7J&>hQFKh$ zl-3s99f&t3r*FnYvQDCJB;G_$6W2YpZ_p{ub5A6E3?^yM773z}3h1t%aXhlO*9`C_ z$7~y9H0=nYRF?r(G{|wwiRcuf6!UE)j(|=*XM(d7?)Nicug%dVQ;%{J@j28hoO?v8 zjiGLMbTIaPf7=luo9NvS<68hnCy^)fYO}w-D1_1xFN-_)H@71_@ORb%H%q-@>flpY zXR#sNPtv_O{6Y7+Mh~!|Z5c}-&q16`737t$Kf3C$K=$A_-()TP9KS#UZ9w|=D1n%E z{7z)`2X}z3(Im6_Nq51xKpBD&9N{;CVdlW~1NCnZ9!Q}? zgioPR=Y`>rS%)B;gmjS^$&jEW3lhc1u#rhn#Nww!(@Daln3cnAC9RVTk_N}15BV0N zHbn@Cw#IA@QKNscsiH1RPR~1)(VoYI|6)F6Q;jtL<#o#9imn~4UeGxY@c`zH+#OCc zhiOR&!GsRJXZ9lB1uPh5&`-GA{i1=AQzY3y+@8W!1eTo07L%$#L#&p9kR(6&-5&E0 zFH6xlhGB}?wvIY(b=ZDLa%b+$-yXIJ@E5x-RHWiT!;PjS4<0B!RJ^19N!3X`N}WNi zmx?G&BONY{AT2BnkVYvcmnN6)OpT}3Q}?b|s;w%qExD}0`!%JJTiB)DF5Ry6n(Un6 zEU1=aE&NzCqPSQVQ(nB(y|lR0xx`6BLo-5SPm`iHL=&Sbt@c!&t>Tq`msBF$Sn|49 zvT)d>)`X)CdxdcYpCiv%`aYL(%Kf1Bp#27T^LvAYNMTOzH@d-w#XgFK7%>}>Q8QCx zRWn#VtMIBIuYgo#EPpDauFR@@t#n$(C`+rvSMU6_QaYpBs*#{LtIDXnQ|zz*nFS#} zs7tCCQd=);5-|dZla!6M8hEg{%aqAdn_8S=kZULjqmX2kYgBYeFz+<4O%Gr3tmdlz zt$m~|*^EXPYc{iA$D&!O^{%z5l_znQaEDKh)$F{qt&}0zy-HAhRY*U_FjuqMQ}PLj zs75VIscBR%RXWLKsIjT$)$&Nc#@Jfy;4fsC^oc!=W5DVTc(CJFoz-TPcBt7#=;r7a z@B{rc^eg|O_)K}@hoA!`3}Fj-gcybEfX@oo4>uls3?GHhYiwTYxrB44en;zEm71j* zlCp2wD%&dCSsUP5@r-inzU4=)h^hosjC-f3r|7GQE=HBy%U;Mj{G|Tb{v&FN<3|p= zkAuAtfkV$`*ZfCTSPS?l$!x*QehvB7!UoG^!@^w!`tONlnl0-_wFq|WD^vOghSna_ zkaez&NIQ-V*LdPMCtOl&74GA3`stNbj@6c#r+&?qwVQgG5sr92?ip9zg|_B{nfQ0> z6VnVM4Kt5X{Xu~x|0uu4Pa8-Z$XwC(K{d$^lf(m&QHoKG1G^E}5eMvm#i%p3d8>An z%0)~IOpC00{S$jkl?>Aim<-&SA2mre;x#9mQuhA#uv_tMey$$wvrapIzA_@JB|AnL z5-d>ZD4-}*# zvRIkSJV$0FPNnR%R53ubOojaUPZTb*!PJ^^d6oN8{XBDKyQil6MYmE5SwS9AHwcfB zAX8;$-@BT_*-a>W@>a&M6y>Ca$@>$#!|vVpo7MYH@Z4bI{zcW>d}5J|{4`r8w~u-0lEe>2HPdzr zyRq}Mu|5;rJXQ@_aq5--wpa^H>AH>*G!mn~$>Tc_)D8=YqsyYjmX zj`v->Ty##br*-)L^!x6-ZeS9@Dq}P;uxYi~8m$)Wit}QsV3sm|`9*Cd?~^-Zj4;~i zm-O1sH%JPCf2(H9j%6I}XkOR*UcmT`+!}I&zxaItyVASGWHR`gd`qswsmwXS zNh3Wd^OGaXUc2$kC9CXGyWPOcFHC=UBKrB~>rY09+uscym0v3Z)p;#Zty`M}UERMH zx*AL&y(F*WDb<|RECQT9i(9l?JL=wK;)*2dS*=gXwKLY&^}IXPSAV(PbzE<$cz9ew zuPrvMy8n6dR`=Tzs8i_q^IALJtG`3o()$>A5!4Miji8QaOh98PgmcXHz!8muE*B-2 z6CsM&%HhLC_-1$Mz%CgZpGvsQ)A5G&xYl3-I(i@f+$^QzEf1x@XPq^z;MhIqIsa-b`cq}&*G`VV;L`Qxw&VDbvPy)G zq{~U@j7df}V_qAI6i7jMjU@-@b$ zN~eai!5{x4LiK%gP>KhjLYE{!13Ex!ATiiOY%dh?ugn5K zZmu8dM527Z%i|G3fPRhd&L0l;_2K#fQB4E+Cc(o!I1pgHD1*;#wE|g=<8-7TTeI+u zI;fD(y*?F)5513`2>yvQ)X>nn4Eh@;Ks!olxc~uSkpHUz1C+^bfPjGWtW-5!HRWV^ zOdRYOj7%Mj%@{oG9RFei0r7eA{C%}Eb2TFJw6nE$;ql}r`8Nj7-}iqFGm;Sf8^zUz zpF~qmkx10R*^G#tfti7YL;!|}h=|YG)SO3IOyVE%zde2uOIKG%9!5qF4-W{`dKxd761z{huUzmw(jyt03dQAdJimOpO1_`!6Zqzeaf!tvt0fZ=2O zU*ikFTuHqS0RagC0mOt=J%KOvpbgcAm%sGy8vejS%ZNZ3?RX%8J3%5l)qYm1SKBT3 zR_iUTG=HgAE_XC(SGLtQ7q|`LYX~Lcn^Fdal9}#2KYs3Hy&oSPAMqyxMXzCxbw1Bz zbF*KkA3N}uFod*f0^v^1_|-*?EWxBI;93-OBz7l&4YK>)D;gOYAUG0 z3nKpIc*ower6we0Bcw?7CMF(fs4)3VO_{!YJmS5yvRqhP4zUbBO;#h4N`2j1BjA=L z^_SEL z0Y^4>*Bo#D-!}*<1PVGow@%H-AQccGASNb`=pB(-G;OMG2B)vSf`W#>y~;aJx3RYlj=|VW%qL3L zl!+1`sN<_-ySMtk)zYUF9EgNi-xNJe$H$k=5N<~hPb9$r{lrZ_0BTE7W3N*VX9j6? zd#C2#3QiyaY;g44@)@CwZ*W8y-Lrjs1$Z@flarPn`1*WT($R?-8yl0q&+kB51=ScR z$TAkDXWWda=53gh&0DQ21B=Dy#ZfX6wm&KeQ@)yB>-NKaLQlVC0s4eM=#Pw5H8Wbq zd+9s+#4JV0cYh5=m3R&Isan|~A=@V?s31DJ|I>+gIGOK{So{M7H(;q}gZ+!4(CXa$ z-?|_W025aTv#CZEH#aw{Q77+M^2clTuHw@P?T6{D0pbLn)nH%!o{I+=E@*p8eW@$E zU0#zlPHxA_g@x?W+)0;^8Vuxqo$KgmUPRM1;&x8m1JFw%6j zvSaKz8^ajugq7Q(C7k>b+^@#fZfjaFOs_V>Kay!^m0-0rju&x(_p$mIEdmoI{xmu4 zX?KkFN5J1QCjGqX+|*Ooi%P>~It)F7XSD9|JR>PT;)zel9q1shs)r0#gt*v zu;8u?gEm~)L&8b#p?1RnJ7>bl1+6%paNDb^wmDlbV$2gVXIA3}e=Ui4%M?#u{9Vt= ztvmj<*(u+fk)^H3*vcdeVh-$O>t!OBIFpqnEfkL12~7uf`UA9bIxC z8Bu<1ty-c|Qx9S)E~tG3B1EL10o|=%Jv|r*7IjC1IH#eD^TBWH-bBR5ZjL?CMs^0P;R=@S!$iY8b%U&=Wy zXm6}6#HMrDB*$mBwu2yH!1>m_c!44Q2tqAM5W%PPv^j`A)i^+nL5aylNZ%_y&>nq0 zv?Tnas$&ZFgcIts!ZE(|&hyaXOYcy-*!tT)?+BI2C*T3hgZ?0u4cgm#Lv-_ zOaug!&!5(=+72oPiqr}{jl{@J(bSX;r0p=xv$k!0JbRp}z_>tcEYu#UthQ?Kk@0Ha zL!&`y(?w-aVOY)%~vUsL0o=kjiZ-063R3)|9Df zAWEWG!PWY+V9T#Mp+H7t6j$2M?yRMT=iEZiBRz?y>`pD`r9`EQnNB91usMUYd13X< za`gnCa`kK7VfN&Y?%v$sQ%ro#kqflip1*x76yOiwX5}EKR0Bifa|#IwPdslWNwd?5 z*ECq&(w0R6ep0bRkKv5Y3Mi4wkZECZqRu0L9AwNIG65^(3pz<1Uv<<|<7A`vX?KiA z=G_~``^RYVBEH$)0_rEp!7lAvy`RV~4BYX8sX9Zu)lqMS72~}rO{P2Y3YxKD zd3!OZX?zW%p*}JX^BpKH&Mdj!r8pj686D@GyRw#-QAx*#CcSaxh>WlNd?DF$!ssTf zuTyazq@h*7ws0DCQm_%HnfD3%>OXt#952`*=PK_@bfc**)GqG&j{@0`r%-H5?u%zl zPis1V-x({{V0ODY$)VtC=Gz!jz5X8S2iN#DHS_&d}Ke#H1SP+9zl2SWw6t0r4mJTnZo za%~N{CBA8M+%-`OI%@WOfiB^+RNhdQ?)n^VhK2Z-k7bMDr;gs?=l zT^WgOL zRCsu3>R!`>exO#0WIyqW2)6E~Z~|&>3m_*XSjiwM4!5=)!oePTKxS4TklW;a?>BEi z1TAKFLI8s|Mn(>Egv&B6*OQ~4@Ax23(^A^r*M)x&BaBWOZT^yQa1l5dR}!;14@1uj z2%Lgk0c}a52JsjPsmTv1ZIiN^lp!f3>{pe89GuLpI~MuQ#WW&8o;&LtnubNBGv$jv z=Pxq{Eoy|7vh(E+^?2oZDI*iXn{*R?CP_MNoL zaws9dgmQ($5u5248v5@}wRF~lUFCe`^%Li(lGbXld9$e|6N-rl-&?WBmRp__TZ3?r z>tv$hY#fgD>v~Vl?Yt5(R0bs^#N)6rxmxQ>9UBdC(xP2bgCBq;bI@Q<*{PI=mdqMc4UQu+HmYb8j0)G5dZiSm?YH zH9I#7v(d^Gl^>OGKsn7Rhmzt-;G6jq#|9=Ydh}NmGStap*-@_X`1^mQ|PR04HP@26**MtuQrs>QyY%K}NA1^5hih^`F4t%d5 z_CA;7aQ4#!1>oAb zf2&_%e&g2G%nU&)Y(@n+{j%I|qh8UW)FV~>eMnO6d$2W9*hU>`Pc5>LL)JT>rk#21 z2!)(}yW`9|C(yrr1&v00Zg~<)rKUmyYv|QatUHn#2xDMfe55*|XhQJ_jhwMe`ga{{ zbI6a`6kk~K?sP$hfg7KU6mvap8te`T@`aB&bjN-!Y@Z4DSzE3u=yAd})|^2~>Z&z@ zFuP8Ht+;`*c-@DFLl})7HtU7mk)y0{!zzh$-hz5ZFJ;985}zUcO)jAmh(Kn(i^L=I^Z!hYIE*ad~_w(nf7lc zCX`vpFm};G9SUPh9&(eAz?0A804jW+yf(Dewn5GH^@Ch-CJw!r!G_kb!p?oCBfOCQ zO~F!v)M9ZQDW=P2fkX*1k2li-fLvK!I_O5{_O#GJXR*=g-$x!T?ZCETe%ZTZinOvN9NhE!Uc?2y;IQfGQ_{ zByC)Z;G@1VElQz`xs*H%YmF8WrE3DpXlh4X{+R7;U3wqZr_e+}cEb3T2XOU{S;(G6 zfUCUElh6s$r2D5S`AJ2gtj5=_9PUP$iLa@P4#?io+8BkR46+Hh%F0;e;RzxgK-4L? zlB>zz8~qb}L<9$RiL63Ez51yY%_oQuOWt(|I_-M;-X5o9cHi)kd#%qpjH(Ip5dxCp zEU6fWW*uH3d)6|;vIM-C+~P1~ai$#jk-{{z?gjB)_hD9Q>_4_8gbi@vJt*mZR-@O63}`VNf%S15oxw?_heQztO;nqY zyyzVp&5T$%*s4CV=eJvHsfCDfw!Yc-;dNXw*>D`K;R(GvE-NZ_SMy@^zZd5CdT__c z8THypgj3T{-D{!b*zHP)zHtSxDi?$>=k!!u(c4u?LXUi!fPOXhtX1#mDG9>6D;e+s zo(#Ub;qUb)2Q}QTu&~Zl71$gOSNEzgTlTJ>pO6ojz?L}o>g~`qyUNkzR4aS1J}md>0RaL z%_6%ROoEt4hb?oG2#J>ZVyH{*R``iJMw##3@~7`_d09^$RD;x3A`UL3a$R6Upl^uA zSnqAYjP4d(PP%PzT7J8pO`4k(N{#~!gVp@FBk@KYFIRA=qAx0xt>6j?-G_aI4?C-x z1;X9k3_y;S0j$@4%FR)G52@W2;T;+@Vr(G{MeW zhE1O;yVgUJwVSn2`yq^U#Y(Xl5ZI&p;YkaxYxzx=dk1E#O))%| zDL7fdM^#<7tE;siDzYdzL-qCWm4g28m@|UttmZRAZSyHN8Ia#Wy!LGnpYJ*0X+Im! zI&lLN4BmfQ&u%I7l&bGSQ)F$`zp+l4`_y!uF;bN~h*FK-OvM@OuICv9N2!z;jl^1U z*=>VtI{zU-Q{||5^s1)iL`Rymfu5e&N3!DQ z4vQ{cme77oiA3QVLcG8p3CbEp=s)0YZVRyBxBu`ZEJ2JKoO+N#JHj})R)}T}twr!> zqD4QEZ_yX@ebJ&|&{K*kzwK}HeiF(C&>EnbMMqcO!c<4hnyr|8^|~8gu&XdtC=iWv z(bxB1dHSkg%i}LYGUld+#~wnlt*#y%A+p>q*h3PKytap?FHwJHdmc~cw6*4=Q$EM_ z(Zfbi#SnP?E$mhH?;|$e49#d~cY1QJJjU&t7BHC=Hw#)xMOY`7?PK4X8^PN15~E`h z=0&HrA*p7p8s9F+cGYzfaCUV z8+0%x^5?BbgczyYP}|Wmz}Z6I7bP|5!pB`Lw4ZZ~CE!qP%WiOX=iAftQm>jCF^E~O zXPSv>;DEH}wj!cm-YcW39A2D+OUaui>;micwh@$(&&S$i;=w2;XZQ4T z0k1d{s3#%^YptRiLLZ`t^j|uBq+z>*92_6lzG@m1?CpYTdj=AZZ&e-eGSTR|lw%BVz zEj4`XblBZV*a@*SqxbwC7c6v|rNQ%f6OWX}4L)-@HhJj7+Vr}A#A5fubF<%r0ayP` zUjc_CIN7eS97o2Vq6|pOP7#x_wwl4v<-RhdGuaF#)CNQ!m_+vcOk#m~CfyZhAFAD$8LO~Jcz+pi` z!#C!vMFf$PO%9IIUo3NjPU(In3iTGgbhs>j_hVXPVIW{YN}JLvX+@N(!bTm1bXPim?l+&*@)k06YrzW*g1c&pfvNaotXybi7gfL?XEfk7qvN7n|Gsx61^w@CAKcN5H$$@TJ^K$$l-x}7dkLJ0EPU^V2u;NafgJe-zOII^2&C3<;BxTuY@E{E_!B>xGtjxEZPB3fa4y0q;8G z<6CQU16fBj{a6Bc#vcxFZ`}d73sf6prDm^LiHxDXYL|A$#nAucXB?5BUPzJ)Ml8DC zZqp15;{UJ&0_v~`4NM^OlWYbf9HFa*z)*<3u624>q$fyEdd^)>#R4`l&zpTG4C#E{ z-I`A9hz)G}Yv?cPe5VQ0I8COIdgM&G?Y-DnL*0_jEf??ynB_=1TEaxGy>)(XNsBeU ztKKy&^7k{l(h2w;1N*+77fy-roLEb!&j^@aR}62(=nqy|iPnFnd{Zr~JB)yQoPG5k zyfBxK>3i~N2lxtXf6hX#eN=u6KdvaKc2maXghUYbpqg;`8#Ear)U@4M#GZ(;KIc>T zSE85}gT~NlBVy9bjHki1ZGVlZ<{VKqij)Tv1TOV%wd2oN}m2ptP8<5cZu@`VEq9|#g zXY;;OlS%ECiwN)#J&jtVj1bcmj}q4pdjKP`+Z8&*OwF$$4=l2%b4Emp*ae-wTSVv1 zEKH^M&sVywZ?pG@De27&5lc?1B-{~;uzX8j$h+sz=6_ES0*tL|1f5K1I}HSCW^*o* zRHM{74Af;>X7e*+AYPJt9aO%&m2k-eIU8E2@!D(6DI}@CHc(BHO~yyUigsvn0K_(M ze$-V~f#9CSc&*%kO%)w!1aCfw9GZ<7DvFUECnOAaw}-7|>xo)is)zEP&Bu`O5y8VAfgTxJ3=hWFbYCtFINs=&rH* z03GG3uc5YkZFb~YSc30j)r^;7{JQGyz5XjR*Q+6i={y$2ZFd|W{peq1qHX?0d>e@MNLWdz48%o|gNP!7P1KTRDrB-r z_}Gn?S;a^mi6~9lm;klB7cpDUy*$sq>1iW;#@;>skITygZU~pVl#MG{Ir{?p8|{fC zqJw;zML)Zv<5C)_3{$;{QuonC=2*ipuJGG9LsUNz{3i9Z6N^T_^Z;8bJ)&$^U@E%i zO;|{==7SKQogq3Ak>lYJ@$lTJVePOW@!z)}> zkHBA4B8x~gN642V=5S!Su$)rK0viVnkZ9k&Yzt82k!=r7-^ z?hN=PbKS;}(R6fU%cx%tUEo$Ci-%JqW(Y4ewiZDP>T$u{FSd=c`tdAUX)6@ygn&8d zjr+pz%p@gbk5I6IgBhKVd4g5f42))>kDXjR_KQ@UQQR!oSgRd(DM3%aI2IFnmTJvJnEWWIwmaWv{O>L7fG#OAX zs)(iA*)!1fbGx5$hBpdB6Q>{N)%>OY{bo|9^_DfY7^F3OC?)a;m^LY1|1Ro4a;5F z-6A?@>rL`@TQoxBp~O|T-9|(K2{}>x{kM|6ro1nR!aLeAuVBaRWe+2#DWu$7<~012{N*EJD$#RB4V|+w#Q%vqpJ2YBOP|GVylHf z)dUQu94MkB=N#_t$Z*HgEU8gldWvIOi4NBXw7y2#3wdNUV^)1y4Hqe-s{GT#_iExr zn{oodeAAK5>Rp(oIh({G`%VC5hFm(UA&CxHxROpG=I$wt$e%){Oy+QL8rqhu*Sdlp z-%YBRMq4HDSnSp;;qd2mQtwnajTYv+0EW!Blr(2lNJDKgB6%6dV3%se5yrWKX7LAZ zhQ1IB_~9^8QbQ#N`B>xMQM#L2H%hH__BaVEG~Vh~;O*isS1z4PrVU)@=~_vTP3F%h z)-a`WlC9cuOLuCl$?C?$wP|2S8X303uQF$cGmzxiuwQDAKOZSGHQZsa} zpsgjbUw?vSi4lm!qopilXn;%o{F3}QXvw1`HSklzUNxmxtt1bP;Hh&TRDT%9O4#_L z71{gM46Vb>X?_bkdvLb8GZ<0XI|8i|aR*70bBEi9 z;Q1P(E1!r{^^%`T{VYZ5Fyh$(Q^nPr*VaLEU9s>&{G5DwGd!Hu<|6@BU9vI)&7&9Z z4|?CxD|$!K?_imq@@hX3Z{x9_3b5jGYO;;80VjT*c9r^*_X9{$Cdb=Oag_b=JWa(- zBdwtxv>j_>wE5!H5`PHy(X<1Wue}!}Z&7bIJ1S~yf`0S@J^PT20(kIUYtpy9mzE$* z*@4&r-0Qbyt1Wu`>kjPlTgkc1F?khZNPFza(TPG|mkDj1vkr96*x`bKu9*=u^fyq? z2%%`@g=Wvn%i}0_WZ9W$>7~$(&j_UiCZKfLJP5GPAo+V;UcYlJnIJyhoA2w1plj-= zd*+%j*sm!!Pds1^+e!&*3}C1Bpw@GFgjXanjsvPEO8huBfvClM=lB&tp270(MW>J%aluja*v4Q_7?cz_O-tpNzJHu#FQ+ zG3h)cq_WCnVq6NPrN$f6p<57X9N5hB@YaIKe}QaWRCSmue%x6TI<;X%GcAaoY0P_z z(cZEHK{~0k+j-6{v6$1Q7(uS7XaQz@Of9Bujf!I=+{N}7h7TJwY3AZ6uX;#kwl}y@ zJ|}$3MqtG6c{7-iBg5qN4L_6T#MF6J^G&E$Fg`S#ccTMD|mpEN-r2wJ6tD6|Hdp=Mq%GE{XyBd;eYgA#6FiW&6gOy_%~ zdUYqLL#3wA;#n^WHz6x3f!gK3Aa8(?fgcx@BK9P`D@LtHiXnkUR&gaOO)P-FD~w(ei)*v=eYEZv3`564tZ6ILGCC&FC2;Ljv7S_v!Jk0?MSn$ zGF(Z9VMqm(Snkk6pnfx)uxYVw}R%#jWw7F~uEb3`Fu0gm3Sp={w$ z36MK3|HRXjM1`ToL7X}?g}qjgyWdgW3aOW=M#HQXOExBYxMv5eR3;w_ zut`tF5T)zSvFftX68;Cfy{hlUw&NUG`@0oluLneFj0~2IbF5feNrdL}8oCUUJ%sCc z+Y-S)95woLBOEbfM}3w|hip#MFfAC2({8 zlhhFv6-q&wHx_&@R$DlF*3nN#zn&Z^o#ddd=hymOX7^*FK6ym}*$~O28Kb9XX1!ZY zulB{5{zUtb*lxg3`?0E8S1tHTG_7_b(Rn@bdsvdDIame|Ex?Y@F{;7s@V6$2Zj>o- zffn0$_3}~3xtwSEqc7^@=SuA;g(S~)3UX-UokmZu{8?qGldMF^oo>CWvvX?|pOByW zyHtV@4bM~mZ3Mt5oQf?sk>i2{4F3vGS2O5D7jQOrQ z-S>muBc<~Jh5XPlyiL#tm+@Bk?dZ&~%Cm05WNj~GMz!ZowG2Z2%c?_dUucqv)4{&v z&F!nk!R)Gj%@?0Y;p}i$V@cw16Di*k$#|_ZC-dvOuMI&7eDam+#@hA_Y3*{e`gb(L z#d=}$;&?x@#{3n7iXeH|FonrSrqWuw1))b8$U+37uy^!hg+9;KPpEwoqLr2X597`H zCah1ulzIGh1g^qagioG!f^G5=Zn~)v8D<8d$Ut)P6nUA5bRAhQib2xcGyz^Qou4wN zjYkCs-|HR4hp!j7zhD5=m+J@+j|FQz=p@6mqFkXtWmQ=Ej|oav3+(L!Wf{SolxQPg z{HB1H+frMr=SpdR&#Uzm+lf?{R*usYRy_@}<(AqQ_#* zRwvYOM8bqUQROPtTKj|5oGtm*#Auw4r>tsCVb1X5V2MqqC&f)y2u>rZNYwz=@FAl6 z`RVL33Fm2CwxCKPGKl3}{+bmg8WyO(hmc`Jck%-=h6r-;!?}dV=IZP!iBU&yP(xi$ zCXy^gNoQ^GsE4l=(8LNf%(AagTuIY8VXcoOU+`^+kBPRvKZF_m1q3znOjN{ppnOGX zsE_V*(%Cz)J!DHd9cLy6W|>_7+_U6D0$I6miXqiJh}Bysac23@0*%Aj00~jlOAXs# z&D~T8qa>7E0g$zBoCwie0$OM(9!AmU8wNO{X%)_d%SwB z>o5;18E=N&fZJB!r*ZDR?N`(;YK6Axi{vn#L}w-^Mz$`^B%!CvsE zuV1&!KvoN%9c5>sZx>4U_2q;sFMVYQ_{|sYRV^2+{1wb5@Ir-H0(C7 zz;#l(*62o)UaK4P>3e~NM-T^COc<OADB-pQ4*Z@#YJ|Mk4(4vkO)8}zO67YBCoM_uVA0#wA z$R$J=blg^Sc|S7dU)9okm?tR86$ClE9)1}Xd7j72@??(r%AY6J<)8*^l9<(`@c}Wv z*oQ@%d6PmPLd~Rq8%+t&S>zDx#Vc^;^1}fhW>vMkR2W`O83hh1AapB$C}Xcp+z1F6 zi?Mlb-uIygtWF#Y)y<*Zc`+!HsblgR@E&^s*&n-mlPl5=KVm z@)tw<>ZpSGV_&XVNvk{l(7y>L46dW)Z09G8Pc=2Whk|8be1~W+YS5FbXshQ@HL(^X zBr5`DUL5|bVIVAa582aBj{xK~l{W@V`^kN~qZ3ZYMo)?&>npkTbuoFLiH06agMo3B zss_u^))UwNabNwz)f(k(zW2DencVWQ#o6x_O;=3jdAKpWeMm9v#WGKy3I=X z6hRG6wkS}b8gyzG7;S2q74}-jHiKY@v__JwKCtg6+%2V zS`?rBlDDrHvGiFwQ=k_Z%46MyeJS@px2OAl5$BJx$ca46>r}>Pm;iZ+stIFkuMMZ| z?R>&hm=5JTt!`-E9og$LStP&Js~@MVK-lg)P@5avS$rIyWc(_(gt7Ot#B+9b7@h+j z+$*rjWZ!EmWYdekls($D`6wSHa3FWKttqS7<07dQu>)mN!O!;8)!B(`LPlkZ4B&~> z(D`0+b<ID#5!T7ZsSB zu~QQ@X_uaZPWRU;sSNH^RllV-eJcZ;E2wiNdf~CSkIQSaK!R1X>jqI0z|MRl$MLLK z%hS7g>E1>{Fp$w)nil5bXnUx%fvtjnEDDb-d{Kuind!NqK^bD}-Cat-oTdr0H==47Yn@%zjE8U3^D8(TReHCj>Xu{X@GTNW@ck3G8{1 zrb}0{W1;Q@j}b4wYvYTlenmI>vpsH2oTT+MTNrCKnc~mq_!L`K}6^-6(4IORz^+LNcIa6TtQwRs{wj` z>QU@rXq%xw^Y)R*1fxD5NU1{9=r#STr?n62F(m}?&v(hZ?+*@pqCQ5SN>Iv2=;LTa zWnr8m?%y=EP0*iO{Ujsob%J-)C;NU}L02P^(x*aNYaZ6@Kzsnzw2mVt?4+#;ray>Ssa+uN*AaZQ#NJb} zo^nF%OCQlr#QOMtPQ}N{bkWeA`*z9N$&hiC5pP+fn0R78;?*mOdQ;V`5E+a$6 zugwPYf)cMN?aWw7%^|E$-AWc~FL7yXcvSN^3<|%52WsJeeT7>GFp8*}SZPnAxg5N}H zO8K>iTWqS9#x;KV0>Yw6&gR1~na&tO~} ze}46FrKacprTcqwyPpiHHA29dJV$5f-gX4z*4#UFl)GhM-TeaoVKL(`lb;X~`k=|7 zqeo@4>t1cP%d#Z%?>n!{xG?iUNy5;jBE%Xe}VX)$3Nf*~PZy$YcaS!&&fHfItMSMu_o z8$=jW9V9e`T8i2(8;x|?cTDX%(jFgj%&8)nOP&iQvZB3tWe(gu1n7v?@qwB9I!P^) zn<_J;svOj=T4ejsy}~Hlp_*3bmAy6b*GGV6{+Pk}0WSyVgR&4<$_#u2(>3?km=RX-gTV2l>|hMC{8t7ZhofTqg8m zJiNKX=H)i!*ARPqragT&Bi;bMbPQ)*t-^u~-5mYkWDmHqpi;NCITvtDR!_3%n7L{Y zTM%ECv~D=ilr|y-hVHOR9)Pr1hgIet1aFaw$Hvl(n6geF)5Jos%<&uPUYmv5MYpOt z`Jr*A%+IDzzN@l- zbK+Pi8|J%!Eu{cahWl?xT<7jmq?7nA3n%_6sjSMDKUFI(w077O?GaN}B0paOSm;S3 z%6L93!=4%!#Qd&un~(o?uJ!bi5~udOzIw9>wwGubd&e`4_p*%`86A_3*z}pao~<=A zsQU0rCTMK@b9Z;Q((A9T*;apw$WK;UKi@Gf0y@uDK!mPaRu@DVr@g)O1ykqe*A?0j%BK$> z@Nq$>Hvxrs_w%{Xe|GIWV|seOsOyGnHAU>RF*6I{V)Sp-<%Ir`Q&T}4yNUR*PqpI= z>vYZLNt{dHB2#mQcTB+VOVK$2caO4RPrSP*-; z3~Lixg*Wz797u{*yNP_aOzy1G&3J3D2|>neE3*HDt-^gjvZ5iitcR?l1e z1pseIUe3IHw~)eWz0UWs{RGOmz<`VUKp2cEen6S~Rdl zF2g;~q%zUC@)Vxes+$aW@4SC8Z4-CPw*)Svt(D>S3FOAKWal4-1$YN7B+3M3MM$eYQI=vIs?7YuFK6{|{)`;W+Vfiua zU*IIKVQl)Yh>APTiE~6}Q!IXIO|c&wPDri?$t1z;${y4`crrP$LWW9=KC=?f@va)f z&L-RhWpQlRni+DA2l?vo!&YA}ozv=L0O z_3$gk4#M-RK!z8I)1TM3SstE&Tz~F2JeuxIN0%E8wXUlw!r)6G@T~eKgp7tzVxuES zewP|}qurw6iwP0!%lcVGjm_eu37^qV%5CJ48kUHc9CiA+R-thmTe3RNk!#e2g54nk zCZlnyQHmh{pwbJ*xn%I?&`tnAPLz}aFT^QdGuSI7=z|)S)o3hsg%_8O8cr!e(F}Sg!(n=rnJ2JE5l{%lSh%}h6TWO?&rDF z?5W%=Du7#L$TCML|F7sHRMZ2mb6Hs(yzT^U4^;J}v5uEfVI7b!2LD3*l|r?hCajqT zeEC?Uf}W5vzmsHJ<8&o9cQdmiO_P@KWf?K1`o^Vh>{6pJT|P}aZ6mkP7pW!aZ(MtO zDMLE0VgAk`s2y-J|M39#pbH9^*2fXBsNt4rnVc(XO$DdBV+wkKl2@c15+59g!Yo?)mgi>v2#@<|80 z_Wt*6)l}6jgOi-)`+cR@w-GcdX$X_7kc%Kzj@N}~vJ*rZA;%f*wrRifp3y zHj8!)b)w7X5m*(4!j#2@>E)j?IQ*XqhGK`d=YO&~sUu0&?|X{l|J>?@k?nVMv+Lg? z(v7U2;>N7aO9fVHu!R^~)^1#n5%g zC2<>BT%=m=BKS9($Fl0c1g%Q5hRN|w;e^y?Xu<4X2}z~ne}$@lRw^x}7>noG1pUFG zUGLjEsN!L`RXZ%jobNxws{WU!F5>N+ZwvJY4eT6=4dh0ng%R**ICM3 zgpWzhfui`H#n;DzvH#z!{!~7nGEjigU7gZk=a17%PEa$=K%&d%+8d%EzE(_ zd6BauErF!y%Q``UqiX#QdB8&7bvVuXrc|;0Z&;)}T!hz5>ldld_4SYW`Ng;pI8-4= z?}k}n%MuCgovu#G@>22DKLPNu(V{BE%~i9#6LsZMHwo%b_w?hcj`p z8$YD`%h95@V%MMj;w0J6qG|E_(MQBE3De~Q&8cS)Rmw`sJY_dZW~F@e@87F14y7YX-q0k8b&7KMnHcV<58=#`;P9hKwpjE!OgM9 z&(Iwf9**;RT>WDIl4~m_d_cYaTH^I3F+Q}X7*VB(V&{h5NTnI*cW zkmOEc+i6WcV!;BH{ex$5H$?ohx4r_e<_OqKLSBj=x8X;zxzR!dokWr#Y_&H9?8HTi z%@vSa2sOEULwe+U!cUxqo6E=fEPl_2%wtoR357(48MqW!1f&;psK>P9ePrzGBY>w{ z4d+-gC2e5G=C%sk+mhe#mmS;c%YNjIm`5*AOv#N{-Wl3^wyGAB^2W^Z-6#CI0Gm{( zPRdV#<`XK@Tlk~)$#LMjT&k6b%do&J_yLcJnJwT+x)rO|%EG+AAgXzLa-3Yoq*Xfd z_f=fTU;F#4Po?z0{&(K`Z)j|J$s+g!DEl6I<+zpDKV@%U_9^;Jrt?NV9ydRuW@PWn|u`)_Y)YAYur z*5JgArY3oGo@WWGRnVi$ztcOR;{`1F@?eoB3SAA{=yKl1K+LOLYMO9R{E;Qb?cDEJhc&DCD#C1EX&a<~h zx>dPBPEG*rj#802QAC{^E`9H>lZ`Y$odxfaJ+~J6r~6!8FzEio^E~X`b>hR~xU@NH zs&28!wG=@b+NuXJuBu2W%g9V^^>rSst?ur)imlL;Y);bFZfRJ=Znb>^$LTV3cWV`S zKb=9UaVhBRJ0Er&)lFoBXxv`ZtHGFJZF=v9K~g}f36~AeI^c9va(yvu&oz^0k|b)*X2r`zx9a-v9rmJYnvXKD27jU%c`N}#swCV5?k zYC1)a)$f+NW*e^=Rx>5AC(kkJi*1uW24P%)w-Hn93*Ad@^?}&Z<$K-u{cs(Rx`9C%5MJ--=yHE78 zeREyqLaW=7`?O(FRm1KW(CJx%)crh5Heo?qVL$N~*%brzC zRz5-mFAP=3Jua48ZJ?>`9L)VsN%CKi7uK~W_0Aw*)acYJ8B`*;WaC2T1Pi}91%Mo^M$0C3GG*V zJ-TKqIuivT0$fi~p}vH>7yCEx*IZ3wt7<1%GY2mtYcLHn=NByN&Pcl|VE=yWp;0f@ z5cL@7ffo;*=cRuLp>cM^xD=BcY?OWRE@+C0Ss@C0%_swO{ z967qN?Y#rGfQh6Vx7JzE{mGA_;5YECds8=Xv|LLCgG%TWK~RMur)Vw~H?(p`wv@J7 z#MTD0X@9}Uyn!ts&KJtv&Wlct&*aZ2_P1~0caxN@DvWBt^b$1cPp)a9=i(F?gG9TmTNKnY;+|_@kmJz$pJla~ z_dcxm{7kPBRhRBL$x2qvMi8HS@fA&B>mJY66kcV{1l zBdrp2Dgf)FmbL`5y%a=S=Q9wpm+*Q_$n*53=Pl>AwsVc{ew?3Bx(99v{?as+UvU0& zV^3V`r|aQ^_v>+$wY6Qtoj7bGiPq{tXgVR%Nx+}3^3U=etpq@fQ<0{G7Dh2oFmk#vsnjLd zmGy&~Hb-PD1ZhHJya?kkdJS%7j8N-EluPEijs$FXD3eoNv)fvg%6^T9P@qO zMk1jcTBTzlO--^a$l2FfT|~*`r#(wUhM(&2<;AM#5!cJNil|yR=pwV!dG43Ce*nl4 zxIkTkI+c9Wl`*UiF3QfxCrzf+5+^@B+!J9E`*)z}_7qB1cq1Dc3t%nm$MrGJ7ear> z$5{ipYM*wuDPQlFdh~+l7W;w7@7680B;YoB5$Hlx;LWH^Q6FpRx-Lej`V3LCf}*O4UPZG9p6d==jWBLP(@K`PS4ND z|HVqpWKVuUaQU%)L?Q-3$jIXx`(}3l+CORlc%`<7a)g7w|9c3;`a~pidSn@;!K1CU zHZ8@s>Nl-lC=S{M06RiPpUG9e9qy(azC~P@Ozzf{3*)da?!-|2ujs3_@++o{qq*`rlcvHLXq2xFrw(|{ehQq^DrS9*S?mov- ztPZ51vNW52qkwb=Kk0tB=mmgA+L~=_qpZBFSWZ_3Vc}3R16SjS2JncgL`Zc}9?YtT z3Lf7vOLAEWcJlH{tE!J{2$j^4Tvn?N@;j{LwHyaGT=6 z-Djj^e{SQp*ZV>^c*)^27y>1Q&T%KA<8_ToUBE&@=&?v+&;kM?=feh+;2C{BmH6s2wf0 zGeP1pNF~ehZR*Q7sGv>b(cB zO_`w^^Dv7u1g18$s}cGO#_k2VEfjiM{JMiI-3}9ixlyYcv8)qK4)ZU9sDnkL*#f*8 zV)8F`Y0cYj%AXA!Eq@LUq7LbT*6e!=P7}_|#dW&fUsG&hpoO%q(yn1S4`yQ0ad&$f zdTTYDJu!SAG*M#-*5Dlaf7D7 zrzwi006r0OwYv$?fyp=RXNtRlZ+M7T!#6xS{JeyiyFv5M)tDuPyEpgR4ue~2q@lh* zvpCrv-K5p)p{4re#cPTDHTYH_95#o-!GE*p{)KkyQ4IIrq65UGHid7MYcK`{N+55* z6xCKE4(L>u@e;#BJ{J;;Z1yB|4zoAiNfZ$k-%IJyR#!zkaRu@87pGt;UX#NkkmEWx z=G(vfK8JBlQ&8b1H0Z2q##fGLO-2Zh_`HykuzsOy5VPDMc$$%ts>Aw1%$)#BnX6J8 z_c`IL46&Wc+C`LVl-hC|IYvP0{pUBDMdfP)ke6K-NptjG-GXhJRiaU2dq%qgnqmPP zS9j^>Zz#^$;i!N8VKk=}36>uM>pmop$d55->R2k07A5ywz`|7R64)PXRQRY`GEuFx zYBJ806iG9lGSLHdw0Y&_gk(DK>?_*f!UchZJ&Sbs_n+{U1YW?A*C-L(cde zCS;;R#|5dWR#A;^)ltnlVIAszFPQVV|1nYgYiWrUa7o~hlJmvz0KwR>lcmk#z}TYZ z^hPwCt}IslF2~W!!|{)!XIXht%Tc4&d}C~zjNkd}^;^rINd_5Zcwp!THn?%tx!bu~ zTKu=0x0#3EvkxeZ6L5b76WjW~)0$GDZ7)fkxN<_ql>b5e{2P0CgbtNjZx|;M6aT*| zbpOhhw}*e|ho2_=-AuOrAKCo>B+=7IFvt$)uo`0X|96V`ujc;$2mV{D`ro1b|45Xw z-i+5)SEuLaVbaEm-d;yC+=F@&1bTMtOASG9ti2!L$x#3G_k+!MyHl6B%^VW_!LS?> z7w1v%&+3?%n9`~$QGI=4C@82uc2Mx@Pvjm#ZqMz~{PTQAa(-^d#jnD`f4IFjjve`% znwrW3){dR?J3ArMqin4xP~zxNj_=J44FVTFzc^qXC{K8l7wqsq@$$jDp`#iNhS}lY z*me5T_p8DO#4lc5*#`#)JIAYCmS4jqb*JZO+(T2VH*uP(>8K-ly!S{E(nyC9(yg6e z!>3*H>OWcY>*KpK(0v4TgL%FX3qgQDM40@xS3crC|_!65RfLwRL zGxzSkTR~plr@Xwp(HdfCr^mt?WTWv0ZL|UOFrxHkd1+F}|kSKN=82ujl z@M6_I*x2s;UuZE@$PMJnUM9~nEF7Hn9`qinWft%9iSx*kVmG~H7+F3yWTS{ERtmo~ z8oKDd>x{m?v9(o`w+Q}6d@NsG_QuQS4E!xW7#;dB&&X6S<(_9}ajIn;I zmmcBr&-9mWXgnv=FVkCSynK{@KX{G89b4^VsIji;% z*`z=8sT!*}P2uz+q$`NidJtfC)ofqqP=9Nl^WAW@$nDfkP1$=1@>_b)e6%=ZKhxA(~s^Cg$Lq1b0XZqVsXTPjeQi>MRS0pyl; z)3NyFGf%a-#MRYaaKU}~%B6R>^Z}RLYD~R6p3%;oEZMtn?7nHpl3Tjr<$WFl?llrt z0ft`M7e6jNPv^kS9bFIVIjM8UT3sdLeqfi5#e#e34!$&2IgC6Vtw)NIGk8H8OZGt=ikHv3qHxI0vxjOQv+YEm4dytWg z8?R7*{#VcMm-5wSMQ*ReUSmWOK#B>7@OkTl+H8=Op9f?hO3Lduqyuii1^qg03(!He zwQbkUadxO{TTLkPGB!M&C=k-OesvqZ%s6hge4e+1-~m=#Av-ht}3M=N?XZ@|E9so`<(U zo726RK+>)dBl$J3tm;7WJLJO8>wT1W{`k!eaOyR-{;s=G$jZJoKeNgI`P~lNFQya! z{BX;Z|Hu*a_RK!E@ObMd4EBw%8j|mZ4I@BC6JQVgv)2*VbrTWY?SA?CyqeaL{m1;* zWdYEeWRGE!ySwXwY)cp1b%QUFD|hR1S5(n{BN_+vhKqbuZQ}RvYdhz99eIjsK5WeO z8XI#d;cPVkaU}X}qN%w4f(YmD?Q7+(joqduv3?tJeBG(OJt|lvyW%!FX<>O-bT~h!LqX+cQe)UX?g$t+^r#*K|^BWKG!zM zw!p1@U#rAIb3tuTx~3$;7Hk)%To)GJJxzJZG|-;Yh7SNq|AxsHC#upoRbJ98SpnX+ z>TYVw&Av7Q4(B}X6oHbQ%l#3g7rI?#@Y|Ns{ zbqnTp4m+O-@3u`kF#~5Gn^)VqrWHVP;zcg4vU}A#fSh!G#JX^a*Clfw7cJ1oO(n-p zb_APCZ~H$tbI$^9j#z!}7I%Ek<>huEBZQQ3a&zMUFSmV0q_TkSRYNaFbT98`K5+W@ z0}Jo+p!o_L$<(NIuikV+&!PEX!bAlODfmx`U$m$ti2=`P`|q$y#K~Wv5a_-t3zZiC zHpSc9^hz?h_f353=J2|-wQZ!ywjLS0M%AdlJ!tfp+ngMqY@Lg|gyl%G!uA=D5(8VD z4LX!Su3#?0*1p9YSezZ~$i3_!cmvb6uI*I@%&qS*Aj?>7NVfQHTF0H+zM%K{krG@L zzX%XuT_-QZxY8YKn8&l1zY3(j(doR%6SKj2(Lj{b0~y`=S97U{|JB@j>g8pN80Qm{ z+NbX?Y{(OCx7U4cdz3aLwb=ZblM`!5TQNp+ZjWaJQ^gLq42b7uInwgnx+Mzn;;Od%0t}SS>DmEy7uNm2?R`1Pk!-J4)M2h>q zEoEcP(}SeDin?dH^@%!@$(88w)Q@BM_G$28$lq1Od*ePEK@sX$_PkmX8vY1adR8hbs?Pumm>dPL=v;aodJ4=oj5a_!jB~S^**#_JfHbS% zu8^(wQ~D6+FH56?{$5z+Ta~W9b&CKNoJ`6XXpBF%^TJ@EuXIV;Iot#ZAgb;t9=t6e zO8D~yNf|^{d|_^RN|x9n2nT{`XO`(vsDmn4`P#R%D zcs*)MWbmM(Dw9Ad;)28;H`(JDfLBD*0y>|(Zc?RoiQ}cZDzR=cW1(i-?sw}e80EqA zrV-mM5*Tviecb5y%>rd=d8c3DZ~Z;*xQIOYy9lp%skaJrn81<}lCn(2NAbCRjc1AD z5#$*t(%Uw#W??u!_+QU$`jeV$I6mZ@Yj=FEjm}Ee+Fiqml8R#D%{iaD<3JU17;B!Q zI~zwt1E(~e+5-D4%2Qp5L{!}y&G_I1Pp4DtGVxxH^HT1Y+Bap*_u2i`<+tF;2Dri9 zpB^b}zgBuLX|;SYw0yCazCX1m*)d%wn$(RHIDzTwN?vK6V^Q zY3NQeF)=GwMPADBIqk0K;Q`#nq|j=LeTMAm8p(Q;p_f8?Pk@TREF-oG)rQp)Cn9PZ2%zimu;?N3LUXA?NifIU5 zOUTX)tBhtf`y=`Jq?~$Yc{cJc+IoNA*b|kwJdG8Uocu)yx9rFqsi26hQWIgIUB`D( z-O38{yesM*CCKhWy8l$f^lA0`cfG5V)3`Iwg-XvE_6wzp9sR1N>aYTG+PdNpf_$ zi>_Y6#)a&+R$o?n6{>vlU9^nxp>aKmgHq~spSY!6Q1&y$QZ>>kmD;l&C0%x`Fh*Zh z)u3rkxb8pg)qaa;*wVip|WFrclhkV(kPb9g|h5XR!fE~4*+v}%wxxVX41 zH`!$7QBhMfJMRulWGb)nF1_K?*>tLgX-wvLDXn-FycQ>0i|k&Cfa>K|`zA^&%k~Wa zS*CDI7-<#6VzR7o{oR!`>iau4Q`Yf8Ft#_P(Z$(TIX)#Nr1;r#lE7woj6p=tmFuLu zVtRJ5x5N5D{K49yAz@nZ(Dfzt-26aVLC=?e-_%TGEok>n?CiLO+DQ2mZNtV+qmqa^ zUN!55#x-}Zg$6f#PE3WE+n6Fg$NGT@KTQ`(lG&OCy9EOn%806UI1&xugUAn=sY<`U zNTjTofg_9~+VJI`(_zC zo3B^{WZdntB0GhOIy;9Tdn6tEWHF-v>F@%x?A02|3)|sK{Y+^&S#jk7avsO`4UN_U zTud}x1OSg4xsYVm4fx>oZER{c0efoz7uy>lmlwp?(AZGZ!K7Uln;*ydPs-Y&!OAGg zFb(y@50uN&hBaduWj~bi0_!&n;G%y8E401_-pyBom&nHF+t!EKWE%?(^ zKmV=w<6KVrgO!%6O67#bO`(#%e-QHPE%Ea{bf7QuZ%UEjsO4TFqy_DxX&*MMT!Q(g z-wd^V`7L6>So1ptJYUu4Yze+rJ0zRI=+9Z@^s&;FA|{#P*&ZUS4<_-fgp@BgK>4-Z z`UZmy=LHXy)y9%c!l>DTXOvNU%P0tAgycL;!>IeVhV^wvPvWj*K)V8alLYQZXx&4R zq24<0RX_s;R~o`s2(Y%Pk-xh005KX*Ph_ZUA-Y6z1mU)+frNX$H;vZp zOh#6g#Z#8^h%(FbHDP!kr@BIhghne?B6F76a>WpYy%F7qzh}fVOw3ih#ws-QPH?D| z&Rojlq1MVy`yjI#t5&I12b1YGZ}^n%fTN-^{EfLpMv03O5(*~f2f&1fu;dN zsf9}y0EjCur%p~zzA7S_>cNDNR&4EVBW7Q%*BZe!*=`^@=n3msC?76N$b%}nE*iFJ zWOBX%F|*X%q!@lN@$hTG(F|&Xsk@3{*n?EA{b-C6TmwC=r5=I(?!d6A-3}czTD%)c!)Nw< zbTWWse+fZ@BEz&l#-18_iF-rv^D|?y?YwX2yzv)wKj`A$&9*sjd8Sb}SWP!%Wv}IT zj7>;cd9cSc-FSo>|3Lg^+O;AK;d7zN#!SrIn71|{|GuyQw>#^E;95xzStqgj6`C=Z z+9%mV&_iU@e{{mAPKUNiXoo^FA;)?%+c+Blv~8Q%qi1WJa7qszbBInYgUKKhYXuS30Qv4OPcvB0i<2 zNsX(YN@oNmPj7qdWS=33cA(^Y3%=+VLMrR86BA70!siBS!+9|fh+R#0s@PbC1yyDf zMTmo;A;lCb-3jBbK}Bsmq=LoceK61cB_~!^Y5MN9c$$x&B}< zb5kRhT-$lpyonj{tQ!?2Te6t=^vX>Fg5+juW~*aLMoPp<)tJL+b63=@T^GR~g{**9 z%K*Mr!g;=$=0?6S$+^1TJTjok%7LfIs!36fhC3ffYg8vWcT3?_zU*FQOYt`GTYhCU_?8S1-o*a#DzCA|{chxJa>tXwx zuRCJ1QPINkrl_^Jo$M1p0`wVo zpn&#?yNT2_GFB9{Lw^6Z?06mLPe@SqXNl$WZ`YoXFvv_}(lj1RrNB$E=r-laL#><0 z5Q6lNEHH_wQDz$%oKKejOtECE$n&N$*85KIYi3UKhs&yGcoarmKAC0l7x9}_5+tly z?AaDaT2!i{bl({RSG#&* zBVWJB1u@9N+EN7bune743}*vY+`OUkd0jy}LN>EGkM|c!P#CIUY~{4*l}hMz_}|~c z?NQL$8XD&AmR;IiqjfvJEnW5{y9KlzS6@vH)%^Qi!TJ5(3Oab?QxSa|?ibE(-jFNI zkoN0!iv)(lwECM!CSMKoR9mgU1*@h%=kd^AY^(cM&r^o=Ga0s8ak(wE6|#~d>DJf{ zv|TXC1}D zGSM$o7SxQ-7j2G=`};9i-dBUC8XcCTH_~GYiHpH~hILy%Vxi%b+4Bz~ZQO4=e=XOz zP$;p~F-G&C=CDVg)>bdBs@?j!uFYmYK@5T=6*WJ%-oDr2V}=EndA=n)0QagW{oDP0I0JkZ(=HH zok5nYw@1>RYN%q-_(65EZ_912WNMWwu|aX%gaj_%G)BMuDJ=dxzqpiFV-7zU{XMX} z>a^DI+_cd6z~HsTLBb9=M1ho6&{ResEFJ^$SND&s!mDuxQ>!doEkyg2ZTVx!q%&f* zW*j?{oYb1nFwcj~F&UaOsWIpVE4&L1OG*|vk)kq9CC`mmRIi50t5p^3VTjpwD@Efn zEz3OlD8V7jch~-eJK{q?7{0`89cBFl&H-`wFya1CTboQp*70Cc7aNQG#l*f_g`L}j zIn^0Ur_F9i5m!5Js}+0RXoJIKO8fa?O59184a=_s>fUAqhu;CiWB4MuvU2RX7}Ho3 zfG={bnbjrlUWf>zuGe$Yn(usoO+Qo?Cih2qynt?pYy9~z$o=|URHNJS+X-4`AbyvI zs`XYdnRHq~7gcn_IBhZtQ3$%Q6mm?5xhl(hlBo1d51*nIJAMeR*I)$fKIZl0rA&JmBpDW2h4=G1EI6^hSWX!HK75ydG;#}HMLK1 z$n$^7^AUIQzcf{8$2AqQMrU&diX+Z48Q;O|BU=pl_u+T-G~S9vaZ^#1>`3(MV@=_KaC6%%nH5g#4aQ_)kiG%6g6jxoT{8`EjfJ4*R}Pxjd;=5YNDT; zRjxI-r|!5J*HRA51hy|aXtk0gt13iV`MP71PwDtKRKD@Zrw5u4bp}R+Wp9=>Y&{Qj zKJ_+Y|6rI8rnrC*@cEtFIB*s`v#iL8r$O8QjYVmJWCD6F-+ob`9+tR4khWU(ovX7# zG#T)#U(7F}F`ubqTGot>y(3Xo${n5Ujm&D`7@*yHlf?`(;0pvZ#G}urxndo^4(;{Y zPa`^xoTzopCIG1_t}f;H?!T%QWgURRFztO^KP@tVzg#k;$IiuN4SSoxDyt<5-7%*6 zJh8vMU6E>ZnwS~S%8BkwOSW8Cspp&SXg`e=0Jr@|3Thwrnroe9VNr3jV$<|;Ldwi^ z0_>u{$GYT>_YyqvhBo9=J&o9Kkd}DBy@3z6^d&zS8oStA;-J)&r!if>-bfVgtTqF` zMC@Lwu-s_rE_eEyHN5N9TeQ6(*&i}yaOu3K7WiH(F`O2jRB83U6UIkc3tCZu6VDWc zUe|PmC|Uk?dR~q7Lin{Y>4OZ;n(sen1*c_+0Pl&?e_hS|I53O7#Q995YxXNPzjMRC z(%2CHKB5EnP3!umos&3<5`pFM>%W|83R!xRi=pC4!8PSD>|2;yRSs#_zlDZv0(<3s zJ!wLb@%_u&sCjOexUURM(0#$Tmj)U+-c=XYF;Ujaa#T3rp+FvP$h<(tl5Ol5C(-2Z zxOOF^aZ7z+8@Ah)`hh*JtS;EAZbaQD0sEV{R;SK za6CvouVyPw+5OdoEJUN;5m&D5$yCStm9yi19NPWtFZKF!5|JT1!Dwpecb=E++^dTZ z&DdR&wt`Z6Y}$%xuJ<*H3WvRBq@1vpDQYo+2O>S>RdZP0rVlBO&)>|9L4dwH&fK9N+bOHP8Fcao-c5yOkBW7}|JmCEP_{s#ABYv^?ToZ})nDhZVJlDI?~6$~SXs z`CcY79e;)_HcVU|xbcf`*!kyi3blEK19@p^<@=fjOeD;V=asORop1OD)<-=q>VUY) z!I-B#z*}hA7T-Sru3LLAXV$_|=~%S=gPU|b^={Cxe;H7soy`RYz0h-|CLL9&Vk5d+ z=k47Xyrz_%R`(b}(fvn+GeHofxU|1tSlZvOdtMk^WR> zhDY&24Xo_xx7v-b-<^8m5n8sLFr%Lav+=I{ntcX%0KT^j4v=q$`eT7BEpJYM-pej0 zSUIj8bD4<^LKiJR$3y6JkL@q7ATy4goWp|zdZaR*xTirDKQ_73kfk@AX1#Z^`RdHL zOFuBa_j|?R?$zJL-J@%0kMy>bCp9<@CCry3doZTal2PSmyj`=rqQGq55~{DwI9hc> z4tTMrz+HDh&X2{9JI~{$xn>=#d#%JQp7?6AWoad%bl{%l*ayS&*e~pUpR(kz9c*B# zt*54KJXTxlNb`34I=8%;7{Z|EL1ij~8|q=#8E6J@$CdA9#Y@ZeBDc-kdupc88w$o9 z+Nqo~%kOkVNo4?ppJcm~?)a*I+GN7lD1_c_^BDkSi?x+j87PeilSH1EgyRz;nd+HIpeJSwV|10VTc zzrd22q`Q7uQV$d+GoItLCRvhp=ZfobWuVmEm2HE(h?C z`$@O()u5Wg`84e$U

f?AQ{Dupipdlg;C}}=T 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

5V-fPj1J=6v-5Ui*9vLJ^IReprT1O{yZE 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 z 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 BSkM3f diff --git a/contribute/05-review.png b/contribute/05-review.png deleted file mode 100644 index 330cb519ac2c6945b9e480262568025fe49b7c1f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 29682 zcmcG!V{~TCwlJFR*tYFF9ox2TCmq|iZQHhO+jhrx^7XsVxo7Y5-TU{hF=`d2=cu`= z)~pJXlM#i5!h!+<0)iD66H)*I`uVp2*+GE)edD=G_X7dJpqL8^%83gK63E%xn3!7{ z0|AM_R;ik*DUM-fE5`GQ2|x<*Nt{Y25^1}`<`Upq29l8E4I)5LJ=K@?YRDn}z^*6A z-`4)U2UQ%ZEI(-S^Oy2d5BB1#za<`! z7>T9Kp6NXUArA!5@?gTaJrDunla%R^7-T1yfixxz!amhc=nz|EKgD3%ja)Laas1yX zKooPWT4@MC?(m0eZCr$n1G)T`5oN*uUis3K^*8c_&{Ztn>g zLR%1f9~B?M?oUhvUlf8LTfVUUe!LJE)oZaSe9_=0{xE7rmP>JH^T-P1XM|^1;{5H* z{e9U390XvVp&^!^v-o#&1n?h_RZx6Sp{!cy&;8stwrcOa`@S9f*2Gqq+)>=bu52oV z7Z#kB8#ZijT4uKsq1M5!VU{59&*HDk2RZbhej~qt`w@e*v$R{bPU60HM5W+Jz+(kR z`HiS8L7jm(BeHs@4Ml53dWWM8rPZ*V6MF~jqFna`f=8j^_AC*=8YqD7`T%30Jw3+a zU()oJe)?0kKjmvvKne#~Zdu{&0^}pU^@ZV3DQ69_7K6PqV)j~X9a6Q)H{qWH-GbSN z)m!Omheie>-}kp|;W7!{z0kgSury;iQZG0A>IwtMZE@1r{nyxSX@7jD&9gJq$t4av z1$7kZ!DJBcMd1!O*EYC-3~o!B0l5xfZ7L!z2VHBaKm%EW-h7iZbF<|A^tJfeyGIW6 zYsc$EN@rjP=qgE+)74)6Di)4hhorTjqQ6G~90Leh50Y^oDAN!8=7%2vijXfxEJX1D zGtJMmU;FBMcxo_r{Df-2EWQl2s24z-eR#F_O#Z~XAZ);N{&2Rin?ImtL3Mm}Zr~n> zAq4nOA&}?zVGtPy!R+|75CJ3zkfQmqLL``oL`Xu>lY+@aL1Od@!Iq-G<8Ee?^x^O%&7mqe%L>`JNsLHKZzuWbqij-9-T2I)Pz*YznAIlVxC`(1CoB$UmGw|IO z@enOV)-Z}@gx{ECDCMFCi|0R75I4D$$V`O{uNoUcOjUS!`K+QH_%~shVBTsnI6Urv4gl zpJLCeob{Xkv2a*!p){hbXt8T?VXI$t(>$RTnSM2R7zQqR`FV4w}e)jRDr9~k+)njt<<6#BR8W2P}nK**7-~W z6CThamJ6tBesNz(2NxnkcT4?7kU>5a=JdUEn=<<26;#Qi`07%$WZ^L!5 zbn$orf9iRaeUW`8ym5ok0OJQR1w4X{z_i1r1?vPG3_J#pz~(eGt#)6)I8(l(bgYQY zPz;J$H*S?~mF}$evn{)Z*>&A=BbSF&h?kGKC#WRoC<-ow72ivpOW9;lX0)Y;O|qnC zF?-lp>*LvUZ+6aoqy;sDju6e{Pw!WgZq08nOw`Zcm7}hWFHvp%Zcq+k{(WggTTj>0 zZ4|K1wh?N@vf&s_7-fe|jH$?e985d4yuz~5JpI(Cw!C^%CppX#?ZrOrs5Rf(bTA$L z{`9xhof^Cts|&3GWOx=cp#zC0@@qWRn#8irxL(mD# zW!TS1!QS((`fz3w!kV-N5R{-0H$QQIVs+TH`+l=>-vOHKZ_u}(G_$zBXeuDP$D!Xc zs;NZu2k|{(Vz6djV7|GyOEyNVMjU@Mbf$DhX$=Z#=XC>}09pa9k&a2d)lz>Ye^;0jT@k$m@Z}Y@6~9kvlQImj z(kbq-oU0e*1^re^nHfzv+EKfz^E`+04008Iml#RPQ1PbSMc1Neq^6<#&>Ey}ziIfK zDdL5%l+a%4UUz#;Wt(@tOg!xm~MwsrXv%ugYl-YuVbw>+H&# z@2ochcN4veCResoHubUlENa$hX|H{gj4BkVWBh$mrjfF~uI=8TvXbX?*M7C7=;Cq# zxw_D};(Yz&uHv=FQ!Cqj{aQ2DqqBqG-1F#r?$-rA1*d{zfJbGyZoru50(f)?>)fk>V20vG-cFV`@8Z?ww(Z!Ff?|lK zsKZI%v|&mYAg2|{_GnUhdMRRsO#8eO&*Sqrs*Dwd^_4YeYrOUGkMq^#7iYv({1w`! zVuz}|?zQ(3zKYKxbtbAPJ_whY2gc{kH1T!;dQ1bp&y~hg;8)>c+1|psDcnr7Be;_b zSI%AMdC-HfkL*{@A0L&@Mo+gJKu*uPJF2GO{hC0lKO-;)nO?}EU+H;( zoE$$?2n4y-%A(-{fbzz6=MD#Yd$GNMD5iis<6vPPZ16B%6hLRTT7b;Pu-X$4e=~56 z*eH_DzCPs(55A9_@Lq@Nsj8}9`2GD&fV34;cK`xHBmJlR5LY0%0RsAwW3Hs;s3tAN zVQ6DTr*C9qU`*#~W&0N!2#Cv-<8RZ-*ioOr)ymS^fy0%X=wBEdf7|~I1BeLzh2m(z zO{69*M<8fpZ%n{UM^DEgO`xk@O!OhxH-<8(df%w0e{6Bnzj2#T^&21gcZLA6Y;j3?8xH7e~bJNQuTk6(zCO&{3q#ufc~453-FH#|6$U9`RiY!e;vjH#Rd2u z=kq`b%==jY0r3He3-K$t{5W*WQk@#JRP zNj5tpYp%f0&0UG!Bwy+usz0kiv>^Wm9;uuuB*-%6fUqs;{{{MmWQ$7aLhujHe?b0F z{!oo8FWJ>%`ZtSzfh)w?4F7M|vXHIeO5C6)`ECE3iN7}DONwtt-CR$k7R0~#+=#~V z{e6;5+QXGl?UbbD{HQ1>_{7B_wT#QlEjJVYt@cZSxUYngm>2{R5m7FbvM&Y1F%G3j z54bVmuba~kG zI+|=@hl-X;u2HDW01ZcrvV7-v!lrx2f9fqt;8$PIP=GGSo14uSRIb3e+U>>JY_$=b zo15#du50$kfZ+BGgo>t8PF`L<>$M^n0~Ix>TDyaYi>s4Ixzt}UDuLe|pUbs&+p0of zRr-H9wuc>3ZYC@$s!FR!fxC}Fp{S_H^`dTMw$sglgp?FBD6e^$lFm*3heo?&nY{1Y z^R-PQ)6fd3;Q2g85}5^i75CZMSt`2&*);dFRsn?io&~WLm9N9`WM9|wc0@ETXL>tD z%=#{8pBXMjgEu53WYSNPPGqlsjw8;wmSal5)V=Tk)CtJJoy*ZR6P=^hYk1W`_^)m= zwY^Ne&D-buNM7=_hMmgKgQo({XbVP}zoYN1Z(dSGVeWhZV6d(h%55u=M8dwcwZF7H zE}KFlA{hCcJ{PLBIR#y3bNQWwnQziC(;#3Whn7@zttt&33H!m8SBQ>d@RNk8(w&-C z?PAx-S&xpCiUZcsqxY9tocHruWsK>3W~^aUzeG=vGi3}XaeeS0*~W@_o_FT*3qJQz zIB(_HO6uPl1<%-rWVleK%O;PmrwwuNMIG=?;&q&zo8daB?2hK~FwxM^(gmngI1noM zI7vc9p^;ahmL`kn@7234R_JWcVjs-WEH;{Hv6z1wl_n)6Mc5;S=I;~T6T_sO{?P;v zp~6d|X%4U|e2iSN{$H`+{f(5%BP2Y&($J$2mrtSOW>C5Eh>Dm*@rK&<_@wzVvh(dX zIXNkzAQ%kO$Njt+fJiKYK{`IIx!_bKsJ%x`tuzr~DBY91WZU;&vG`wc=BFD561}bd zBN-@5BjWz+FMdKhOpUl_X4d|{X-hE}T;p+GcdxZ}FpqLC~AZT^AA$mdqF zgo9z`V-*aa*{HjJjUQztz2+v}bUwXyNTNjqqfed<+ueAp>Xq)h{Gd)`t^HG%J(z;L zB=;c9a29X#7H}UTO+f{iVlkI~3DsuDOT%&Ut`uKh2VAiglavSVyuU2m$~P^AC@Rw^ zgfzrlgnLWWblyRc$!1&P^t4r`Bqy7YX=yl}HcDSVLn4zAu(M;5XWIHxaxzqp;AsY( zITDKlOM#Zd*Ofos1)T?)hB*0`6<+w=YBH zO>f5$yCYb)m;SDpifJun#gHSTYR}D)Ma>KQMgu%$VF^sD^~N!ptvUGL=gU>YEn;a% z!P(bS>CBAk_+Af)U~o8UrsUQ|&kiG%JC3D5czczt z&aSi#C)8e1s4@#!?*qh{s4H+a#!sF_HFf>w8iqcuferiXdrgzsH4n@xY|<7N@G-V3 zTAZE9Yxhar!%!vWQJ;H=)8Q8XR>mr1#onX4|Nl=B{~z{NL(cpSxqn<4R;}B!ttApD zNAYce3<2tsR3)%$DpPB{oTGf|RMi4-9r2XUS<=xvGPmj` z&PMHZzJ%VU-#NM--+9lzj_xVnS()D$zwMqA2w6q%H1vjj&LQr+ahR;}i&mLKl!eAM z(7lQNI~jR5x$+NsC$UHBzh5nzBW3TZSX6NdeQvQ_x@$T;W5S4rt{2jFxvo=*uEq-h zs8y<)up3RG1G?fy*BH1Y8r&>P>uKq_8EQj^@H^8B5*z<0vGYU<>rqWO< zS$aVw)IyPvQ>ry8iTug z1~S~tVVCPFD2-e6Yk5^-yt-C>uX1I{RqaJJdR1e5VSH!2px7d%NBVd52kn5cvBOJt zEs9Eq(&=wdW}}a}k(>lGEp`s^qT^29H#QEm%Mv7E{L{$*a5+4jAQ9Mpc`d3OZX*0Cj7n9Y+l@~q^d#W{W8W8rzCQKD%Uj;={8N;-)X z8UU86Uo!R1AQ%F7OaVgoT*nZ& zSIvF3Z-~Kaof$SUJ|Xo{@p-UhxeA8*JE^^1%V_cm6by`jl^h#XxX2qkIs`242w|~T zZ?4b~0Y#1wDrrP$Jo@0RlKZ7Rpg$e1<)Q5eXXI_D#d|PaF{)a-}Cs zWJ_(#xm8WevGc{ulv0x7N;+;vk9-s=EEJugp)I_1ldEAJjDVsIm3v@0_+z zqmf-U6K}!G**6c3gU@%yt&!+X^`M+EUUl~6J=XCYtGpkChSzYDS>Lb>69R~}KHw(P z;KMMSc(B9)6_iX(*1Y6wX)`~81LSlPBd(KahQg&g5J^-@pbVX$5O^)>BC1Al z5Mh+>QzfI?h3&y%FlT`g`B4!f3L!-(@3fXbRClxVDw>7_hRP6Ngp zBNfxQub*jrJT#?Q-T$t>3pRP5Jt@u@X&Wc>XEFAYIUuf|`i(xBZC#L`e-UoZVUwkqAM>@=6rrg@8v&vCZFo z+utC&n`93Yl6N;ts?c>ND};kWfn)K6vm9;Q8mu;vqqcdpU(4W6*8{_}oCpYL(VGuj zFOJTH(>UB1(pW;dLfLiRPO#u#7lyi@lYd^73V#a_<%9LFQ4bd^o{=+~&yzS_uA?R# zah0t#n5xp~t5~J9|=Fb$zuNSj8x2sTKG9evGRppr zbR$OPW+=zv1r_y268XomGzJmTg$x+kh^ZXTwFXI8(W z@fz*bl=S*h$L(aEfSb%@#+FN@4=}9CeBnHLwdP+!BF9rEEHBP2%<*7Lh}=QJ>1BqEn8i!M~%Lo*Ept0yZ^)1XHS)k%2D}c zPP%+GDG(5fKtKal5d0|Ekt{t})+Gh^d|WP*Tj}2k_vouOcDGP>^S;F9 z<;n|@YK!NoxuW5N#RBL+75E~+0^A#mJlu*-T+*Lfq5>2{oE z;ubS~G&eVAw%%A~he8~QnzQm)27LC5f>yTN+b2n+%&}Q#B^Ze_-H@0SpbIAc%iq{- zCMBpBy$fp14*?S|@SzfCF7t?=5_l2ek*L&@T}^0}tfk)~2m-+y3t|L+D%USR6H$d0 zZJjLYwRq%_PWb=;UWkYY@M(W0r-Deh@p@H47|Y~Mk>DXZI-mZQ<^R6QRB zhHlF~BQ_3hvX})+ZkcAfOMM@AsbYh zpQIvYRgsh(2YEi+EVlLPOG!D_hr<5xw5f?N)B;B$Gu)`sLw^^Wpgo6}5iF;0eUtx^lzRuPd3Z3w(;vDDjwY#{RhDUXR zP*t#fmk~;PyJqET}{>r6&yNZbF&3x(mAEKnH7za1988@3iU+O z9$^xak$|bRHuLKN2l&S&)S*|fT*R6hK}ZDT+x`j7Gu!%wgUw^C?tFhs2@^?N)N9}g}uq_~#F$hDE*-oE}!u3t`^Fw*%KFNoB(rx>FOY)`Wj0S@4jHLfzyFM54NaO|>nchpK)G(SbzZK( zE96F6T2DgaWzMWE_CpWTQ42sfKEp4P>{+GZS%Wn=OsF80S42d-0G^oC8x%ASG$keK zEzfQMLPo`~*ehp8aOuyL7Z(?VG)Jn22jI~{otIUfYN#Zq#tKCnaRQ$2pQWG!D;j!T z?Rd`Zvp}G=SY!|}(;)pO*u$m3uSj+gU_54{toJJBP9{T6X8qmP8HDD#flEfVk;@ld zz#tgHV+RP5*dILew`B6G4H%D{aHQ)?cBNvyE#C!h}xNyfcMocNLY>7u7C{|#b+;#%2ANRAkmeP?Oe@lh{}}ozgB#=# zBPri;kb;}pxZ&y~b*9BjJB%&zD6d{@7N&Al=VXgAs?wVS?WCcw_o_n5T2`b?n8FUV}1odTq@QC55g>Gc^jo7l~2s^F` zH{dH1=K7h}A-`D3x$bxo!%4Q~zfDPtKoUMEyED~)Ao~dpZA#PYT_zgSEoisK>@yr> z8Y7Zw7n-tOXFm_{i#M@?zB>e3ZdFO;zNF=9am7Nj9*<`o#cMs-?w~KVVC;Olv2uL~ zsIgn{nX=_|#%IZ96Z6tYf7tF+E!Jheh%A#$?MN zU|>bB`HAVD4ijcu`3or`FkgNzOL_8qa~cj=Y_>xWXE~6yHz%~@^y5srK63{)S;xeG zX3!r@44KW90fw{ak<>L+_XA{23E5Z>2V{AG$>FhmW9zx3JWjX+p*`#TzR_qop8Hzs ze)d?AZhs$21`e{Y+!Ta7AS*U>(j=nljj7(>4qXJT=4gfEA|SYinTz3yiO93IS1&2~Bk%Rkm>a(W8jLPiny zEn(sPQ++nw@XqtRG&K&W>fU4#C@tHwRBJ{9QZ5Dx!LRvi5|c+aGs4Ngo(Pt$HlmiN z+Vk?&rfE=&1D2oT{k3pnJ$^Owqd1QXGS)CbRB5#EV+=~vnS+o29GJ})mK2(}C##o_ zw{+xyp2`@Es89CmIt!Vt)u(Z`L7!0N$4qCkh!%mx&aEs3dWSP2WDwC|AU+I|JZ`;+ z1f~$7Fes3$`|kbWRz^AC2YeK&%eX*wkcqv`k!xtHj zOf$LB!^XdMpd!8WQ$i&@>M$jHBobPks1%x-5KC3sPQ|Aak}1&87u83SNoXwhaf@x_ zgtZ2eg+>($SN)umM-+iODgqUg-twKy6ri*TU#87S)3)}UYrbQTryo3F)YWh(#48sH z3IR!X78w#UI2m4gkh>;#@w{XTzTs^fxko$TxT1RuhJ4-_4m zu-7q6L_0Fned7li?b~^GE;LAAEUG2IM0G>~2=EIa2v9D_Ei zjHFHywtAtC99I5wER7)?4z#FO)BX0F$$Y+0CK-4C4)*)JriUfrd^S(8LM-aoZ4lBp|t*opg$y>X+Ob9iM)K`VHB-g1f z*&NSsMplA*snLJwOoPG=Pf1{*LKeew9smn5CtIibsqBw-|DJ}bq}2AK{OPdd zw6b4f(>;ie-xVI&Tm16j<6?LnOv>hc$R2#Ho}v{5SBLsC!w5JyrtbMk)H8@`3MUfV zsqgwo(dHK*KmMjHL`3L`ebsS7S9UUHhLjjw)16Axqpeow2G#!bC%7v{dU$cBXE@M~ z7=dQOFM>BGI)DM+`D|U>nO1~|mooz?mbC`~#iVf0NA?4^%n#RYY|ui^jsh0I`^9>g z7<>>69c-}tUb9=4mSMN?m{MTuiP4?)PHCO-K!E3S@x##^%@3H9MenU~4Z~}=t@Y2J ziC;GBqOK1)JGtr`*{!?v)O9{v3S75?_hxe(m|hz~2fa@NH^?>ZDEB4E-gUjty)P5h z{a=rgw~Gni!U_}1Y;}^1lbi6=?=3d{ zkuj$Fr>Ts#M@_1Rm+|bbyJP6H#gBq!3whY<%$i|aLy)Hn4bc4o6SrHHF}C-H`1`{d z@CzMB+e@x@dmeLD%1p)5Zm6;|S^*i=?J&~B;q;dU@O8#D6q)mg9ALtZO;CZn^R^^R z(IBelUjJ0jEB!f-FWij-+hEaB8j1)=(Q}5fqAiIkiz!Br#7Ky9d3SuUOvzgU8c85* ze2E2>TV<}7UGRu#8z63&XQPu-q9r)wf@)wT7Z$E^nYM`F={{_kuLG{Ko}6!Hggem?WM$)ud! z_X}qX-daqacY8Df^s)pkosmWa3XbbR*_m#HU4!;ip zp~m}?=^5nIPy*CM9C&ek_N3u|VhIBf?=F!nB_^2M!86cNcRE-WtGv&}1b>2W9-_27 z=g4s8ZhwgPE1Y=c@E~5nc4OdrcOU^UI1$6+I~wiOT0n*M)Jr|JD$IMEeBJ3U4K*)v^21|{Ah#B*6PL;yvdr#}a?M0@}@^bj01s%w0WIynW z8<9#vCp)oWtIxj6c?v$YrTZs5j~ynMW3o$zg1W%OPK0^}yxz%i(~IRX(dI*nkHO^4 z!68`%UwvoU#kwQ(F+e*iu?`rK2(3nEV7k{BJ)0VhMjZ`#leET*IN=cWl$J*rd}C1m zY177z;sAkaeR!ORkKP@gcR{LI+Q1({NzX5Z`76N6zceiat+&x>n3hZO$3H7aHhkP<&djECvWGEuH%fQ85$>c zIBAvQPOhb+x%BF+O1w{9wV3XnuLu3{lMNT%mR7MB!F>L#>Qo-%>7tKE@oE&^!JFhO z*T}P72k))6xYwyI>WbvlA=_RLV%yq&y12gdTpNC$8O9N)WcdrY{hDAqMq1DN^q8xh zklS>BZGsrx3Ml!q<88iJ4|tMJ4_lHnVVB1##Xw04)eNF3OM$vpU|(}Rp2BR^ zPytaefVvsv)fH6uRy-oTH4;)j+$(6&L6~?}O?CWaSNk6Lc}V&&SlA=Q=V|+c$L)YO zwZjOPqY=%*A*fYL%m!@SUO#&>=e}Fp@4mVnl=#h&@5%es`4Si2;JG`_3@baTMaKu3 zl3cp?g)xNKWyYlQX)~cde->SSpYx$=@}xn<$Z%e}r9d*nWVQVbd-MB7(rm6CROVt$ zrIO9j=B71g@r0*1Q!o-KiA)rShGD{OPbr^`Tnqxqij}no0=NBXFqS845L6)Lo@<8T zovnI`i-;=qOcwy1=E0>HTNfU5-#cSwxtc~thqb@0sAk~VfE}tF$vF~m%44ujtwR5* zI-W$Yq7=5Ik5_T_RjE`cmJtpGOkK)aG*-G7V+u6Ui?ooTu85{K-0r9fTu!OrNk=9F1#F7DR(Sop2PrxTr+m!-7KV2qDAsYUFsmy|tK-{tHwEeTUAX>vw^W z`ktG1g4|`TlZ>QnLj(6h1-K?>&ZmN$TqGT^$o|oY_2A&fHi9qL=J%aaBwj2LfN@Q1 zqp^>mi0&Q9r`t15eLMQZ>I}|SXrz*!>IuQ%acQ1iQNj?uD4U07yC|uokYQ4#hH>i5@6C-OJykXlQu?8bl zYBp#bgQ_RPgbM|nLKqcY3!tU%CMpIK(ox~mS#j!zX3jC$pr6#*TYlJ~iexe4ZLK#U zOlTl#G+u}8aSP|gvmXWm)s@CYj5gU1F75Fgzc3`1Mso8cmEx=+%+_hj!dxxHMIo*! z;g*t_ADMSmLusTD>C(9b2iYy7oGXdvrL`Q@0$0B6fqV8iXDmi|FAp*3_}BT2pxJpr z^v3#eBa(Zi5br$FqJI*w5rD+)^HyLtmM;~>8*Ty0DHO`N=$FsiW0i2o@yUD~QB)1* zUvB>v8C6q=W4Z$tpyWO@kj21Dg zr|GUhFJ;33sFcv~k{UZ@0`t8h$o~ zLH#^}iALjIhwg;2y|sysfkFSq;V?p*&& z|ACE#8RdN-TA(hh7?>2Uo5h>BW5U7S1@=|*Pc1n&$6iPIt zjh9weKP1~v8SoamPul2k3Nw>AKno8YhR~7HDKAHsP4s0PG9g4Elf{5oADMq(^!qK; zhL()>3!&cmT6|15joZzgOZu#nT|AC8xdbpqESJbn|0srVr@SjoMtxEhD1*chgsH*L z@2CbpoGSSh-byxx*Ap0yaQk`}i8_z$H_ni08bUo1YdVSL&rs)KP=tO_>M*6~D8WXdXAi+pYJ=(=hKuv=4F;QB2%z z#Idv#R!!WE_;TI&IbR}EZ1kFI~jh9{tGp+{hR z>A;A~@50pt_`XGcvl}L0NcT*3E z;@Q0HMd;}GFf5)#g(~d?<8;6xbIN%8S2uGZ|LX+G*%}kkbIZ*{JUg3`UJ4*R$hf~o zjYgeI--B-lPoYHa0iPaD72GFi$f5Y);6W;IRB~qxJrZ3~K4jn#!I)MzaZuR7M6U>k z4U@E6UHTBTK}n08N{F5^`KU}x9<4y=l?q`EWx)&)jWT+3KKhR6FeNzG${6nti9-HDa3J2l zF=+jc91FE5IBMUwt8H|8Gp6xD%h3`m`16h-gM7I!xIUe^-Uro zxK8Xtr{xMwU2-Q_WN7>~($D0p1m*XH?n!0(aR*g+VpUd;m;!aj-zzU#?q@}R^PyH7 z&7(+F@ha3js|Wl0y)!eJF57Nut+s!^Wq4XO?aRVp^^CLbzq`q&`lLVuTUy{$gGz;I z#0C#F1JX#`8t(Kh_>ZD+2(d=)*zphAJ#s{m?Xn|dSrbLA-;mv%&wL%gU4*n6gaYO| zy==5TQz8%uEv|U!KJh%@ObXI293f#Q8DuM8HyUHM=vtCf-{O*?{<{==Fdy2Zw zk5$-Qm7Iu35apl=8^c<8%_iWPkDX=zaz!+3>nQQ#wapFt}?I)KUj^l#^qI z?oTGN0OLsz!v(8|3!HhjD!0z1cPGGpVg82BbC5%opXzsdHb;I5 z_Wfx^ylp-X62P{@In^T1Xt0wqClA_XYCXizkn%rPYZ*|-y1)zraoS>?Yi?ueH;X56V-K(h>kk@ z$QLp^U&f(Vq7V{vGyzA{u@Y$;6H`!+h@z?w>zdxNoh?hl7`QuP!*Pw{GP~hC~a+?s1u(;==Ltr zO3@#Ztr&{?5Q4$>V!)=7K>KLu=ZbhI`Z^Tl!#}RB}J81d6 zq}1I*9x^!^9>Mcot~4s@FI`I2_Q$t}Ls){`StF|z8u0fDlxDMKnZmv0T%#MBayCs9 z*W;q1Nm$IdvK43W;GY7axbClVrBKK?rj{*{2*|Vz#t31;y=G4;&}ErlxD>z(=AL%k z?7EfWVRi;{h+6JI6xDY}&dnTR~{Z;{-N>qb=4cFoZ z%>DPSuV3f#ncbkY1roP;osbM4NBj4&DEL7FuP|`8hcfopk*H`&wCO8FHQXUm>9}9QaX&KW{H9W9n>G zA@DBKi5L#;usX}uY#3%B^kty9mVFZ{AoEk}w+|E;2gy7T_r5%y zHgMh-%V@ZoECPSlA5&SZ5Zkkzn2C%M6!{UksYpj>$>FMw-LLO>Ox86muk;;)5%iDn zwJ~5SH-9-o-|osE+v|o42kE9GIDydX52-avc+v^8uh;*<_Ix}5Ys8ve*j(_GKTueR zzT})M(>HVs1q@uU-_N;jQh*#69VEEu_O{jgrRgi%(7QRQ(5dcu5URDhaj09a7)1v{#gTD^|oK!2H?3l~lE%=S1f^@pR3F98q)&Fxtv07U3^bN_6EH zuJowUIVE9*o`Kab?T;x?Y~Gm3VgZe?Pd8Y6fwpbFFf)(cfkZBz>AREOF$_=bwCOrU z@%&sv>3rFjbbZTt#^BfjiyHFs$p~y1tm6`m<~?O%`UyD|KZta+*VkmMVKi42mD(pc z6lYIh;>Cpd?e^5;`uR!@6V;lmeKULiynp8q92P7`A|Vmi>EvcT38dalji~7AxloPa zuA&%uv4M!c^9@gfe(qZ0R}$X;PSM^R53g*BFA$q4=CME8;8(%}hK?f3UI!Qqf=Cn5 zza1A^A9pChVv+5OYS{`Kv+0ZwRRIW;z2G=ud2mnTZEHH)2}&~C#XiV z7WahnZw=KczKD`R`M6~qos*r_In_ai-8EB`m(UP5$8H5g9ruKNcRk`+cU_7^cARpc zbhE3Uaw~{m)7JH7%@!4@yT2?jv+h5teus?UxrrqU1kAQQ+p#&Qr7k8vJ~z&B*u@pp z@VSBoJtsAvAdB9k>|~pC_vEtC`LscjzQl)c@6f4wwAD0n?~Es`T!077F&X;s+eJI` zqD2&yIb8Q)kas8H_q>MFB!uC|t66SjQH+GZ@W{|etw~0 zEYq@Z_Pak}5_l`!MX~;f{GA#~SA}%*bhu)>W}I>$tE%PKvi*e+!`-R$!Qz0J9P58h zhZo^0pDLnl3;Hxx-F1@v!TR$sh(Q%c0nqA6gcaJKN`69YH%&=b#%IA!SFC#8y!H06(shcmS5Jq0~)ZeIwb`LrV{J4xtW8F5D zJB`%kZESz@MpQZ}sd>-m(1B6%E+r6MsI!LB>+;oL)WJDd{k zg*_YdswGffXFVl&#KrSnN2N~yH&*`B1D+M?ZH|!3*AvJg0_>HvJ$#t~8)FLUqJg%! zI})M5vP|C)>`eDJf-6wFZ6+Pz!upVLf|P~^21b~4Vl-6sNh+Bi`T0b~{=2+x14zc9 z$uW~OcA;nsCd6xA^CX1RFM>x$CKIr7mT=>Tly$HBgIT%+kEjXKkr#ir=h&RO%}@@a z)@_^r+{mv-)Ad_@0bxq2D*U)}&fZPc2F$B;0oc`1C;S}a_R(kgrnSbTcK+^ue-4fr zB~X|)CeD8IZI>S|L2e|^jDXx?t};FR%@*8XHvUEk4Y1Ge@Y9fJUyuPgR>(Lw^viHFX8sr>}cwMHM(61?h>M zlp%@Y`jmm1J#-wUxbFRuD@V-*f1dzvoII+|=<%FiO9FHog_R~K*=88{T$+{bSbaFw zMt?}o>u!D&4iIh248|Atfs@}KcjXD+gb&v7pS2*ENM=fD*jCVq^?>krE{YJ((1naO z){>u|FwO+aC=!yb*zBnW@xDje#i4tqE7|mPYom*G11LG0lai5*3Tk-J9Azq4YavT4+j?+XtNN0UsY!57~WIQ*JI<|UoZ%3}Zsk9}$qy1Lbe z4RJLb{-5H$GAgd6YcmiC5;V9Iw2?q?x1b@xy>Up;;4Xmx!KH&V1Z|*$1$PK84Z$@u zE=_QEhv|FY-0ywAS@UCN&8#&)di6S0wRi2>RlQH0I{SILgN_yN!2KC_aw7->`y_io zJoT~9zSakSMv-FnDgCXj6qs8wxiFcFmuHZEf5_T=vv&@mx-OtU`O>3*3};8sK{j1= zA)bKhc~b(%%Zs~>%5N{x>rMSBvE8a0rT}iA2e*RhSg@a)Qa8?th=r$nXamE*OH%%e zpMRd1UF3V{S6GPkWJtb^%kE23t1anFTbS9LEyYkx5^`S1wALBFeOAu+Xy=t_QORSA z*lR0_@wMi1b&aSiUOKk>#$EilAb+13t2Q^syg=hNl#gS19$J?4g}L%mL2cV8wzjra za?|~T3;xN6XehKwWon6{U&PO|wRH!#CIl)hx&ZoNvjCybYs-QGx(Ix2NcQd9LBiEF zr-JtxRj?6&e$6^T>)p?CB~hUqA44Abb2<0IUi|R-wgU8UHgyzd9Fu?#UJW>uWqm2g zd}r?RQGjk%T=JUS3d|#5A9FR$S2J2y!8ZHV7mhbB?w>fpGfbTG&3OjAz4-e}7eb$XqX-C4V1=mm<&mdK70kGPIuQq{LyFZN(~5bMu(Rks^g&eJxCg zBw15L+G*QfZMn7xVxFnqV11if^_f|0^EZK5KX}jV@Mjua+}3m$FEUcTc-lL0giqcE zos~0XI=FkLN@ec+3Fz4JPQQnaK9@3S0!dEVy-FN#tCJ3%cp%u%dhQ+8#Aqh}oYZaKZ}0Z@`e8FiJp z%hZ_Po(ONYDEp$HuPEQC?woOwQL1x`+yBN2gRn4JE%56P@GqrVFJp3_34n!T3iaYD z$1QR)v&wmg>bs~~xgNTX3pkkyo4p;tsq2O(m?wsbjC3))FnX4<=g*Mv^uo2fFN{$b z8@#PHI(Y97^iZPYY}r-^qQn(n{SGL9JJ3wWj;$X#7)!#7p(z7+28)!`bywnk1`F}V z$+*~@&xG_gDwwUo1cK9TKQmsr1#p5Jrtp3%C(QlQD zmG3AWZ=kE;+>pi@ip%x%ykoXx`rT*N2dc(RhDm@CZ*9$9i`#gsqUOTh{+u4@?~|9s z@DkbWvb%8%<}5Pz(x&!G2vwh*boqW}{A6L!X-a`9E+&V8hz*k>N9pBRM4(O-F*G^10e1-jlKYu>6}K-3HbMV z-m_o1D%fHDKYX<@;d>I;AuUog6n6Rb)qP6^pOqZEt5WRL=()dNerdBUnD3qm z$J1F)ed;9QH094OYoagP0kF!-WLFLu0Ebuc;!m7D<2fxZRL?@y5=x~mv7C7PM&mFx zhd8~>^z(t17h*TkYbBvFf4T%x37Ld+amz%myZee%w3DH8e4;ms;*WHHQ`pR>!SW0|u`a59+lJEE(Ll{$AsF zs0S$GRlZ7{6K>mTfr*a@9Ju6*2PMy;&V21`cU@$?@(DLB8Ej!x1SsVMv3=n+;j;}* zBxEl`NBmgM>&hIONvJ#4qs;~D47X&7A9awBh4s5O(q~Pv_Uf|ag$05op}$OtE5s2L z%FWi@uSnt}s95f3qT7svFP40sK6eFd_~_kI^hV=Te5`$El@Lf`RnNG5fZa#j?G;G;ubmnrnu*rQjZKHW?j>>IFL8&}qy`Zdm`+u5&YX`c$(VRt2z^q;{2 z%c|d;C-U`(Qu7w1Z$!uhLFiVax$#fed0rc#=M03k>QfyfCFsO6tBNPPo*WiyeJeba z>mQEc8y4>3JkuybxKe}Z1?4cF4A~pjJHkrq7uh#3eM$&{R`$@>$2bJE*RK`N(v~xv z1=P@sD%Zt&v*LA_th1PEZ0wT?l|<~?p>i|#27HhNiCpIotf zLltmiyWR&GD175JoBrC+BLz%hmj-v5>D)cxh^cL%?f#xvO~eB>Hy$8fj55t^d*x%n z@!{9A;+Q-5OkA;T;4R6%K8!2yK*EM5>5Sm~02s%6;Ju#I6S*p_`Ll1c}XW5&AROU4LYuRW86ue%Xz0wHQQ=tm#~C<(yS6RJKY>> zIO?G~I-O7(@Pu3CC&su{V1@=TXy@A0{@DMqGpI@CQp;HCUIN$7-_+|qxV{RhMf`Fv z?W`T=^RdbXM_0R7`J-mH2tSEtR(3>{xQyq=QWVcyi3TO>t*+$Bh})<3zut23{v{{7 z!mq2J?^9~q6=I8in#^arHX_4GK?>l~@F8YiSBxCNml7YO@t+ZKl>}=f6z6Co^j1t$ zcN(49EwgGRKbK&s4t)5=kqC4w*aA5+qcl3_c8HHp@^Unv0SAolb$W^4|7M~B7fVsF zXN*^L8kX1I!U2I(Cl{l5tQ7W5HQc{Fiz?f|VV&vIyrv>xds@r;l8?J=V&dz>VeX|D zr5I({@UBSFL%knSyV`W?W10%ZI12=uWCl!lQ&x={oQhM|hFgcg9Rs46+QEK^a-^2J zh|Mk<)JL&%DL(9HurjTbidAWSC$Hd@=CCuy4vj zE)oxU^L@q0xdYv*-UONI?4#tjNcufUXCV8TuIc-zy>UpUvw+Ni>zl?BaDB?izVpn` z3HW#$f5^_;voqOUrQ)2|57;+-vS%CW7G)n?n=&(@47zgvIhb;y;*O=_gnHnuH)>bO zorYHPSJhyalNv{cmJv}&%V3tS@43Gpa3uqgX14eKyk@+5V{QU_gBXrx&s|*r&XQQl z(iJXfVA1zWl_)*ky*jVy6oCnJ%nt0@=2?%_7my6Im0{K8^NN-Jk+1sSmLESEOqq9Q z3g>nkPfFog*I084u7~HakRyBAi%ymj<}mr!z_#>H&aQIaPfcSNT&eoB_7f+Ip90NG zE1?WJM8PDf@XsE0N)EOFBn0v8Q-$2!b_CYCWp5nJRfLFvk+JLYt&5(ClL!mFYU@*d z+pWVXn2A)u>6m(ciF@X3`5H;pR4I0F-4NaZhpDa2-!Ms4wUg4yKd?v+$#Rn6tONX! zxHsM>BR5qA?ssDv4bYAyW!bGCxA<)z4cDM>c2*=#QqA%I7jm-G(4}TDt)Ql~veV$i zdk-J<@(*A$(i#`rdT6y42^Q7=7g&@vO8}4|0D=pwTy<(t>JYQ-D_9hkdW2W>XY@z1 z3!HVZI&rmZIZEVpATtG8hCsKwGAmz4L?;C&6;pFxo)zq|NCm#CgZGg&m-~ygN*L>j zn;y0v?=AU1LK3?%5B+;97xvQB857-I% z0msttNLCp~7Pq(Qm1n@YyYZ2K$4!6zNp-;{R$E_^9D%PT7taA|OB1Ms*g>9ENgC;VLs zdA%Eu1ovs-DsyJ4tplP_qvSD|Ri{6q-M+Z<8*bHc_Om*hF$TA=Bu1j}!E1n)vcgWb zZE3WG>A*)=RKc33f8bhFfwQOoiwhEttmL_)J1|F9=gd*jQ`?#^u$A}SM3|i^^a=i;||J=j);e`ma+n(Qv(niR+DhJd36xhl zIhB0surTi$mbHF!Q*qr<%hvCrx>D=AY zL8|uW(F|Q1&xDxVqtcWii>+AIB~$#(y(X{6WDlC8J#qmTxth+QwT{yT2a! zkyIz{H@z+PwaG^Lwcn!EIP#d zCh1(s7Glv)0%?}mkW8YKS3XHiNlS|wN*AJvrof+5PR{hDc_&2eb#A-*a{x{{H0y4# z0A|D2F}E*y*B@eQpN$^dku@ToY;aQQVD6*Rp{!Sq<&@W3g9LHc4yGL(U$`g#8hG+)|2UWm~J-ty1}T$+~{HEKq`^`EsZNDX-zj!U(k zh(b|r%t2@3e{OJl(e_XpJktG?yZI5VdHZ7_iiYR`N_~ugua{?i<*Vmnj`gIeJH_R# zlyK9)mZL~bSSh7C4c{%BmZ&s8iw})ie}7h)S}V8}aTB$7yK4(8euLau^AQ&B+C}ZT z))tV|b6u6)8ei=+6glkjx6Zr#j)Pvu(G?uY0X_O2Bx0rNV&><%4MM)^=o$wNWe=IQv(z9u&zkng14l@|}F4*%(<=jn{{zxF!~r zSMKgL)W`ZBqZ3P8i+%^NH{31nh7%CsD5WbfGE=m`8qd6M-}Iy7Hi2Natb9jYQGngE zd}PY1O6-Cy0Z_nrZ6!(3H?7>+lU5+l_`a>=R^m>t1#h;16CU8vf3oanB1jzPBqf}yCZ9O9Bd@kj-F)W}=oN{<+Zj4}m_;_=kgZw-R?I-ra;?>_V zR#QKkIOf2ehS42JVxWhJp_@3ox9U#Ukydgl1ClN!G(#$V+6LbK;X&-~(a+d}X+w1MA#CM7dH(Qzz1bQa1KAc(`pCHeNkuL4QPo{y?%doL?+m!!Do}V1eE?s}Yw+aOMz3V=BA^U;GCrdlQTMta zsrv?(gpCc0nz!aVM8)exmEb3HGPM1Q=KKz!XC5ll9OA4fso3ltwS#;j+E#k4^1iP6 z;nyt&KmJ;BE zmREj?Sx8E6s)Ri-ZRarVzi?MzYsy12=;KIiOO6h+zt2yQE7nm7^3cl5ue-I&-6)U2 zruE|BEsHg}9djG_ZxPP44Xw~#U2UeqJjC)n2MHUhrc5?TG0;$NZ`(i$r*}$F*38t&X`ifl_|?-odU{~ zS5Tm*kq|MM*!v6e-FhS|EDP)nFEi$GUY7R1SnyI(QYsYxFwy_DpEL#UO2&fS(w&}F zWhw~69*<6v`mfh$V&@Ittnk0RF)h_nlc;rtXHE6t`PGb12?EPOq#sk_{!QcK%zU_$ zD6KMb%ieUZy+bMP{jvu{=M+b}yf4fyajF;<87VW7uQHUAaT?;gnG-&m_l9i3f}JM{ zl9cp$&gmlKu3KCbdeRISx0$ZUsT3U3$i#+ISZA0Ya&-I3>z8tle7B&d6Rp#lVUPrK zj%zhgIW>=sGL;-})KdK?;R=!ssTYU}CS~Jbr1d%6gn}4&d7mL6B;RX)>c@ZW2oWuB z+83=R{#j!jnZt03j8dtxLI#ewr_mNyj399fRW|EXgndRv#$V?*%ioL3zI)Q!An9kG zU!2c5rRT|TI9$yBr}L4cc6;5f5sx?qMw7lc>?TrM9^@P8PB9IL6tJKA%G}cW@g_}H zxY50rS+eu{(ihz{A5O7{+mj(jQ3SV1^Yktf9rvTwpl&t62zj&P0ErU>ddmy(e9S}A z0)Z&_tjvZpM7|0+WzA$NMo(tTguJEkUS=iXJ}cMc&>?x{*!kaWagJe9FH&-`Ri$Y{ zMl*HW9DE`$t!S8*Z4S7fk~q0R+lHJU1efqVeJO>|>c~wL0dwMR!{z+%D&L+IjT$3U zi5d<&pK1U#qdv7ia?=h*7@F7KPx1cGLv}9ttDB=lfOt@bGJ#i@hHY-B;{6*FvpkC~ zC}AN%<-8^C_b*!QT`{sED_hd4fuVwE$P#p z5sOZQJ{z<-0@V_C5E?8e955SNDKPm25=B(1>u#pUTvEsX6B0!dSd-n@@!!35=%&<; z+ycvSwcWZ_Yn8XYeI3$KCig3OF&>eKU#k1#wD8n!U@6q?-+WVl1(Hb}RPY3aWw4O-Nq91iwsB|Xx%<%X)FWM7yMy6@E*?`Q* z$!9saxzx;|FipRH0kj~+ocr2$d%=x=#@+6uk6H$r9GUj+Ea<@fOFccFbnTQ*L|aUZqBLk-tyhOqFp zD{DDc#-W+Uf04$rJRH~(v3FB7$U}K9$Wt1gpXMvdLqra2ek-OCHFAG}nG1y;&G(*Y zaP@0{s?Pz}U>*!wcjPVbXi3?X=DKA zCuIrfnwYF;cWMuLY5n6!BnjH5VkMeYlXcg4jhODv4z(3>+3<_!!;j^BJoPHNC&Ml) zSfsN#Gj;0ueUcmB8RL#s#=5A2NKrS6n$4ck$h?x03%LCTlDrHx^YHCtR3d(9Kl+~E z-h|m>g@RZ=4xO$o>U;siOiSIG)3BNXL$IVL>X*GUK#XWd?;~h*5;U4Wv^HHK*2Q_3 zdj9o?j?$dOlKyWm(iy9&izL5BrN^iMd^Y?uE-KpD>Mmj{GU8PIx!3;VSZDpi%Hg~M zuB14?Doiq_y;6d_pVdrk-X=z%4DqFKIe9iu2a``KCsVlT$}lZ+?a@rcl}T6npR+J=q5?SNd=+SO*JMX?{OO~s5>wnTk?FIT zu`#b=^i6(Oj{vy16kH4%0rJmvz%&~C%27`>*zwO%EV+7r$G^vXns~r~{hT_fG;kU{xKfH5r9 z@a4)kQtzV)CnWEVp0hLsY4ZbdZh~rWRjnBAUQ`w8?Ztj%!&)C(RklJK$AQJydYZhe zE$=f^>y=$GNN;Se+@1*!l}cjMaza6?bU=@w5q}lY_4y7c6L!>q7{Ol-30#QY!#E+3 zlUL!CIFY=j8y0oI@x9m!4|!xNVkYml%z-a>Ybw)qFt zV`Uh-(i^J2hX1;6-4py3;w`6#*4CH-gFq101|%*uy`Sf*MQv1^i};OoYfz3Qx7^ZG zx^BclirMx={qiCe7wjABlAQW04jhpc@Ax3N9PN59Uc+V-Q&wdef(rQznn3v|Ngw~uNRNtQK%Uu>SFiV3YAQMBU{^*k@! zq^E5$$!p%Tf+k^ z`!{uGAP!c;8^7KP$m2~z?Pih??iR9g@c`BYN`>5)Zd7Gdf#_v{w+=qjrkg&SQ3BQ) z?vI|tHsRE(ijx(@wPDq_I7?1B{=j%~?IFE?Z+y8NM|KD=ka|_!K+ajPCYM~@+4-u% zZ{eBI$wkW1dC6LXv$oSj+WpoT6pSy)X(b;VcKx;m`G?(EcJw--vGw`;B$8CdelxoSMa{exD@CDvF!r|%!L1g3`C-+M^- z7VyhzOnH7VdLZeE4M2HeiCVd({$sgT+P{R;I+?b!#>-Tw!Lq!O4D|N;Xn$5VX(_0?LVEt8pK24UQ2 zA;-svrW}=>b8`3bzRd+5ie6l)$1||Cs&3#XGy}UA?2i)SKs~1yCY@drv>0hL;VJhg zA+SecUt@H2p>HgW~ zU4B$<*ZCG_-Zl;g-1TzaF4Z!|K9iSKyDrPrXYlR&T*Wz%!q>jcsE;`jc%52^HD{jj^x^u}{F@|Zctx;&m-q%Z}*fTFY| zfJrn=9o#qor`kA~j|rKsW~DnS1$Cw6xg8#4a)g>b@}wr_i2qz$v;`nZG<0qNI5*W< z%s+nU*kYw|BJM!UV|Q=dqrF4*T98C>Y8Aok3daHG^+*b@eh#vkVWKn;dqePy?b>#c zw)x>+l&QO(sF5aIOEEKozLHZHEiBs)Lex(C_2IsL`mEv~=#M>HuSyKz z7dh|vmHRfZA@E;&=R?K#zc*=FT-<1#a{c@a8d6xq59xx4$>#kXpXuv6>dJdGD4^}p z&|Lm<-Q0nKnE~x9#O!L?4L9t4`Nv2xE~#Ifpp_)U?jPeug@@*Q#_=RDg%L5}ODECw z^>J=C%&So5&Cw!0mOCg&Sf4D%!xbZjc<{_nFxR$6lL<$H2&%ft90h|^n%|L@TwdGH zORfm=M-a4e87$>851|#6S4e+&)%-d?e_z@)oMn@#2*bn=pQhqzB3)}|(hI{w^r^Qu zSb>2O#8Mxc9}xzpcP%)f%)5{UZ>o=osJq+YV`IyH_}m-cT!?&K2{Q;&aM!Pq_NCsJ zm49yg^=GJrK~drw4AH4c?0}XAA&6G7pR(9H7AMw4doDlgv!Ihg&!T{bMzZ0&KWS+* z!#~v>irA&2UBJO_YeHFA@_lORe=lOil@U!x>XZDt6ZszlwRGaq`Bhr#{#S(5lreW= zo>1`yM$NWBbjaW}QJI+6SHPF|N_KPT1tu=M0p4eCZfjiGf<2>LSz!`x0 zj8J~}-ReK|#%*3m?%_$Eee+c&l>!HDNP9ar=P>$W!@j4HyK*2g2`RmH3BcgS(`@Z} zPsx_m-myxF-}(1U`_gcGaQR5jsqI4-k%`W9y%YV$$4zYD?wjfhQtt!b0ZyF7ve#8T9Eb>Gz#V1`ja>$h2|t)~onNONr#thmOf64XAfF zDQnu!izcB+Q+*yy$^kC%BYWVFL1y(aE7FP~ZVn8pTL@4=$zNLMr24$ON> z;1yPPrApiEO-$(Kzp8M=rLF|%_Y94MwiJyXE?9YL0`cALnfu?l%i>T7JRy+Z4guwp z50Itd_PQ7s0fEVK1}H-RkRZ3yy+Spa=%ULlZBt_Gf<+MjuBAU(p@mFR>ft}Wzv|)N zRUILM(9Q&yehn?+zN6_1H;$B*_rHByDt6Z6VU5$?cF;t1@D9{dfwB;bkJplH^XpYF zL1jByu1@;!llw&OjsCJqY>nK`Zi_S#!x1^4d#ywp%;>UM8`u@;mesWdUx;pwnDYMJ z*oP>Qppb0+mj9nQsgwVUh+-rr8sYU>hiqLuTqY>KvIa(l!p+#4F}}04(C`D$wDEzue+$s zvhMPN*J4isiG9Uxx=6!KIUGp=OnZ4aS8Jh?zz1!vnsTf1=9Ia=*Tx|Yza(VEh0PyK zWxw7bKHZ!_CzNrgNLlYIlllH_tg@Mg(y~2U6&C?|90Wqpw{4C%F_Y8qifcI!}E=$KD;J!kvHGb2#c6~)zSM85^3=rMgQ22AWqPcF$K;7-=%Q!%%?Fo3QiE?< zh6CMM(mS^3_->hpZC>RbL0+W2H=OJS)6I#pS6dnP**UXCKvm7=dGK3PsnT`(5WDN{@p-`EAT#&_U;G{ z+9@j!FzCeqZSzUIIr}Zt3JoZQN4G8Ip$n4Fg=^O?{dl#Q>M7WyzE$IuDo|KD(5w2| zL81ld`>`MB@}cZo-|PNXwP_}NcL>ajK>m$Z82<$f5-XlH9!sw3#o(SZK!;J3Y<^5zg6<7}{cWG8lv518f%cM!b1(n`fk zN2{_aSE@{HcNiQFRLdM4xC?~$Ho*Zh^m#7xQdo~VreMIHQ8oL zaMOJ~R(p>ruQp!qgzakQLyaW|?RJ+~-3t%CDBKHt_wQrb-!+0d82Z&ZcPN7E`*<)w z=Q~L%{ z?r}MLI;5aXz#iPX<(nzR_dUS=ihWiKbtrlqm}2l=i%}^YGE=@dB9)ykcu?W%j{qiEu>^T6NEvqYy6EO23y+c1&fr@_b3f5F1ZsU`5w2VNZ_s1+bW-uFJy{9BM zy=CKh_;R5O^%2BRs7Jl}me9H%UC*Qg{CZ0wu;Pgy7T_P)o6#l-OSwElr{X%%s{k3> zPdiwJG!3lA=kC-O<5{!UTPnD4nt*aMg>WJl!K71g!ya*GpXrkw4q#>pTd{v!zdV|t zF6VAov3{d`-}atm6+^g9d7)|m?!7O08=2P7E$#18T1h2|ZM>K|o!c%(6W+7tR**mD|w)N6n(L1(gr!k+aD5O8=o%b*YNxyB*7O%C`;csPlU3pgkFi52` z%hy9@=!iOe$54|nVm`+nM50EdTvpAbnz0QLFLPjrn@4z@%GSd216q>nu7BReo z!ixERZRhOd#x2&oIIccx#@?Y>iuYE+<)aDbG+g=SOo3FFUby~%;1^H8i&jUhev=kU zwX;SS=hli3+GX$5Zhcz(BkSbvC7b-m@8L&NM<^br^Nxw)p9kVb793YgK74AeRM262 zh~UQjYyLeLq`!PWijC_Wnw;<^NY&pBxpS3axt4|i^h~f`#S}zD!Z5P+1kr9(ZcD0o z_kdQyPVYejC9sPlB&%iOh?GZp(b?DQyKbJ~PpeDdka(RU&0<$J4x%N&zOksc#g+}} z1yI|b!~xZES@+CydQ0bFAGm=1#p4UM6ySGihEZHSFqThcQcH-K8Xb1Q_qFcQ~nWB;A;pfT9JtNM8j`< zrFLNLE&6z?_eD{?D`Bo=wqJ)Wq4c95{K!W#+p?~V4Ka<+mo1z8j~t~)kv$=$EgpNc z|MmU%1wo<0CwiS&()UQ2zl(ytK9XS%>tIK&iNAg*^y;yXWWH0r=>IDe{$0d_60D6A zqVq>wI-3%CEdWgV+pfRWBTXZJQv65!le7Tx+O7r={YMn_epJ8mvw99ILd0LVKa|`Cit&0~-rq~bQO3@Nb#~o*V%ST`NuZBUQgonw1 zheYMPq_->~K%#F}jaM)WjVu3vWX)Uhf9o>LMYL$675O&oOcMSnwPR@ioFQPomi@xw{|FEvXHG?51n|d2lOf2NrrqcDko&U| d(lBr7V!E%h(NC9T{`%LQ*Yc`zNXF*i{{hx|4`=`Y diff --git a/contribute/hacker-guide.md b/contribute/hacker-guide.md index f5a4f8724e..52bb75dd37 100644 --- a/contribute/hacker-guide.md +++ b/contribute/hacker-guide.md @@ -31,24 +31,7 @@ about things you want to implement. People proficient is certain areas of Scala by simply posting a message. But the most efficient way to connect is to cc your message to one of the go-to persons in your area. Here's the list of people (Github usernames and real-life names) and their specialties: - library: @phaller (Philipp Haller), @axel22 (Aleksandar Prokopec -- concurrent & collection) - specialisation: @axel22 (Aleksander Prokopec), @vladureche (Vlad Ureche), @dragos (Iulian Dragos) - named / default args, annotations, plugins: @lrytz (Lukas Rytz) - macros, reflection, manifests, type tags: @xeno-by (Eugene Burmako), @cvogt (Christopher Vogt) - type checker, inference: @odersky (Martin Odersky), @adriaanm (Adriaan Moors) - language specification, string interpolation, value classes: @odersky (Martin Odersky) - new pattern matcher, implicit search: @adriaanm (Adriaan Moors) - partest, Continuations Plugin: @phaller (Philipp Haller) - error handling, lazy vals: @hubertp (Hubert Plociniczak) - backend: @magarciaEPFL (Miguel Garcia), @gkossakowski (Grzegorz Kossakowski), @dragos (Iulian Dragos) - repl, compiler performance: @paulp (Paul Phillips) - swing: @ingoem (Ingo Maier) - scaladoc: @vladureche (Vlad Ureche) - optimizer: @vladureche (Vlad Ureche), @magarciaEPFL (Miguel Garcia) - build: @jsuereth (Josh Suereth) - random compiler bugs: @lrytz, @adriaanm, @hubertp - documentation: @heathermiller (Heather Miller) - cps: @TiarkRompf (Tiark Rompf) +{% include maintainers.html %} Martin is the one who submitted the string interpolation proposal and implemented this language feature for Scala 2.10.0. (TODO: how to choose a mailing list) @@ -56,9 +39,9 @@ Therefore now I'm going to [the scala-user mailing list](http://groups.google.co about my issue. Note that I put Martin in the cc list of the email. If I didn't do that, he would probably miss it in a bunch of emails, which get posted to scala-user every day. -![Posting to scala-user](/contribute/01-post.png) - -![Response from Martin](/contribute/02-post.png) +

Posting to scala-user
+
+
Response from Martin
Now when I have the approval of the feature's author, I'll get to work! @@ -75,7 +58,7 @@ Log into [GitHub](http://github.com/), go to [https://github.com/scala/scala](ht button at the top of the page. This will create your own copy of our repository that will serve as a scratchpad for your hackings. If you're new to Git, don't be afraid of messing it up - there is no way you can corrupt our repository. -![Fork scala/scala](/contribute/03-fork.png) +
Fork scala/scala
### Clone ### @@ -329,11 +312,12 @@ This part is very easy and enjoyable. Navigate to your branch in Github (for me and click the pull request button to submit your patch as a pull request to Scala. If you've never submitted patches to Scala, you will need to sign the contributor license agreement, which [can be done online](http://typesafe.com/contribute/cla/scala) within a few minutes. -![Submit a pull request](/contribute/04-submit.png) +
Submit a pull request
### Discuss ### After the pull request has been submitted, you need to pick a reviewer (probably, the person you've contacted in the beginning of your workflow) and be ready to elaborate and adjust your patch if necessary. I picked Martin, because we had such a nice chat on the mailing list: -![Assign the reviewer](/contribute/05-review.png) +
SAssign the reviewer
+ From 42987ddbaa2ad4e53ca1f2a05cbcf961040b881b Mon Sep 17 00:00:00 2001 From: Heather Miller Date: Sun, 3 Mar 2013 14:49:30 +0100 Subject: [PATCH 0012/1870] Fixes to the wording in the hacker guide. Just trying to clean up and fill in holes in the hacker guide. Review @xeno_by --- contribute/hacker-guide.md | 47 +++++++++++++++++++------------------- 1 file changed, 24 insertions(+), 23 deletions(-) diff --git a/contribute/hacker-guide.md b/contribute/hacker-guide.md index 52bb75dd37..db7b64a820 100644 --- a/contribute/hacker-guide.md +++ b/contribute/hacker-guide.md @@ -5,45 +5,46 @@ title: Scala hacker guide **Eugene Burmako** -This guide is intended to help you get from an idea of fixing a bug or implementing a new feature -to a nightly and, ultimately, to a production release of Scala incorporating your idea. Being able to -influence a programming language of your choice is amazing, and I'm excited to demonstrate that it's easier -than one might think. +This guide is intended to help you get from an idea of fixing a bug or implementing a new feature into a nightly Scala build, and, ultimately, to a production release of Scala incorporating your idea. + +This guide covers the entire process, from the conception of your idea or bugfix to the point where it is merged into Scala. Throughout, we will use a running example of an idea or bugfix one might wish to contribute. ### The running example ### -I like string interpolation a lot. Doing debug prints with interpolators introduced in Scala 2.10.0 -is so enjoyable that I often wonder how we ever lived without that feature. However there's an annoying issue -which I occasionally stumble upon: the formatting string interpolator `f` [does not support](https://issues.scala-lang.org/browse/SI-6725) -new line tokens `%n`. I could go the mailing list, ask to fix this bug and then indefinitely -wait for the fix. Or I could instead patch Scala myself and get the fix in a subsequent release (nightly builds get produced, well, every -night, minor releases are pumped every few months and major releases happen once a year). The latter option sounds cool, so let's see -how it works! +Let's say that you particularly enjoy the new string interpolation language feature introduced in Scala 2.10.0, and you use it quite heavily. + +Though, there's an annoying issue +which you occasionally stumble upon: the formatting string interpolator `f` [does not support](https://issues.scala-lang.org/browse/SI-6725) +new line tokens `%n`. + +One approach would be to go the mailing list, request that the bug be fixed, and then to wait indefinitely for the fix arrive. Another approach would be to instead patch Scala oneself, and to submit the fix to the Scala repository in hopes that it might make it into a subsequent release. + +**_Of note_**: There are several types of releases/builds. Nightly builds are produced every night at a fixed time. Minor releases happen once every few months. Major releases typically happen once per year. ### 1. Connect ### -Sometimes it's appealing to hack alone and not to have to interact with humans, but in the context of such a big project like Scala -this might not be the very best idea. Our community has people who spent years accumulating knowledge about Scala. They might provide -unique insights and, what's even better, direct assistance in their areas. +Sometimes it's appealing to hack alone and not to have to interact with others out of fear, or out of comfort. However, in the context a big project such as Scala, +this might not be the very best idea. There are people in the Scala community who have spent years accumulating knowledge about Scala libraries and internals. They might provide +unique insights and, what's even better, direct assistance in their areas, so it is not only advantageous, but recommended to communicate with the community about your new patch. -Typically bug fixes and especially new features beging with posting to one of [our mailing lists](TODO) to find out how people feel +Typically bug fixes new features start out as an idea or an experiment posted on one of our mailing lists [our mailing lists]({{ site.baseurl }}/community/index.html#mailing_lists) to find out how people feel about things you want to implement. People proficient is certain areas of Scala usually monitor mailing lists, so you'll often get some help -by simply posting a message. But the most efficient way to connect is to cc your message to one of the go-to persons in your area. Here's the -list of people (Github usernames and real-life names) and their specialties: +by simply posting a message. But the most efficient way to connect is to cc your message to one of the people responsible for maintaining the aspect of Scala which you wish to contribute to. + +This is the list of language features/libraries along with their maintainers's full names and github usernames: {% include maintainers.html %} -Martin is the one who submitted the string interpolation proposal and implemented this language feature for Scala 2.10.0. -(TODO: how to choose a mailing list) -Therefore now I'm going to [the scala-user mailing list](http://groups.google.com/group/scala-user) and will post a topic -about my issue. Note that I put Martin in the cc list of the email. If I didn't do that, he would probably miss it in a bunch -of emails, which get posted to scala-user every day. +Since Martin is the person who submitted the string interpolation Scala Improvement Proposal and implemented this language feature for Scala 2.10.0, he might be interested in learning of new bugfixes to that feature. + +As alluded to earlier, one must also choose an appropriate mailing list. Typically, one would use the scala-internals mailing list, as it is devoted to discussions about the core internal design and implementation of the Scala system. However, since this issue has been discussed previously on the scala-user mailing list, +in this example, we post to the [the scala-user mailing list](http://groups.google.com/group/scala-user)about our issue.
Posting to scala-user

Response from Martin
-Now when I have the approval of the feature's author, I'll get to work! +Now that we have the approval of the feature's author, we can get to work! ### 2. Set up ### From 2ce31f91a6ec123bd020250ab5987b1894775881 Mon Sep 17 00:00:00 2001 From: Heather Miller Date: Sun, 3 Mar 2013 19:22:57 +0100 Subject: [PATCH 0013/1870] Continuing to tweak the hacker guide, and to add info where needed. Review @xeno_by --- contribute/hacker-guide.md | 100 +++++++++++++++++++++---------------- 1 file changed, 57 insertions(+), 43 deletions(-) diff --git a/contribute/hacker-guide.md b/contribute/hacker-guide.md index db7b64a820..4f8ca20604 100644 --- a/contribute/hacker-guide.md +++ b/contribute/hacker-guide.md @@ -9,7 +9,7 @@ This guide is intended to help you get from an idea of fixing a bug or implement This guide covers the entire process, from the conception of your idea or bugfix to the point where it is merged into Scala. Throughout, we will use a running example of an idea or bugfix one might wish to contribute. -### The running example ### +## The Running Example Let's say that you particularly enjoy the new string interpolation language feature introduced in Scala 2.10.0, and you use it quite heavily. @@ -21,7 +21,7 @@ One approach would be to go the mailing list, request that the bug be fixed, and **_Of note_**: There are several types of releases/builds. Nightly builds are produced every night at a fixed time. Minor releases happen once every few months. Major releases typically happen once per year. -### 1. Connect ### +## 1. Connect Sometimes it's appealing to hack alone and not to have to interact with others out of fear, or out of comfort. However, in the context a big project such as Scala, this might not be the very best idea. There are people in the Scala community who have spent years accumulating knowledge about Scala libraries and internals. They might provide @@ -46,26 +46,27 @@ in this example, we post to the [the scala-user mailing list](http://groups.goog Now that we have the approval of the feature's author, we can get to work! -### 2. Set up ### +## 2. Set up Hacking Scala begins with creating a branch for your work item. To develop Scala we use [Git](http://git-scm.com/) and [GitHub](http://github.com/). This section of the guide provides a short walkthrough, but if you are new to Git, -it probably makes sense to familiarize with Git first. We recommend the [Git Pro](http://git-scm.com/book/en/) +it probably makes sense to familiarize yourself with Git first. We recommend the [Git Pro](http://git-scm.com/book/en/) online book. -### Fork ### +### Fork Log into [GitHub](http://github.com/), go to [https://github.com/scala/scala](https://github.com/scala/scala) and click the `Fork` -button at the top of the page. This will create your own copy of our repository that will serve as a scratchpad for your hackings. -If you're new to Git, don't be afraid of messing it up - there is no way you can corrupt our repository. +button in the top right corner of the page. This will create your own copy of our repository that will serve as a scratchpad for your work. + +If you're new to Git, don't be afraid of messing up-- there is no way you can corrupt our repository.
Fork scala/scala
-### Clone ### +### Clone If everything went okay, you will be redirected to your own fork at `https://github.com/username/scala`, where `username` is your github user name. You might find it helpful to read [http://help.github.com/fork-a-repo/](http://help.github.com/fork-a-repo/), -which covers some of the things that will follow below. Then clone your repository by running something like the following on the command line: +which covers some of the things that will follow below. Then, _clone_ your repository (_i.e._ pull a copy from github to your local machine) by running the following on the command line: 16:35 ~/Projects$ git clone https://github.com/xeno-by/scala Cloning into 'scala'... @@ -76,25 +77,25 @@ which covers some of the things that will follow below. Then clone your reposito Resolving deltas: 100% (182155/182155), done. This will create a local directory called `scala`, which contains a clone of your own copy of our repository. The changes that you make -in this directory can be propagated back to your copy and, ultimately, pushed into Scala. +in this directory can be propagated back to your copy hosted on github and, ultimately, pushed into Scala when your patch is ready. -### Branch ### +### Branch Before you start making changes, always create your own branch. Never work on the `master` branch. Think of a name that describes -the changes you plan on doing. Use a prefix that describes the nature of your change. There are essentially two kinds of changes: +the changes you plan on making. Use a prefix that describes the nature of your change. There are essentially two kinds of changes: bug fixes and new features. * For bug fixes, use `issue/NNNN` for bug NNNN from the [Scala issue tracker](https://issues.scala-lang.org/). -* For new feature use `topic/XXX` for feature XXX. Use feature names that make sense in the context of the whole Scala project and not just to you personally. For example, if you work on diagrams in Scaladoc, use `topic/scaladoc-diagrams` instead of just `topic/diagrams`. +* For new feature use `topic/XXX` for feature XXX. Use feature names that make sense in the context of the whole Scala project and not just to you personally. For example, if you work on diagrams in Scaladoc, use `topic/scaladoc-diagrams` instead of just `topic/diagrams` would be a good branch name. -Since I'm going to fix an existing bug [SI-6725](https://issues.scala-lang.org/browse/SI-6725), I'll create a branch named `ticket/6725`. +Since in our example, we're going to fix an existing bug [SI-6725](https://issues.scala-lang.org/browse/SI-6725), we'll create a branch named `ticket/6725`. 16:39 ~/Projects/scala (master)$ git checkout -b ticket/6725 Switched to a new branch 'ticket/6725' If you are new to Git and branching, read the [Branching Chapter](http://git-scm.com/book/en/Git-Branching) in the Git Pro book. -### Build ### +### Build The next step after cloning your fork is setting up your machine to build Scala. The definitive guide on building Scala is located at [https://github.com/scala/scala/blob/master/README.rst](https://github.com/scala/scala/blob/master/README.rst), but here's the summary: @@ -103,10 +104,10 @@ The next step after cloning your fork is setting up your machine to build Scala. * The build tool is `ant`. * The build runs the `pull-binary-libs.sh` script to download bootstrap libs. This requires `bash` and `curl`. * The majority of our team works on Linux and OS X, so these operating systems are guaranteed to work. -* Windows is supported, but it might have issues. Please report to [the issue tracker](https://issues.scala-lang.org/) if you encounter them. +* Windows is supported, but it might have issues. Please report to [the issue tracker](https://issues.scala-lang.org/) if you encounter any. -In a nutshell, building Scala is as easy as running `ant` in the root of your clone. Be prepared to wait for a while - a full rebuild -takes 8+ minutes depending on your machine. Incremental builds are usually within 30-120 seconds range (again, your mileage might vary +Building Scala is as easy as running `ant` in the root of your cloned repository. Be prepared to wait for a while-- a full "clean" build +takes 8+ minutes depending on your machine (and up to 30 minutes on older machines with less memory). Incremental builds are usually within 30-120 seconds range (again, your mileage might vary with your hardware). 16:50 ~/Projects/scala (ticket/6725)$ ant @@ -134,34 +135,30 @@ with your hardware). BUILD SUCCESSFUL Total time: 9 minutes 41 seconds -### IDE ### +### IDE There's no single editor of choice for working with Scala sources, as there are trade-offs associated with each available tool. -Both Eclipse and Intellij IDEA have Scala plugins, which are known to work with our codebase. Here are +Both Eclipse and IntelliJ IDEA have Scala plugins, which are known to work with our codebase. Here are [instructions for Eclipse](https://github.com/scala/scala/blob/master/src/eclipse/README.md) and [instructions for Intellij](https://github.com/scala/scala/blob/master/src/intellij/README). Both of those Scala plugins provide -navigation, refactoring and error reporting functionality as well as integrated debugging. Unfortunately this comes at a cost -of occasional sluggishness. +navigation, refactoring and error reporting functionality as well as integrated debugging. -On the other hand, lightweight editors such as Emacs, Sublime or jEdit provide unparalleled scriptability and performance, while +There also exist lighter-weight editors such as Emacs, Sublime or jEdit which provide unparalleled are faster and much less memory/compute-intensive to run, while lacking semantic services and debugging. To address this shortcoming, they can integrate with ENSIME, a helper program, which hosts a resident Scala compiler providing some of the features implemented in traditional IDEs. However despite -having significantly matured over the last year, its support for our particular codebase is still far from being great. +having significantly matured over the last year, support for our particular code base is still being improved, and is not as mature as for Eclipse and IntelliJ. -We know of both novices and experienced Scala hackers who've been effective with using both IDEs and lightweight editors. -Therefore it's hard to recommend a particular tool here, and your choice should boil down to your personal preferences. +Due to the immense variability in personal preference between IDE/editor experience, it's difficult to recommend a particular tool, and your choice should boil down to your personal preferences. -### 3. Hack ### +## 3. Hack When hacking on your topic of choice, you'll be modifying Scala, compiling it and testing it on relevant input files. Typically you would want to first make sure that your changes work on a small example and afterwards verify that nothing break by running a comprehensive test suite. -I'm going to start by creating a `sandbox` directory (this particular name doesn't bear any special meaning - it's just a tribute to -my first days in Scala team), which will hold a single test file and its compilation results. First I make sure that -[the bug](https://issues.scala-lang.org/browse/SI-6725) is indeed reproducible by throwing together a simple test and feeding it -into the Scala distribution assembled by ant in `build/pack/bin`. +We'll start by creating a `sandbox` directory (this particular name doesn't bear any special meaning), which will hold a single test file and its compilation results. First, let's make sure that +[the bug](https://issues.scala-lang.org/browse/SI-6725) is indeed reproducible by putting together a simple test and compiling and running it with the Scala compiler that we built using `ant`. The Scala compiler that we just built is located in `build/pack/bin`. 17:25 ~/Projects/scala (ticket/6725)$ mkdir sandbox 17:26 ~/Projects/scala (ticket/6725)$ cd sandbox @@ -176,36 +173,53 @@ into the Scala distribution assembled by ant in `build/pack/bin`. 17:28 ~/Projects/scala/sandbox (ticket/6725)$ ../build/pack/bin/scala Test 1%n1 // %n should've been replaced by a newline here -### Implement ### +### Implement -There's not much to be said about this step, which is bread & butter software development. +Now, implement your bugfix or new feature! Here are also some tips & tricks that have proven useful in Scala development: -* If after introducing changes or updating your clone, you're getting `AbstractMethodError` or other linkage exceptions, +* If after introducing changes or updating your clone, you get `AbstractMethodError` or other linkage exceptions, try doing `ant clean build`. Due to the way how Scala compiles traits, if a trait changes, then it's sometimes not enough to recompile - just that trait, but it might also be necessary to recompile its users. Ant is not smart enough to do that, which might lead to - very strange errors. Full rebuilds fix the problem. Fortunately that's rarely necessary, because full rebuilds take significant time. + just that trait, but it might also be necessary to recompile its users. The `ant` tool is not smart enough to do that, which might lead to + very strange errors. Full rebuilds fix the problem. Fortunately that's rarely necessary, because full rebuilds take a lot of time-- the same 8-30 minutes as mentioned above. * Even on solid state drives packaging Scala distribution (i.e. creating jars from class files) is a non-trivial task. To save time here, some people in our team do `ant quick.comp` instead of `ant` and then create custom scripts to launch Scala from `build/quick/classes`. * Don't underestimate the power of `print`. When starting with Scala, I spent a lot of time in the debugger trying to figure out how things work. However later I found out that print-based debugging is often more effective than jumping around. While it might be obvious to some, I'd like to explicitly mention that it's also useful to print stack traces to understand the flow of execution. -Docs. Right, the docs. The documentation about internal workings of the compiler is scarce, and most of the knowledge is passed around -in the form of folklore. However the situation is steadily improving. Here are the resources that might help: +### Documentation + +There are several areas that one could contribute to-- there is the Scala library, the Scala compiler, and other tools such as Scaladoc. Each area has varying amounts of documentation. + +##### The Scala Library + +Contributing to the Scala standard library is about the same as working on one of your own libraries. Beyond the Scala collections hierarchy, there are no complex internals or architectures to have to worry about. Just make sure that you code in a "don't-repeat-yourself" (DRY) style, obeying the "boy scout principle" (i.e. make sure you've left something cleaner than you found it.) + +If documentation is necessary for some trait/class/object/method/etc in the Scala standard library, typically maintainers will include inline comments describing their design decisions or rationale for implementing things the way they have, if it is not straightforward. + +If you intend on contributing to Scala collections, please make sure you're familiar with the design of the Scala collections library. It can be easy to put an implementation in the wrong location if you are unfamiliar with the collections architecture. There is an excellent and very detailed guide covering [the Architecture of Scala Collections](http://docs.scala-lang.org/overviews/core/architecture-of-scala-collections.html), as well as a larger more general [Scala collections Guide](http://docs.scala-lang.org/overviews/core/collections.html) covering the sequential portion of collections. For parallel collections, there also exists a detailed [Scala Parallel Collections Guide](http://docs.scala-lang.org/overviews/core/parallel-collections.html). (TODO double check these links!) + +##### The Scala Compiler + +Documentation about the internal workings of the Scala compiler is scarce, and most of the knowledge is passed around by email (scala-internals mailing list), ticket, or word of mouth. However the situation is steadily improving. Here are the resources that might help: * [Compiler internals videos by Martin Odersky](TODO) are quite dated, but still very useful. In this three-video - series Martin explains inner workings of the part of the compiler, which has recently become Scala reflection API. + series Martin explains the general architecture of the compiler, and the basics of the front-end, which has recently become Scala reflection API. +* [Reflection documentation](http://docs.scala-lang.org/overviews/reflection/overview.html) describes fundamental data structures (like `Tree`s, `Symbol`s, and `Types`) that + are used to represent Scala programs and operations defined on then. Since much of the compiler has been factored out and made accessible via the Reflection API, all of the fundamentals needed for reflection are the same for the compiler. * [Reflection and Compilers by Martin Odersky](http://channel9.msdn.com/Events/Lang-NEXT/Lang-NEXT-2012/Reflection-and-Compilers), a talk - at Lang.NEXT 2012 in which Martin elaborates on the design of scalac and the reflection API. -* [Reflection documentation](http://docs.scala-lang.org/overviews/reflection/overview.html) describes fundamental data structures that - are used to represent Scala programs and operations defined on then. + at Lang.NEXT 2012 in which Martin elaborates on the design of scalac and the architecture of the reflection API. * [Scala compiler corner](http://lampwww.epfl.ch/~magarcia/ScalaCompilerCornerReloaded/) contains extensive documentation about - most of the post-typer phases in the Scala compiler. + most of the post-typer phases (i.e. the backend) in the Scala compiler. * [scala-internals](http://groups.google.com/group/scala-internals), a mailing list which hosts discussions about the core internal design and implementation of the Scala system. +##### Other Projects + +Tools like Scaladoc also welcome contributions. Unfortunately these smaller projects have less developer documentation. In these cases, the best thing to do is to directly explore the code base (which often contains documentation as inline comments) or to write to the appropriate maintainers for pointers. + ### Interlude ### To fix [the bug I'm interested in](https://issues.scala-lang.org/browse/SI-6725) I've tracked the `StringContext.f` interpolator From 023f0b01cdca944b429348820aeed9de4766521b Mon Sep 17 00:00:00 2001 From: Heather Miller Date: Mon, 4 Mar 2013 23:36:44 -0500 Subject: [PATCH 0014/1870] Final tweaks to the hacker guide. Mostly wording --- contribute/hacker-guide.md | 45 +++++++++++++++++++------------------- 1 file changed, 22 insertions(+), 23 deletions(-) diff --git a/contribute/hacker-guide.md b/contribute/hacker-guide.md index 4f8ca20604..bd7ac60e71 100644 --- a/contribute/hacker-guide.md +++ b/contribute/hacker-guide.md @@ -182,7 +182,7 @@ Here are also some tips & tricks that have proven useful in Scala development: * If after introducing changes or updating your clone, you get `AbstractMethodError` or other linkage exceptions, try doing `ant clean build`. Due to the way how Scala compiles traits, if a trait changes, then it's sometimes not enough to recompile just that trait, but it might also be necessary to recompile its users. The `ant` tool is not smart enough to do that, which might lead to - very strange errors. Full rebuilds fix the problem. Fortunately that's rarely necessary, because full rebuilds take a lot of time-- the same 8-30 minutes as mentioned above. + very strange errors. Full-rebuilds fix the problem. Fortunately that's rarely necessary, because full-rebuilds take a lot of time-- the same 8-30 minutes as mentioned above. * Even on solid state drives packaging Scala distribution (i.e. creating jars from class files) is a non-trivial task. To save time here, some people in our team do `ant quick.comp` instead of `ant` and then create custom scripts to launch Scala from `build/quick/classes`. * Don't underestimate the power of `print`. When starting with Scala, I spent a lot of time in the debugger trying to figure out how @@ -220,10 +220,10 @@ Documentation about the internal workings of the Scala compiler is scarce, and m Tools like Scaladoc also welcome contributions. Unfortunately these smaller projects have less developer documentation. In these cases, the best thing to do is to directly explore the code base (which often contains documentation as inline comments) or to write to the appropriate maintainers for pointers. -### Interlude ### +### Interlude -To fix [the bug I'm interested in](https://issues.scala-lang.org/browse/SI-6725) I've tracked the `StringContext.f` interpolator -down to a macro implemented in `MacroImplementations.scala`. There I noticed that the interpolator only processes conversions, +To fix [the bug we're interested in](https://issues.scala-lang.org/browse/SI-6725). Let's say we've tracked the `StringContext.f` interpolator +down to a macro implemented in `MacroImplementations.scala`, and there we notice that the interpolator only processes conversions, but not tokens like `%n`. Looks like an easy fix. 18:44 ~/Projects/scala/sandbox (ticket/6725)$ git diff @@ -242,7 +242,7 @@ but not tokens like `%n`. Looks like an easy fix. start = idx + 1 } -After I applied the fix and running `ant`, my simple test case in `sandbox/Test.scala` started working! +After applying the fix and running `ant`, our simple test case in `sandbox/Test.scala` started working! 18:51 ~/Projects/scala/sandbox (ticket/6725)$ cd .. 18:51 ~/Projects/scala (ticket/6725)$ ant @@ -266,7 +266,7 @@ After I applied the fix and running `ant`, my simple test case in `sandbox/Test. 1 1 // no longer getting the %n here - it got transformed into a newline -### Verify ### +### Verify Now to make sure that my fix doesn't break anything I need to run the test suite using the `partest` tool we wrote to test Scala. Read up [the partest guide](/contribute/partest-guide.html) to learn the details about partest, but in a nutshell you can either @@ -283,26 +283,25 @@ run `ant test` to go through the entire test suite (30+ minutes) or use wildcard testing: [...]/files/run/stringinterpolation_macro-run.scala [ OK ] All of 6 tests were successful (elapsed time: 00:00:08) -### 4. Publish ### +## 4. Publish After development is finished, it's time to publish the code and submit your patch for discussion and potential inclusion into Scala. -In a nutshell this involves: 1) making sure that your code and commit messages are of high quality, 2) clicking a few buttons in the -Github interface, 3) assigning one or more reviewers which will look through your pull request. Now all that in more details. +In a nutshell, this involves: -### Commit ### + 1. making sure that your code and commit messages are of high quality, + 2. clicking a few buttons in the Github interface, + 3. assigning one or more reviewers which will look through your pull request. + + Let's go into each of these points in more detail. + +### Commit The [Git Basics](http://git-scm.com/book/en/Git-Basics) chapter in the Git online book covers most of the basic workflow during this stage. There are two things you should know here: -1) Commit messages are frequently the only way to communicate with the authors of the code written a few years ago. Therefore, we give them -big importance. Be creative and eloquent - the more context your provide for the change you've introduced, the bigger the probability that -some future maintainer will get you right. Consult [the pull request policy](https://github.com/scala/scala/wiki/Pull-Request-Policy) -for more information about the desired style of your commits. + 1. Commit messages are often the only way to understand the intentions of authors of code written a few years ago. Thus, writing a quality is of utmost importance. The more context you provide for the change you've introduced, the larger the chance that some future maintainer understand your intentions. Consult [the pull request policy](https://github.com/scala/scala/wiki/Pull-Request-Policy) for more information about the desired style of your commits. -2) Clean history is also important. Therefore we won't accept pull requests for bug fixes that have more than one commit. -For features, it is okay to have several commits, but all tests need to pass after every single commit. To clean up your commit structure, -you want to [rewrite history](http://git-scm.com/book/en/Git-Branching-Rebasing) using `git rebase` so that your commits are against -the latest revision of `master`. + 2. Keeping Scala's git history clean is also important. Therefore we won't accept pull requests for bug fixes that have more than one commit. For features, it is okay to have several commits, but all tests need to pass after every single commit. To clean up your commit structure, you want to [rewrite history](http://git-scm.com/book/en/Git-Branching-Rebasing) using `git rebase` so that your commits are against the latest revision of `master`. Once you are satisfied with your work, synced with `master` and cleaned up your commits you are ready to submit a patch to the central Scala repository. Before proceeding make sure you have pushed all of your local changes to your fork on Github. @@ -321,18 +320,18 @@ Once you are satisfied with your work, synced with `master` and cleaned up your To https://github.com/xeno-by/scala * [new branch] ticket/6725 -> ticket/6725 -### Submit ### +### Submit -This part is very easy and enjoyable. Navigate to your branch in Github (for me it was `https://github.com/xeno-by/scala/tree/ticket/6725`) +Now, we must simply submit our proposed patch. Navigate to your branch in Github (for me it was `https://github.com/xeno-by/scala/tree/ticket/6725`) and click the pull request button to submit your patch as a pull request to Scala. If you've never submitted patches to Scala, you will need to sign the contributor license agreement, which [can be done online](http://typesafe.com/contribute/cla/scala) within a few minutes.
Submit a pull request
-### Discuss ### +### Discuss -After the pull request has been submitted, you need to pick a reviewer (probably, the person you've contacted in the beginning of your -workflow) and be ready to elaborate and adjust your patch if necessary. I picked Martin, because we had such a nice chat on the mailing list: +After the pull request has been submitted, you need to pick a reviewer (usually the person you've contacted in the beginning of your +workflow) and be ready to elaborate and adjust your patch if necessary. In this example, we picked Martin, because we had such a nice chat on the mailing list:
SAssign the reviewer
From 36ce3092e825d72b9b2af3b68b2f78dfd7c04b3f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Doeraene?= Date: Thu, 7 Mar 2013 11:54:07 +0100 Subject: [PATCH 0015/1870] Fixed a build error Maruku did not like that big HTML comment, for some reason. --- contribute/bug-reporting-guide.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/contribute/bug-reporting-guide.md b/contribute/bug-reporting-guide.md index a60fb15b07..345dc03034 100644 --- a/contribute/bug-reporting-guide.md +++ b/contribute/bug-reporting-guide.md @@ -10,7 +10,7 @@ The Scala project tracker is located at: > [http://issues.scala-lang.org](http://issues.scala-lang.org) - +{% endcomment %} From 3a415b797a650cfd06f80b1d771822651fed0866 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Doeraene?= Date: Thu, 7 Mar 2013 18:27:20 +0100 Subject: [PATCH 0016/1870] First shot at a 'community tickets' feed fetched from JIRA. --- contribute/index.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/contribute/index.md b/contribute/index.md index a92c5f37cc..14a4117631 100644 --- a/contribute/index.md +++ b/contribute/index.md @@ -44,6 +44,8 @@ Typically the scaladoc tool provides a low entry point for new committers, so it On the Scala bug tracker you will find many bugs that are [marked as good starting points to contributing ("community" bugs)](https://issues.scala-lang.org/secure/IssueNavigator.jspa?requestId=12111) or [that are not currently assigned](https://issues.scala-lang.org/secure/IssueNavigator.jspa?requestId=12112) and that you could pick up. Once you decided on a ticket to look at, see the next step on how to proceed further. +
+
### I have this idea that I'd like to add to Scala, how do I start? From af5a53cac3e5dc217f2c73f662a95374833ab6e2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Doeraene?= Date: Fri, 8 Mar 2013 11:14:27 +0100 Subject: [PATCH 0017/1870] Added a dynamic pager in the community tickets feed. --- contribute/index.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/contribute/index.md b/contribute/index.md index 14a4117631..05696f5165 100644 --- a/contribute/index.md +++ b/contribute/index.md @@ -44,7 +44,8 @@ Typically the scaladoc tool provides a low entry point for new committers, so it On the Scala bug tracker you will find many bugs that are [marked as good starting points to contributing ("community" bugs)](https://issues.scala-lang.org/secure/IssueNavigator.jspa?requestId=12111) or [that are not currently assigned](https://issues.scala-lang.org/secure/IssueNavigator.jspa?requestId=12112) and that you could pick up. Once you decided on a ticket to look at, see the next step on how to proceed further. -
+{% comment %} Keep the space in the
@@ -40,11 +32,10 @@ title: Contributing guide ### Why contribute a patch to Scala? Just to name a few common reasons: - - contributing a patch is the best way to make sure your desired changes will be available in the next Scala version - - Scala is written in Scala, so going through the source code and patching it will improve your Scala-fu - - last but not least, you will make it into the [Scala Contributor Hall of Fame](scala-fame.html). -
+* contributing a patch is the best way to make sure your desired changes will be available in the next Scala version +* Scala is written in Scala, so going through the source code and patching it will improve your Scala-fu +* last but not least, you will make it into the [Scala Contributor Hall of Fame](scala-fame.html). The main Scala project consists of the standard Scala library, the Scala reflection and macros library, the Scala compiler and the Scaladoc tool. This means there's plenty to choose from when deciding what to work on. @@ -57,100 +48,37 @@ If you are interested in contributing code, we ask you to sign the which allows us to ensure that all code submitted to the project is unencumbered by copyrights or patents. -
- -### I have this idea that I'd like to add to Scala, how do I start? - -The first step to making a change is to discuss it with the community at large, to make sure everyone agrees on the idea -and on the implementation plan. Starting point ("community") bugs are usually uncontroversial, so you can jump right -ahead to hacking the scala source tree and filing a pull request. For larger changes it is best to announce the change -on the [scala-internals](http://groups.google.com/group/scala-internals) mailing list and get developer feedback. For really complex changes, a [Scala Improvement Process (SIP)](http://docs.scala-lang.org/sips/) document might be required, but the first step is always to discuss it on the mailing list. - -Contributions, big or small, simple or complex, controversial or undisputed, need to materialize as patches against -the Scala project source tree. The [hacker guide](hacker-guide.html) will explain how to materialize your idea into a full-fledged pull request against the Scala code base. - - diff --git a/contribute/hacker-guide.md b/contribute/hacker-guide.md index 08f5d40c09..ecdbd2fc27 100644 --- a/contribute/hacker-guide.md +++ b/contribute/hacker-guide.md @@ -30,7 +30,7 @@ Typically bug fixes and new features start out as an idea or an experiment poste about things you want to implement. People proficient in certain areas of Scala usually monitor mailing lists, so you'll often get some help by simply posting a message. But the most efficient way to connect is to cc your message to one of the people responsible for maintaining the aspect of Scala which you wish to contribute to. -This is the list of language features/libraries along with their maintainers's full names and GitHub usernames: +This is the list of language features/libraries along with their maintainer's full names and GitHub usernames: {% include maintainers.html %} @@ -182,7 +182,7 @@ Here are also some tips & tricks that have proven useful in Scala development: just that trait, but it might also be necessary to recompile its users. The `ant` tool is not smart enough to do that, which might lead to very strange errors. Full-rebuilds fix the problem. Fortunately that's rarely necessary, because full-rebuilds take a lot of time-- the same 8-30 minutes as mentioned above. * Even on solid state drives packaging Scala distribution (i.e. creating jars from class files) is a non-trivial task. To save time here, - some people in our team do `ant quick.comp` instead of `ant` and then create custom scripts ([here](https://github.com/adriaanm/binfu/blob/master/scafu.sh) are some examples to get you strarted) to launch Scala from `build/quick/classes`. + some people in our team do `ant quick.comp` instead of `ant` and then create custom scripts ([here](https://github.com/adriaanm/binfu/blob/master/scafu.sh) are some examples to get you started) to launch Scala from `build/quick/classes`. * Don't underestimate the power of `print`. When starting with Scala, I spent a lot of time in the debugger trying to figure out how things work. However later I found out that print-based debugging is often more effective than jumping around. While it might be obvious to some, I'd like to explicitly mention that it's also useful to print stack traces to understand the flow of execution. When working with `Trees`, you might want to use `showRaw` to get the `AST` representation. @@ -415,6 +415,6 @@ workflow) and be ready to elaborate and adjust your patch if necessary. In this ## Merge -After your reviewer is happy with your code (usually signalled by a LGTM — “Looks good to me”), your job is done. +After your reviewer is happy with your code (usually signaled by a LGTM — “Looks good to me”), your job is done. Note that there can be a gap between a successful review and the merge, because not every reviewer has merge rights. In that case, someone else from the team will pick up your pull request and merge it. So don't be confused if your reviewer says “LGTM”, but your code doesn't get merged immediately. diff --git a/contribute/index.md b/contribute/index.md index 338ff06a06..433c579620 100644 --- a/contribute/index.md +++ b/contribute/index.md @@ -11,21 +11,56 @@ everyone make things better? ## How to help? -### Reporting bugs +That depends on what you want to contribute. Below are some getting started resources for different contribution domains. Please read all of the documentation and follow all the links from the topic pages below before attempting to contribute, as many of the questions you have will already be answered. -See our [bug reporting guide](./bug-reporting-guide.html) to learn -how to efficiently report a bug. +### Contribute -### Help with the documentation +Coordination of contribution efforts takes place on the +[scala-internals Google group](./scala-internals.html). -An easy but very important way to contribute to Scala is to -[help with the guide/tutorial-style documentation on docs.scala-lang.org](http://docs.scala-lang.org/contribute.html). -If you want to [contribute to Scala standard library API documentation](./scala-standard-library-api-documentation.html), the -process is slightly different, since API documentation lives within Scala standard library source code. +
+
+ +
+

Bug Fixes

+

Issues with the tools, core libraries and compiler. Also you can help us by reporting bugs

+
+
-### Compiler and other tools +
+
+

Tools

+

Enhance the Scala tooling ecosystem with features for build tools, IDE plug-ins and other related tools.

+
+
+

Core Libraries

+

Update and expand the capabilities of the core (and associated) Scala libraries.

+
+
+ +
+
+

Compiler/Language

+

Larger language features and compiler enhancements including language specification and SIPs.

+
+
+

Contributor Hall of Fame

+

Get your props, and find your place in the leader-board.

+
+
+
-More info in our [contributing guide](./guide.html). + +### Reporting bugs + +See our [bug reporting guide](./bug-reporting-guide.html) to learn +how to efficiently report a bug. ### Community Tickets @@ -35,33 +70,33 @@ various contributor activities:
-

Documentation

+

Documentation

Help augment or correct the documentation.

-

Core Libraries

+

Core Libraries

Community bugs and enhancements on the core libs.

-

Tools

+

Tools

Help with the Scala tool chain.

-

Compiler

+

Compiler

Ready for a challenge? Here's the compiler bugs.

-

Bugs

+

Bugs

All bugs marked with the label community.

-

All Issues

+

All Issues

Bugs + Enhancements marked with the label community.

diff --git a/contribute/scala-internals.md b/contribute/scala-internals.md new file mode 100644 index 0000000000..fa7faa9dc3 --- /dev/null +++ b/contribute/scala-internals.md @@ -0,0 +1,45 @@ +--- +layout: page +title: Scala Internals Mailing List +--- + +## scala-internals + +The [scala-internals mailing list](https://groups.google.com/d/forum/scala-internals) is where technical and logistical discussions concerning bugs, bug fixes, documentation, improvements, new features and other contributor related topics occur. + +### Coordinating on scala-internals + +Prior to commencing on contribution work for the Scala project, even for documentation and bugfixing, it is recommended (but not required) that you make a post on scala-internals announcing your intention. It's a great time to invite any help, advice or ask any questions you might have. It's also a great place to meet peers, one of whom will probably be reviewing your contribution at some point. + +To help subscribers on the scala-internals list to sort through the postings, we request that the following topic labels are applied when you start a new post please: + +| Label | Topics | +|-----------|-------------------------------------------------------| +| [docs] | Documentation, e.g. docs.scala-lang.org, API (scaladoc), etc. | +| [issues] | Bug reporting/fixing | +| [tools] | Tools including sbt, IDE plugins, testing, scaladoc generator, etc. | +| [libs] | Core libraries, extension libraries | +| [compiler] | Scala compiler discussions/features/issues | +| [admin] | Administrative/coordination topics | + +So, to talk about this list (an admin activity primarily) one might use: + +`[admin] more suggested labels for topic differentiation.` + +as a title, which then shows up on the mailing lists as + +`[scala-internals] [admin] more suggested labels for topic differentiation.` + +### Why It's a Good Idea + +While it is optional to announce your intentions/work items on scala-internals before starting, it is recommended and a smart thing to do for a number of reasons: + +* To attempt to cut down on duplicate effort (i.e. to avoid two people working on the same bug at the same time without coordinating effort). +* Related to the above: to allow the compiler team and core committers to warn of or smooth over potential merge conflicts between separate bugs that might affect the same code. +* Potentially someone has already thought about or even worked on that issue or a related one, and has valuable insight that might save you time (including warnings about what you might find and may want to avoid - dead ends that have already been explored). +* You might find a group of impassioned individuals want to volunteer to help you, since you got there first with your post it's up to you to decide if you want help or not. +* Posting could start a dialog with a potential reviewer, smoothing the latter, merge stages of the issue. +* There are a lot of nice people waiting to talk to you on scala-internals, you might be surprised how valuable and pleasant you find the experience of talking to them. + +If all of this has not convinced you then, please, go ahead and work on contributions anyway. It *is* less important to post to scala-internals first for small, self contained bugs than it is for larger issues or features, and not having posted first will not be a reason for your PR to be rejected, it just might be a rougher review/merge process than if you had posted first. It's your choice. + diff --git a/contribute/scala-standard-library-api-documentation.md b/contribute/scala-standard-library-api-documentation.md index 519c85a030..14eb55845c 100644 --- a/contribute/scala-standard-library-api-documentation.md +++ b/contribute/scala-standard-library-api-documentation.md @@ -72,7 +72,7 @@ component so that they show up in the correct issue filters. ### Required Reading -Please familiarize yourself with **all** of the following before contributing +Please familiarize yourself with the following before contributing new API documentation to save time, effort, mistakes and repetition. * [Forking the Repo](./hacker-guide.html#2_set_up) - follow the setup steps through @@ -86,7 +86,7 @@ new API documentation to save time, effort, mistakes and repetition. companions, browsing package object documentation, searching, token searches and so on. * Prior to commit, be sure to read - [A note about git commit messages](http://tbaggery.com/2008/04/19/a-note-about-git-commit-messages.html). + [A note about git commit messages](http://tbaggery.com/2008/04/19/a-note-about-git-commit-messages.html) and the [Scala Project & Developer Guidelines](https://github.com/scala/scala/blob/2.11.x/CONTRIBUTING.md). * Also read the Scala [Pull Request Policy](https://github.com/scala/scala/wiki/Pull-Request-Policy). Some of this document will clearly not apply (like the sections on providing tests, however see below for some special requirements for documentation). Do still read @@ -95,7 +95,7 @@ new API documentation to save time, effort, mistakes and repetition. cleanly. Remember that the title of the pull request will become the commit message when merged. **Also**, be sure to assign one or more reviewers to the PR, list of reviewers is at the bottom of this document, but the quick version is to add - `Review by @dickwall` **in the pull request comments**. + `Review by @heathermiller` or `Review by @dickwall` **in the pull request comments**. ### Extra Requirements for Scaladoc Documentation Commits diff --git a/contribute/tools.md b/contribute/tools.md new file mode 100644 index 0000000000..4378d6f568 --- /dev/null +++ b/contribute/tools.md @@ -0,0 +1,8 @@ +--- +layout: page +title: Tool Contributions +--- +## Under Construction + +If you would like to help complete this document, welcome, and please head over and read [Documentation Contributions](./documentation.html#the-scala-language-site), +and let us know on the [scala-internals](https://groups.google.com/forum/#!forum/scala-internals) forum (suggested post title: `[docs] Tool Contributions`) so that we can get you hooked up with the right people. \ No newline at end of file From 0083e203436a2f64c8d50029b93cda39bba5c125 Mon Sep 17 00:00:00 2001 From: Dick Wall Date: Tue, 10 Feb 2015 12:01:59 -0800 Subject: [PATCH 0061/1870] Alter when documentation/bug fix scala-internals postings are recommended. --- contribute/scala-internals.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/contribute/scala-internals.md b/contribute/scala-internals.md index fa7faa9dc3..5bd97ed8a8 100644 --- a/contribute/scala-internals.md +++ b/contribute/scala-internals.md @@ -9,7 +9,7 @@ The [scala-internals mailing list](https://groups.google.com/d/forum/scala-inter ### Coordinating on scala-internals -Prior to commencing on contribution work for the Scala project, even for documentation and bugfixing, it is recommended (but not required) that you make a post on scala-internals announcing your intention. It's a great time to invite any help, advice or ask any questions you might have. It's also a great place to meet peers, one of whom will probably be reviewing your contribution at some point. +Prior to commencing on contribution work on larger changes to the Scala project, it is recommended (but not required) that you make a post on scala-internals announcing your intention. It's a great time to invite any help, advice or ask any questions you might have. It's also a great place to meet peers, one of whom will probably be reviewing your contribution at some point. For smaller bug fixes or documentation changes where the risk of effort duplication is minimal, you can skip this post. To help subscribers on the scala-internals list to sort through the postings, we request that the following topic labels are applied when you start a new post please: From d7c254b48255eda00420e38d1273e46e88213bc3 Mon Sep 17 00:00:00 2001 From: Dick Wall Date: Tue, 10 Feb 2015 13:50:21 -0800 Subject: [PATCH 0062/1870] Correct scala-internals link and remove missing resource links. --- contribute/guide.md | 18 +----------------- 1 file changed, 1 insertion(+), 17 deletions(-) diff --git a/contribute/guide.md b/contribute/guide.md index 809c6558d5..90f16082d6 100644 --- a/contribute/guide.md +++ b/contribute/guide.md @@ -54,7 +54,7 @@ This is the impatient developer's checklist for the steps to submit a bug-fix pu 1. [Select a bug to fix from JIRA](https://issues.scala-lang.org/issues/?filter=12111), or if you found the bug yourself and want to fix it, [create a JIRA issue](./bug-reporting-guide.html) (but please [make sure it's not a duplicate](./bug-reporting-guide.html#reporting-confirmed-bugs-is-a-sin)). -2. Optional ([but recommended](./scala-internals#why-its-a-good-idea)), announce your intention to work on the bug on [scala-internals](./scala-internals.html). After all, don't you want to work on a team with +2. Optional ([but recommended](./scala-internals.html#why-its-a-good-idea)), announce your intention to work on the bug on [scala-internals](./scala-internals.html). After all, don't you want to work on a team with [these friendly people](./hacker-guide.html#connect) - it's one of the perks of contributing. 3. [Fork the Scala repository](./hacker-guide.html#fork) and clone your fork (if you haven't already). 4. [Create a feature branch](./hacker-guide.html#branch) to work on: use the branch name `issue/NNNN` where NNNN is the JIRA issue number. @@ -78,19 +78,3 @@ on the [scala-internals](http://groups.google.com/group/scala-internals) mailing Contributions, big or small, simple or complex, controversial or undisputed, need to materialize as patches against the Scala project source tree. The [hacker guide](hacker-guide.html) will explain how to materialize your idea into a full-fledged pull request against the Scala code base. -### Further Reading for Larger Changes - -The files below are recordings of code walk-through sessions by Martin Odersky about the Scala compiler internals. Some of the information is somewhat outdated, but the clips are still a good introduction to some parts of the compiler architecture. - - - [Scala Internals 2008-10-29 (Symbols 1)](http://www.scala-lang.org/sites/default/files/martin_ordersky_scala_internals_2008-10-29.avi) - - Handling of Symbols in the Scala compiler: some details on the symtab subdir, Symbols, Definitions, StdNames, Types (Lazy Types). - - - [Scala Internals 2008-11-05 (Symbols 2)](http://www.scala-lang.org/sites/default/files/martin_ordersky_scala_internals_2008-11-05.avi) - - Handling of Symbols part deux: more information on Symbols, Flags, Definitions. - - - [Scala Internals 2009-03-04 (Types)](http://www.scala-lang.org/sites/default/files/martin_ordersky_scala_internals_2009-03-04.avi) - - A detailed explanation about how types are represented and manipulated within the Scala compiler: data structures, manipulations of types, coding conventions (audio is not perfect, but intelligible). - From a4fb06f631262af3f87b6efd14d5078ac992c761 Mon Sep 17 00:00:00 2001 From: Fabien Salvi Date: Mon, 16 Feb 2015 09:55:48 +0100 Subject: [PATCH 0063/1870] Add scala-fame data --- .../_posts/2015-02-01-scala-fame-2015-01.md | 56 +++++++++++++++++++ 1 file changed, 56 insertions(+) create mode 100644 contribute/scala-fame-data/_posts/2015-02-01-scala-fame-2015-01.md diff --git a/contribute/scala-fame-data/_posts/2015-02-01-scala-fame-2015-01.md b/contribute/scala-fame-data/_posts/2015-02-01-scala-fame-2015-01.md new file mode 100644 index 0000000000..4af6e3d778 --- /dev/null +++ b/contribute/scala-fame-data/_posts/2015-02-01-scala-fame-2015-01.md @@ -0,0 +1,56 @@ +--- +layout: famearchive +title: Contributors of January 2015 +fame-year: 2015 +fame-month: 1 +fame-month-str: January +fame-categories: + - category: Typesafe + authors: + - username: retronym + gravatar: https://avatars1.githubusercontent.com/u/65551?v=3&s=60 + commits: 10 + linesAdded: 222 + linesDeleted: 26 + rank: 1 + newContributor: false + - username: adriaanm + gravatar: https://avatars3.githubusercontent.com/u/91083?v=3&s=60 + commits: 4 + linesAdded: 819 + linesDeleted: 636 + rank: 2 + newContributor: false + - category: EPFL + authors: + - username: lrytz + gravatar: https://avatars2.githubusercontent.com/u/119636?v=3&s=60 + commits: 4 + linesAdded: 470 + linesDeleted: 152 + rank: 1 + newContributor: false + - category: Community + authors: + - username: kanielc + gravatar: https://avatars1.githubusercontent.com/u/1334074?v=3&s=60 + commits: 2 + linesAdded: 58 + linesDeleted: 2 + rank: 1 + newContributor: false + - username: som-snytt + gravatar: https://avatars3.githubusercontent.com/u/369425?v=3&s=60 + commits: 2 + linesAdded: 35 + linesDeleted: 41 + rank: 1 + newContributor: false + - username: dickwall + gravatar: https://avatars2.githubusercontent.com/u/56453?v=3&s=60 + commits: 1 + linesAdded: 74 + linesDeleted: 0 + rank: 2 + newContributor: false +--- From db78065ef0defcd7b863409625974509c687ba3a Mon Sep 17 00:00:00 2001 From: Dick Wall Date: Tue, 17 Feb 2015 11:50:40 -0800 Subject: [PATCH 0064/1870] Re-org and simplify contribution section pages. * Removed hall of fame links (as the feature is being removed) * Temporarily disabled tools page link until we work out what to do for tools * Shuffled documentation contrib order to emphasize scaladoc over activator --- contribute/documentation.md | 16 ++++++++-------- contribute/guide.md | 2 +- contribute/index.md | 32 +++++++++++++------------------- 3 files changed, 22 insertions(+), 28 deletions(-) diff --git a/contribute/documentation.md b/contribute/documentation.md index da20b9360d..cb2f7a46fb 100644 --- a/contribute/documentation.md +++ b/contribute/documentation.md @@ -6,9 +6,9 @@ title: Documentation Contributions There are several ways you can help out with the improvement of Scala documentation. These include: +* API Documentation in Scaladoc * Code examples and tutorials in activator templates. * The Scala Wiki -* API Documentation in Scaladoc * Guides, Overviews, Tutorials, Cheat Sheets and more on the docs.scala-lang.org site * Updating Documents on the Main Scala Language Site (this one) @@ -18,13 +18,6 @@ Please read this page, and the pages linked from this one, fully before contribu Thanks -### Examples/Tutorials in Activator Templates - -[Typesafe Activator](https://typesafe.com/community/core-tools/activator-and-sbt) -is a tool based on SBT, with a UI mode that is ideal for code based tutorials, overviews and walk-throughs. To contribute an example in activator, you can fork an existing template, edit it, add a tutorial, upload it to github and then submit the github project into the template repository. It's the fastest way to produce a working code example with tutorial. - -Please see [Contributing an Activator Template](https://typesafe.com/activator/template/contribute) for more details. - ### API Documentation (Scaladoc) The Scala API documentation lives with the scala project source code. There are many ways you can help with improving Scaladoc, including: @@ -36,6 +29,13 @@ Please *follow the issue submission process closely* to help prevent duplicate i [submit new Scaladoc](./scala-standard-library-api-documentation.html) without creating an issue, but please look to see if there is an issue already submitted for your task and claim it if there is. If not, please post your intention to work on a specific scaladoc task on scala-internals so that people know what you are doing. +### Examples/Tutorials in Activator Templates + +[Typesafe Activator](https://typesafe.com/community/core-tools/activator-and-sbt) +is a tool based on SBT, with a UI mode that is ideal for code based tutorials, overviews and walk-throughs. To contribute an example in activator, you can fork an existing template, edit it, add a tutorial, upload it to github and then submit the github project into the template repository. It's the fastest way to produce a working code example with tutorial. + +Please see [Contributing an Activator Template](https://typesafe.com/activator/template/contribute) for more details. + ### The Scala Wiki The [Scala wiki](https://wiki.scala-lang.org/) could be a useful resource, but tends to get out of date quickly. It is perhaps best viewed as a place for information to temporarily live while it is constructed and refined, but with an aim to putting the material into the [docs.scala-lang.org](http://docs.scala-lang.org) site eventually (see the next section). Nonetheless, it is a fast way to add some public documentation. diff --git a/contribute/guide.md b/contribute/guide.md index 90f16082d6..bf323c39e5 100644 --- a/contribute/guide.md +++ b/contribute/guide.md @@ -65,7 +65,7 @@ This is the impatient developer's checklist for the steps to submit a bug-fix pu https://github.com/scala/scala#git-hygiene). For bug fixes, a single commit is requested, for features several commits may be desirable (but each separate commit must compile and pass all tests) 9. [Submit a pull request](./hacker-guide.html#submit) following the [Scala project pull-request guidelines](http://docs.scala-lang.org/scala/pull-request-policy.html). 10. [Work with a reviewer](https://github.com/scala/scala#reviewing) to [get your pull request merged in](./hacker-guide.html#review). -11. [Bask in the glow of a job well done](./scala-fame.html). +11. Celebrate! Need more information or a little more hand-holding for the first one? We got you covered: take a read through the entire [Hacker Guide](./hacker-guide.html) for an example of implementing a new feature (some of the steps can be skipped for bug fixes, this will be obvious from reading it, but many of the steps here will help with bug fixes too). diff --git a/contribute/index.md b/contribute/index.md index 433c579620..405a675ea6 100644 --- a/contribute/index.md +++ b/contribute/index.md @@ -13,6 +13,11 @@ everyone make things better? That depends on what you want to contribute. Below are some getting started resources for different contribution domains. Please read all of the documentation and follow all the links from the topic pages below before attempting to contribute, as many of the questions you have will already be answered. +### Reporting bugs + +See our [bug reporting guide](./bug-reporting-guide.html) to learn +how to efficiently report a bug. + ### Contribute Coordination of contribution efforts takes place on the @@ -22,8 +27,7 @@ Coordination of contribution efforts takes place on the
@@ -35,33 +39,23 @@ Coordination of contribution efforts takes place on the
-

Tools

-

Enhance the Scala tooling ecosystem with features for build tools, IDE plug-ins and other related tools.

-
-

Core Libraries

Update and expand the capabilities of the core (and associated) Scala libraries.

-
- -
-

Compiler/Language

+

Compiler/Language

Larger language features and compiler enhancements including language specification and SIPs.

-
-

Contributor Hall of Fame

-

Get your props, and find your place in the leader-board.

+ +
- -### Reporting bugs - -See our [bug reporting guide](./bug-reporting-guide.html) to learn -how to efficiently report a bug. - ### Community Tickets The following links provide starting points for From 090c9de45ab7a8c810469853699292aafe0ca865 Mon Sep 17 00:00:00 2001 From: Dick Wall Date: Tue, 17 Feb 2015 13:19:18 -0800 Subject: [PATCH 0065/1870] Remove wiki info, use scala-lang.org. --- contribute/documentation.md | 11 ++--------- 1 file changed, 2 insertions(+), 9 deletions(-) diff --git a/contribute/documentation.md b/contribute/documentation.md index cb2f7a46fb..81ebba7b3f 100644 --- a/contribute/documentation.md +++ b/contribute/documentation.md @@ -8,9 +8,8 @@ There are several ways you can help out with the improvement of Scala documentat * API Documentation in Scaladoc * Code examples and tutorials in activator templates. -* The Scala Wiki * Guides, Overviews, Tutorials, Cheat Sheets and more on the docs.scala-lang.org site -* Updating Documents on the Main Scala Language Site (this one) +* Updating scala-lang.org Please read this page, and the pages linked from this one, fully before contributing documentation. Many of the questions you have will be answered in these resources. If you have a question that isn't answered, feel free to ask on the [scala-internals Google group](https://groups.google.com/forum/#!forum/scala-internals) and then, please, submit a pull request with updated documentation reflecting that answer. @@ -36,12 +35,6 @@ is a tool based on SBT, with a UI mode that is ideal for code based tutorials, o Please see [Contributing an Activator Template](https://typesafe.com/activator/template/contribute) for more details. -### The Scala Wiki - -The [Scala wiki](https://wiki.scala-lang.org/) could be a useful resource, but tends to get out of date quickly. It is perhaps best viewed as a place for information to temporarily live while it is constructed and refined, but with an aim to putting the material into the [docs.scala-lang.org](http://docs.scala-lang.org) site eventually (see the next section). Nonetheless, it is a fast way to add some public documentation. - -The wiki is self documenting, so make sure to take a look at the [home page](https://wiki.scala-lang.org/) to get started. Please consider contributions to [docs.scala-lang.org](docs.scala-lang.org) for more enduring documentation, even though it is more work to get through the review process for the main doc site. - ### The Main Scala Documentation Site [docs.scala-lang.org](https://wiki.scala-lang.org/) houses the primary source of written, non-API documentation for Scala. It's a github project that you can fork and submit pull requests from. It includes: @@ -59,7 +52,7 @@ and more Please read [contributing to the docs.scala-lang.org site](http://docs.scala-lang.org/contribute.html) through before embarking on changes. The site uses the [Jekyll](http://jekyllrb.com/) markdown engine so you will need to follow the instructions to get that running as well. -### The Scala Language Site +### Updating scala-lang.org Additional high-level documentation (including documentation on contributing to Scala and related projects) is provided on the main From e172523885936286894c661fc450ff3378135dd5 Mon Sep 17 00:00:00 2001 From: Dick Wall Date: Wed, 18 Feb 2015 14:46:54 -0800 Subject: [PATCH 0066/1870] Add IDEs and Build Tools page * IDEs and Build Tools page consists of links out to important scala projects * Restored link to above page, and renamed to IDEs and Build Tools * Added a missing link into the documentation.md page --- contribute/documentation.md | 2 +- contribute/index.md | 12 ++-- contribute/tools.md | 123 ++++++++++++++++++++++++++++++++++-- 3 files changed, 126 insertions(+), 11 deletions(-) diff --git a/contribute/documentation.md b/contribute/documentation.md index 81ebba7b3f..c4704eee0b 100644 --- a/contribute/documentation.md +++ b/contribute/documentation.md @@ -60,5 +60,5 @@ to Scala and related projects) is provided on the main [scala-lang github project](https://github.com/scala/scala-lang) which may be forked to create pull requests. Please read both the -[docs.scala-lang.org contribution](http://docs.scala-lang.org/contribute.html) document and the scala-lang.org github README file before embarking on any changes to the Scala language site, as it uses the same Jekyll markdown tool and many of the same conventions as the Scala documentation site. +[docs.scala-lang.org contribution](http://docs.scala-lang.org/contribute.html) document and the [scala-lang.org github README](https://github.com/dickwall/scala-lang#scala-langorg) before embarking on any changes to the Scala language site, as it uses the same Jekyll markdown tool and many of the same conventions as the Scala documentation site. diff --git a/contribute/index.md b/contribute/index.md index 405a675ea6..2d98744a6f 100644 --- a/contribute/index.md +++ b/contribute/index.md @@ -43,17 +43,17 @@ Coordination of contribution efforts takes place on the

Update and expand the capabilities of the core (and associated) Scala libraries.

-

Compiler/Language

-

Larger language features and compiler enhancements including language specification and SIPs.

+

IDE and Build Tools

+

Enhance the Scala tools with features for build tools, IDE plug-ins and other related projects.

- ### Community Tickets diff --git a/contribute/tools.md b/contribute/tools.md index 4378d6f568..53b097a696 100644 --- a/contribute/tools.md +++ b/contribute/tools.md @@ -1,8 +1,123 @@ --- layout: page -title: Tool Contributions +title: IDE and Build Tool Contributions --- -## Under Construction +## Contributing to IDE and Build Tools -If you would like to help complete this document, welcome, and please head over and read [Documentation Contributions](./documentation.html#the-scala-language-site), -and let us know on the [scala-internals](https://groups.google.com/forum/#!forum/scala-internals) forum (suggested post title: `[docs] Tool Contributions`) so that we can get you hooked up with the right people. \ No newline at end of file +The links below are to a number of Scala build and IDE related projects that are important in the larger Scala space, and which welcome contributions. + +Since these tools are in separate projects, they may (and likely will) have their own rules and guidelines for contributing. The [Hacker Guide](./hacker-guide.html) and [Bug-fixing](guide.html) pages will likely have much in the way of related information on how to contribute to these projects, and are recommended reading. You should also check the README.md and (if it's present) CONTRIBUTING.md files from the actual projects before contributing to them. + +Typically, issues for these projects will be reported and kept in the github project issue tracker for that project rather than in the Scala project JIRA. +Many of these projects have a gitter channel (usually listed in the README or CONTRIBUTING documents) which is a great place to discuss proposed work before commencing. + +### Broken Links? + +Stuff changes. Found a broken link or something that needs updating on this page? Please, consider [submitting a documentation pull request](./documentation.html#updating-scala-langorg) to fix it. + +### Projects + +
+
+
+

Scala IDE

+

The Eclipse Scala IDE project.

+

Home | +Issues | +ReadMe | +Contributing

+
+
+ +

sbt

+

Interactive build tool.

+

Home | +Issues | +ReadMe | +Contributing

+
+
+ +
+
+ +

Scaladoc Tool

+

(Contribute through scala/scala)

+

Home | +Issues | +ReadMe | +Contributing

+
+
+

DBuild

+

Multi-project build tool.

+

Home | +Issues | +ReadMe | +Contributing

+
+
+ +
+
+

Ensime

+

Scala Support for Text Editors

+

Home | +Issues | +ReadMe | +Contributing

+
+
+ +

Abide

+

Lint tooling for Scala

+

Home | +Issues | +ReadMe | +Contributing

+
+
+ +
+
+ +

Partest

+

Scala Compiler/Library Testing

+

Home | +Issues | +ReadMe

+
+
+

Scoverage

+

Scala code coverage tool

+

Home | +Issues | +ReadMe | +Contributing

+
+
+
+ +### Projects in Particular Need + +The following projects are important to the Scala community but are particularly in need of contributors to continue their development. + +
+
+
+ +

Scalap

+

Scala Decoder (part of scala/scala)

+Issues | +ReadMe | +Contributing

+
+
+

Scalariform

+

Scala code formatter

+

Home | +Issues | +ReadMe

+
+
+
From 391caec69a325cdac6c1531a717bc21cc001605d Mon Sep 17 00:00:00 2001 From: Dick Wall Date: Tue, 10 Mar 2015 10:16:07 -0700 Subject: [PATCH 0067/1870] Respond to review comments - correct link, reorder projects * Re-order the projects in approximate order of importance * Corrected scala docs link to correct github project --- contribute/documentation.md | 2 +- contribute/tools.md | 60 ++++++++++++++++++++----------------- 2 files changed, 33 insertions(+), 29 deletions(-) diff --git a/contribute/documentation.md b/contribute/documentation.md index c4704eee0b..c0de56d9b1 100644 --- a/contribute/documentation.md +++ b/contribute/documentation.md @@ -60,5 +60,5 @@ to Scala and related projects) is provided on the main [scala-lang github project](https://github.com/scala/scala-lang) which may be forked to create pull requests. Please read both the -[docs.scala-lang.org contribution](http://docs.scala-lang.org/contribute.html) document and the [scala-lang.org github README](https://github.com/dickwall/scala-lang#scala-langorg) before embarking on any changes to the Scala language site, as it uses the same Jekyll markdown tool and many of the same conventions as the Scala documentation site. +[docs.scala-lang.org contribution](http://docs.scala-lang.org/contribute.html) document and the [scala-lang.org github README](https://github.com/scala/scala-lang#scala-langorg) before embarking on any changes to the Scala language site, as it uses the same Jekyll markdown tool and many of the same conventions as the Scala documentation site. diff --git a/contribute/tools.md b/contribute/tools.md index 53b097a696..dab8244d0f 100644 --- a/contribute/tools.md +++ b/contribute/tools.md @@ -11,6 +11,10 @@ Since these tools are in separate projects, they may (and likely will) have thei Typically, issues for these projects will be reported and kept in the github project issue tracker for that project rather than in the Scala project JIRA. Many of these projects have a gitter channel (usually listed in the README or CONTRIBUTING documents) which is a great place to discuss proposed work before commencing. +There are some projects in this section that are in +[particular need](#projects-in-particular-need) so please check those out +if you would like to help revive them. + ### Broken Links? Stuff changes. Found a broken link or something that needs updating on this page? Please, consider [submitting a documentation pull request](./documentation.html#updating-scala-langorg) to fix it. @@ -20,14 +24,6 @@ Stuff changes. Found a broken link or something that needs updating on this page
-

Scala IDE

-

The Eclipse Scala IDE project.

-

Home | -Issues | -ReadMe | -Contributing

-
-

sbt

Interactive build tool.

@@ -36,9 +32,6 @@ Stuff changes. Found a broken link or something that needs updating on this page ReadMe | Contributing

-
- -

Scaladoc Tool

@@ -48,6 +41,17 @@ Stuff changes. Found a broken link or something that needs updating on this page ReadMe | Contributing

+
+ +
+
+

Scala IDE

+

The Eclipse Scala IDE project.

+

Home | +Issues | +ReadMe | +Contributing

+

DBuild

Multi-project build tool.

@@ -60,6 +64,14 @@ Stuff changes. Found a broken link or something that needs updating on this page
+ +

Partest

+

Scala Compiler/Library Testing

+

Home | +Issues | +ReadMe

+
+

Ensime

Scala Support for Text Editors

Home | @@ -67,27 +79,10 @@ Stuff changes. Found a broken link or something that needs updating on this page ReadMe | Contributing

-
- -

Abide

-

Lint tooling for Scala

-

Home | -Issues | -ReadMe | -Contributing

-
- -

Partest

-

Scala Compiler/Library Testing

-

Home | -Issues | -ReadMe

-
-

Scoverage

Scala code coverage tool

Home | @@ -95,6 +90,15 @@ Stuff changes. Found a broken link or something that needs updating on this page ReadMe | Contributing

+
+ +

Abide

+

Lint tooling for Scala

+

Home | +Issues | +ReadMe | +Contributing

+
From 78759cd80f9a25baef7d9b437b829a8ac66261c4 Mon Sep 17 00:00:00 2001 From: Dick Wall Date: Wed, 11 Mar 2015 09:44:19 -0700 Subject: [PATCH 0068/1870] Tweak the all community bugs link * No longer sort by component - sort by votes instead. --- contribute/guide.md | 2 +- contribute/index.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/contribute/guide.md b/contribute/guide.md index bf323c39e5..8c07448ba7 100644 --- a/contribute/guide.md +++ b/contribute/guide.md @@ -52,7 +52,7 @@ unencumbered by copyrights or patents. This is the impatient developer's checklist for the steps to submit a bug-fix pull request to the Scala project. For more information, description and justification for the steps, follow the links in that step. Further specific instructions for the release of Scala you are targeting can be found in the `CONTRIBUTING.md` file for that [github branch](https://github.com/scala/scala) -1. [Select a bug to fix from JIRA](https://issues.scala-lang.org/issues/?filter=12111), or if you found the bug yourself and want to fix it, [create a JIRA issue](./bug-reporting-guide.html) (but please +1. [Select a bug to fix from JIRA](/contribute/#community-tickets), or if you found the bug yourself and want to fix it, [create a JIRA issue](./bug-reporting-guide.html) (but please [make sure it's not a duplicate](./bug-reporting-guide.html#reporting-confirmed-bugs-is-a-sin)). 2. Optional ([but recommended](./scala-internals.html#why-its-a-good-idea)), announce your intention to work on the bug on [scala-internals](./scala-internals.html). After all, don't you want to work on a team with [these friendly people](./hacker-guide.html#connect) - it's one of the perks of contributing. diff --git a/contribute/index.md b/contribute/index.md index 2d98744a6f..0a37b87a73 100644 --- a/contribute/index.md +++ b/contribute/index.md @@ -90,7 +90,7 @@ various contributor activities:

All bugs marked with the label community.

-

All Issues

+

All Issues

Bugs + Enhancements marked with the label community.

From 84da163c3d36575459983b9d2d59fba25dfbea10 Mon Sep 17 00:00:00 2001 From: Dick Wall Date: Tue, 17 Mar 2015 13:28:27 -0700 Subject: [PATCH 0069/1870] Add fix me links and core lib page. * Add a fix this page link under contents list * Create a simple landing page for core libs - direct to docs.scala.lang --- contribute/corelibs.md | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) diff --git a/contribute/corelibs.md b/contribute/corelibs.md index 1429ec87ff..6e1abbb0d7 100644 --- a/contribute/corelibs.md +++ b/contribute/corelibs.md @@ -2,7 +2,20 @@ layout: page title: Core Library Contributions --- -## Under Construction +## Core Library Contributions -If you would like to help complete this document, welcome, and please head over and read [Documentation Contributions](./documentation.html#the-scala-language-site), -and let us know on the [scala-internals](https://groups.google.com/forum/#!forum/scala-internals) forum (suggested post title: `[docs] Core Library Contributions`) so that we can get you hooked up with the right people. \ No newline at end of file +There are several options for contributing to Scala's core libraries. You can: + +* Help with [Documentation](./scala-standard-library-api-documentation.html). +* [Report Bugs or Issues](./bug-reporting-guide.html) against the core libraries. +* [Fix Bugs or Issues](./guide.html) against the + [reported library bugs/issues](https://issues.scala-lang.org/issues/?filter=13001). +* Contribute significant new functionality or a new API by submitting + a Scala Library Improvement Process (SLIP) Document. + +### Submitting a SLIP + +For significant new functionality or a whole new API to be considered for +inclusion in the core Scala distribution, you will be asked to submit a SLIP (Scala Library Improvement Process) document. + +Please see [instructions for submitting a new SLIP](http://docs.scala-lang.org/sips/slip-submission.html) and familiarize yourself with the [SIP/SLIP](http://docs.scala-lang.org/sips/) section of the Scala documentation site. Also please pay particular attention to the [pre-requisites](http://docs.scala-lang.org/sips/slip-submission.html) before submitting a SLIP. From 66c5272ca07370c7c6448a30c24da2c66455dcd0 Mon Sep 17 00:00:00 2001 From: Dick Wall Date: Tue, 17 Mar 2015 13:54:39 -0700 Subject: [PATCH 0070/1870] Add a missing paragraph opener on tools.md --- contribute/tools.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/contribute/tools.md b/contribute/tools.md index dab8244d0f..023c638082 100644 --- a/contribute/tools.md +++ b/contribute/tools.md @@ -112,7 +112,7 @@ The following projects are important to the Scala community but are particularly

Scalap

Scala Decoder (part of scala/scala)

-Issues | +

Issues | ReadMe | Contributing

@@ -125,3 +125,5 @@ The following projects are important to the Scala community but are particularly + + \ No newline at end of file From cde252c3e88bdb803f48c4bf30e33c8ffe6da1de Mon Sep 17 00:00:00 2001 From: Dick Wall Date: Tue, 17 Mar 2015 14:50:34 -0700 Subject: [PATCH 0071/1870] Fix intra-page links for main markdown engine. * Local jekyll uses - but main site uses _ for intra-page anchors --- contribute/guide.md | 8 ++++---- contribute/index.md | 2 +- contribute/tools.md | 4 ++-- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/contribute/guide.md b/contribute/guide.md index 8c07448ba7..04fe50ae5b 100644 --- a/contribute/guide.md +++ b/contribute/guide.md @@ -17,7 +17,7 @@ title: Contributing guide
-

Community issues

+

Community issues

Get cracking on some easy to approach issues.

@@ -52,9 +52,9 @@ unencumbered by copyrights or patents. This is the impatient developer's checklist for the steps to submit a bug-fix pull request to the Scala project. For more information, description and justification for the steps, follow the links in that step. Further specific instructions for the release of Scala you are targeting can be found in the `CONTRIBUTING.md` file for that [github branch](https://github.com/scala/scala) -1. [Select a bug to fix from JIRA](/contribute/#community-tickets), or if you found the bug yourself and want to fix it, [create a JIRA issue](./bug-reporting-guide.html) (but please -[make sure it's not a duplicate](./bug-reporting-guide.html#reporting-confirmed-bugs-is-a-sin)). -2. Optional ([but recommended](./scala-internals.html#why-its-a-good-idea)), announce your intention to work on the bug on [scala-internals](./scala-internals.html). After all, don't you want to work on a team with +1. [Select a bug to fix from JIRA](/contribute/index.html#community_tickets), or if you found the bug yourself and want to fix it, [create a JIRA issue](./bug-reporting-guide.html) (but please +[make sure it's not a duplicate](./bug-reporting-guide.html#reporting_confirmed_bugs_is_a_sin)). +2. Optional ([but recommended](./scala-internals.html#why_its_a_good_idea)), announce your intention to work on the bug on [scala-internals](./scala-internals.html). After all, don't you want to work on a team with [these friendly people](./hacker-guide.html#connect) - it's one of the perks of contributing. 3. [Fork the Scala repository](./hacker-guide.html#fork) and clone your fork (if you haven't already). 4. [Create a feature branch](./hacker-guide.html#branch) to work on: use the branch name `issue/NNNN` where NNNN is the JIRA issue number. diff --git a/contribute/index.md b/contribute/index.md index 0a37b87a73..a272a8b98d 100644 --- a/contribute/index.md +++ b/contribute/index.md @@ -50,7 +50,7 @@ Coordination of contribution efforts takes place on the
-

Compiler/Language

+

Compiler/Language

Larger language features and compiler enhancements including language specification and SIPs.

diff --git a/contribute/tools.md b/contribute/tools.md index 023c638082..92207f4da2 100644 --- a/contribute/tools.md +++ b/contribute/tools.md @@ -12,12 +12,12 @@ Typically, issues for these projects will be reported and kept in the github pro Many of these projects have a gitter channel (usually listed in the README or CONTRIBUTING documents) which is a great place to discuss proposed work before commencing. There are some projects in this section that are in -[particular need](#projects-in-particular-need) so please check those out +[particular need](#projects_in_particular_need) so please check those out if you would like to help revive them. ### Broken Links? -Stuff changes. Found a broken link or something that needs updating on this page? Please, consider [submitting a documentation pull request](./documentation.html#updating-scala-langorg) to fix it. +Stuff changes. Found a broken link or something that needs updating on this page? Please, consider [submitting a documentation pull request](./documentation.html#updating_scala_langorg) to fix it. ### Projects From 70673bb169853d0caf796d63e4aa3030238f1ba1 Mon Sep 17 00:00:00 2001 From: Dick Wall Date: Tue, 17 Mar 2015 15:01:50 -0700 Subject: [PATCH 0072/1870] Remove extra _ in fix-page link. --- contribute/tools.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/contribute/tools.md b/contribute/tools.md index 92207f4da2..1757ae1005 100644 --- a/contribute/tools.md +++ b/contribute/tools.md @@ -17,7 +17,7 @@ if you would like to help revive them. ### Broken Links? -Stuff changes. Found a broken link or something that needs updating on this page? Please, consider [submitting a documentation pull request](./documentation.html#updating_scala_langorg) to fix it. +Stuff changes. Found a broken link or something that needs updating on this page? Please, consider [submitting a documentation pull request](./documentation.html#updating_scalalangorg) to fix it. ### Projects From fa3402a41320cbfb6c0ba3c3f4970e8633e5b596 Mon Sep 17 00:00:00 2001 From: Dick Wall Date: Tue, 17 Mar 2015 15:20:28 -0700 Subject: [PATCH 0073/1870] Fix documentation page intra-link. --- contribute/documentation.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/contribute/documentation.md b/contribute/documentation.md index c0de56d9b1..d7597d8884 100644 --- a/contribute/documentation.md +++ b/contribute/documentation.md @@ -21,7 +21,7 @@ Thanks The Scala API documentation lives with the scala project source code. There are many ways you can help with improving Scaladoc, including: -* [Log issues for missing scaladoc documentation](./scala-standard-library-api-documentation.html#contribute-api-documentation-bug-reports) - +* [Log issues for missing scaladoc documentation](./scala-standard-library-api-documentation.html#contribute_api_documentation_bug_reports) - Please *follow the issue submission process closely* to help prevent duplicate issues being created. * [Claim Scaladoc Issues and Provide Documentation](./scala-standard-library-api-documentation.html) - please claim issues prior to working on a specific scaladoc task to prevent duplication of effort. If you sit on an issue for too long without submitting a pull request, it will revert back to unassigned and you will need to re-claim it. * You can also just From fc02b4d49bcc4d85f59fa0f1d1df913b2e102521 Mon Sep 17 00:00:00 2001 From: Dick Wall Date: Mon, 23 Mar 2015 15:22:16 -0700 Subject: [PATCH 0074/1870] Add contribute PR review page to /contribute * Pull request reviewing was overlooked in recent contribute changes --- contribute/codereviews.md | 60 +++++++++++++++++++++++++++++++++++++++ contribute/index.md | 12 ++++++-- 2 files changed, 69 insertions(+), 3 deletions(-) create mode 100644 contribute/codereviews.md diff --git a/contribute/codereviews.md b/contribute/codereviews.md new file mode 100644 index 0000000000..87ab392f1c --- /dev/null +++ b/contribute/codereviews.md @@ -0,0 +1,60 @@ +--- +layout: page +title: Code Review Contributions +--- +## Code Review Contributions + +In addition to [bug fixing](./guide.html), you can help us review +[waiting pull requests](#pull_requests_awaiting_comment). This is also a good (and recommended) way to get to know the feel of +the bug-fixing and submissions process before jumping in (lurk for a while, +reading pull requests from others and maybe commenting on them). + +### Etiquette + +[Code of Conduct Reminder](http://docs.scala-lang.org/conduct.html) + +There are many coding approaches and styles. Asserting that yours is the only correct one is not likely to lead to a smooth interaction with others. Code review is where programmers (often volunteers) surrender up their efforts for public scrutiny. + +Code reviewing is a great way to both learn and mentor, and *all* comments made during pull request reviews should bear those two aims in mind. + +Assuming the pull request has been made following the guidelines laid out in the rest of the contributor documentation (e.g. for Scala bug fixes, the PR is against an open issue, and has adhered to the guidelines for code changes and submitting the PR), then the comments for the pull request are *not* the correct place to discuss on whether this PR is even needed or other broad, negative assertions. + +The comments are for looking for potential problems in the code, suggesting improvements, looking for items that might have been missed by the submitter and so on. If you feel it necessary to discuss whether the issue should even be addressed, that should be carried out ([in a professional manner](http://docs.scala-lang.org/conduct.html)) on the comments for that Issue rather than the PR. General discussions should likewise be directed to forums like [scala-debate](https://groups.google.com/d/forum/scala-debate), [scala-user](https://groups.google.com/d/forum/scala-user), [scala-language](https://groups.google.com/d/forum/scala-language) or [scala-internals](https://groups.google.com/d/forum/scala-internals). + +Conversely if you are receiving a review, consider that the advice is being given to make you, and Scala, better rather than as a negative critique. Assume the best, rather than the worst. + +### Review Guidelines + +* Keep comments on-topic, concise and precise. +* Attach comments to particular lines or regions they pertain to whenever possible. +* Short code examples are often more descriptive than prose. +* If (and only if) you have thoroughly reviewed the PR and thought through all angles, and you want to accept it, LGTM (Looks Good To Me) is the preferred acceptance response. If there are already LGTMs on the PR, consider whether you are adding anything or just being "me too". +* Above all, remember that the people you are reviewing might be reviewing your PRs one day too :-). + +## Pull Requests Awaiting Comment + +
+
+
+

scala/scala

+

Scala bug fixes and changes in the language, core libs and included tools.

+
+
+

scala/github.scala.com

+

Scala documentation site.

+
+
+ +
+
+

scala/scala-lang

+

The Scala language web site.

+
+
+

All Scala Github Projects

+

For other PRs, follow the scala project from here.

+
+
+
+ +Also note that the [Tools contributions](./tools.html) page has more projects that will generate pull requests. \ No newline at end of file diff --git a/contribute/index.md b/contribute/index.md index a272a8b98d..fd94af5de2 100644 --- a/contribute/index.md +++ b/contribute/index.md @@ -39,16 +39,22 @@ Coordination of contribution efforts takes place on the
+

Code Reviews

+

Review pull requests against scala/scala, +scala/scala-lang, +scala/scala.github.com and others.

+
+

Core Libraries

Update and expand the capabilities of the core (and associated) Scala libraries.

+
+ +

IDE and Build Tools

Enhance the Scala tools with features for build tools, IDE plug-ins and other related projects.

-
- -

Compiler/Language

Larger language features and compiler enhancements including language specification and SIPs.

From 77cd3f5f78cb9ed89311ff2f5a811b6e25cf52c1 Mon Sep 17 00:00:00 2001 From: Dick Wall Date: Tue, 24 Mar 2015 14:07:31 -0700 Subject: [PATCH 0075/1870] Incorporate comments, reduce wordiness * Cut etiquette section * Include Code of Conduct link in Review Guidelines section * Change wording aroung LGTM and additional reviews --- contribute/codereviews.md | 30 +++++++++++------------------- 1 file changed, 11 insertions(+), 19 deletions(-) diff --git a/contribute/codereviews.md b/contribute/codereviews.md index 87ab392f1c..949cb11300 100644 --- a/contribute/codereviews.md +++ b/contribute/codereviews.md @@ -5,31 +5,23 @@ title: Code Review Contributions ## Code Review Contributions In addition to [bug fixing](./guide.html), you can help us review -[waiting pull requests](#pull_requests_awaiting_comment). This is also a good (and recommended) way to get to know the feel of -the bug-fixing and submissions process before jumping in (lurk for a while, -reading pull requests from others and maybe commenting on them). +[waiting pull requests](#pull_requests_awaiting_comment). +This is also a good (and recommended) way to get to know the feel of +the bug-fixing and submissions process before jumping in with your +own pull requests. -### Etiquette - -[Code of Conduct Reminder](http://docs.scala-lang.org/conduct.html) - -There are many coding approaches and styles. Asserting that yours is the only correct one is not likely to lead to a smooth interaction with others. Code review is where programmers (often volunteers) surrender up their efforts for public scrutiny. - -Code reviewing is a great way to both learn and mentor, and *all* comments made during pull request reviews should bear those two aims in mind. - -Assuming the pull request has been made following the guidelines laid out in the rest of the contributor documentation (e.g. for Scala bug fixes, the PR is against an open issue, and has adhered to the guidelines for code changes and submitting the PR), then the comments for the pull request are *not* the correct place to discuss on whether this PR is even needed or other broad, negative assertions. - -The comments are for looking for potential problems in the code, suggesting improvements, looking for items that might have been missed by the submitter and so on. If you feel it necessary to discuss whether the issue should even be addressed, that should be carried out ([in a professional manner](http://docs.scala-lang.org/conduct.html)) on the comments for that Issue rather than the PR. General discussions should likewise be directed to forums like [scala-debate](https://groups.google.com/d/forum/scala-debate), [scala-user](https://groups.google.com/d/forum/scala-user), [scala-language](https://groups.google.com/d/forum/scala-language) or [scala-internals](https://groups.google.com/d/forum/scala-internals). - -Conversely if you are receiving a review, consider that the advice is being given to make you, and Scala, better rather than as a negative critique. Assume the best, rather than the worst. ### Review Guidelines +[Code of Conduct Reminder](http://docs.scala-lang.org/conduct.html) + * Keep comments on-topic, concise and precise. * Attach comments to particular lines or regions they pertain to whenever possible. * Short code examples are often more descriptive than prose. -* If (and only if) you have thoroughly reviewed the PR and thought through all angles, and you want to accept it, LGTM (Looks Good To Me) is the preferred acceptance response. If there are already LGTMs on the PR, consider whether you are adding anything or just being "me too". -* Above all, remember that the people you are reviewing might be reviewing your PRs one day too :-). +* If you have thoroughly reviewed the PR and thought through all angles, LGTM (Looks Good To Me) is the preferred acceptance response. +* Additional reviews should try to offer additional insights: "I also thought about it from this angle and it still looks good.." +* Above all, remember that the people you are reviewing might be reviewing your PRs one day too. +* If you are receiving the review, consider that the advice is being given to make you, and Scala, better rather than as a negative critique. Assume the best, rather than the worst. ## Pull Requests Awaiting Comment @@ -57,4 +49,4 @@ Conversely if you are receiving a review, consider that the advice is being give
-Also note that the [Tools contributions](./tools.html) page has more projects that will generate pull requests. \ No newline at end of file +Also note that the [Tools contributions](./tools.html) page has more projects that will generate pull requests. From 3c9d4cd4b8587642f5d0b59f7a4ae7100d799904 Mon Sep 17 00:00:00 2001 From: Fabien Salvi Date: Tue, 14 Apr 2015 11:43:49 +0200 Subject: [PATCH 0076/1870] Add scala-fame data --- .../_posts/2015-03-01-scala-fame-2015-02.md | 70 ++++++++++++++ .../_posts/2015-04-01-scala-fame-2015-03.md | 91 +++++++++++++++++++ 2 files changed, 161 insertions(+) create mode 100644 contribute/scala-fame-data/_posts/2015-03-01-scala-fame-2015-02.md create mode 100644 contribute/scala-fame-data/_posts/2015-04-01-scala-fame-2015-03.md diff --git a/contribute/scala-fame-data/_posts/2015-03-01-scala-fame-2015-02.md b/contribute/scala-fame-data/_posts/2015-03-01-scala-fame-2015-02.md new file mode 100644 index 0000000000..3fe846623b --- /dev/null +++ b/contribute/scala-fame-data/_posts/2015-03-01-scala-fame-2015-02.md @@ -0,0 +1,70 @@ +--- +layout: famearchive +title: Contributors of February 2015 +fame-year: 2015 +fame-month: 2 +fame-month-str: February +fame-categories: + - category: Typesafe + authors: + - username: adriaanm + gravatar: https://avatars3.githubusercontent.com/u/91083?v=3&s=60 + commits: 15 + linesAdded: 1199 + linesDeleted: 588 + rank: 1 + newContributor: false + - username: retronym + gravatar: https://avatars1.githubusercontent.com/u/65551?v=3&s=60 + commits: 13 + linesAdded: 557 + linesDeleted: 64 + rank: 2 + newContributor: false + - category: EPFL + authors: + - username: lrytz + gravatar: https://avatars2.githubusercontent.com/u/119636?v=3&s=60 + commits: 10 + linesAdded: 1629 + linesDeleted: 276 + rank: 1 + newContributor: false + - username: xeno-by + gravatar: https://avatars0.githubusercontent.com/u/609152?v=3&s=60 + commits: 2 + linesAdded: 108 + linesDeleted: 15 + rank: 2 + newContributor: false + - username: axel22 + gravatar: https://avatars0.githubusercontent.com/u/151774?v=3&s=60 + commits: 1 + linesAdded: 61 + linesDeleted: 0 + rank: 3 + newContributor: false + - category: Community + authors: + - username: Ichoran + gravatar: https://avatars2.githubusercontent.com/u/2298644?v=3&s=60 + commits: 3 + linesAdded: 62 + linesDeleted: 25 + rank: 1 + newContributor: false + - username: som-snytt + gravatar: https://avatars3.githubusercontent.com/u/369425?v=3&s=60 + commits: 2 + linesAdded: 121 + linesDeleted: 30 + rank: 2 + newContributor: false + - username: milessabin + gravatar: https://avatars1.githubusercontent.com/u/131183?v=3&s=60 + commits: 1 + linesAdded: 123 + linesDeleted: 37 + rank: 3 + newContributor: false +--- diff --git a/contribute/scala-fame-data/_posts/2015-04-01-scala-fame-2015-03.md b/contribute/scala-fame-data/_posts/2015-04-01-scala-fame-2015-03.md new file mode 100644 index 0000000000..62e7ea2f58 --- /dev/null +++ b/contribute/scala-fame-data/_posts/2015-04-01-scala-fame-2015-03.md @@ -0,0 +1,91 @@ +--- +layout: famearchive +title: Contributors of March 2015 +fame-year: 2015 +fame-month: 3 +fame-month-str: March +fame-categories: + - category: Typesafe + authors: + - username: retronym + gravatar: https://avatars1.githubusercontent.com/u/65551?v=3&s=60 + commits: 9 + linesAdded: 553 + linesDeleted: 27 + rank: 1 + newContributor: false + - username: adriaanm + gravatar: https://avatars3.githubusercontent.com/u/91083?v=3&s=60 + commits: 6 + linesAdded: 12 + linesDeleted: 72 + rank: 2 + newContributor: false + - category: EPFL + authors: + - username: lrytz + gravatar: https://avatars2.githubusercontent.com/u/119636?v=3&s=60 + commits: 18 + linesAdded: 2857 + linesDeleted: 916 + rank: 1 + newContributor: false + - username: xeno-by + gravatar: https://avatars0.githubusercontent.com/u/609152?v=3&s=60 + commits: 1 + linesAdded: 7 + linesDeleted: 5 + rank: 2 + newContributor: false + - category: Community + authors: + - username: gourlaysama + gravatar: https://avatars3.githubusercontent.com/u/733438?v=3&s=60 + commits: 4 + linesAdded: 132 + linesDeleted: 22 + rank: 1 + newContributor: false + - username: gbasler + gravatar: https://avatars0.githubusercontent.com/u/273035?v=3&s=60 + commits: 3 + linesAdded: 1986 + linesDeleted: 111 + rank: 2 + newContributor: false + - username: kzys + gravatar: https://avatars3.githubusercontent.com/u/19111?v=3&s=60 + commits: 2 + linesAdded: 37 + linesDeleted: 18 + rank: 3 + newContributor: false + - username: som-snytt + gravatar: https://avatars3.githubusercontent.com/u/369425?v=3&s=60 + commits: 2 + linesAdded: 91 + linesDeleted: 7 + rank: 3 + newContributor: false + - username: sschaef + gravatar: https://avatars3.githubusercontent.com/u/488530?v=3&s=60 + commits: 1 + linesAdded: 1 + linesDeleted: 1 + rank: 4 + newContributor: false + - username: khernyo + gravatar: https://avatars2.githubusercontent.com/u/447532?v=3&s=60 + commits: 1 + linesAdded: 27 + linesDeleted: 8 + rank: 4 + newContributor: false + - username: soc + gravatar: https://avatars1.githubusercontent.com/u/42493?v=3&s=60 + commits: 1 + linesAdded: 7 + linesDeleted: 7 + rank: 4 + newContributor: false +--- From 4bada26848285509763810ee5f2895123ced406c Mon Sep 17 00:00:00 2001 From: Dick Wall Date: Mon, 20 Apr 2015 16:41:40 -0700 Subject: [PATCH 0077/1870] Fix transposition of github.scala.com. --- contribute/codereviews.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/contribute/codereviews.md b/contribute/codereviews.md index 949cb11300..8f86815eec 100644 --- a/contribute/codereviews.md +++ b/contribute/codereviews.md @@ -32,7 +32,7 @@ own pull requests.

Scala bug fixes and changes in the language, core libs and included tools.

-

scala/github.scala.com

+

scala/scala.github.com

Scala documentation site.

From 57b4392ae555e8d21edbd82e566813d30d38a6d2 Mon Sep 17 00:00:00 2001 From: Seth Tisue Date: Mon, 13 Jul 2015 18:45:33 -0400 Subject: [PATCH 0078/1870] phase out old GitHub wiki pages https://github.com/scala/scala/wiki is going away --- contribute/hacker-guide.md | 2 +- contribute/scala-standard-library-api-documentation.md | 3 +-- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/contribute/hacker-guide.md b/contribute/hacker-guide.md index ecdbd2fc27..3f84feee81 100644 --- a/contribute/hacker-guide.md +++ b/contribute/hacker-guide.md @@ -378,7 +378,7 @@ Let's go into each of these points in more detail. The [Git Basics](http://git-scm.com/book/en/Git-Basics) chapter in the Git online book covers most of the basic workflow during this stage. There are two things you should know here: -1. Commit messages are often the only way to understand the intentions of authors of code written a few years ago. Thus, writing a quality is of utmost importance. The more context you provide for the change you've introduced, the larger the chance that some future maintainer understand your intentions. Consult [the pull request policy](https://github.com/scala/scala/wiki/Pull-Request-Policy) for more information about the desired style of your commits. +1. Commit messages are often the only way to understand the intentions of authors of code written a few years ago. Thus, writing a quality is of utmost importance. The more context you provide for the change you've introduced, the larger the chance that some future maintainer understand your intentions. Consult [the pull request policies](https://github.com/scala/scala/blob/2.11.x/CONTRIBUTING.md) for more information about the desired style of your commits. 2. Keeping Scala's git history clean is also important. Therefore we won't accept pull requests for bug fixes that have more than one commit. For features, it is okay to have several commits, but all tests need to pass after every single commit. To clean up your commit structure, you want to [rewrite history](http://git-scm.com/book/en/Git-Branching-Rebasing) using `git rebase` so that your commits are against the latest revision of `master`. Once you are satisfied with your work, synced with `master` and cleaned up your commits you are ready to submit a patch to the central Scala repository. Before proceeding make sure you have pushed all of your local changes to your fork on GitHub. diff --git a/contribute/scala-standard-library-api-documentation.md b/contribute/scala-standard-library-api-documentation.md index 14eb55845c..bc57a163df 100644 --- a/contribute/scala-standard-library-api-documentation.md +++ b/contribute/scala-standard-library-api-documentation.md @@ -87,8 +87,7 @@ new API documentation to save time, effort, mistakes and repetition. and so on. * Prior to commit, be sure to read [A note about git commit messages](http://tbaggery.com/2008/04/19/a-note-about-git-commit-messages.html) and the [Scala Project & Developer Guidelines](https://github.com/scala/scala/blob/2.11.x/CONTRIBUTING.md). -* Also read the Scala [Pull Request Policy](https://github.com/scala/scala/wiki/Pull-Request-Policy). - Some of this document will clearly not apply (like the sections on providing tests, + Some of this latter document will clearly not apply (like the sections on providing tests, however see below for some special requirements for documentation). Do still read the whole document though, and pay close attention to the title and commit message formats, noting *present tense*, *length limits* and that it must merge From 6a53d0605cb30cff874843aac7ce9a82855c783a Mon Sep 17 00:00:00 2001 From: Seth Tisue Date: Sat, 18 Jul 2015 14:03:43 -0400 Subject: [PATCH 0079/1870] hacker's guide: replace out-of-date reviewer list with link --- contribute/hacker-guide.md | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/contribute/hacker-guide.md b/contribute/hacker-guide.md index 3f84feee81..e8aa8f0db4 100644 --- a/contribute/hacker-guide.md +++ b/contribute/hacker-guide.md @@ -30,11 +30,9 @@ Typically bug fixes and new features start out as an idea or an experiment poste about things you want to implement. People proficient in certain areas of Scala usually monitor mailing lists, so you'll often get some help by simply posting a message. But the most efficient way to connect is to cc your message to one of the people responsible for maintaining the aspect of Scala which you wish to contribute to. -This is the list of language features/libraries along with their maintainer's full names and GitHub usernames: +A list of language features/libraries along with their maintainer's full names and GitHub usernames is [in the Scala repo README](https://github.com/scala/scala#get-in-touch). -{% include maintainers.html %} - -Since Martin is the person who submitted the string interpolation Scala Improvement Proposal and implemented this language feature for Scala 2.10.0, he might be interested in learning of new bugfixes to that feature. +In our running example, since Martin is the person who submitted the string interpolation Scala Improvement Proposal and implemented this language feature for Scala 2.10.0, he might be interested in learning of new bugfixes to that feature. As alluded to earlier, one must also choose an appropriate mailing list. Typically, one would use the scala-internals mailing list, as it is devoted to discussions about the core internal design and implementation of the Scala system. However, since this issue has been discussed previously on the scala-user mailing list, in this example, we post to the [the scala-user mailing list](http://groups.google.com/group/scala-user) about our issue. From 23f62743fffe21945f8c6cb454b2925b59fc960c Mon Sep 17 00:00:00 2001 From: Jason Zaugg Date: Wed, 30 Sep 2015 13:18:35 +1000 Subject: [PATCH 0080/1870] SI-9495 Add note about configuring Ant for HTTP proxies --- contribute/hacker-guide.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/contribute/hacker-guide.md b/contribute/hacker-guide.md index e8aa8f0db4..3a01b6a676 100644 --- a/contribute/hacker-guide.md +++ b/contribute/hacker-guide.md @@ -99,7 +99,7 @@ If you are new to Git and branching, read the [Branching Chapter](http://git-scm The next step after cloning your fork is setting up your machine to build Scala. * It is recommended to use Java `1.6` (not `1.7` or `1.8`, because they might cause occasional glitches). -* The build tool is `ant`. +* The build tool is `ant`. If you are behind a HTTP proxy, include [`ANT_ARGS=-autoproxy`]( https://ant.apache.org/manual/proxy.html) in your environment. * The build runs the `pull-binary-libs.sh` script to download bootstrap libs. This requires `bash` and `curl`. * The majority of our team works on Linux and OS X, so these operating systems are guaranteed to work. * Windows is supported, but it might have issues. Please report to [the issue tracker](https://issues.scala-lang.org/) if you encounter any. From 4d8f053757a0feee1ac3d1b8e7bcb0f174b30203 Mon Sep 17 00:00:00 2001 From: Seth Tisue Date: Wed, 30 Sep 2015 08:53:16 -0400 Subject: [PATCH 0081/1870] fix slightly malformed Markdown --- contribute/hacker-guide.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/contribute/hacker-guide.md b/contribute/hacker-guide.md index 3a01b6a676..54e62c1a0e 100644 --- a/contribute/hacker-guide.md +++ b/contribute/hacker-guide.md @@ -99,7 +99,7 @@ If you are new to Git and branching, read the [Branching Chapter](http://git-scm The next step after cloning your fork is setting up your machine to build Scala. * It is recommended to use Java `1.6` (not `1.7` or `1.8`, because they might cause occasional glitches). -* The build tool is `ant`. If you are behind a HTTP proxy, include [`ANT_ARGS=-autoproxy`]( https://ant.apache.org/manual/proxy.html) in your environment. +* The build tool is `ant`. If you are behind a HTTP proxy, include [`ANT_ARGS=-autoproxy`](https://ant.apache.org/manual/proxy.html) in your environment. * The build runs the `pull-binary-libs.sh` script to download bootstrap libs. This requires `bash` and `curl`. * The majority of our team works on Linux and OS X, so these operating systems are guaranteed to work. * Windows is supported, but it might have issues. Please report to [the issue tracker](https://issues.scala-lang.org/) if you encounter any. From 50b14af581b26cce03f972a2d00a384d2f81ab08 Mon Sep 17 00:00:00 2001 From: Seth Tisue Date: Tue, 6 Oct 2015 18:35:13 -0400 Subject: [PATCH 0082/1870] SI-9501 add prominent links to relevant docs in main Scala repo the text of the guide already links to the same documents at appropriate places in the narrative, but I also think it's worth having the same links right up front --- contribute/hacker-guide.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/contribute/hacker-guide.md b/contribute/hacker-guide.md index 54e62c1a0e..fb79d8166d 100644 --- a/contribute/hacker-guide.md +++ b/contribute/hacker-guide.md @@ -8,6 +8,8 @@ This guide is intended to help you get from an idea of fixing a bug or implement This guide covers the entire process, from the conception of your idea or bugfix to the point where it is merged into Scala. Throughout, we will use a running example of an idea or bugfix one might wish to contribute. +Other good starting points for first-time contributors include the [Scala README](https://github.com/scala/scala#get-in-touch) and [contributor's guidelines](https://github.com/scala/scala/blob/2.11.x/CONTRIBUTING.md). + ## The Running Example Let's say that you particularly enjoy the new string interpolation language feature introduced in Scala 2.10.0, and you use it quite heavily. From 0feb67ace760707b19b2c91a5f3afea1a9045ea7 Mon Sep 17 00:00:00 2001 From: Seth Tisue Date: Fri, 6 Nov 2015 15:30:38 -0500 Subject: [PATCH 0083/1870] fix typo --- contribute/scala-fame.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/contribute/scala-fame.md b/contribute/scala-fame.md index 81bb76ee3a..f30784c13f 100644 --- a/contribute/scala-fame.md +++ b/contribute/scala-fame.md @@ -1,6 +1,6 @@ --- layout: page-full-width -title: Scala Contribuitor Hall of Fame +title: Scala Contributor Hall of Fame --- A big thank you to everyone who contributed to: From c80d07050db560e6aafadc659f9ca4d0b42ef3d2 Mon Sep 17 00:00:00 2001 From: Seth Tisue Date: Fri, 6 Nov 2015 16:01:22 -0500 Subject: [PATCH 0084/1870] October 2015 hall of fame --- .../_posts/2015-11-01-scala-fame-2015-10.md | 42 +++++++++++++++++++ 1 file changed, 42 insertions(+) create mode 100644 contribute/scala-fame-data/_posts/2015-11-01-scala-fame-2015-10.md diff --git a/contribute/scala-fame-data/_posts/2015-11-01-scala-fame-2015-10.md b/contribute/scala-fame-data/_posts/2015-11-01-scala-fame-2015-10.md new file mode 100644 index 0000000000..41698296db --- /dev/null +++ b/contribute/scala-fame-data/_posts/2015-11-01-scala-fame-2015-10.md @@ -0,0 +1,42 @@ +--- +layout: famearchive +title: Contributors of October 2015 +fame-year: 2015 +fame-month: 10 +fame-month-str: October +fame-categories: + - category: Typesafe + authors: + - username: SethTisue + gravatar: https://avatars.githubusercontent.com/u/161079?v=3 + commits: 9 + linesAdded: 80 + linesDeleted: 55 + rank: 1 + newContributor: false + - category: EPFL + authors: + - username: sjrd + gravatar: https://avatars.githubusercontent.com/u/535934?v=3 + commits: 1 + linesAdded: 1 + linesDeleted: 4 + rank: 1 + newContributor: false + - category: Community + authors: + - username: performantdata + gravatar: https://avatars.githubusercontent.com/u/6363453?v=3 + commits: 6 + linesAdded: 97 + linesDeleted: 50 + rank: 1 + newContributor: true + - username: janekdb + gravatar: https://avatars.githubusercontent.com/u/1123855?v=3 + commits: 1 + linesAdded: 86 + linesDeleted: 71 + rank: 2 + newContributor: false +--- From 761af814fe12baff772dcf47cb03c7943105d65d Mon Sep 17 00:00:00 2001 From: Seth Tisue Date: Fri, 6 Nov 2015 16:14:14 -0500 Subject: [PATCH 0085/1870] tweak Hall of Fame page * clarify what the stats show * link to the GitHub Pulse page, which is actually a lot better --- contribute/scala-fame.md | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/contribute/scala-fame.md b/contribute/scala-fame.md index f30784c13f..ffaf0980d7 100644 --- a/contribute/scala-fame.md +++ b/contribute/scala-fame.md @@ -3,10 +3,17 @@ layout: page-full-width title: Scala Contributor Hall of Fame --- -A big thank you to everyone who contributed to: +A big thank you to everyone who has contributed over the years to: - [the Scala library and compiler](https://github.com/scala/scala/contributors) - [the Scala documentation website](https://github.com/scala/scala.github.com/contributors) +What follows are the commit totals, to the 2.11.x branch of the scala/scala repo only, +for last month. (For a commit to be counted, it must have been both committed and merged +in the same month.) + +For more a detailed view of recent activity, see the repo's +[GitHub Pulse page](https://github.com/scala/scala/pulse/monthly). + {% for data in site.categories.scala-fame-data limit:1 %} {% assign famedata = data %} {% include render-scala-fame.html %} From 7a039ae25b191ce5733491062cf2f37d27192a9f Mon Sep 17 00:00:00 2001 From: Seth Tisue Date: Tue, 10 Nov 2015 15:16:42 -0500 Subject: [PATCH 0086/1870] tiny fix --- contribute/scala-fame.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/contribute/scala-fame.md b/contribute/scala-fame.md index ffaf0980d7..0352e6e7c7 100644 --- a/contribute/scala-fame.md +++ b/contribute/scala-fame.md @@ -11,7 +11,7 @@ What follows are the commit totals, to the 2.11.x branch of the scala/scala repo for last month. (For a commit to be counted, it must have been both committed and merged in the same month.) -For more a detailed view of recent activity, see the repo's +For a more detailed view of recent activity, see the repo's [GitHub Pulse page](https://github.com/scala/scala/pulse/monthly). {% for data in site.categories.scala-fame-data limit:1 %} From 749a690e43b43d9ff0aac267647eab842cd55045 Mon Sep 17 00:00:00 2001 From: Seth Tisue Date: Fri, 4 Dec 2015 12:46:47 -0500 Subject: [PATCH 0087/1870] hall of fame: 2.12.x is default branch now --- contribute/scala-fame.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/contribute/scala-fame.md b/contribute/scala-fame.md index 0352e6e7c7..2be9e7d69d 100644 --- a/contribute/scala-fame.md +++ b/contribute/scala-fame.md @@ -7,7 +7,7 @@ A big thank you to everyone who has contributed over the years to: - [the Scala library and compiler](https://github.com/scala/scala/contributors) - [the Scala documentation website](https://github.com/scala/scala.github.com/contributors) -What follows are the commit totals, to the 2.11.x branch of the scala/scala repo only, +What follows are the commit totals, to the 2.12.x branch of the scala/scala repo only, for last month. (For a commit to be counted, it must have been both committed and merged in the same month.) From f0fb46ca9be30fc365b875d5ab2c9f171a55041b Mon Sep 17 00:00:00 2001 From: Seth Tisue Date: Fri, 4 Dec 2015 12:46:53 -0500 Subject: [PATCH 0088/1870] November 2015 contributors hall of fame --- .../_posts/2015-12-01-scala-fame-2015-11.md | 63 +++++++++++++++++++ 1 file changed, 63 insertions(+) create mode 100644 contribute/scala-fame-data/_posts/2015-12-01-scala-fame-2015-11.md diff --git a/contribute/scala-fame-data/_posts/2015-12-01-scala-fame-2015-11.md b/contribute/scala-fame-data/_posts/2015-12-01-scala-fame-2015-11.md new file mode 100644 index 0000000000..8f9b7ff3b1 --- /dev/null +++ b/contribute/scala-fame-data/_posts/2015-12-01-scala-fame-2015-11.md @@ -0,0 +1,63 @@ +--- +layout: famearchive +title: Contributors of November 2015 +fame-year: 2015 +fame-month: 11 +fame-month-str: November +fame-categories: + - category: Typesafe + authors: + - username: szeiger + gravatar: https://avatars.githubusercontent.com/u/54262?v=3 + commits: 5 + linesAdded: 427 + linesDeleted: 116 + rank: 1 + newContributor: false + - username: SethTisue + gravatar: https://avatars.githubusercontent.com/u/161079?v=3 + commits: 3 + linesAdded: 21 + linesDeleted: 21 + rank: 2 + newContributor: false + - username: retronym + gravatar: https://avatars.githubusercontent.com/u/65551?v=3 + commits: 3 + linesAdded: 44 + linesDeleted: 28 + rank: 2 + newContributor: false + - username: adriaanm + gravatar: https://avatars.githubusercontent.com/u/91083?v=3 + commits: 2 + linesAdded: 22 + linesDeleted: 25 + rank: 3 + newContributor: false + - username: lrytz + gravatar: https://avatars.githubusercontent.com/u/119636?v=3 + commits: 1 + linesAdded: 7 + linesDeleted: 18 + rank: 4 + newContributor: false + - category: EPFL + authors: + - category: Community + authors: + - username: janekdb + gravatar: https://avatars.githubusercontent.com/u/1123855?v=3 + commits: 6 + linesAdded: 76 + linesDeleted: 63 + rank: 1 + newContributor: false + - username: soc + gravatar: https://avatars.githubusercontent.com/u/42493?v=3 + commits: 2 + linesAdded: 14 + linesDeleted: 19 + rank: 2 + newContributor: false +--- From f928c829f2e0dad88a7f0cfaabfd2d4ce87d8da5 Mon Sep 17 00:00:00 2001 From: Seth Tisue Date: Thu, 17 Dec 2015 15:35:33 -0500 Subject: [PATCH 0089/1870] fix bad Markdown our Markdown processor needs a blank line before the start of a bullet list --- contribute/scala-fame.md | 1 + 1 file changed, 1 insertion(+) diff --git a/contribute/scala-fame.md b/contribute/scala-fame.md index 2be9e7d69d..4b6591004a 100644 --- a/contribute/scala-fame.md +++ b/contribute/scala-fame.md @@ -4,6 +4,7 @@ title: Scala Contributor Hall of Fame --- A big thank you to everyone who has contributed over the years to: + - [the Scala library and compiler](https://github.com/scala/scala/contributors) - [the Scala documentation website](https://github.com/scala/scala.github.com/contributors) From 719edc3d277d67b41aef833f4edf568b47ae90d8 Mon Sep 17 00:00:00 2001 From: Seth Tisue Date: Thu, 17 Dec 2015 18:43:23 -0500 Subject: [PATCH 0090/1870] add text about community libraries, Scala community build --- contribute/index.md | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/contribute/index.md b/contribute/index.md index fd94af5de2..c03405e489 100644 --- a/contribute/index.md +++ b/contribute/index.md @@ -101,3 +101,31 @@ various contributor activities: + +### Tools and Libraries + +The Scala ecosystem includes a great many diverse open-source projects +with their own maintainers and community of contributors. Helping out +one of these projects is another way to help Scala. Consider lending +on a hand on a project you're already using. Or, to find out about +other projects, see the +[Libraries and Tools section](../community/index.html#community-libraries-and-tools) +on our Community page. + +### Scala Community Build + +The Scala community build enables us to build and test a corpus of +Scala open source projects together, using Typesafe's +[dbuild](https://github.com/typesafehub/dbuild) tool +(which leverages [sbt](http://www.scala-sbt.org)). + +The main goal is to guard against regressions in new versions of Scala +(language, standard library, and modules). It's also a service to the +open source community, providing early notice of issues and +incompatibilities. + +If you're the maintainer -- or just an interested user! -- of an +open-source Scala library or tool, please visit the +[community build documentation](https://github.com/scala/community-builds/wiki) +for guidelines on what projects are suitable for the community build +and how projects can be added. From eeee725f7c666a969e823f128dd6893a34a3d0d8 Mon Sep 17 00:00:00 2001 From: Seth Tisue Date: Thu, 17 Dec 2015 18:56:12 -0500 Subject: [PATCH 0091/1870] Code of Conduct page, relocated from docs site with updated links, and addition of link to site footer --- contribute/codereviews.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/contribute/codereviews.md b/contribute/codereviews.md index 8f86815eec..1b9a881b0c 100644 --- a/contribute/codereviews.md +++ b/contribute/codereviews.md @@ -13,7 +13,7 @@ own pull requests. ### Review Guidelines -[Code of Conduct Reminder](http://docs.scala-lang.org/conduct.html) +[Code of Conduct reminder](../conduct.html) * Keep comments on-topic, concise and precise. * Attach comments to particular lines or regions they pertain to whenever possible. From cc3d461d8fe51112d5d5b6b721f078025469a795 Mon Sep 17 00:00:00 2001 From: Seth Tisue Date: Fri, 18 Dec 2015 07:48:57 -0500 Subject: [PATCH 0092/1870] tweak wording of community build section based on Heather's feedback --- contribute/index.md | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) diff --git a/contribute/index.md b/contribute/index.md index c03405e489..137838aba4 100644 --- a/contribute/index.md +++ b/contribute/index.md @@ -114,15 +114,14 @@ on our Community page. ### Scala Community Build -The Scala community build enables us to build and test a corpus of -Scala open source projects together, using Typesafe's -[dbuild](https://github.com/typesafehub/dbuild) tool -(which leverages [sbt](http://www.scala-sbt.org)). - -The main goal is to guard against regressions in new versions of Scala -(language, standard library, and modules). It's also a service to the -open source community, providing early notice of issues and -incompatibilities. +The Scala community build enables the Scala compiler team +to build and test a corpus of +Scala open source projects +against development versions of the Scala compiler and standard +library in order to discover regressions prior to releases. +The build uses Typesafe's +[dbuild](https://github.com/typesafehub/dbuild) tool, +which leverages [sbt](http://www.scala-sbt.org). If you're the maintainer -- or just an interested user! -- of an open-source Scala library or tool, please visit the From 856fc9cb2f903ad3353ed49e15d15e70de01e07f Mon Sep 17 00:00:00 2001 From: Seth Tisue Date: Mon, 4 Jan 2016 17:27:39 -0500 Subject: [PATCH 0093/1870] retire the Scala Contributor Hall of Fame https://api.github.com/repos/scala/scala/stats/contributors wasn't giving us good information to base this on, because it only gives you the top 100 contributors by number of all-time commits so e.g. Felix Mulder's great Scaladoc contribution for December wasn't even showing up in the data, since it was just one commit. one of the main purposes of this page was supposed to be recognizing new contributors, but the 100-contributor limit prevents that. the result was embarrassingly empty pages (which we usually forgot to even update anyway) if people are interested in all-time stats, they can visit https://github.com/scala/scala/graphs/contributors , and if people want to see recent activity, they can visit https://github.com/scala/scala/pulse --- contribute/guide.md | 2 +- .../_posts/2013-02-01-scala-fame-2013-01.md | 175 ---------------- .../_posts/2013-03-01-scala-fame-2013-02.md | 189 ------------------ .../_posts/2013-04-01-scala-fame-2013-03.md | 147 -------------- .../_posts/2013-05-01-scala-fame-2013-04.md | 126 ------------ .../_posts/2013-06-01-scala-fame-2013-05.md | 105 ---------- .../_posts/2013-07-01-scala-fame-2013-06.md | 126 ------------ .../_posts/2013-08-01-scala-fame-2013-07.md | 119 ----------- .../_posts/2013-09-01-scala-fame-2013-08.md | 98 --------- .../_posts/2013-10-01-scala-fame-2013-09.md | 105 ---------- .../_posts/2013-11-01-scala-fame-2013-10.md | 105 ---------- .../_posts/2013-12-01-scala-fame-2013-11.md | 126 ------------ .../_posts/2014-01-01-scala-fame-2013-12.md | 147 -------------- .../_posts/2014-02-01-scala-fame-2014-01.md | 147 -------------- .../_posts/2014-03-01-scala-fame-2014-02.md | 133 ------------ .../_posts/2014-04-01-scala-fame-2014-03.md | 112 ----------- .../_posts/2014-05-01-scala-fame-2014-04.md | 91 --------- .../_posts/2014-06-01-scala-fame-2014-05.md | 112 ----------- .../_posts/2014-07-01-scala-fame-2014-06.md | 98 --------- .../_posts/2014-08-01-scala-fame-2014-07.md | 98 --------- .../_posts/2014-09-01-scala-fame-2014-08.md | 70 ------- .../_posts/2014-10-01-scala-fame-2014-09.md | 84 -------- .../_posts/2014-11-01-scala-fame-2014-10.md | 63 ------ .../_posts/2014-12-01-scala-fame-2014-11.md | 112 ----------- .../_posts/2015-01-01-scala-fame-2014-12.md | 70 ------- .../_posts/2015-02-01-scala-fame-2015-01.md | 56 ------ .../_posts/2015-03-01-scala-fame-2015-02.md | 70 ------- .../_posts/2015-04-01-scala-fame-2015-03.md | 91 --------- .../_posts/2015-11-01-scala-fame-2015-10.md | 42 ---- .../_posts/2015-12-01-scala-fame-2015-11.md | 63 ------ contribute/scala-fame.md | 21 -- 31 files changed, 1 insertion(+), 3102 deletions(-) delete mode 100644 contribute/scala-fame-data/_posts/2013-02-01-scala-fame-2013-01.md delete mode 100644 contribute/scala-fame-data/_posts/2013-03-01-scala-fame-2013-02.md delete mode 100644 contribute/scala-fame-data/_posts/2013-04-01-scala-fame-2013-03.md delete mode 100644 contribute/scala-fame-data/_posts/2013-05-01-scala-fame-2013-04.md delete mode 100644 contribute/scala-fame-data/_posts/2013-06-01-scala-fame-2013-05.md delete mode 100644 contribute/scala-fame-data/_posts/2013-07-01-scala-fame-2013-06.md delete mode 100644 contribute/scala-fame-data/_posts/2013-08-01-scala-fame-2013-07.md delete mode 100644 contribute/scala-fame-data/_posts/2013-09-01-scala-fame-2013-08.md delete mode 100644 contribute/scala-fame-data/_posts/2013-10-01-scala-fame-2013-09.md delete mode 100644 contribute/scala-fame-data/_posts/2013-11-01-scala-fame-2013-10.md delete mode 100644 contribute/scala-fame-data/_posts/2013-12-01-scala-fame-2013-11.md delete mode 100644 contribute/scala-fame-data/_posts/2014-01-01-scala-fame-2013-12.md delete mode 100644 contribute/scala-fame-data/_posts/2014-02-01-scala-fame-2014-01.md delete mode 100644 contribute/scala-fame-data/_posts/2014-03-01-scala-fame-2014-02.md delete mode 100644 contribute/scala-fame-data/_posts/2014-04-01-scala-fame-2014-03.md delete mode 100644 contribute/scala-fame-data/_posts/2014-05-01-scala-fame-2014-04.md delete mode 100644 contribute/scala-fame-data/_posts/2014-06-01-scala-fame-2014-05.md delete mode 100644 contribute/scala-fame-data/_posts/2014-07-01-scala-fame-2014-06.md delete mode 100644 contribute/scala-fame-data/_posts/2014-08-01-scala-fame-2014-07.md delete mode 100644 contribute/scala-fame-data/_posts/2014-09-01-scala-fame-2014-08.md delete mode 100644 contribute/scala-fame-data/_posts/2014-10-01-scala-fame-2014-09.md delete mode 100644 contribute/scala-fame-data/_posts/2014-11-01-scala-fame-2014-10.md delete mode 100644 contribute/scala-fame-data/_posts/2014-12-01-scala-fame-2014-11.md delete mode 100644 contribute/scala-fame-data/_posts/2015-01-01-scala-fame-2014-12.md delete mode 100644 contribute/scala-fame-data/_posts/2015-02-01-scala-fame-2015-01.md delete mode 100644 contribute/scala-fame-data/_posts/2015-03-01-scala-fame-2015-02.md delete mode 100644 contribute/scala-fame-data/_posts/2015-04-01-scala-fame-2015-03.md delete mode 100644 contribute/scala-fame-data/_posts/2015-11-01-scala-fame-2015-10.md delete mode 100644 contribute/scala-fame-data/_posts/2015-12-01-scala-fame-2015-11.md delete mode 100644 contribute/scala-fame.md diff --git a/contribute/guide.md b/contribute/guide.md index 04fe50ae5b..148ceb7570 100644 --- a/contribute/guide.md +++ b/contribute/guide.md @@ -35,7 +35,7 @@ Just to name a few common reasons: * contributing a patch is the best way to make sure your desired changes will be available in the next Scala version * Scala is written in Scala, so going through the source code and patching it will improve your Scala-fu -* last but not least, you will make it into the [Scala Contributor Hall of Fame](scala-fame.html). +* last but not least, it only takes a few accepted commits to make it into the [Scala Contributor Hall of Fame](https://github.com/scala/scala/contributors). The main Scala project consists of the standard Scala library, the Scala reflection and macros library, the Scala compiler and the Scaladoc tool. This means there's plenty to choose from when deciding what to work on. diff --git a/contribute/scala-fame-data/_posts/2013-02-01-scala-fame-2013-01.md b/contribute/scala-fame-data/_posts/2013-02-01-scala-fame-2013-01.md deleted file mode 100644 index 68e990a7b7..0000000000 --- a/contribute/scala-fame-data/_posts/2013-02-01-scala-fame-2013-01.md +++ /dev/null @@ -1,175 +0,0 @@ ---- -layout: famearchive -title: Contributors of January 2013 -fame-year: 2013 -fame-month: 1 -fame-month-str: January -fame-categories: - - category: Typesafe - authors: - - username: retronym - gravatar: https://avatars0.githubusercontent.com/u/65551?v=2&s=60 - commits: 67 - linesAdded: 7112 - linesDeleted: 3063 - rank: 1 - newContributor: false - - username: paulp - gravatar: https://avatars2.githubusercontent.com/u/9135?v=2&s=60 - commits: 37 - linesAdded: 1812 - linesDeleted: 1158 - rank: 2 - newContributor: false - - username: adriaanm - gravatar: https://avatars2.githubusercontent.com/u/91083?v=2&s=60 - commits: 22 - linesAdded: 1397 - linesDeleted: 561 - rank: 3 - newContributor: false - - username: JamesIry - gravatar: https://avatars0.githubusercontent.com/u/478012?v=2&s=60 - commits: 20 - linesAdded: 1156 - linesDeleted: 208 - rank: 4 - newContributor: false - - username: gkossakowski - gravatar: https://avatars0.githubusercontent.com/u/4217?v=2&s=60 - commits: 5 - linesAdded: 422 - linesDeleted: 9 - rank: 5 - newContributor: false - - username: viktorklang - gravatar: https://avatars0.githubusercontent.com/u/10871?v=2&s=60 - commits: 2 - linesAdded: 187 - linesDeleted: 12 - rank: 6 - newContributor: false - - username: phaller - gravatar: https://avatars0.githubusercontent.com/u/289943?v=2&s=60 - commits: 2 - linesAdded: 21 - linesDeleted: 42 - rank: 6 - newContributor: false - - username: dragos - gravatar: https://avatars2.githubusercontent.com/u/133742?v=2&s=60 - commits: 1 - linesAdded: 6 - linesDeleted: 26 - rank: 7 - newContributor: false - - category: EPFL - authors: - - username: xeno-by - gravatar: https://avatars1.githubusercontent.com/u/609152?v=2&s=60 - commits: 28 - linesAdded: 8416 - linesDeleted: 2758 - rank: 1 - newContributor: false - - username: lrytz - gravatar: https://avatars3.githubusercontent.com/u/119636?v=2&s=60 - commits: 8 - linesAdded: 1189 - linesDeleted: 418 - rank: 2 - newContributor: false - - username: heathermiller - gravatar: https://avatars0.githubusercontent.com/u/687163?v=2&s=60 - commits: 2 - linesAdded: 100 - linesDeleted: 15 - rank: 3 - newContributor: false - - username: namin - gravatar: https://avatars2.githubusercontent.com/u/6441?v=2&s=60 - commits: 1 - linesAdded: 23 - linesDeleted: 4 - rank: 4 - newContributor: false - - username: vjovanov - gravatar: https://avatars3.githubusercontent.com/u/352820?v=2&s=60 - commits: 1 - linesAdded: 38 - linesDeleted: 2 - rank: 4 - newContributor: false - - category: Community - authors: - - username: soc - gravatar: https://avatars0.githubusercontent.com/u/42493?v=2&s=60 - commits: 13 - linesAdded: 886 - linesDeleted: 3152 - rank: 1 - newContributor: false - - username: kzys - gravatar: https://avatars2.githubusercontent.com/u/19111?v=2&s=60 - commits: 7 - linesAdded: 79 - linesDeleted: 40 - rank: 2 - newContributor: false - - username: danielhopkins - gravatar: https://avatars3.githubusercontent.com/u/91909?v=2&s=60 - commits: 2 - linesAdded: 146 - linesDeleted: 146 - rank: 3 - newContributor: true - - username: ViniciusMiana - gravatar: https://avatars1.githubusercontent.com/u/2053546?v=2&s=60 - commits: 2 - linesAdded: 47 - linesDeleted: 8 - rank: 3 - newContributor: false - - username: Blaisorblade - gravatar: https://avatars2.githubusercontent.com/u/289960?v=2&s=60 - commits: 2 - linesAdded: 53 - linesDeleted: 6 - rank: 3 - newContributor: false - - username: som-snytt - gravatar: https://avatars2.githubusercontent.com/u/369425?v=2&s=60 - commits: 2 - linesAdded: 236 - linesDeleted: 183 - rank: 3 - newContributor: false - - username: eed3si9n - gravatar: https://avatars1.githubusercontent.com/u/184683?v=2&s=60 - commits: 1 - linesAdded: 35 - linesDeleted: 2 - rank: 4 - newContributor: false - - username: mt2309 - gravatar: https://avatars2.githubusercontent.com/u/816245?v=2&s=60 - commits: 1 - linesAdded: 24 - linesDeleted: 0 - rank: 4 - newContributor: false - - username: puffnfresh - gravatar: https://avatars1.githubusercontent.com/u/37715?v=2&s=60 - commits: 1 - linesAdded: 39 - linesDeleted: 3 - rank: 4 - newContributor: false - - username: khernyo - gravatar: https://avatars3.githubusercontent.com/u/447532?v=2&s=60 - commits: 1 - linesAdded: 2 - linesDeleted: 3 - rank: 4 - newContributor: false ---- diff --git a/contribute/scala-fame-data/_posts/2013-03-01-scala-fame-2013-02.md b/contribute/scala-fame-data/_posts/2013-03-01-scala-fame-2013-02.md deleted file mode 100644 index 376563abce..0000000000 --- a/contribute/scala-fame-data/_posts/2013-03-01-scala-fame-2013-02.md +++ /dev/null @@ -1,189 +0,0 @@ ---- -layout: famearchive -title: Contributors of February 2013 -fame-year: 2013 -fame-month: 2 -fame-month-str: February -fame-categories: - - category: Typesafe - authors: - - username: retronym - gravatar: https://secure.gravatar.com/avatar/5df8faf17a57ccab478a9b8056862fc3?s=60&d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-user-420.png - commits: 38 - linesAdded: 2578 - linesDeleted: 2114 - rank: 1 - newContributor: false - - username: adriaanm - gravatar: https://secure.gravatar.com/avatar/d573d4b8a6bd9e2f41611d8d566c533e?s=60&d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-user-420.png - commits: 31 - linesAdded: 7110 - linesDeleted: 9889 - rank: 2 - newContributor: false - - username: JamesIry - gravatar: https://secure.gravatar.com/avatar/72b1a6b08fd8bb3068bd281974461c3e?s=60&d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-user-420.png - commits: 23 - linesAdded: 1673 - linesDeleted: 740 - rank: 3 - newContributor: false - - username: paulp - gravatar: https://secure.gravatar.com/avatar/c25d674f69bb9c155f265a7482712be4?s=60&d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-user-420.png - commits: 10 - linesAdded: 1466 - linesDeleted: 1097 - rank: 4 - newContributor: false - - username: viktorklang - gravatar: https://secure.gravatar.com/avatar/4f674b2e79f1663864ff78e07ce4c8a8?s=60&d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-user-420.png - commits: 3 - linesAdded: 84 - linesDeleted: 53 - rank: 5 - newContributor: false - - username: gkossakowski - gravatar: https://secure.gravatar.com/avatar/e608c8cb27858cc5aaf7d0c1e57958d7?s=60&d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-user-420.png - commits: 2 - linesAdded: 4 - linesDeleted: 1 - rank: 6 - newContributor: false - - username: huitseeker - gravatar: https://secure.gravatar.com/avatar/dc11aab8ab70b10a828b5ee4735183e8?s=60&d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-user-420.png - commits: 1 - linesAdded: 26 - linesDeleted: 0 - rank: 7 - newContributor: false - - username: rkuhn - gravatar: https://secure.gravatar.com/avatar/262b1ab25e66b1e15a48fa3f68703aad?s=60&d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-user-420.png - commits: 1 - linesAdded: 3 - linesDeleted: 2 - rank: 7 - newContributor: false - - category: EPFL - authors: - - username: xeno-by - gravatar: https://secure.gravatar.com/avatar/69e339fd10a5ad804c45e22c819c67ad?s=60&d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-user-420.png - commits: 36 - linesAdded: 3379 - linesDeleted: 1635 - rank: 1 - newContributor: false - - username: lrytz - gravatar: https://secure.gravatar.com/avatar/d807dd5133a6fc14c821178e53c34091?s=60&d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-user-420.png - commits: 3 - linesAdded: 213 - linesDeleted: 31 - rank: 2 - newContributor: false - - username: heathermiller - gravatar: https://secure.gravatar.com/avatar/54d0b6494927c0040b96ed327202e8dc?s=60&d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-user-420.png - commits: 2 - linesAdded: 2 - linesDeleted: 1333 - rank: 3 - newContributor: false - - username: VladUreche - gravatar: https://secure.gravatar.com/avatar/5658ed1cea041577df360fd663c570fa?s=60&d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-user-420.png - commits: 2 - linesAdded: 86 - linesDeleted: 32 - rank: 3 - newContributor: false - - username: hubertp - gravatar: https://secure.gravatar.com/avatar/e0dec64f93778e5c689c3873078a406f?s=60&d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-user-420.png - commits: 2 - linesAdded: 297 - linesDeleted: 100 - rank: 3 - newContributor: false - - username: axel22 - gravatar: https://secure.gravatar.com/avatar/e9bdb4fada7e635fffb5e6f26e70cd1d?s=60&d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-user-420.png - commits: 1 - linesAdded: 9 - linesDeleted: 106 - rank: 4 - newContributor: false - - category: Community - authors: - - username: vigdorchik - gravatar: https://secure.gravatar.com/avatar/d497b1b875b7f68414daff74485b8501?s=60&d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-user-420.png - commits: 4 - linesAdded: 471 - linesDeleted: 410 - rank: 1 - newContributor: false - - username: vy - gravatar: https://secure.gravatar.com/avatar/bb8d759cf4230bcaa238fac0018af80c?s=60&d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-user-420.png - commits: 2 - linesAdded: 21 - linesDeleted: 21 - rank: 2 - newContributor: true - - username: u-abramchuk - gravatar: https://secure.gravatar.com/avatar/c70eb13a60582914b51966fdc1a18536?s=60&d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-user-420.png - commits: 2 - linesAdded: 47 - linesDeleted: 13 - rank: 2 - newContributor: true - - username: jozic - gravatar: https://secure.gravatar.com/avatar/41fbba6d48e543a7dfa8c231b2d0286d?s=60&d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-user-420.png - commits: 1 - linesAdded: 8 - linesDeleted: 8 - rank: 3 - newContributor: true - - username: rnix - gravatar: https://secure.gravatar.com/avatar/0dcbf348a28f2295164c53a40d48a958?s=60&d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-user-420.png - commits: 1 - linesAdded: 1 - linesDeleted: 1 - rank: 3 - newContributor: true - - username: mergeconflict - gravatar: https://secure.gravatar.com/avatar/9a58682929b182af7b01f0180e072fcd?s=60&d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-user-420.png - commits: 1 - linesAdded: 22 - linesDeleted: 15 - rank: 3 - newContributor: false - - username: mt2309 - gravatar: https://secure.gravatar.com/avatar/f70e1d36b9c1b9290d31e810fa1502f3?s=60&d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-user-420.png - commits: 1 - linesAdded: 3 - linesDeleted: 0 - rank: 3 - newContributor: false - - username: ViniciusMiana - gravatar: https://secure.gravatar.com/avatar/e05e828a92458c4075b498c7d2957ddd?s=60&d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-user-420.png - commits: 1 - linesAdded: 16 - linesDeleted: 0 - rank: 3 - newContributor: false - - username: Blaisorblade - gravatar: https://secure.gravatar.com/avatar/a3a676c96a88feb813010e67af012ca0?s=60&d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-user-420.png - commits: 1 - linesAdded: 0 - linesDeleted: 3 - rank: 3 - newContributor: false - - username: khernyo - gravatar: https://secure.gravatar.com/avatar/0e0d750a49edb4b16e8ec83816ea356e?s=60&d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-user-420.png - commits: 1 - linesAdded: 25 - linesDeleted: 1 - rank: 3 - newContributor: false - - username: som-snytt - gravatar: https://secure.gravatar.com/avatar/ec5b08d0fe94845ba49fd4a263c7d99d?s=60&d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-user-420.png - commits: 1 - linesAdded: 1 - linesDeleted: 1 - rank: 3 - newContributor: false ---- diff --git a/contribute/scala-fame-data/_posts/2013-04-01-scala-fame-2013-03.md b/contribute/scala-fame-data/_posts/2013-04-01-scala-fame-2013-03.md deleted file mode 100644 index 0feb88618a..0000000000 --- a/contribute/scala-fame-data/_posts/2013-04-01-scala-fame-2013-03.md +++ /dev/null @@ -1,147 +0,0 @@ ---- -layout: famearchive -title: Contributors of March 2013 -fame-year: 2013 -fame-month: 3 -fame-month-str: March -fame-categories: - - category: Typesafe - authors: - - username: paulp - gravatar: https://secure.gravatar.com/avatar/c25d674f69bb9c155f265a7482712be4?s=60&d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-user-420.png - commits: 51 - linesAdded: 38101 - linesDeleted: 37753 - rank: 1 - newContributor: false - - username: retronym - gravatar: https://secure.gravatar.com/avatar/5df8faf17a57ccab478a9b8056862fc3?s=60&d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-user-420.png - commits: 46 - linesAdded: 4908 - linesDeleted: 3092 - rank: 2 - newContributor: false - - username: adriaanm - gravatar: https://secure.gravatar.com/avatar/d573d4b8a6bd9e2f41611d8d566c533e?s=60&d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-user-420.png - commits: 27 - linesAdded: 2675 - linesDeleted: 5043 - rank: 3 - newContributor: false - - username: JamesIry - gravatar: https://secure.gravatar.com/avatar/72b1a6b08fd8bb3068bd281974461c3e?s=60&d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-user-420.png - commits: 7 - linesAdded: 1218 - linesDeleted: 171 - rank: 4 - newContributor: false - - username: dragos - gravatar: https://secure.gravatar.com/avatar/fbd384e9626d28d1648f023a5e22672f?s=60&d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-user-420.png - commits: 1 - linesAdded: 169 - linesDeleted: 2 - rank: 5 - newContributor: false - - category: EPFL - authors: - - username: xeno-by - gravatar: https://secure.gravatar.com/avatar/69e339fd10a5ad804c45e22c819c67ad?s=60&d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-user-420.png - commits: 11 - linesAdded: 295 - linesDeleted: 129 - rank: 1 - newContributor: false - - username: magarciaEPFL - gravatar: https://secure.gravatar.com/avatar/94ff1d59d6e0a3a4ab10c80ab12bfeed?s=60&d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-user-420.png - commits: 6 - linesAdded: 89 - linesDeleted: 44 - rank: 2 - newContributor: false - - category: Community - authors: - - username: vigdorchik - gravatar: https://secure.gravatar.com/avatar/d497b1b875b7f68414daff74485b8501?s=60&d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-user-420.png - commits: 9 - linesAdded: 714 - linesDeleted: 619 - rank: 1 - newContributor: false - - username: som-snytt - gravatar: https://secure.gravatar.com/avatar/ec5b08d0fe94845ba49fd4a263c7d99d?s=60&d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-user-420.png - commits: 7 - linesAdded: 2103 - linesDeleted: 2068 - rank: 2 - newContributor: false - - username: soc - gravatar: https://secure.gravatar.com/avatar/6e4171314f4704b1e82aa4e5d9067e92?s=60&d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-user-420.png - commits: 6 - linesAdded: 166 - linesDeleted: 96 - rank: 3 - newContributor: false - - username: kzys - gravatar: https://secure.gravatar.com/avatar/7828b45f8396aa361d85cead01fd99ca?s=60&d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-user-420.png - commits: 5 - linesAdded: 129 - linesDeleted: 41 - rank: 4 - newContributor: false - - username: Blaisorblade - gravatar: https://secure.gravatar.com/avatar/a3a676c96a88feb813010e67af012ca0?s=60&d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-user-420.png - commits: 3 - linesAdded: 72 - linesDeleted: 20 - rank: 5 - newContributor: false - - username: starblood - gravatar: https://secure.gravatar.com/avatar/bd3514b960213c6a7ff5fd3186675429?s=60&d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-user-420.png - commits: 1 - linesAdded: 1 - linesDeleted: 1 - rank: 6 - newContributor: true - - username: srinivasreddy - gravatar: https://secure.gravatar.com/avatar/1f542afb3240b82fdf08632bf6cd5384?s=60&d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-user-420.png - commits: 1 - linesAdded: 1 - linesDeleted: 1 - rank: 6 - newContributor: true - - username: mesagie - gravatar: https://secure.gravatar.com/avatar/6e7dc465ed74b5250147168a0178d91c?s=60&d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-user-420.png - commits: 1 - linesAdded: 4 - linesDeleted: 5 - rank: 6 - newContributor: true - - username: mergeconflict - gravatar: https://secure.gravatar.com/avatar/9a58682929b182af7b01f0180e072fcd?s=60&d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-user-420.png - commits: 1 - linesAdded: 22 - linesDeleted: 15 - rank: 6 - newContributor: false - - username: sschaef - gravatar: https://secure.gravatar.com/avatar/dd80aab570fdb5f37e62de5422f44ed4?s=60&d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-user-420.png - commits: 1 - linesAdded: 13 - linesDeleted: 0 - rank: 6 - newContributor: false - - username: ihji - gravatar: https://secure.gravatar.com/avatar/866a258f0c9fa9529aa47ebd96fe599c?s=60&d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-user-420.png - commits: 1 - linesAdded: 33 - linesDeleted: 6 - rank: 6 - newContributor: false - - username: chuvoks - gravatar: https://secure.gravatar.com/avatar/415869059046602f37803890bd992fc0?s=60&d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-user-420.png - commits: 1 - linesAdded: 45 - linesDeleted: 24 - rank: 6 - newContributor: false ---- diff --git a/contribute/scala-fame-data/_posts/2013-05-01-scala-fame-2013-04.md b/contribute/scala-fame-data/_posts/2013-05-01-scala-fame-2013-04.md deleted file mode 100644 index e2cd419e9b..0000000000 --- a/contribute/scala-fame-data/_posts/2013-05-01-scala-fame-2013-04.md +++ /dev/null @@ -1,126 +0,0 @@ ---- -layout: famearchive -title: Contributors of April 2013 -fame-year: 2013 -fame-month: 4 -fame-month-str: April -fame-categories: - - category: Typesafe - authors: - - username: paulp - gravatar: https://secure.gravatar.com/avatar/c25d674f69bb9c155f265a7482712be4?s=60&d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-user-420.png - commits: 38 - linesAdded: 3745 - linesDeleted: 2973 - rank: 1 - newContributor: false - - username: retronym - gravatar: https://secure.gravatar.com/avatar/5df8faf17a57ccab478a9b8056862fc3?s=60&d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-user-420.png - commits: 37 - linesAdded: 1309 - linesDeleted: 777 - rank: 2 - newContributor: false - - username: huitseeker - gravatar: https://secure.gravatar.com/avatar/dc11aab8ab70b10a828b5ee4735183e8?s=60&d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-user-420.png - commits: 3 - linesAdded: 16 - linesDeleted: 24 - rank: 3 - newContributor: false - - username: adriaanm - gravatar: https://secure.gravatar.com/avatar/d573d4b8a6bd9e2f41611d8d566c533e?s=60&d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-user-420.png - commits: 2 - linesAdded: 35 - linesDeleted: 82 - rank: 4 - newContributor: false - - category: EPFL - authors: - - username: magarciaEPFL - gravatar: https://secure.gravatar.com/avatar/94ff1d59d6e0a3a4ab10c80ab12bfeed?s=60&d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-user-420.png - commits: 11 - linesAdded: 238 - linesDeleted: 204 - rank: 1 - newContributor: false - - username: xeno-by - gravatar: https://secure.gravatar.com/avatar/69e339fd10a5ad804c45e22c819c67ad?s=60&d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-user-420.png - commits: 4 - linesAdded: 208 - linesDeleted: 121 - rank: 2 - newContributor: false - - username: namin - gravatar: https://secure.gravatar.com/avatar/f2adf4eb83e1221b519d23bf0bdc98d2?s=60&d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-user-420.png - commits: 1 - linesAdded: 6 - linesDeleted: 11 - rank: 3 - newContributor: false - - username: heathermiller - gravatar: https://secure.gravatar.com/avatar/54d0b6494927c0040b96ed327202e8dc?s=60&d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-user-420.png - commits: 1 - linesAdded: 1 - linesDeleted: 1 - rank: 3 - newContributor: false - - username: hubertp - gravatar: https://secure.gravatar.com/avatar/e0dec64f93778e5c689c3873078a406f?s=60&d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-user-420.png - commits: 1 - linesAdded: 54 - linesDeleted: 46 - rank: 3 - newContributor: false - - category: Community - authors: - - username: som-snytt - gravatar: https://secure.gravatar.com/avatar/ec5b08d0fe94845ba49fd4a263c7d99d?s=60&d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-user-420.png - commits: 16 - linesAdded: 2561 - linesDeleted: 1150 - rank: 1 - newContributor: false - - username: vigdorchik - gravatar: https://secure.gravatar.com/avatar/d497b1b875b7f68414daff74485b8501?s=60&d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-user-420.png - commits: 9 - linesAdded: 235 - linesDeleted: 321 - rank: 2 - newContributor: false - - username: soc - gravatar: https://secure.gravatar.com/avatar/6e4171314f4704b1e82aa4e5d9067e92?s=60&d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-user-420.png - commits: 4 - linesAdded: 38 - linesDeleted: 26 - rank: 3 - newContributor: false - - username: ihji - gravatar: https://secure.gravatar.com/avatar/866a258f0c9fa9529aa47ebd96fe599c?s=60&d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-user-420.png - commits: 2 - linesAdded: 13 - linesDeleted: 2 - rank: 4 - newContributor: false - - username: bjornregnell - gravatar: https://secure.gravatar.com/avatar/b1d20c98b0eeb72829523144b9174ca2?s=60&d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-user-420.png - commits: 1 - linesAdded: 3 - linesDeleted: 2 - rank: 5 - newContributor: true - - username: aldenml - gravatar: https://secure.gravatar.com/avatar/bbf061bd484515c156f662a65820c226?s=60&d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-user-420.png - commits: 1 - linesAdded: 4 - linesDeleted: 4 - rank: 5 - newContributor: true - - username: eed3si9n - gravatar: https://secure.gravatar.com/avatar/8f41595db400be30176f6f04630c2842?s=60&d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-user-420.png - commits: 1 - linesAdded: 304 - linesDeleted: 6 - rank: 5 - newContributor: false ---- diff --git a/contribute/scala-fame-data/_posts/2013-06-01-scala-fame-2013-05.md b/contribute/scala-fame-data/_posts/2013-06-01-scala-fame-2013-05.md deleted file mode 100644 index 2829d6a4aa..0000000000 --- a/contribute/scala-fame-data/_posts/2013-06-01-scala-fame-2013-05.md +++ /dev/null @@ -1,105 +0,0 @@ ---- -layout: famearchive -title: Contributors of May 2013 -fame-year: 2013 -fame-month: 5 -fame-month-str: May -fame-categories: - - category: Typesafe - authors: - - username: paulp - gravatar: https://secure.gravatar.com/avatar/c25d674f69bb9c155f265a7482712be4?s=60&d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-user-420.png - commits: 54 - linesAdded: 3465 - linesDeleted: 2035 - rank: 1 - newContributor: false - - username: retronym - gravatar: https://secure.gravatar.com/avatar/5df8faf17a57ccab478a9b8056862fc3?s=60&d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-user-420.png - commits: 13 - linesAdded: 525 - linesDeleted: 66 - rank: 2 - newContributor: false - - username: adriaanm - gravatar: https://secure.gravatar.com/avatar/d573d4b8a6bd9e2f41611d8d566c533e?s=60&d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-user-420.png - commits: 5 - linesAdded: 245 - linesDeleted: 81 - rank: 3 - newContributor: false - - username: viktorklang - gravatar: https://secure.gravatar.com/avatar/4f674b2e79f1663864ff78e07ce4c8a8?s=60&d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-user-420.png - commits: 2 - linesAdded: 51 - linesDeleted: 32 - rank: 4 - newContributor: false - - username: phaller - gravatar: https://secure.gravatar.com/avatar/3b84657fdb075382e3781310ca8a9a70?s=60&d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-user-420.png - commits: 1 - linesAdded: 1965 - linesDeleted: 1086 - rank: 5 - newContributor: false - - category: EPFL - authors: - - username: xeno-by - gravatar: https://secure.gravatar.com/avatar/69e339fd10a5ad804c45e22c819c67ad?s=60&d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-user-420.png - commits: 19 - linesAdded: 742 - linesDeleted: 468 - rank: 1 - newContributor: false - - username: magarciaEPFL - gravatar: https://secure.gravatar.com/avatar/94ff1d59d6e0a3a4ab10c80ab12bfeed?s=60&d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-user-420.png - commits: 11 - linesAdded: 1214 - linesDeleted: 1069 - rank: 2 - newContributor: false - - username: heathermiller - gravatar: https://secure.gravatar.com/avatar/54d0b6494927c0040b96ed327202e8dc?s=60&d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-user-420.png - commits: 1 - linesAdded: 10 - linesDeleted: 7 - rank: 3 - newContributor: false - - category: Community - authors: - - username: soc - gravatar: https://secure.gravatar.com/avatar/6e4171314f4704b1e82aa4e5d9067e92?s=60&d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-user-420.png - commits: 12 - linesAdded: 254 - linesDeleted: 1135 - rank: 1 - newContributor: false - - username: som-snytt - gravatar: https://secure.gravatar.com/avatar/ec5b08d0fe94845ba49fd4a263c7d99d?s=60&d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-user-420.png - commits: 6 - linesAdded: 454 - linesDeleted: 403 - rank: 2 - newContributor: false - - username: vigdorchik - gravatar: https://secure.gravatar.com/avatar/d497b1b875b7f68414daff74485b8501?s=60&d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-user-420.png - commits: 2 - linesAdded: 42 - linesDeleted: 32 - rank: 3 - newContributor: false - - username: dcsobral - gravatar: https://secure.gravatar.com/avatar/6d43da5df0e52fc31c55e6a227bb23f4?s=60&d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-user-420.png - commits: 1 - linesAdded: 6 - linesDeleted: 2 - rank: 4 - newContributor: false - - username: kzys - gravatar: https://secure.gravatar.com/avatar/7828b45f8396aa361d85cead01fd99ca?s=60&d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-user-420.png - commits: 1 - linesAdded: 25 - linesDeleted: 9 - rank: 4 - newContributor: false ---- diff --git a/contribute/scala-fame-data/_posts/2013-07-01-scala-fame-2013-06.md b/contribute/scala-fame-data/_posts/2013-07-01-scala-fame-2013-06.md deleted file mode 100644 index e2fa22bf84..0000000000 --- a/contribute/scala-fame-data/_posts/2013-07-01-scala-fame-2013-06.md +++ /dev/null @@ -1,126 +0,0 @@ ---- -layout: famearchive -title: Contributors of June 2013 -fame-year: 2013 -fame-month: 6 -fame-month-str: June -fame-categories: - - category: Typesafe - authors: - - username: retronym - gravatar: https://secure.gravatar.com/avatar/5df8faf17a57ccab478a9b8056862fc3?s=60&d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-user-420.png - commits: 18 - linesAdded: 3583 - linesDeleted: 60 - rank: 1 - newContributor: false - - username: adriaanm - gravatar: https://secure.gravatar.com/avatar/d573d4b8a6bd9e2f41611d8d566c533e?s=60&d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-user-420.png - commits: 13 - linesAdded: 12207 - linesDeleted: 11500 - rank: 2 - newContributor: false - - username: paulp - gravatar: https://secure.gravatar.com/avatar/c25d674f69bb9c155f265a7482712be4?s=60&d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-user-420.png - commits: 6 - linesAdded: 264 - linesDeleted: 1625 - rank: 3 - newContributor: false - - username: gkossakowski - gravatar: https://secure.gravatar.com/avatar/e608c8cb27858cc5aaf7d0c1e57958d7?s=60&d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-user-420.png - commits: 3 - linesAdded: 296 - linesDeleted: 176 - rank: 4 - newContributor: false - - username: viktorklang - gravatar: https://secure.gravatar.com/avatar/4f674b2e79f1663864ff78e07ce4c8a8?s=60&d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-user-420.png - commits: 2 - linesAdded: 197 - linesDeleted: 546 - rank: 5 - newContributor: false - - username: huitseeker - gravatar: https://secure.gravatar.com/avatar/dc11aab8ab70b10a828b5ee4735183e8?s=60&d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-user-420.png - commits: 1 - linesAdded: 32 - linesDeleted: 1 - rank: 6 - newContributor: false - - category: EPFL - authors: - - username: magarciaEPFL - gravatar: https://secure.gravatar.com/avatar/94ff1d59d6e0a3a4ab10c80ab12bfeed?s=60&d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-user-420.png - commits: 5 - linesAdded: 29 - linesDeleted: 27 - rank: 1 - newContributor: false - - username: VladUreche - gravatar: https://secure.gravatar.com/avatar/5658ed1cea041577df360fd663c570fa?s=60&d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-user-420.png - commits: 4 - linesAdded: 383 - linesDeleted: 68 - rank: 2 - newContributor: false - - username: xeno-by - gravatar: https://secure.gravatar.com/avatar/69e339fd10a5ad804c45e22c819c67ad?s=60&d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-user-420.png - commits: 2 - linesAdded: 57 - linesDeleted: 15 - rank: 3 - newContributor: false - - category: Community - authors: - - username: soc - gravatar: https://secure.gravatar.com/avatar/6e4171314f4704b1e82aa4e5d9067e92?s=60&d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-user-420.png - commits: 12 - linesAdded: 1071 - linesDeleted: 1200 - rank: 1 - newContributor: false - - username: som-snytt - gravatar: https://secure.gravatar.com/avatar/ec5b08d0fe94845ba49fd4a263c7d99d?s=60&d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-user-420.png - commits: 5 - linesAdded: 273 - linesDeleted: 44 - rank: 2 - newContributor: false - - username: lexspoon - gravatar: https://secure.gravatar.com/avatar/d00741a2082647573efc2c15022ad15c?s=60&d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-user-420.png - commits: 5 - linesAdded: 90 - linesDeleted: 29 - rank: 2 - newContributor: false - - username: jedesah - gravatar: https://secure.gravatar.com/avatar/188a972e1c0a6d678a59bd6bce46da9a?s=60&d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-user-420.png - commits: 3 - linesAdded: 23 - linesDeleted: 2 - rank: 3 - newContributor: false - - username: yllan - gravatar: https://secure.gravatar.com/avatar/ad23f5809b32c9dade553f80d6d7b2b9?s=60&d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-user-420.png - commits: 2 - linesAdded: 124 - linesDeleted: 4 - rank: 4 - newContributor: true - - username: jannic - gravatar: https://secure.gravatar.com/avatar/c85c7cbcc9d464e178ba751449f893c7?s=60&d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-user-420.png - commits: 1 - linesAdded: 9 - linesDeleted: 0 - rank: 5 - newContributor: false - - username: xuwei-k - gravatar: https://secure.gravatar.com/avatar/18d8b1bf73827b2a15e2bd3e75b4b34a?s=60&d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-user-420.png - commits: 1 - linesAdded: 2 - linesDeleted: 2 - rank: 5 - newContributor: false ---- diff --git a/contribute/scala-fame-data/_posts/2013-08-01-scala-fame-2013-07.md b/contribute/scala-fame-data/_posts/2013-08-01-scala-fame-2013-07.md deleted file mode 100644 index b6670c42ce..0000000000 --- a/contribute/scala-fame-data/_posts/2013-08-01-scala-fame-2013-07.md +++ /dev/null @@ -1,119 +0,0 @@ ---- -layout: famearchive -title: Contributors of July 2013 -fame-year: 2013 -fame-month: 7 -fame-month-str: July -fame-categories: - - category: Typesafe - authors: - - username: gkossakowski - gravatar: https://0.gravatar.com/avatar/e608c8cb27858cc5aaf7d0c1e57958d7?d=https%3A%2F%2Fidenticons.github.com%2F8196e8d0f9ee7dfdfc7e11dbbfa30d77.png&s=60 - commits: 11 - linesAdded: 522 - linesDeleted: 311 - rank: 1 - newContributor: false - - username: adriaanm - gravatar: https://0.gravatar.com/avatar/d573d4b8a6bd9e2f41611d8d566c533e?d=https%3A%2F%2Fidenticons.github.com%2Ff0d91e20ef53ace520f6ccbf8402319f.png&s=60 - commits: 9 - linesAdded: 1068 - linesDeleted: 11436 - rank: 2 - newContributor: false - - username: retronym - gravatar: https://0.gravatar.com/avatar/5df8faf17a57ccab478a9b8056862fc3?d=https%3A%2F%2Fidenticons.github.com%2F75e4dffe50001cf8b96d3beecbe181be.png&s=60 - commits: 8 - linesAdded: 416 - linesDeleted: 134 - rank: 3 - newContributor: false - - username: paulp - gravatar: https://identicons.github.com/bf65417dcecc7f2b0006e1f5793b7143.png - commits: 2 - linesAdded: 46 - linesDeleted: 27 - rank: 4 - newContributor: false - - category: EPFL - authors: - - username: magarciaEPFL - gravatar: https://2.gravatar.com/avatar/94ff1d59d6e0a3a4ab10c80ab12bfeed?d=https%3A%2F%2Fidenticons.github.com%2F8b7440eff98d923640c99b5535429144.png&s=60 - commits: 12 - linesAdded: 1208 - linesDeleted: 1069 - rank: 1 - newContributor: false - - username: xeno-by - gravatar: https://2.gravatar.com/avatar/69e339fd10a5ad804c45e22c819c67ad?d=https%3A%2F%2Fidenticons.github.com%2F6a5b1b05e953818962474e94b67d1cc2.png&s=60 - commits: 8 - linesAdded: 321 - linesDeleted: 95 - rank: 2 - newContributor: false - - username: VladUreche - gravatar: https://2.gravatar.com/avatar/5658ed1cea041577df360fd663c570fa?d=https%3A%2F%2Fidenticons.github.com%2Fa1ef2fed16f85a1af890467a80c30226.png&s=60 - commits: 2 - linesAdded: 104 - linesDeleted: 2 - rank: 3 - newContributor: false - - username: cvogt - gravatar: https://1.gravatar.com/avatar/669fb4eab529fba02f390051ddf3c8d3?d=https%3A%2F%2Fidenticons.github.com%2F78d9e7d7c73ac19ca8da9805762e5bb0.png&s=60 - commits: 1 - linesAdded: 19 - linesDeleted: 0 - rank: 4 - newContributor: false - - category: Community - authors: - - username: soc - gravatar: https://0.gravatar.com/avatar/6e4171314f4704b1e82aa4e5d9067e92?d=https%3A%2F%2Fidenticons.github.com%2F29f7ac3adbe1d3500c9404388aedcbfd.png&s=60 - commits: 19 - linesAdded: 2818 - linesDeleted: 4377 - rank: 1 - newContributor: false - - username: som-snytt - gravatar: https://2.gravatar.com/avatar/ec5b08d0fe94845ba49fd4a263c7d99d?d=https%3A%2F%2Fidenticons.github.com%2Fd292a902ebb73981efd65c9ef416046b.png&s=60 - commits: 16 - linesAdded: 1049 - linesDeleted: 553 - rank: 2 - newContributor: false - - username: densh - gravatar: https://0.gravatar.com/avatar/5ed274e115ec061d062d9c32a539cdc9?d=https%3A%2F%2Fidenticons.github.com%2Fcd3e73ab183ea35424f0bf59101a74e4.png&s=60 - commits: 9 - linesAdded: 2632 - linesDeleted: 178 - rank: 3 - newContributor: false - - username: folone - gravatar: https://2.gravatar.com/avatar/50e7e3f60b3507383d2b327857b66a62?d=https%3A%2F%2Fidenticons.github.com%2F6c2bcbccd23191b40f4932e2b8450681.png&s=60 - commits: 3 - linesAdded: 106 - linesDeleted: 261 - rank: 4 - newContributor: false - - username: xuwei-k - gravatar: https://2.gravatar.com/avatar/18d8b1bf73827b2a15e2bd3e75b4b34a?d=https%3A%2F%2Fidenticons.github.com%2Fdab0069935d770e6285411ed1f4398b9.png&s=60 - commits: 3 - linesAdded: 5 - linesDeleted: 5 - rank: 4 - newContributor: false - - username: gourlaysama - gravatar: https://2.gravatar.com/avatar/8acf3c87222f89b18786c8db60eb365d?d=https%3A%2F%2Fidenticons.github.com%2F76004d7b1fac3a2b262caa5e6bdf15c9.png&s=60 - commits: 2 - linesAdded: 67 - linesDeleted: 3 - rank: 5 - newContributor: false - - username: ScrapCodes - gravatar: https://0.gravatar.com/avatar/e9813bbbab2caa993bf7e2b2d60de894?d=https%3A%2F%2Fidenticons.github.com%2F38c660c74f82a216b75167debab770ed.png&s=60 - commits: 1 - linesAdded: 1 - linesDeleted: 1 - rank: 6 - newContributor: false ---- diff --git a/contribute/scala-fame-data/_posts/2013-09-01-scala-fame-2013-08.md b/contribute/scala-fame-data/_posts/2013-09-01-scala-fame-2013-08.md deleted file mode 100644 index c876e815d1..0000000000 --- a/contribute/scala-fame-data/_posts/2013-09-01-scala-fame-2013-08.md +++ /dev/null @@ -1,98 +0,0 @@ ---- -layout: famearchive -title: Contributors of August 2013 -fame-year: 2013 -fame-month: 8 -fame-month-str: August -fame-categories: - - category: Typesafe - authors: - - username: paulp - gravatar: https://identicons.github.com/bf65417dcecc7f2b0006e1f5793b7143.png - commits: 50 - linesAdded: 3703 - linesDeleted: 2269 - rank: 1 - newContributor: false - - username: retronym - gravatar: https://0.gravatar.com/avatar/5df8faf17a57ccab478a9b8056862fc3?d=https%3A%2F%2Fidenticons.github.com%2F75e4dffe50001cf8b96d3beecbe181be.png&s=60 - commits: 30 - linesAdded: 990 - linesDeleted: 167 - rank: 2 - newContributor: false - - username: adriaanm - gravatar: https://0.gravatar.com/avatar/d573d4b8a6bd9e2f41611d8d566c533e?d=https%3A%2F%2Fidenticons.github.com%2Ff0d91e20ef53ace520f6ccbf8402319f.png&s=60 - commits: 6 - linesAdded: 224 - linesDeleted: 11001 - rank: 3 - newContributor: false - - username: huitseeker - gravatar: https://0.gravatar.com/avatar/dc11aab8ab70b10a828b5ee4735183e8?d=https%3A%2F%2Fidenticons.github.com%2F0777acff7c9ab34562699e4e1d05affb.png&s=60 - commits: 2 - linesAdded: 6 - linesDeleted: 6 - rank: 4 - newContributor: false - - category: EPFL - authors: - - username: xeno-by - gravatar: https://2.gravatar.com/avatar/69e339fd10a5ad804c45e22c819c67ad?d=https%3A%2F%2Fidenticons.github.com%2F6a5b1b05e953818962474e94b67d1cc2.png&s=60 - commits: 9 - linesAdded: 579 - linesDeleted: 419 - rank: 1 - newContributor: false - - username: magarciaEPFL - gravatar: https://2.gravatar.com/avatar/94ff1d59d6e0a3a4ab10c80ab12bfeed?d=https%3A%2F%2Fidenticons.github.com%2F8b7440eff98d923640c99b5535429144.png&s=60 - commits: 4 - linesAdded: 319 - linesDeleted: 105 - rank: 2 - newContributor: false - - category: Community - authors: - - username: densh - gravatar: https://0.gravatar.com/avatar/5ed274e115ec061d062d9c32a539cdc9?d=https%3A%2F%2Fidenticons.github.com%2Fcd3e73ab183ea35424f0bf59101a74e4.png&s=60 - commits: 19 - linesAdded: 687 - linesDeleted: 322 - rank: 1 - newContributor: false - - username: som-snytt - gravatar: https://2.gravatar.com/avatar/ec5b08d0fe94845ba49fd4a263c7d99d?d=https%3A%2F%2Fidenticons.github.com%2Fd292a902ebb73981efd65c9ef416046b.png&s=60 - commits: 12 - linesAdded: 455 - linesDeleted: 91 - rank: 2 - newContributor: false - - username: soc - gravatar: https://0.gravatar.com/avatar/6e4171314f4704b1e82aa4e5d9067e92?d=https%3A%2F%2Fidenticons.github.com%2F29f7ac3adbe1d3500c9404388aedcbfd.png&s=60 - commits: 4 - linesAdded: 64 - linesDeleted: 27 - rank: 3 - newContributor: false - - username: gourlaysama - gravatar: https://2.gravatar.com/avatar/8acf3c87222f89b18786c8db60eb365d?d=https%3A%2F%2Fidenticons.github.com%2F76004d7b1fac3a2b262caa5e6bdf15c9.png&s=60 - commits: 2 - linesAdded: 50 - linesDeleted: 9 - rank: 4 - newContributor: false - - username: ScrapCodes - gravatar: https://0.gravatar.com/avatar/e9813bbbab2caa993bf7e2b2d60de894?d=https%3A%2F%2Fidenticons.github.com%2F38c660c74f82a216b75167debab770ed.png&s=60 - commits: 1 - linesAdded: 3 - linesDeleted: 0 - rank: 5 - newContributor: false - - username: folone - gravatar: https://2.gravatar.com/avatar/50e7e3f60b3507383d2b327857b66a62?d=https%3A%2F%2Fidenticons.github.com%2F6c2bcbccd23191b40f4932e2b8450681.png&s=60 - commits: 1 - linesAdded: 55 - linesDeleted: 7 - rank: 5 - newContributor: false ---- diff --git a/contribute/scala-fame-data/_posts/2013-10-01-scala-fame-2013-09.md b/contribute/scala-fame-data/_posts/2013-10-01-scala-fame-2013-09.md deleted file mode 100644 index 23fa456fc0..0000000000 --- a/contribute/scala-fame-data/_posts/2013-10-01-scala-fame-2013-09.md +++ /dev/null @@ -1,105 +0,0 @@ ---- -layout: famearchive -title: Contributors of September 2013 -fame-year: 2013 -fame-month: 9 -fame-month-str: September -fame-categories: - - category: Typesafe - authors: - - username: retronym - gravatar: https://2.gravatar.com/avatar/5df8faf17a57ccab478a9b8056862fc3?d=https%3A%2F%2Fidenticons.github.com%2F75e4dffe50001cf8b96d3beecbe181be.png&s=60 - commits: 42 - linesAdded: 1459 - linesDeleted: 476 - rank: 1 - newContributor: false - - username: paulp - gravatar: https://identicons.github.com/bf65417dcecc7f2b0006e1f5793b7143.png - commits: 25 - linesAdded: 6603 - linesDeleted: 7419 - rank: 2 - newContributor: false - - username: huitseeker - gravatar: https://1.gravatar.com/avatar/dc11aab8ab70b10a828b5ee4735183e8?d=https%3A%2F%2Fidenticons.github.com%2F0777acff7c9ab34562699e4e1d05affb.png&s=60 - commits: 7 - linesAdded: 520 - linesDeleted: 536 - rank: 3 - newContributor: false - - username: gkossakowski - gravatar: https://0.gravatar.com/avatar/e608c8cb27858cc5aaf7d0c1e57958d7?d=https%3A%2F%2Fidenticons.github.com%2F8196e8d0f9ee7dfdfc7e11dbbfa30d77.png&s=60 - commits: 2 - linesAdded: 1443 - linesDeleted: 44 - rank: 4 - newContributor: false - - username: dragos - gravatar: https://2.gravatar.com/avatar/fbd384e9626d28d1648f023a5e22672f?d=https%3A%2F%2Fidenticons.github.com%2F6b660454242c937e501b88fd136132f8.png&s=60 - commits: 2 - linesAdded: 95 - linesDeleted: 13 - rank: 4 - newContributor: false - - username: jsuereth - gravatar: https://1.gravatar.com/avatar/5ed293320c06809a24812f56861201ad?d=https%3A%2F%2Fidenticons.github.com%2F11a5b5ef81cff76a0a1f3d042f635df3.png&s=60 - commits: 1 - linesAdded: 18 - linesDeleted: 37 - rank: 5 - newContributor: false - - username: adriaanm - gravatar: https://0.gravatar.com/avatar/d573d4b8a6bd9e2f41611d8d566c533e?d=https%3A%2F%2Fidenticons.github.com%2Ff0d91e20ef53ace520f6ccbf8402319f.png&s=60 - commits: 1 - linesAdded: 5 - linesDeleted: 5 - rank: 5 - newContributor: false - - category: EPFL - authors: - - username: xeno-by - gravatar: https://1.gravatar.com/avatar/69e339fd10a5ad804c45e22c819c67ad?d=https%3A%2F%2Fidenticons.github.com%2F6a5b1b05e953818962474e94b67d1cc2.png&s=60 - commits: 5 - linesAdded: 434 - linesDeleted: 153 - rank: 1 - newContributor: false - - username: sjrd - gravatar: https://1.gravatar.com/avatar/bc554c7355c8476dd63375b314b1bd97?d=https%3A%2F%2Fidenticons.github.com%2F7f7549008d59643d2ce9846ce0364947.png&s=60 - commits: 4 - linesAdded: 30 - linesDeleted: 9 - rank: 2 - newContributor: true - - category: Community - authors: - - username: densh - gravatar: https://1.gravatar.com/avatar/5ed274e115ec061d062d9c32a539cdc9?d=https%3A%2F%2Fidenticons.github.com%2Fcd3e73ab183ea35424f0bf59101a74e4.png&s=60 - commits: 20 - linesAdded: 1415 - linesDeleted: 594 - rank: 1 - newContributor: false - - username: som-snytt - gravatar: https://1.gravatar.com/avatar/ec5b08d0fe94845ba49fd4a263c7d99d?d=https%3A%2F%2Fidenticons.github.com%2Fd292a902ebb73981efd65c9ef416046b.png&s=60 - commits: 11 - linesAdded: 367 - linesDeleted: 106 - rank: 2 - newContributor: false - - username: Ichoran - gravatar: https://0.gravatar.com/avatar/3698349ad0b898d398a6573f4d1f867a?d=https%3A%2F%2Fidenticons.github.com%2Ffc12483537f3df99d480423de674e099.png&s=60 - commits: 3 - linesAdded: 75 - linesDeleted: 27 - rank: 3 - newContributor: true - - username: sschaef - gravatar: https://0.gravatar.com/avatar/dd80aab570fdb5f37e62de5422f44ed4?d=https%3A%2F%2Fidenticons.github.com%2Fb5a662bc30d97b377338f5dfb2b4cc66.png&s=60 - commits: 3 - linesAdded: 84 - linesDeleted: 139 - rank: 3 - newContributor: false ---- diff --git a/contribute/scala-fame-data/_posts/2013-11-01-scala-fame-2013-10.md b/contribute/scala-fame-data/_posts/2013-11-01-scala-fame-2013-10.md deleted file mode 100644 index 557955d60c..0000000000 --- a/contribute/scala-fame-data/_posts/2013-11-01-scala-fame-2013-10.md +++ /dev/null @@ -1,105 +0,0 @@ ---- -layout: famearchive -title: Contributors of October 2013 -fame-year: 2013 -fame-month: 10 -fame-month-str: October -fame-categories: - - category: Typesafe - authors: - - username: retronym - gravatar: https://avatars0.githubusercontent.com/u/65551?v=2&s=60 - commits: 52 - linesAdded: 1917 - linesDeleted: 1778 - rank: 1 - newContributor: false - - username: adriaanm - gravatar: https://avatars2.githubusercontent.com/u/91083?v=2&s=60 - commits: 18 - linesAdded: 1648 - linesDeleted: 1591 - rank: 2 - newContributor: false - - username: paulp - gravatar: https://avatars2.githubusercontent.com/u/9135?v=2&s=60 - commits: 9 - linesAdded: 871 - linesDeleted: 1346 - rank: 3 - newContributor: false - - username: huitseeker - gravatar: https://avatars2.githubusercontent.com/u/4142?v=2&s=60 - commits: 1 - linesAdded: 3 - linesDeleted: 0 - rank: 4 - newContributor: false - - category: EPFL - authors: - - username: xeno-by - gravatar: https://avatars1.githubusercontent.com/u/609152?v=2&s=60 - commits: 9 - linesAdded: 398 - linesDeleted: 2260 - rank: 1 - newContributor: false - - username: axel22 - gravatar: https://avatars1.githubusercontent.com/u/151774?v=2&s=60 - commits: 1 - linesAdded: 201 - linesDeleted: 74 - rank: 2 - newContributor: false - - category: Community - authors: - - username: densh - gravatar: https://avatars2.githubusercontent.com/u/320966?v=2&s=60 - commits: 18 - linesAdded: 766 - linesDeleted: 422 - rank: 1 - newContributor: false - - username: som-snytt - gravatar: https://avatars2.githubusercontent.com/u/369425?v=2&s=60 - commits: 4 - linesAdded: 114 - linesDeleted: 58 - rank: 2 - newContributor: false - - username: etaty - gravatar: https://avatars3.githubusercontent.com/u/461170?v=2&s=60 - commits: 2 - linesAdded: 2 - linesDeleted: 2 - rank: 3 - newContributor: false - - username: dotta - gravatar: https://avatars2.githubusercontent.com/u/703748?v=2&s=60 - commits: 2 - linesAdded: 68 - linesDeleted: 6 - rank: 3 - newContributor: false - - username: qerub - gravatar: https://avatars2.githubusercontent.com/u/636?v=2&s=60 - commits: 1 - linesAdded: 8 - linesDeleted: 0 - rank: 4 - newContributor: false - - username: gourlaysama - gravatar: https://avatars2.githubusercontent.com/u/733438?v=2&s=60 - commits: 1 - linesAdded: 31 - linesDeleted: 1 - rank: 4 - newContributor: false - - username: Ichoran - gravatar: https://avatars3.githubusercontent.com/u/2298644?v=2&s=60 - commits: 1 - linesAdded: 215 - linesDeleted: 25 - rank: 4 - newContributor: false ---- diff --git a/contribute/scala-fame-data/_posts/2013-12-01-scala-fame-2013-11.md b/contribute/scala-fame-data/_posts/2013-12-01-scala-fame-2013-11.md deleted file mode 100644 index 7fba955998..0000000000 --- a/contribute/scala-fame-data/_posts/2013-12-01-scala-fame-2013-11.md +++ /dev/null @@ -1,126 +0,0 @@ ---- -layout: famearchive -title: Contributors of November 2013 -fame-year: 2013 -fame-month: 11 -fame-month-str: November -fame-categories: - - category: Typesafe - authors: - - username: retronym - gravatar: https://avatars0.githubusercontent.com/u/65551?v=2&s=60 - commits: 44 - linesAdded: 1814 - linesDeleted: 1372 - rank: 1 - newContributor: false - - username: adriaanm - gravatar: https://avatars2.githubusercontent.com/u/91083?v=2&s=60 - commits: 20 - linesAdded: 1945 - linesDeleted: 1463 - rank: 2 - newContributor: false - - username: paulp - gravatar: https://avatars2.githubusercontent.com/u/9135?v=2&s=60 - commits: 4 - linesAdded: 62 - linesDeleted: 659 - rank: 3 - newContributor: false - - username: huitseeker - gravatar: https://avatars2.githubusercontent.com/u/4142?v=2&s=60 - commits: 2 - linesAdded: 137 - linesDeleted: 87 - rank: 4 - newContributor: false - - username: phaller - gravatar: https://avatars0.githubusercontent.com/u/289943?v=2&s=60 - commits: 1 - linesAdded: 105 - linesDeleted: 101 - rank: 5 - newContributor: false - - category: EPFL - authors: - - username: xeno-by - gravatar: https://avatars1.githubusercontent.com/u/609152?v=2&s=60 - commits: 5 - linesAdded: 82 - linesDeleted: 12 - rank: 1 - newContributor: false - - username: heathermiller - gravatar: https://avatars0.githubusercontent.com/u/687163?v=2&s=60 - commits: 1 - linesAdded: 8 - linesDeleted: 5 - rank: 2 - newContributor: false - - category: Community - authors: - - username: densh - gravatar: https://avatars2.githubusercontent.com/u/320966?v=2&s=60 - commits: 10 - linesAdded: 1089 - linesDeleted: 884 - rank: 1 - newContributor: false - - username: skyluc - gravatar: https://avatars3.githubusercontent.com/u/1098830?v=2&s=60 - commits: 6 - linesAdded: 1911 - linesDeleted: 53 - rank: 2 - newContributor: false - - username: dotta - gravatar: https://avatars2.githubusercontent.com/u/703748?v=2&s=60 - commits: 6 - linesAdded: 64 - linesDeleted: 47 - rank: 2 - newContributor: false - - username: som-snytt - gravatar: https://avatars2.githubusercontent.com/u/369425?v=2&s=60 - commits: 6 - linesAdded: 499 - linesDeleted: 197 - rank: 2 - newContributor: false - - username: soc - gravatar: https://avatars0.githubusercontent.com/u/42493?v=2&s=60 - commits: 5 - linesAdded: 280 - linesDeleted: 97 - rank: 3 - newContributor: false - - username: sschaef - gravatar: https://avatars2.githubusercontent.com/u/488530?v=2&s=60 - commits: 4 - linesAdded: 182 - linesDeleted: 12 - rank: 4 - newContributor: false - - username: xuwei-k - gravatar: https://avatars3.githubusercontent.com/u/389787?v=2&s=60 - commits: 2 - linesAdded: 3 - linesDeleted: 3 - rank: 5 - newContributor: false - - username: Ichoran - gravatar: https://avatars3.githubusercontent.com/u/2298644?v=2&s=60 - commits: 2 - linesAdded: 1179 - linesDeleted: 0 - rank: 5 - newContributor: false - - username: Blaisorblade - gravatar: https://avatars2.githubusercontent.com/u/289960?v=2&s=60 - commits: 1 - linesAdded: 3 - linesDeleted: 3 - rank: 6 - newContributor: false ---- diff --git a/contribute/scala-fame-data/_posts/2014-01-01-scala-fame-2013-12.md b/contribute/scala-fame-data/_posts/2014-01-01-scala-fame-2013-12.md deleted file mode 100644 index 80c4139b10..0000000000 --- a/contribute/scala-fame-data/_posts/2014-01-01-scala-fame-2013-12.md +++ /dev/null @@ -1,147 +0,0 @@ ---- -layout: famearchive -title: Contributors of December 2013 -fame-year: 2013 -fame-month: 12 -fame-month-str: December -fame-categories: - - category: Typesafe - authors: - - username: retronym - gravatar: https://avatars0.githubusercontent.com/u/65551?v=2&s=60 - commits: 28 - linesAdded: 901 - linesDeleted: 215 - rank: 1 - newContributor: false - - username: adriaanm - gravatar: https://avatars2.githubusercontent.com/u/91083?v=2&s=60 - commits: 21 - linesAdded: 1386 - linesDeleted: 16746 - rank: 2 - newContributor: false - - username: paulp - gravatar: https://avatars2.githubusercontent.com/u/9135?v=2&s=60 - commits: 9 - linesAdded: 899 - linesDeleted: 409 - rank: 3 - newContributor: false - - username: huitseeker - gravatar: https://avatars2.githubusercontent.com/u/4142?v=2&s=60 - commits: 3 - linesAdded: 45 - linesDeleted: 38 - rank: 4 - newContributor: false - - category: EPFL - authors: - - username: xeno-by - gravatar: https://avatars1.githubusercontent.com/u/609152?v=2&s=60 - commits: 30 - linesAdded: 2170 - linesDeleted: 984 - rank: 1 - newContributor: false - - username: magarciaEPFL - gravatar: https://avatars2.githubusercontent.com/u/1249748?v=2&s=60 - commits: 5 - linesAdded: 47 - linesDeleted: 17 - rank: 2 - newContributor: false - - category: Community - authors: - - username: densh - gravatar: https://avatars2.githubusercontent.com/u/320966?v=2&s=60 - commits: 20 - linesAdded: 1604 - linesDeleted: 703 - rank: 1 - newContributor: false - - username: soc - gravatar: https://avatars0.githubusercontent.com/u/42493?v=2&s=60 - commits: 11 - linesAdded: 728 - linesDeleted: 606 - rank: 2 - newContributor: false - - username: Ichoran - gravatar: https://avatars3.githubusercontent.com/u/2298644?v=2&s=60 - commits: 8 - linesAdded: 1490 - linesDeleted: 286 - rank: 3 - newContributor: false - - username: som-snytt - gravatar: https://avatars2.githubusercontent.com/u/369425?v=2&s=60 - commits: 6 - linesAdded: 382 - linesDeleted: 224 - rank: 4 - newContributor: false - - username: dotta - gravatar: https://avatars2.githubusercontent.com/u/703748?v=2&s=60 - commits: 5 - linesAdded: 265 - linesDeleted: 13 - rank: 5 - newContributor: false - - username: VladimirNik - gravatar: https://avatars2.githubusercontent.com/u/2835001?v=2&s=60 - commits: 2 - linesAdded: 7 - linesDeleted: 8 - rank: 6 - newContributor: false - - username: rklaehn - gravatar: https://avatars0.githubusercontent.com/u/248257?v=2&s=60 - commits: 2 - linesAdded: 2 - linesDeleted: 83 - rank: 6 - newContributor: false - - username: qerub - gravatar: https://avatars2.githubusercontent.com/u/636?v=2&s=60 - commits: 1 - linesAdded: 10 - linesDeleted: 11 - rank: 7 - newContributor: false - - username: jrudolph - gravatar: https://avatars1.githubusercontent.com/u/9868?v=2&s=60 - commits: 1 - linesAdded: 4 - linesDeleted: 4 - rank: 7 - newContributor: false - - username: skyluc - gravatar: https://avatars3.githubusercontent.com/u/1098830?v=2&s=60 - commits: 1 - linesAdded: 112 - linesDeleted: 54 - rank: 7 - newContributor: false - - username: non - gravatar: https://avatars3.githubusercontent.com/u/218045?v=2&s=60 - commits: 1 - linesAdded: 19 - linesDeleted: 8 - rank: 7 - newContributor: false - - username: xuwei-k - gravatar: https://avatars3.githubusercontent.com/u/389787?v=2&s=60 - commits: 1 - linesAdded: 1 - linesDeleted: 1 - rank: 7 - newContributor: false - - username: gourlaysama - gravatar: https://avatars2.githubusercontent.com/u/733438?v=2&s=60 - commits: 1 - linesAdded: 136 - linesDeleted: 55 - rank: 7 - newContributor: false ---- diff --git a/contribute/scala-fame-data/_posts/2014-02-01-scala-fame-2014-01.md b/contribute/scala-fame-data/_posts/2014-02-01-scala-fame-2014-01.md deleted file mode 100644 index ab8e808036..0000000000 --- a/contribute/scala-fame-data/_posts/2014-02-01-scala-fame-2014-01.md +++ /dev/null @@ -1,147 +0,0 @@ ---- -layout: famearchive -title: Contributors of January 2014 -fame-year: 2014 -fame-month: 1 -fame-month-str: January -fame-categories: - - category: Typesafe - authors: - - username: retronym - gravatar: https://avatars0.githubusercontent.com/u/65551?v=2&s=60 - commits: 37 - linesAdded: 2000 - linesDeleted: 2487 - rank: 1 - newContributor: false - - username: adriaanm - gravatar: https://avatars2.githubusercontent.com/u/91083?v=2&s=60 - commits: 8 - linesAdded: 311 - linesDeleted: 175 - rank: 2 - newContributor: false - - username: gkossakowski - gravatar: https://avatars0.githubusercontent.com/u/4217?v=2&s=60 - commits: 3 - linesAdded: 15 - linesDeleted: 5 - rank: 3 - newContributor: false - - username: huitseeker - gravatar: https://avatars2.githubusercontent.com/u/4142?v=2&s=60 - commits: 2 - linesAdded: 81 - linesDeleted: 79 - rank: 4 - newContributor: false - - username: paulp - gravatar: https://avatars2.githubusercontent.com/u/9135?v=2&s=60 - commits: 2 - linesAdded: 7 - linesDeleted: 5 - rank: 4 - newContributor: false - - category: EPFL - authors: - - username: xeno-by - gravatar: https://avatars1.githubusercontent.com/u/609152?v=2&s=60 - commits: 75 - linesAdded: 8908 - linesDeleted: 6023 - rank: 1 - newContributor: false - - category: Community - authors: - - username: densh - gravatar: https://avatars2.githubusercontent.com/u/320966?v=2&s=60 - commits: 16 - linesAdded: 722 - linesDeleted: 295 - rank: 1 - newContributor: false - - username: Ichoran - gravatar: https://avatars3.githubusercontent.com/u/2298644?v=2&s=60 - commits: 10 - linesAdded: 315 - linesDeleted: 103 - rank: 2 - newContributor: false - - username: som-snytt - gravatar: https://avatars2.githubusercontent.com/u/369425?v=2&s=60 - commits: 9 - linesAdded: 646 - linesDeleted: 201 - rank: 3 - newContributor: false - - username: VladimirNik - gravatar: https://avatars2.githubusercontent.com/u/2835001?v=2&s=60 - commits: 7 - linesAdded: 1729 - linesDeleted: 350 - rank: 4 - newContributor: false - - username: rklaehn - gravatar: https://avatars0.githubusercontent.com/u/248257?v=2&s=60 - commits: 6 - linesAdded: 1288 - linesDeleted: 39 - rank: 5 - newContributor: false - - username: gourlaysama - gravatar: https://avatars2.githubusercontent.com/u/733438?v=2&s=60 - commits: 3 - linesAdded: 37 - linesDeleted: 7 - rank: 6 - newContributor: false - - username: cunei - gravatar: https://avatars2.githubusercontent.com/u/686260?v=2&s=60 - commits: 2 - linesAdded: 42 - linesDeleted: 12 - rank: 7 - newContributor: false - - username: Blaisorblade - gravatar: https://avatars2.githubusercontent.com/u/289960?v=2&s=60 - commits: 2 - linesAdded: 51 - linesDeleted: 33 - rank: 7 - newContributor: false - - username: havocp - gravatar: https://avatars2.githubusercontent.com/u/218689?v=2&s=60 - commits: 1 - linesAdded: 38 - linesDeleted: 2 - rank: 8 - newContributor: false - - username: clhodapp - gravatar: https://avatars0.githubusercontent.com/u/108633?v=2&s=60 - commits: 1 - linesAdded: 22 - linesDeleted: 0 - rank: 8 - newContributor: false - - username: rjolly - gravatar: https://avatars3.githubusercontent.com/u/128610?v=2&s=60 - commits: 1 - linesAdded: 45 - linesDeleted: 38 - rank: 8 - newContributor: false - - username: xuwei-k - gravatar: https://avatars3.githubusercontent.com/u/389787?v=2&s=60 - commits: 1 - linesAdded: 1 - linesDeleted: 1 - rank: 8 - newContributor: false - - username: dotta - gravatar: https://avatars2.githubusercontent.com/u/703748?v=2&s=60 - commits: 1 - linesAdded: 67 - linesDeleted: 67 - rank: 8 - newContributor: false ---- diff --git a/contribute/scala-fame-data/_posts/2014-03-01-scala-fame-2014-02.md b/contribute/scala-fame-data/_posts/2014-03-01-scala-fame-2014-02.md deleted file mode 100644 index 065ab45d13..0000000000 --- a/contribute/scala-fame-data/_posts/2014-03-01-scala-fame-2014-02.md +++ /dev/null @@ -1,133 +0,0 @@ ---- -layout: famearchive -title: Contributors of February 2014 -fame-year: 2014 -fame-month: 2 -fame-month-str: February -fame-categories: - - category: Typesafe - authors: - - username: retronym - gravatar: https://avatars0.githubusercontent.com/u/65551?v=2&s=60 - commits: 47 - linesAdded: 1533 - linesDeleted: 1032 - rank: 1 - newContributor: false - - username: adriaanm - gravatar: https://avatars2.githubusercontent.com/u/91083?v=2&s=60 - commits: 25 - linesAdded: 1043 - linesDeleted: 491 - rank: 2 - newContributor: false - - username: gkossakowski - gravatar: https://avatars0.githubusercontent.com/u/4217?v=2&s=60 - commits: 4 - linesAdded: 1867 - linesDeleted: 1747 - rank: 3 - newContributor: false - - username: paulp - gravatar: https://avatars2.githubusercontent.com/u/9135?v=2&s=60 - commits: 3 - linesAdded: 427 - linesDeleted: 15 - rank: 4 - newContributor: false - - username: dragos - gravatar: https://avatars2.githubusercontent.com/u/133742?v=2&s=60 - commits: 1 - linesAdded: 12 - linesDeleted: 3 - rank: 5 - newContributor: false - - category: EPFL - authors: - - username: xeno-by - gravatar: https://avatars1.githubusercontent.com/u/609152?v=2&s=60 - commits: 47 - linesAdded: 3989 - linesDeleted: 1545 - rank: 1 - newContributor: false - - username: lrytz - gravatar: https://avatars3.githubusercontent.com/u/119636?v=2&s=60 - commits: 1 - linesAdded: 18 - linesDeleted: 13 - rank: 2 - newContributor: false - - category: Community - authors: - - username: densh - gravatar: https://avatars2.githubusercontent.com/u/320966?v=2&s=60 - commits: 23 - linesAdded: 1166 - linesDeleted: 515 - rank: 1 - newContributor: false - - username: VladimirNik - gravatar: https://avatars2.githubusercontent.com/u/2835001?v=2&s=60 - commits: 10 - linesAdded: 2647 - linesDeleted: 2416 - rank: 2 - newContributor: false - - username: som-snytt - gravatar: https://avatars2.githubusercontent.com/u/369425?v=2&s=60 - commits: 9 - linesAdded: 662 - linesDeleted: 339 - rank: 3 - newContributor: false - - username: Ichoran - gravatar: https://avatars3.githubusercontent.com/u/2298644?v=2&s=60 - commits: 8 - linesAdded: 277 - linesDeleted: 75 - rank: 4 - newContributor: false - - username: pavelpavlov - gravatar: https://avatars0.githubusercontent.com/u/1330451?v=2&s=60 - commits: 3 - linesAdded: 44 - linesDeleted: 54 - rank: 5 - newContributor: false - - username: Blaisorblade - gravatar: https://avatars2.githubusercontent.com/u/289960?v=2&s=60 - commits: 3 - linesAdded: 6 - linesDeleted: 5 - rank: 5 - newContributor: false - - username: soc - gravatar: https://avatars0.githubusercontent.com/u/42493?v=2&s=60 - commits: 3 - linesAdded: 476 - linesDeleted: 338 - rank: 5 - newContributor: false - - username: gourlaysama - gravatar: https://avatars2.githubusercontent.com/u/733438?v=2&s=60 - commits: 2 - linesAdded: 7 - linesDeleted: 7 - rank: 6 - newContributor: false - - username: greenrd - gravatar: https://avatars1.githubusercontent.com/u/164965?v=2&s=60 - commits: 1 - linesAdded: 2 - linesDeleted: 3 - rank: 7 - newContributor: false - - username: clhodapp - gravatar: https://avatars0.githubusercontent.com/u/108633?v=2&s=60 - commits: 1 - linesAdded: 228 - linesDeleted: 0 - rank: 7 - newContributor: false ---- diff --git a/contribute/scala-fame-data/_posts/2014-04-01-scala-fame-2014-03.md b/contribute/scala-fame-data/_posts/2014-04-01-scala-fame-2014-03.md deleted file mode 100644 index 954a870612..0000000000 --- a/contribute/scala-fame-data/_posts/2014-04-01-scala-fame-2014-03.md +++ /dev/null @@ -1,112 +0,0 @@ ---- -layout: famearchive -title: Contributors of March 2014 -fame-year: 2014 -fame-month: 3 -fame-month-str: March -fame-categories: - - category: Typesafe - authors: - - username: adriaanm - gravatar: https://avatars2.githubusercontent.com/u/91083?v=2&s=60 - commits: 79 - linesAdded: 24547 - linesDeleted: 24999 - rank: 1 - newContributor: false - - username: retronym - gravatar: https://avatars0.githubusercontent.com/u/65551?v=2&s=60 - commits: 21 - linesAdded: 622 - linesDeleted: 101 - rank: 2 - newContributor: false - - username: gkossakowski - gravatar: https://avatars0.githubusercontent.com/u/4217?v=2&s=60 - commits: 3 - linesAdded: 236 - linesDeleted: 6 - rank: 3 - newContributor: false - - username: huitseeker - gravatar: https://avatars2.githubusercontent.com/u/4142?v=2&s=60 - commits: 2 - linesAdded: 4 - linesDeleted: 2 - rank: 4 - newContributor: false - - username: szeiger - gravatar: https://avatars3.githubusercontent.com/u/54262?v=2&s=60 - commits: 1 - linesAdded: 8 - linesDeleted: 1 - rank: 5 - newContributor: false - - username: viktorklang - gravatar: https://avatars0.githubusercontent.com/u/10871?v=2&s=60 - commits: 1 - linesAdded: 7 - linesDeleted: 2 - rank: 5 - newContributor: false - - username: paulp - gravatar: https://avatars2.githubusercontent.com/u/9135?v=2&s=60 - commits: 1 - linesAdded: 20 - linesDeleted: 3 - rank: 5 - newContributor: false - - category: EPFL - authors: - - username: xeno-by - gravatar: https://avatars1.githubusercontent.com/u/609152?v=2&s=60 - commits: 10 - linesAdded: 379 - linesDeleted: 76 - rank: 1 - newContributor: false - - category: Community - authors: - - username: densh - gravatar: https://avatars2.githubusercontent.com/u/320966?v=2&s=60 - commits: 13 - linesAdded: 589 - linesDeleted: 115 - rank: 1 - newContributor: false - - username: som-snytt - gravatar: https://avatars2.githubusercontent.com/u/369425?v=2&s=60 - commits: 4 - linesAdded: 31 - linesDeleted: 23 - rank: 2 - newContributor: false - - username: VladimirNik - gravatar: https://avatars2.githubusercontent.com/u/2835001?v=2&s=60 - commits: 2 - linesAdded: 1778 - linesDeleted: 1441 - rank: 3 - newContributor: false - - username: mkubala - gravatar: https://avatars0.githubusercontent.com/u/328844?v=2&s=60 - commits: 1 - linesAdded: 247 - linesDeleted: 53 - rank: 4 - newContributor: false - - username: puffnfresh - gravatar: https://avatars1.githubusercontent.com/u/37715?v=2&s=60 - commits: 1 - linesAdded: 0 - linesDeleted: 1 - rank: 4 - newContributor: false - - username: iainmcgin - gravatar: https://avatars0.githubusercontent.com/u/309153?v=2&s=60 - commits: 1 - linesAdded: 20 - linesDeleted: 19 - rank: 4 - newContributor: false ---- diff --git a/contribute/scala-fame-data/_posts/2014-05-01-scala-fame-2014-04.md b/contribute/scala-fame-data/_posts/2014-05-01-scala-fame-2014-04.md deleted file mode 100644 index 66c6819f17..0000000000 --- a/contribute/scala-fame-data/_posts/2014-05-01-scala-fame-2014-04.md +++ /dev/null @@ -1,91 +0,0 @@ ---- -layout: famearchive -title: Contributors of April 2014 -fame-year: 2014 -fame-month: 4 -fame-month-str: April -fame-categories: - - category: Typesafe - authors: - - username: retronym - gravatar: https://avatars0.githubusercontent.com/u/65551?v=2&s=60 - commits: 9 - linesAdded: 177 - linesDeleted: 34 - rank: 1 - newContributor: false - - username: huitseeker - gravatar: https://avatars2.githubusercontent.com/u/4142?v=2&s=60 - commits: 1 - linesAdded: 16 - linesDeleted: 1 - rank: 2 - newContributor: false - - username: gkossakowski - gravatar: https://avatars0.githubusercontent.com/u/4217?v=2&s=60 - commits: 1 - linesAdded: 10 - linesDeleted: 3 - rank: 2 - newContributor: false - - username: adriaanm - gravatar: https://avatars2.githubusercontent.com/u/91083?v=2&s=60 - commits: 1 - linesAdded: 34 - linesDeleted: 2 - rank: 2 - newContributor: false - - category: EPFL - authors: - - username: lrytz - gravatar: https://avatars3.githubusercontent.com/u/119636?v=2&s=60 - commits: 2 - linesAdded: 202 - linesDeleted: 75 - rank: 1 - newContributor: false - - username: VladUreche - gravatar: https://avatars0.githubusercontent.com/u/428706?v=2&s=60 - commits: 1 - linesAdded: 24 - linesDeleted: 3 - rank: 2 - newContributor: false - - username: xeno-by - gravatar: https://avatars1.githubusercontent.com/u/609152?v=2&s=60 - commits: 1 - linesAdded: 12 - linesDeleted: 1 - rank: 2 - newContributor: false - - category: Community - authors: - - username: gourlaysama - gravatar: https://avatars2.githubusercontent.com/u/733438?v=2&s=60 - commits: 3 - linesAdded: 51 - linesDeleted: 5 - rank: 1 - newContributor: false - - username: som-snytt - gravatar: https://avatars2.githubusercontent.com/u/369425?v=2&s=60 - commits: 2 - linesAdded: 110 - linesDeleted: 51 - rank: 2 - newContributor: false - - username: lefou - gravatar: https://avatars2.githubusercontent.com/u/1321393?v=2&s=60 - commits: 1 - linesAdded: 45 - linesDeleted: 8 - rank: 3 - newContributor: false - - username: densh - gravatar: https://avatars2.githubusercontent.com/u/320966?v=2&s=60 - commits: 1 - linesAdded: 4 - linesDeleted: 5 - rank: 3 - newContributor: false ---- diff --git a/contribute/scala-fame-data/_posts/2014-06-01-scala-fame-2014-05.md b/contribute/scala-fame-data/_posts/2014-06-01-scala-fame-2014-05.md deleted file mode 100644 index f9191afb17..0000000000 --- a/contribute/scala-fame-data/_posts/2014-06-01-scala-fame-2014-05.md +++ /dev/null @@ -1,112 +0,0 @@ ---- -layout: famearchive -title: Contributors of May 2014 -fame-year: 2014 -fame-month: 5 -fame-month-str: May -fame-categories: - - category: Typesafe - authors: - - username: retronym - gravatar: https://avatars0.githubusercontent.com/u/65551?v=2&s=60 - commits: 32 - linesAdded: 951 - linesDeleted: 136 - rank: 1 - newContributor: false - - username: adriaanm - gravatar: https://avatars2.githubusercontent.com/u/91083?v=2&s=60 - commits: 9 - linesAdded: 21 - linesDeleted: 70 - rank: 2 - newContributor: false - - username: gkossakowski - gravatar: https://avatars0.githubusercontent.com/u/4217?v=2&s=60 - commits: 3 - linesAdded: 13 - linesDeleted: 18 - rank: 3 - newContributor: false - - category: EPFL - authors: - - username: lrytz - gravatar: https://avatars3.githubusercontent.com/u/119636?v=2&s=60 - commits: 23 - linesAdded: 6048 - linesDeleted: 2325 - rank: 1 - newContributor: false - - username: xeno-by - gravatar: https://avatars1.githubusercontent.com/u/609152?v=2&s=60 - commits: 3 - linesAdded: 93 - linesDeleted: 3 - rank: 2 - newContributor: false - - category: Community - authors: - - username: som-snytt - gravatar: https://avatars2.githubusercontent.com/u/369425?v=2&s=60 - commits: 12 - linesAdded: 442 - linesDeleted: 238 - rank: 1 - newContributor: false - - username: lefou - gravatar: https://avatars2.githubusercontent.com/u/1321393?v=2&s=60 - commits: 3 - linesAdded: 14 - linesDeleted: 24 - rank: 2 - newContributor: false - - username: tvierling - gravatar: https://avatars3.githubusercontent.com/u/397857?v=2&s=60 - commits: 2 - linesAdded: 35 - linesDeleted: 11 - rank: 3 - newContributor: true - - username: clhodapp - gravatar: https://avatars0.githubusercontent.com/u/108633?v=2&s=60 - commits: 2 - linesAdded: 98 - linesDeleted: 51 - rank: 3 - newContributor: false - - username: Ichoran - gravatar: https://avatars3.githubusercontent.com/u/2298644?v=2&s=60 - commits: 2 - linesAdded: 55 - linesDeleted: 16 - rank: 3 - newContributor: false - - username: mkubala - gravatar: https://avatars0.githubusercontent.com/u/328844?v=2&s=60 - commits: 1 - linesAdded: 1 - linesDeleted: 0 - rank: 4 - newContributor: false - - username: jedesah - gravatar: https://avatars1.githubusercontent.com/u/1780116?v=2&s=60 - commits: 1 - linesAdded: 23 - linesDeleted: 1 - rank: 4 - newContributor: false - - username: VladimirNik - gravatar: https://avatars2.githubusercontent.com/u/2835001?v=2&s=60 - commits: 1 - linesAdded: 78 - linesDeleted: 40 - rank: 4 - newContributor: false - - username: densh - gravatar: https://avatars2.githubusercontent.com/u/320966?v=2&s=60 - commits: 1 - linesAdded: 14 - linesDeleted: 0 - rank: 4 - newContributor: false ---- diff --git a/contribute/scala-fame-data/_posts/2014-07-01-scala-fame-2014-06.md b/contribute/scala-fame-data/_posts/2014-07-01-scala-fame-2014-06.md deleted file mode 100644 index 5f051d08a7..0000000000 --- a/contribute/scala-fame-data/_posts/2014-07-01-scala-fame-2014-06.md +++ /dev/null @@ -1,98 +0,0 @@ ---- -layout: famearchive -title: Contributors of June 2014 -fame-year: 2014 -fame-month: 6 -fame-month-str: June -fame-categories: - - category: Typesafe - authors: - - username: adriaanm - gravatar: https://avatars2.githubusercontent.com/u/91083?v=2&s=60 - commits: 14 - linesAdded: 873 - linesDeleted: 661 - rank: 1 - newContributor: false - - username: retronym - gravatar: https://avatars0.githubusercontent.com/u/65551?v=2&s=60 - commits: 8 - linesAdded: 166 - linesDeleted: 126 - rank: 2 - newContributor: false - - category: EPFL - authors: - - username: lrytz - gravatar: https://avatars3.githubusercontent.com/u/119636?v=2&s=60 - commits: 16 - linesAdded: 1865 - linesDeleted: 437 - rank: 1 - newContributor: false - - username: xeno-by - gravatar: https://avatars1.githubusercontent.com/u/609152?v=2&s=60 - commits: 4 - linesAdded: 164 - linesDeleted: 44 - rank: 2 - newContributor: false - - username: odersky - gravatar: https://avatars2.githubusercontent.com/u/795990?v=2&s=60 - commits: 1 - linesAdded: 36 - linesDeleted: 10 - rank: 3 - newContributor: false - - category: Community - authors: - - username: Ichoran - gravatar: https://avatars3.githubusercontent.com/u/2298644?v=2&s=60 - commits: 7 - linesAdded: 275 - linesDeleted: 57 - rank: 1 - newContributor: false - - username: jxcoder - gravatar: https://avatars1.githubusercontent.com/u/1075547?v=2&s=60 - commits: 4 - linesAdded: 41 - linesDeleted: 19 - rank: 2 - newContributor: true - - username: gourlaysama - gravatar: https://avatars2.githubusercontent.com/u/733438?v=2&s=60 - commits: 2 - linesAdded: 20 - linesDeleted: 6 - rank: 3 - newContributor: false - - username: som-snytt - gravatar: https://avatars2.githubusercontent.com/u/369425?v=2&s=60 - commits: 2 - linesAdded: 146 - linesDeleted: 41 - rank: 3 - newContributor: false - - username: jrudolph - gravatar: https://avatars1.githubusercontent.com/u/9868?v=2&s=60 - commits: 1 - linesAdded: 97 - linesDeleted: 4 - rank: 4 - newContributor: false - - username: Blaisorblade - gravatar: https://avatars2.githubusercontent.com/u/289960?v=2&s=60 - commits: 1 - linesAdded: 6 - linesDeleted: 1 - rank: 4 - newContributor: false - - username: densh - gravatar: https://avatars2.githubusercontent.com/u/320966?v=2&s=60 - commits: 1 - linesAdded: 17 - linesDeleted: 5 - rank: 4 - newContributor: false ---- diff --git a/contribute/scala-fame-data/_posts/2014-08-01-scala-fame-2014-07.md b/contribute/scala-fame-data/_posts/2014-08-01-scala-fame-2014-07.md deleted file mode 100644 index c57474778d..0000000000 --- a/contribute/scala-fame-data/_posts/2014-08-01-scala-fame-2014-07.md +++ /dev/null @@ -1,98 +0,0 @@ ---- -layout: famearchive -title: Contributors of July 2014 -fame-year: 2014 -fame-month: 7 -fame-month-str: July -fame-categories: - - category: Typesafe - authors: - - username: adriaanm - gravatar: https://avatars2.githubusercontent.com/u/91083?v=2&s=60 - commits: 31 - linesAdded: 775 - linesDeleted: 712 - rank: 1 - newContributor: false - - username: phaller - gravatar: https://avatars0.githubusercontent.com/u/289943?v=2&s=60 - commits: 3 - linesAdded: 161 - linesDeleted: 49 - rank: 2 - newContributor: false - - username: retronym - gravatar: https://avatars0.githubusercontent.com/u/65551?v=2&s=60 - commits: 1 - linesAdded: 35 - linesDeleted: 34 - rank: 3 - newContributor: false - - category: EPFL - authors: - - username: lrytz - gravatar: https://avatars3.githubusercontent.com/u/119636?v=2&s=60 - commits: 4 - linesAdded: 84 - linesDeleted: 29 - rank: 1 - newContributor: false - - category: Community - authors: - - username: som-snytt - gravatar: https://avatars2.githubusercontent.com/u/369425?v=2&s=60 - commits: 11 - linesAdded: 330 - linesDeleted: 226 - rank: 1 - newContributor: false - - username: gourlaysama - gravatar: https://avatars2.githubusercontent.com/u/733438?v=2&s=60 - commits: 5 - linesAdded: 217 - linesDeleted: 94 - rank: 2 - newContributor: false - - username: dhgarrette - gravatar: https://avatars2.githubusercontent.com/u/484190?v=2&s=60 - commits: 2 - linesAdded: 1 - linesDeleted: 3 - rank: 3 - newContributor: true - - username: pocket7878 - gravatar: https://avatars1.githubusercontent.com/u/236528?v=2&s=60 - commits: 2 - linesAdded: 21 - linesDeleted: 13 - rank: 3 - newContributor: true - - username: dgruntz - gravatar: https://avatars3.githubusercontent.com/u/1516800?v=2&s=60 - commits: 2 - linesAdded: 4 - linesDeleted: 4 - rank: 3 - newContributor: false - - username: Ichoran - gravatar: https://avatars3.githubusercontent.com/u/2298644?v=2&s=60 - commits: 1 - linesAdded: 26 - linesDeleted: 9 - rank: 4 - newContributor: false - - username: kzys - gravatar: https://avatars2.githubusercontent.com/u/19111?v=2&s=60 - commits: 1 - linesAdded: 19 - linesDeleted: 0 - rank: 4 - newContributor: false - - username: densh - gravatar: https://avatars2.githubusercontent.com/u/320966?v=2&s=60 - commits: 1 - linesAdded: 3 - linesDeleted: 1 - rank: 4 - newContributor: false ---- diff --git a/contribute/scala-fame-data/_posts/2014-09-01-scala-fame-2014-08.md b/contribute/scala-fame-data/_posts/2014-09-01-scala-fame-2014-08.md deleted file mode 100644 index afef86d3be..0000000000 --- a/contribute/scala-fame-data/_posts/2014-09-01-scala-fame-2014-08.md +++ /dev/null @@ -1,70 +0,0 @@ ---- -layout: famearchive -title: Contributors of August 2014 -fame-year: 2014 -fame-month: 8 -fame-month-str: August -fame-categories: - - category: Typesafe - authors: - - username: retronym - gravatar: https://avatars0.githubusercontent.com/u/65551?v=2&s=60 - commits: 3 - linesAdded: 57 - linesDeleted: 4 - rank: 1 - newContributor: false - - username: adriaanm - gravatar: https://avatars2.githubusercontent.com/u/91083?v=2&s=60 - commits: 2 - linesAdded: 57 - linesDeleted: 42 - rank: 2 - newContributor: false - - category: EPFL - authors: - - username: lrytz - gravatar: https://avatars3.githubusercontent.com/u/119636?v=2&s=60 - commits: 21 - linesAdded: 3764 - linesDeleted: 2122 - rank: 1 - newContributor: false - - category: Community - authors: - - username: gourlaysama - gravatar: https://avatars2.githubusercontent.com/u/733438?v=2&s=60 - commits: 10 - linesAdded: 171 - linesDeleted: 7680 - rank: 1 - newContributor: false - - username: som-snytt - gravatar: https://avatars2.githubusercontent.com/u/369425?v=2&s=60 - commits: 10 - linesAdded: 917 - linesDeleted: 543 - rank: 1 - newContributor: false - - username: gbasler - gravatar: https://avatars1.githubusercontent.com/u/273035?v=2&s=60 - commits: 1 - linesAdded: 14 - linesDeleted: 22 - rank: 2 - newContributor: false - - username: dgruntz - gravatar: https://avatars3.githubusercontent.com/u/1516800?v=2&s=60 - commits: 1 - linesAdded: 18 - linesDeleted: 18 - rank: 2 - newContributor: false - - username: Ichoran - gravatar: https://avatars3.githubusercontent.com/u/2298644?v=2&s=60 - commits: 1 - linesAdded: 26 - linesDeleted: 27 - rank: 2 - newContributor: false ---- diff --git a/contribute/scala-fame-data/_posts/2014-10-01-scala-fame-2014-09.md b/contribute/scala-fame-data/_posts/2014-10-01-scala-fame-2014-09.md deleted file mode 100644 index ee67016186..0000000000 --- a/contribute/scala-fame-data/_posts/2014-10-01-scala-fame-2014-09.md +++ /dev/null @@ -1,84 +0,0 @@ ---- -layout: famearchive -title: Contributors of September 2014 -fame-year: 2014 -fame-month: 9 -fame-month-str: September -fame-categories: - - category: Typesafe - authors: - - username: retronym - gravatar: https://avatars0.githubusercontent.com/u/65551?v=2&s=60 - commits: 12 - linesAdded: 182 - linesDeleted: 23 - rank: 1 - newContributor: false - - username: dragos - gravatar: https://avatars2.githubusercontent.com/u/133742?v=2&s=60 - commits: 1 - linesAdded: 169 - linesDeleted: 169 - rank: 2 - newContributor: false - - category: EPFL - authors: - - username: lrytz - gravatar: https://avatars3.githubusercontent.com/u/119636?v=2&s=60 - commits: 6 - linesAdded: 262 - linesDeleted: 85 - rank: 1 - newContributor: false - - username: xeno-by - gravatar: https://avatars1.githubusercontent.com/u/609152?v=2&s=60 - commits: 3 - linesAdded: 1272 - linesDeleted: 1240 - rank: 2 - newContributor: false - - category: Community - authors: - - username: gourlaysama - gravatar: https://avatars2.githubusercontent.com/u/733438?v=2&s=60 - commits: 9 - linesAdded: 1782 - linesDeleted: 1227 - rank: 1 - newContributor: false - - username: som-snytt - gravatar: https://avatars2.githubusercontent.com/u/369425?v=2&s=60 - commits: 4 - linesAdded: 305 - linesDeleted: 125 - rank: 2 - newContributor: false - - username: puffnfresh - gravatar: https://avatars1.githubusercontent.com/u/37715?v=2&s=60 - commits: 3 - linesAdded: 42 - linesDeleted: 7 - rank: 3 - newContributor: false - - username: Ichoran - gravatar: https://avatars3.githubusercontent.com/u/2298644?v=2&s=60 - commits: 2 - linesAdded: 12 - linesDeleted: 1 - rank: 4 - newContributor: false - - username: gbasler - gravatar: https://avatars1.githubusercontent.com/u/273035?v=2&s=60 - commits: 1 - linesAdded: 115 - linesDeleted: 41 - rank: 5 - newContributor: false - - username: soc - gravatar: https://avatars0.githubusercontent.com/u/42493?v=2&s=60 - commits: 1 - linesAdded: 4 - linesDeleted: 1 - rank: 5 - newContributor: false ---- diff --git a/contribute/scala-fame-data/_posts/2014-11-01-scala-fame-2014-10.md b/contribute/scala-fame-data/_posts/2014-11-01-scala-fame-2014-10.md deleted file mode 100644 index 0c957577fb..0000000000 --- a/contribute/scala-fame-data/_posts/2014-11-01-scala-fame-2014-10.md +++ /dev/null @@ -1,63 +0,0 @@ ---- -layout: famearchive -title: Contributors of October 2014 -fame-year: 2014 -fame-month: 10 -fame-month-str: October -fame-categories: - - category: Typesafe - authors: - - username: retronym - gravatar: https://avatars0.githubusercontent.com/u/65551?v=2&s=60 - commits: 11 - linesAdded: 414 - linesDeleted: 51 - rank: 1 - newContributor: false - - username: gkossakowski - gravatar: https://avatars0.githubusercontent.com/u/4217?v=2&s=60 - commits: 2 - linesAdded: 2 - linesDeleted: 2 - rank: 2 - newContributor: false - - username: adriaanm - gravatar: https://avatars2.githubusercontent.com/u/91083?v=2&s=60 - commits: 2 - linesAdded: 54 - linesDeleted: 18 - rank: 2 - newContributor: false - - category: EPFL - authors: - - username: lrytz - gravatar: https://avatars3.githubusercontent.com/u/119636?v=2&s=60 - commits: 4 - linesAdded: 146 - linesDeleted: 171 - rank: 1 - newContributor: false - - category: Community - authors: - - username: roberthoedicke - gravatar: https://avatars0.githubusercontent.com/u/9093826?v=2&s=60 - commits: 9 - linesAdded: 15 - linesDeleted: 15 - rank: 1 - newContributor: true - - username: puffnfresh - gravatar: https://avatars1.githubusercontent.com/u/37715?v=2&s=60 - commits: 1 - linesAdded: 19 - linesDeleted: 10 - rank: 2 - newContributor: false - - username: Blaisorblade - gravatar: https://avatars2.githubusercontent.com/u/289960?v=2&s=60 - commits: 1 - linesAdded: 0 - linesDeleted: 93 - rank: 2 - newContributor: false ---- diff --git a/contribute/scala-fame-data/_posts/2014-12-01-scala-fame-2014-11.md b/contribute/scala-fame-data/_posts/2014-12-01-scala-fame-2014-11.md deleted file mode 100644 index 3c95eb2521..0000000000 --- a/contribute/scala-fame-data/_posts/2014-12-01-scala-fame-2014-11.md +++ /dev/null @@ -1,112 +0,0 @@ ---- -layout: famearchive -title: Contributors of November 2014 -fame-year: 2014 -fame-month: 11 -fame-month-str: November -fame-categories: - - category: Typesafe - authors: - - username: retronym - gravatar: https://avatars1.githubusercontent.com/u/65551?v=3&s=60 - commits: 24 - linesAdded: 650 - linesDeleted: 90 - rank: 1 - newContributor: false - - username: adriaanm - gravatar: https://avatars3.githubusercontent.com/u/91083?v=3&s=60 - commits: 3 - linesAdded: 208 - linesDeleted: 54 - rank: 2 - newContributor: false - - username: phaller - gravatar: https://avatars1.githubusercontent.com/u/289943?v=3&s=60 - commits: 1 - linesAdded: 10 - linesDeleted: 8 - rank: 3 - newContributor: false - - category: EPFL - authors: - - username: lrytz - gravatar: https://avatars2.githubusercontent.com/u/119636?v=3&s=60 - commits: 6 - linesAdded: 782 - linesDeleted: 32 - rank: 1 - newContributor: false - - username: heathermiller - gravatar: https://avatars1.githubusercontent.com/u/687163?v=3&s=60 - commits: 2 - linesAdded: 64 - linesDeleted: 66 - rank: 2 - newContributor: false - - category: Community - authors: - - username: gourlaysama - gravatar: https://avatars3.githubusercontent.com/u/733438?v=3&s=60 - commits: 7 - linesAdded: 245 - linesDeleted: 83 - rank: 1 - newContributor: false - - username: som-snytt - gravatar: https://avatars3.githubusercontent.com/u/369425?v=3&s=60 - commits: 3 - linesAdded: 53 - linesDeleted: 53 - rank: 2 - newContributor: false - - username: advancedxy - gravatar: https://avatars1.githubusercontent.com/u/807537?v=3&s=60 - commits: 2 - linesAdded: 2 - linesDeleted: 2 - rank: 3 - newContributor: true - - username: kanielc - gravatar: https://avatars1.githubusercontent.com/u/1334074?v=3&s=60 - commits: 2 - linesAdded: 3 - linesDeleted: 3 - rank: 3 - newContributor: true - - username: gdickinson - gravatar: https://avatars3.githubusercontent.com/u/1130928?v=3&s=60 - commits: 2 - linesAdded: 0 - linesDeleted: 380 - rank: 3 - newContributor: true - - username: Ichoran - gravatar: https://avatars2.githubusercontent.com/u/2298644?v=3&s=60 - commits: 2 - linesAdded: 35 - linesDeleted: 18 - rank: 3 - newContributor: false - - username: ruippeixotog - gravatar: https://avatars1.githubusercontent.com/u/613493?v=3&s=60 - commits: 1 - linesAdded: 81 - linesDeleted: 8 - rank: 4 - newContributor: false - - username: mpociecha - gravatar: https://avatars0.githubusercontent.com/u/6143494?v=3&s=60 - commits: 1 - linesAdded: 5 - linesDeleted: 2 - rank: 4 - newContributor: false - - username: soc - gravatar: https://avatars1.githubusercontent.com/u/42493?v=3&s=60 - commits: 1 - linesAdded: 1 - linesDeleted: 1 - rank: 4 - newContributor: false ---- diff --git a/contribute/scala-fame-data/_posts/2015-01-01-scala-fame-2014-12.md b/contribute/scala-fame-data/_posts/2015-01-01-scala-fame-2014-12.md deleted file mode 100644 index c11348b33a..0000000000 --- a/contribute/scala-fame-data/_posts/2015-01-01-scala-fame-2014-12.md +++ /dev/null @@ -1,70 +0,0 @@ ---- -layout: famearchive -title: Contributors of December 2014 -fame-year: 2014 -fame-month: 12 -fame-month-str: December -fame-categories: - - category: Typesafe - authors: - - username: adriaanm - gravatar: https://avatars3.githubusercontent.com/u/91083?v=3&s=60 - commits: 2 - linesAdded: 962 - linesDeleted: 290 - rank: 1 - newContributor: false - - username: retronym - gravatar: https://avatars1.githubusercontent.com/u/65551?v=3&s=60 - commits: 1 - linesAdded: 5 - linesDeleted: 1 - rank: 2 - newContributor: false - - category: EPFL - authors: - - username: lrytz - gravatar: https://avatars2.githubusercontent.com/u/119636?v=3&s=60 - commits: 4 - linesAdded: 61 - linesDeleted: 50 - rank: 1 - newContributor: false - - category: Community - authors: - - username: gbasler - gravatar: https://avatars0.githubusercontent.com/u/273035?v=3&s=60 - commits: 2 - linesAdded: 567 - linesDeleted: 1 - rank: 1 - newContributor: false - - username: kanielc - gravatar: https://avatars1.githubusercontent.com/u/1334074?v=3&s=60 - commits: 1 - linesAdded: 43 - linesDeleted: 6 - rank: 2 - newContributor: false - - username: xuwei-k - gravatar: https://avatars2.githubusercontent.com/u/389787?v=3&s=60 - commits: 1 - linesAdded: 2 - linesDeleted: 2 - rank: 2 - newContributor: false - - username: gourlaysama - gravatar: https://avatars3.githubusercontent.com/u/733438?v=3&s=60 - commits: 1 - linesAdded: 1 - linesDeleted: 1 - rank: 2 - newContributor: false - - username: som-snytt - gravatar: https://avatars3.githubusercontent.com/u/369425?v=3&s=60 - commits: 1 - linesAdded: 44 - linesDeleted: 3 - rank: 2 - newContributor: false ---- diff --git a/contribute/scala-fame-data/_posts/2015-02-01-scala-fame-2015-01.md b/contribute/scala-fame-data/_posts/2015-02-01-scala-fame-2015-01.md deleted file mode 100644 index 4af6e3d778..0000000000 --- a/contribute/scala-fame-data/_posts/2015-02-01-scala-fame-2015-01.md +++ /dev/null @@ -1,56 +0,0 @@ ---- -layout: famearchive -title: Contributors of January 2015 -fame-year: 2015 -fame-month: 1 -fame-month-str: January -fame-categories: - - category: Typesafe - authors: - - username: retronym - gravatar: https://avatars1.githubusercontent.com/u/65551?v=3&s=60 - commits: 10 - linesAdded: 222 - linesDeleted: 26 - rank: 1 - newContributor: false - - username: adriaanm - gravatar: https://avatars3.githubusercontent.com/u/91083?v=3&s=60 - commits: 4 - linesAdded: 819 - linesDeleted: 636 - rank: 2 - newContributor: false - - category: EPFL - authors: - - username: lrytz - gravatar: https://avatars2.githubusercontent.com/u/119636?v=3&s=60 - commits: 4 - linesAdded: 470 - linesDeleted: 152 - rank: 1 - newContributor: false - - category: Community - authors: - - username: kanielc - gravatar: https://avatars1.githubusercontent.com/u/1334074?v=3&s=60 - commits: 2 - linesAdded: 58 - linesDeleted: 2 - rank: 1 - newContributor: false - - username: som-snytt - gravatar: https://avatars3.githubusercontent.com/u/369425?v=3&s=60 - commits: 2 - linesAdded: 35 - linesDeleted: 41 - rank: 1 - newContributor: false - - username: dickwall - gravatar: https://avatars2.githubusercontent.com/u/56453?v=3&s=60 - commits: 1 - linesAdded: 74 - linesDeleted: 0 - rank: 2 - newContributor: false ---- diff --git a/contribute/scala-fame-data/_posts/2015-03-01-scala-fame-2015-02.md b/contribute/scala-fame-data/_posts/2015-03-01-scala-fame-2015-02.md deleted file mode 100644 index 3fe846623b..0000000000 --- a/contribute/scala-fame-data/_posts/2015-03-01-scala-fame-2015-02.md +++ /dev/null @@ -1,70 +0,0 @@ ---- -layout: famearchive -title: Contributors of February 2015 -fame-year: 2015 -fame-month: 2 -fame-month-str: February -fame-categories: - - category: Typesafe - authors: - - username: adriaanm - gravatar: https://avatars3.githubusercontent.com/u/91083?v=3&s=60 - commits: 15 - linesAdded: 1199 - linesDeleted: 588 - rank: 1 - newContributor: false - - username: retronym - gravatar: https://avatars1.githubusercontent.com/u/65551?v=3&s=60 - commits: 13 - linesAdded: 557 - linesDeleted: 64 - rank: 2 - newContributor: false - - category: EPFL - authors: - - username: lrytz - gravatar: https://avatars2.githubusercontent.com/u/119636?v=3&s=60 - commits: 10 - linesAdded: 1629 - linesDeleted: 276 - rank: 1 - newContributor: false - - username: xeno-by - gravatar: https://avatars0.githubusercontent.com/u/609152?v=3&s=60 - commits: 2 - linesAdded: 108 - linesDeleted: 15 - rank: 2 - newContributor: false - - username: axel22 - gravatar: https://avatars0.githubusercontent.com/u/151774?v=3&s=60 - commits: 1 - linesAdded: 61 - linesDeleted: 0 - rank: 3 - newContributor: false - - category: Community - authors: - - username: Ichoran - gravatar: https://avatars2.githubusercontent.com/u/2298644?v=3&s=60 - commits: 3 - linesAdded: 62 - linesDeleted: 25 - rank: 1 - newContributor: false - - username: som-snytt - gravatar: https://avatars3.githubusercontent.com/u/369425?v=3&s=60 - commits: 2 - linesAdded: 121 - linesDeleted: 30 - rank: 2 - newContributor: false - - username: milessabin - gravatar: https://avatars1.githubusercontent.com/u/131183?v=3&s=60 - commits: 1 - linesAdded: 123 - linesDeleted: 37 - rank: 3 - newContributor: false ---- diff --git a/contribute/scala-fame-data/_posts/2015-04-01-scala-fame-2015-03.md b/contribute/scala-fame-data/_posts/2015-04-01-scala-fame-2015-03.md deleted file mode 100644 index 62e7ea2f58..0000000000 --- a/contribute/scala-fame-data/_posts/2015-04-01-scala-fame-2015-03.md +++ /dev/null @@ -1,91 +0,0 @@ ---- -layout: famearchive -title: Contributors of March 2015 -fame-year: 2015 -fame-month: 3 -fame-month-str: March -fame-categories: - - category: Typesafe - authors: - - username: retronym - gravatar: https://avatars1.githubusercontent.com/u/65551?v=3&s=60 - commits: 9 - linesAdded: 553 - linesDeleted: 27 - rank: 1 - newContributor: false - - username: adriaanm - gravatar: https://avatars3.githubusercontent.com/u/91083?v=3&s=60 - commits: 6 - linesAdded: 12 - linesDeleted: 72 - rank: 2 - newContributor: false - - category: EPFL - authors: - - username: lrytz - gravatar: https://avatars2.githubusercontent.com/u/119636?v=3&s=60 - commits: 18 - linesAdded: 2857 - linesDeleted: 916 - rank: 1 - newContributor: false - - username: xeno-by - gravatar: https://avatars0.githubusercontent.com/u/609152?v=3&s=60 - commits: 1 - linesAdded: 7 - linesDeleted: 5 - rank: 2 - newContributor: false - - category: Community - authors: - - username: gourlaysama - gravatar: https://avatars3.githubusercontent.com/u/733438?v=3&s=60 - commits: 4 - linesAdded: 132 - linesDeleted: 22 - rank: 1 - newContributor: false - - username: gbasler - gravatar: https://avatars0.githubusercontent.com/u/273035?v=3&s=60 - commits: 3 - linesAdded: 1986 - linesDeleted: 111 - rank: 2 - newContributor: false - - username: kzys - gravatar: https://avatars3.githubusercontent.com/u/19111?v=3&s=60 - commits: 2 - linesAdded: 37 - linesDeleted: 18 - rank: 3 - newContributor: false - - username: som-snytt - gravatar: https://avatars3.githubusercontent.com/u/369425?v=3&s=60 - commits: 2 - linesAdded: 91 - linesDeleted: 7 - rank: 3 - newContributor: false - - username: sschaef - gravatar: https://avatars3.githubusercontent.com/u/488530?v=3&s=60 - commits: 1 - linesAdded: 1 - linesDeleted: 1 - rank: 4 - newContributor: false - - username: khernyo - gravatar: https://avatars2.githubusercontent.com/u/447532?v=3&s=60 - commits: 1 - linesAdded: 27 - linesDeleted: 8 - rank: 4 - newContributor: false - - username: soc - gravatar: https://avatars1.githubusercontent.com/u/42493?v=3&s=60 - commits: 1 - linesAdded: 7 - linesDeleted: 7 - rank: 4 - newContributor: false ---- diff --git a/contribute/scala-fame-data/_posts/2015-11-01-scala-fame-2015-10.md b/contribute/scala-fame-data/_posts/2015-11-01-scala-fame-2015-10.md deleted file mode 100644 index 41698296db..0000000000 --- a/contribute/scala-fame-data/_posts/2015-11-01-scala-fame-2015-10.md +++ /dev/null @@ -1,42 +0,0 @@ ---- -layout: famearchive -title: Contributors of October 2015 -fame-year: 2015 -fame-month: 10 -fame-month-str: October -fame-categories: - - category: Typesafe - authors: - - username: SethTisue - gravatar: https://avatars.githubusercontent.com/u/161079?v=3 - commits: 9 - linesAdded: 80 - linesDeleted: 55 - rank: 1 - newContributor: false - - category: EPFL - authors: - - username: sjrd - gravatar: https://avatars.githubusercontent.com/u/535934?v=3 - commits: 1 - linesAdded: 1 - linesDeleted: 4 - rank: 1 - newContributor: false - - category: Community - authors: - - username: performantdata - gravatar: https://avatars.githubusercontent.com/u/6363453?v=3 - commits: 6 - linesAdded: 97 - linesDeleted: 50 - rank: 1 - newContributor: true - - username: janekdb - gravatar: https://avatars.githubusercontent.com/u/1123855?v=3 - commits: 1 - linesAdded: 86 - linesDeleted: 71 - rank: 2 - newContributor: false ---- diff --git a/contribute/scala-fame-data/_posts/2015-12-01-scala-fame-2015-11.md b/contribute/scala-fame-data/_posts/2015-12-01-scala-fame-2015-11.md deleted file mode 100644 index 8f9b7ff3b1..0000000000 --- a/contribute/scala-fame-data/_posts/2015-12-01-scala-fame-2015-11.md +++ /dev/null @@ -1,63 +0,0 @@ ---- -layout: famearchive -title: Contributors of November 2015 -fame-year: 2015 -fame-month: 11 -fame-month-str: November -fame-categories: - - category: Typesafe - authors: - - username: szeiger - gravatar: https://avatars.githubusercontent.com/u/54262?v=3 - commits: 5 - linesAdded: 427 - linesDeleted: 116 - rank: 1 - newContributor: false - - username: SethTisue - gravatar: https://avatars.githubusercontent.com/u/161079?v=3 - commits: 3 - linesAdded: 21 - linesDeleted: 21 - rank: 2 - newContributor: false - - username: retronym - gravatar: https://avatars.githubusercontent.com/u/65551?v=3 - commits: 3 - linesAdded: 44 - linesDeleted: 28 - rank: 2 - newContributor: false - - username: adriaanm - gravatar: https://avatars.githubusercontent.com/u/91083?v=3 - commits: 2 - linesAdded: 22 - linesDeleted: 25 - rank: 3 - newContributor: false - - username: lrytz - gravatar: https://avatars.githubusercontent.com/u/119636?v=3 - commits: 1 - linesAdded: 7 - linesDeleted: 18 - rank: 4 - newContributor: false - - category: EPFL - authors: - - category: Community - authors: - - username: janekdb - gravatar: https://avatars.githubusercontent.com/u/1123855?v=3 - commits: 6 - linesAdded: 76 - linesDeleted: 63 - rank: 1 - newContributor: false - - username: soc - gravatar: https://avatars.githubusercontent.com/u/42493?v=3 - commits: 2 - linesAdded: 14 - linesDeleted: 19 - rank: 2 - newContributor: false ---- diff --git a/contribute/scala-fame.md b/contribute/scala-fame.md deleted file mode 100644 index 4b6591004a..0000000000 --- a/contribute/scala-fame.md +++ /dev/null @@ -1,21 +0,0 @@ ---- -layout: page-full-width -title: Scala Contributor Hall of Fame ---- - -A big thank you to everyone who has contributed over the years to: - - - [the Scala library and compiler](https://github.com/scala/scala/contributors) - - [the Scala documentation website](https://github.com/scala/scala.github.com/contributors) - -What follows are the commit totals, to the 2.12.x branch of the scala/scala repo only, -for last month. (For a commit to be counted, it must have been both committed and merged -in the same month.) - -For a more detailed view of recent activity, see the repo's -[GitHub Pulse page](https://github.com/scala/scala/pulse/monthly). - -{% for data in site.categories.scala-fame-data limit:1 %} - {% assign famedata = data %} - {% include render-scala-fame.html %} -{% endfor %} From 76fa6b98681ed1603718b99c6c20ec003b11025b Mon Sep 17 00:00:00 2001 From: Seth Tisue Date: Wed, 24 Feb 2016 16:48:19 -0500 Subject: [PATCH 0094/1870] Typesafe -> Lightbend in a bunch of places --- contribute/documentation.md | 4 ++-- contribute/guide.md | 2 +- contribute/hacker-guide.md | 2 +- contribute/index.md | 4 ++-- 4 files changed, 6 insertions(+), 6 deletions(-) diff --git a/contribute/documentation.md b/contribute/documentation.md index d7597d8884..6b5c81a0fc 100644 --- a/contribute/documentation.md +++ b/contribute/documentation.md @@ -30,10 +30,10 @@ without creating an issue, but please look to see if there is an issue already s ### Examples/Tutorials in Activator Templates -[Typesafe Activator](https://typesafe.com/community/core-tools/activator-and-sbt) +[Lightbend Activator](https://www.lightbend.com/community/core-tools/activator-and-sbt) is a tool based on SBT, with a UI mode that is ideal for code based tutorials, overviews and walk-throughs. To contribute an example in activator, you can fork an existing template, edit it, add a tutorial, upload it to github and then submit the github project into the template repository. It's the fastest way to produce a working code example with tutorial. -Please see [Contributing an Activator Template](https://typesafe.com/activator/template/contribute) for more details. +Please see [Contributing an Activator Template](https://www.lightbend.com/activator/template/contribute) for more details. ### The Main Scala Documentation Site diff --git a/contribute/guide.md b/contribute/guide.md index 148ceb7570..b92bd2fe89 100644 --- a/contribute/guide.md +++ b/contribute/guide.md @@ -44,7 +44,7 @@ Typically the scaladoc tool provides a low entry point for new committers, so it On the Scala bug tracker you will find many bugs that are [marked as good starting points to contributing ("community" bugs)](https://issues.scala-lang.org/secure/IssueNavigator.jspa?requestId=12111) or [that are not currently assigned](https://issues.scala-lang.org/secure/IssueNavigator.jspa?requestId=12112) and that you could pick up. Once you decided on a ticket to look at, see the next step on how to proceed further. If you are interested in contributing code, we ask you to sign the -[Scala Contributor License Agreement](http://typesafe.com/contribute/cla/scala), +[Scala Contributor License Agreement](http://www.lightbend.com/contribute/cla/scala), which allows us to ensure that all code submitted to the project is unencumbered by copyrights or patents. diff --git a/contribute/hacker-guide.md b/contribute/hacker-guide.md index fb79d8166d..47ebafe634 100644 --- a/contribute/hacker-guide.md +++ b/contribute/hacker-guide.md @@ -402,7 +402,7 @@ Once you are satisfied with your work, synced with `master` and cleaned up your Now, we must simply submit our proposed patch. Navigate to your branch in GitHub (for me it was `https://github.com/xeno-by/scala/tree/ticket/6725`) and click the pull request button to submit your patch as a pull request to Scala. If you've never submitted patches to Scala, you will -need to sign the contributor license agreement, which [can be done online](http://typesafe.com/contribute/cla/scala) within a few minutes. +need to sign the contributor license agreement, which [can be done online](http://www.lightbend.com/contribute/cla/scala) within a few minutes. Submit a pull request diff --git a/contribute/index.md b/contribute/index.md index 137838aba4..925e83248e 100644 --- a/contribute/index.md +++ b/contribute/index.md @@ -27,7 +27,7 @@ Coordination of contribution efforts takes place on the
@@ -119,7 +119,7 @@ to build and test a corpus of Scala open source projects against development versions of the Scala compiler and standard library in order to discover regressions prior to releases. -The build uses Typesafe's +The build uses Lightbend's [dbuild](https://github.com/typesafehub/dbuild) tool, which leverages [sbt](http://www.scala-sbt.org). From 55dfcf608ea8e8fd8a648ffa99ee9ccf45ae0486 Mon Sep 17 00:00:00 2001 From: Chase Long Date: Mon, 6 Jun 2016 21:12:56 -0500 Subject: [PATCH 0095/1870] Replace references to ant with corresponding sbt references --- contribute/hacker-guide.md | 105 ++++++++++--------------------------- 1 file changed, 29 insertions(+), 76 deletions(-) diff --git a/contribute/hacker-guide.md b/contribute/hacker-guide.md index 47ebafe634..dab991eba5 100644 --- a/contribute/hacker-guide.md +++ b/contribute/hacker-guide.md @@ -100,47 +100,25 @@ If you are new to Git and branching, read the [Branching Chapter](http://git-scm The next step after cloning your fork is setting up your machine to build Scala. -* It is recommended to use Java `1.6` (not `1.7` or `1.8`, because they might cause occasional glitches). -* The build tool is `ant`. If you are behind a HTTP proxy, include [`ANT_ARGS=-autoproxy`](https://ant.apache.org/manual/proxy.html) in your environment. -* The build runs the `pull-binary-libs.sh` script to download bootstrap libs. This requires `bash` and `curl`. -* The majority of our team works on Linux and OS X, so these operating systems are guaranteed to work. -* Windows is supported, but it might have issues. Please report to [the issue tracker](https://issues.scala-lang.org/) if you encounter any. +You need the following tools: -Building Scala is as easy as running `ant` in the root of your cloned repository. Be prepared to wait for a while-- a full "clean" build -takes 8+ minutes depending on your machine (and up to 30 minutes on older machines with less memory). Incremental builds are usually within 30-120 seconds range (again, your mileage might vary -with your hardware). - - 16:50 ~/Projects/scala (ticket/6725)$ ant - Buildfile: /Users/xeno_by/Projects/scala/build.xml - - strap.clean: - - pack.clean: - - init.jars.check: - - init.jars: - [echo] Updating bootstrap libs. (To do this by hand, run ./pull-binary-libs.sh) - [exec] Resolving [943cd5c8802b2a3a64a010efb86ec19bac142e40/lib/ant/ant-contrib.jar] - - ... - - pack.bin: - [mkdir] Created dir: /Users/xeno_by/Projects/scala/build/pack/bin +* A Java SDK. The baseline version is 6 for 2.11.x and 8 for 2.12.x. It's possible to use a later SDK for local development, but the continuous integration builds will verify against the baseline version. +* `sbt`, an interactive build tool commonly used in Scala projects. Acquiring sbt manually is not necessary -- the recommended approach is to download the [sbt-extras runner script](https://github.com/paulp/sbt-extras/blob/master/sbt) and use it in place of `sbt`. The script will download and run the correct version of sbt when run from the Scala repository's root directory. +* `curl` -- the build uses `curl` in the `pull-binary-libs.sh` script to download bootstrap libs. - pack.done: +The majority of our team works on Linux and OS X, so these operating systems are guaranteed to work. Windows is supported, but it might have issues. Please report to [the issue tracker](https://issues.scala-lang.org/) if you encounter any. - build: - - BUILD SUCCESSFUL - Total time: 9 minutes 41 seconds +Building Scala is as easy as running `sbt dist/mkPack` in the root of your cloned repository. Be prepared to wait for a while -- a full "clean" build +takes 8+ minutes depending on your machine (and up to 30 minutes on older machines with less memory). Incremental builds are usually within 30-120 seconds range (again, your mileage might vary +with your hardware). ### IDE There's no single editor of choice for working with Scala sources, as there are trade-offs associated with each available tool. Both Eclipse and IntelliJ IDEA have Scala plugins, which are known to work with our codebase. -Both of those Scala plugins provide navigation, refactoring and error reporting functionality as well as integrated debugging. +Both of those Scala plugins provide navigation, refactoring, error reporting functionality, and integrated debugging. +See [the Scala README](https://github.com/scala/scala#ide-setup) for instructions on using Eclipse and IntelliJ IDEA with the Scala repository. There also exist lighter-weight editors such as Emacs, Sublime or jEdit which are faster and much less memory/compute-intensive to run, while lacking semantic services and debugging. To address this shortcoming, they can integrate with ENSIME, @@ -155,8 +133,8 @@ When hacking on your topic of choice, you'll be modifying Scala, compiling it an Typically you would want to first make sure that your changes work on a small example and afterwards verify that nothing break by running a comprehensive test suite. -We'll start by creating a `sandbox` directory (this particular name doesn't bear any special meaning), which will hold a single test file and its compilation results. First, let's make sure that -[the bug](https://issues.scala-lang.org/browse/SI-6725) is indeed reproducible by putting together a simple test and compiling and running it with the Scala compiler that we built using `ant`. The Scala compiler that we just built is located in `build/pack/bin`. +We'll start by creating a `sandbox` directory (`./sandbox is listed in the .gitignore of the Scala repository), which will hold a single test file and its compilation results. First, let's make sure that +[the bug](https://issues.scala-lang.org/browse/SI-6725) is indeed reproducible by putting together a simple test and compiling and running it with the Scala compiler that we built using `sbt`. The Scala compiler that we just built is located in `build/pack/bin`. 17:25 ~/Projects/scala (ticket/6725)$ mkdir sandbox 17:26 ~/Projects/scala (ticket/6725)$ cd sandbox @@ -178,31 +156,24 @@ Now, implement your bugfix or new feature! Here are also some tips & tricks that have proven useful in Scala development: * If after introducing changes or updating your clone, you get `AbstractMethodError` or other linkage exceptions, - try doing `ant clean build`. Due to the way how Scala compiles traits, if a trait changes, then it's sometimes not enough to recompile - just that trait, but it might also be necessary to recompile its users. The `ant` tool is not smart enough to do that, which might lead to - very strange errors. Full-rebuilds fix the problem. Fortunately that's rarely necessary, because full-rebuilds take a lot of time-- the same 8-30 minutes as mentioned above. + try doing `sbt clean`. Due to the way Scala compiles traits, if a trait changes, then it's sometimes not enough to recompile + just that trait; it might also be necessary to recompile its users. The `sbt` tool is not smart enough to do that, which might lead to + very strange errors. Full rebuilds fix the problem. Fortunately that's rarely necessary, because full rebuilds take a lot of time -- the same 8-30 minutes as mentioned above. * Even on solid state drives packaging Scala distribution (i.e. creating jars from class files) is a non-trivial task. To save time here, - some people in our team do `ant quick.comp` instead of `ant` and then create custom scripts ([here](https://github.com/adriaanm/binfu/blob/master/scafu.sh) are some examples to get you started) to launch Scala from `build/quick/classes`. + some people in our team do `sbt compile` instead of `sbt dist/mkPack` and then create custom scripts using `sbt/mkBin` to launch Scala from `./build/quick/bin`. Also see [the Scala README](https://github.com/scala/scala#incremental-compilation) for tips on speeding up compile times. * Don't underestimate the power of `print`. When starting with Scala, I spent a lot of time in the debugger trying to figure out how things work. However later I found out that print-based debugging is often more effective than jumping around. While it might be obvious - to some, I'd like to explicitly mention that it's also useful to print stack traces to understand the flow of execution. When working with `Trees`, you might want to use `showRaw` to get the `AST` representation. -* You can publish your newly-built scala version locally to use it from sbt. Here's how: + to some, I'd like to explicitly mention that it's also useful to print stack traces to understand the flow of execution. When working with `Trees`, you might want to use the Scala `showRaw` to get the `AST` representation. +* You can publish your newly-built scala version locally using `sbt publishLocal` to use it from `sbt`. Here's how: - $ ant publish-local-opt -Dmaven.version.suffix="-test" + $ sbt publishLocal // This may take a while + ... $ sbt - [info] Set current project to test (in build file:/Users/georgii/workspace/test/) - > set resolvers += Resolver.mavenLocal - [info] Defining *:resolvers - [info] The new value will be used by *:externalResolvers - [info] Reapplying settings... - [info] Set current project to test (in build file:/Users/georgii/workspace/test/) - > ++2.12.0-test - [info] Setting version to 2.12.0-test - [info] Set current project to test (in build file:/Users/georgii/workspace/test/) + ... > console [info] Starting scala interpreter... - [info] - Welcome to Scala version 2.12.0-20140623-155543-8bdacad317 (Java HotSpot(TM) 64-Bit Server VM, Java 1.7.0_51). + [info] + Welcome to Scala version 2.10.6 (OpenJDK 64-Bit Server VM, Java 1.8.0_91). Type in expressions to have them evaluated. Type :help for more information. @@ -212,7 +183,7 @@ Here are also some tips & tricks that have proven useful in Scala development: ### Documentation -There are several areas that one could contribute to-- there is the Scala library, the Scala compiler, and other tools such as Scaladoc. Each area has varying amounts of documentation. +There are several areas that one could contribute to -- there is the Scala library, the Scala compiler, and other tools such as Scaladoc. Each area has varying amounts of documentation. ##### The Scala Library @@ -263,22 +234,12 @@ but not tokens like `%n`. Looks like an easy fix. start = idx + 1 } -After applying the fix and running `ant`, our simple test case in `sandbox/Test.scala` started working! +After applying the fix and running `sbt compile`, our simple test case in `sandbox/Test.scala` started working! 18:51 ~/Projects/scala/sandbox (ticket/6725)$ cd .. - 18:51 ~/Projects/scala (ticket/6725)$ ant - Buildfile: /Users/xeno_by/Projects/scala/build.xml - + 18:51 ~/Projects/scala (ticket/6725)$ sbt compile ... - - quick.comp: - [scalacfork] Compiling 1 file to /Users/xeno_by/Projects/scala/build/quick/classes/compiler - [propertyfile] Updating property file: /Users/xeno_by/Projects/scala/build/quick/classes/compiler/compiler.properties - [stopwatch] [quick.comp.timer: 6.588 sec] - - ... - - BUILD SUCCESSFUL + [success] Total time: 18 s, completed Jun 6, 2016 9:03:02 PM Total time: 18 seconds 18:51 ~/Projects/scala (ticket/6725)$ cd sandbox @@ -332,15 +293,7 @@ Here are some more testing tips: [mima] } [mima] - BUILD FAILED - /localhome/jenkins/c/workspace/pr-scala-test/scala/build.xml:1530: The following error occurred while executing this line: - /localhome/jenkins/c/workspace/pr-scala-test/scala/build-ant-macros.xml:791: The following error occurred while executing this line: - /localhome/jenkins/c/workspace/pr-scala-test/scala/build-ant-macros.xml:773: Java returned: 2 - - Total time: 6 minutes 46 seconds - Build step 'Execute shell' marked build as failure - Archiving artifacts - Notifying upstream projects of job completion + ... Finished: FAILURE This means your change is backward or forward binary incompatible with the specified version (the check is performed by the [migration manager](https://github.com/typesafehub/migration-manager)). The error message is actually saying what you need to add to `bincompat-backward.whitelist.conf` or `bincompat-forward.whitelist.conf` to make the error go away. If you are getting this on an internal/experimental api, it should be safe to add suggested sections to the config. Otherwise, you might want to target a newer version of scala for this change. @@ -349,7 +302,7 @@ This means your change is backward or forward binary incompatible with the speci Now to make sure that my fix doesn't break anything I need to run the test suite using the `partest` tool we wrote to test Scala. Read up [the partest guide](partest-guide.html) to learn the details about partest, but in a nutshell you can either -run `ant test` to go through the entire test suite (30+ minutes) or use wildcards to limit the tests to something manageable: +run `sbt test` to go through the entire test suite (30+ minutes) or use wildcards to limit the tests to something manageable: 18:52 ~/Projects/scala/sandbox (ticket/6725)$ cd ../test 18:56 ~/Projects/scala/test (ticket/6725)$ partest files/run/*interpol* From 5532eb46c8ccd199485ee7dff88d97ec06f9e30d Mon Sep 17 00:00:00 2001 From: Chase Long Date: Tue, 7 Jun 2016 21:37:25 -0500 Subject: [PATCH 0096/1870] Changes per PR feedback --- contribute/hacker-guide.md | 18 +++++++----------- 1 file changed, 7 insertions(+), 11 deletions(-) diff --git a/contribute/hacker-guide.md b/contribute/hacker-guide.md index dab991eba5..09eb50a8a3 100644 --- a/contribute/hacker-guide.md +++ b/contribute/hacker-guide.md @@ -106,10 +106,10 @@ You need the following tools: * `sbt`, an interactive build tool commonly used in Scala projects. Acquiring sbt manually is not necessary -- the recommended approach is to download the [sbt-extras runner script](https://github.com/paulp/sbt-extras/blob/master/sbt) and use it in place of `sbt`. The script will download and run the correct version of sbt when run from the Scala repository's root directory. * `curl` -- the build uses `curl` in the `pull-binary-libs.sh` script to download bootstrap libs. -The majority of our team works on Linux and OS X, so these operating systems are guaranteed to work. Windows is supported, but it might have issues. Please report to [the issue tracker](https://issues.scala-lang.org/) if you encounter any. +OS X and Linux builds should work. Windows is supported, but it might have issues. Please report to [the issue tracker](https://issues.scala-lang.org/) if you encounter any. Building Scala is as easy as running `sbt dist/mkPack` in the root of your cloned repository. Be prepared to wait for a while -- a full "clean" build -takes 8+ minutes depending on your machine (and up to 30 minutes on older machines with less memory). Incremental builds are usually within 30-120 seconds range (again, your mileage might vary +takes 5+ minutes depending on your machine (longer on older machines with less memory). Incremental builds are usually within 20-120 seconds range (again, your mileage might vary with your hardware). ### IDE @@ -155,12 +155,8 @@ Now, implement your bugfix or new feature! Here are also some tips & tricks that have proven useful in Scala development: -* If after introducing changes or updating your clone, you get `AbstractMethodError` or other linkage exceptions, - try doing `sbt clean`. Due to the way Scala compiles traits, if a trait changes, then it's sometimes not enough to recompile - just that trait; it might also be necessary to recompile its users. The `sbt` tool is not smart enough to do that, which might lead to - very strange errors. Full rebuilds fix the problem. Fortunately that's rarely necessary, because full rebuilds take a lot of time -- the same 8-30 minutes as mentioned above. -* Even on solid state drives packaging Scala distribution (i.e. creating jars from class files) is a non-trivial task. To save time here, - some people in our team do `sbt compile` instead of `sbt dist/mkPack` and then create custom scripts using `sbt/mkBin` to launch Scala from `./build/quick/bin`. Also see [the Scala README](https://github.com/scala/scala#incremental-compilation) for tips on speeding up compile times. +* Even on solid state drives packaging Scala distribution (i.e. creating jars from class files) is a non-trivial task. To save time here, some people in our team do `sbt compile` instead of `sbt dist/mkPack` and then create custom scripts using `sbt/mkBin` to launch Scala from `./build/quick/bin/`. Also see [the Scala README](https://github.com/scala/scala#incremental-compilation) for tips on speeding up compile times. +* If after introducing changes or updating your clone, you get `AbstractMethodError` or other linkage exceptions, try doing `sbt clean` and building again. * Don't underestimate the power of `print`. When starting with Scala, I spent a lot of time in the debugger trying to figure out how things work. However later I found out that print-based debugging is often more effective than jumping around. While it might be obvious to some, I'd like to explicitly mention that it's also useful to print stack traces to understand the flow of execution. When working with `Trees`, you might want to use the Scala `showRaw` to get the `AST` representation. @@ -300,9 +296,9 @@ This means your change is backward or forward binary incompatible with the speci ### Verify -Now to make sure that my fix doesn't break anything I need to run the test suite using the `partest` tool we wrote to test Scala. -Read up [the partest guide](partest-guide.html) to learn the details about partest, but in a nutshell you can either -run `sbt test` to go through the entire test suite (30+ minutes) or use wildcards to limit the tests to something manageable: +Now to make sure that my fix doesn't break anything I need to run the test suite. The Scala test suite uses [JUnit](http://junit.org/junit4/) and [partest](partest-guide.html), a tool we wrote for testing Scala. +Run `sbt test` and `sbt partest` to run all of the JUnit and partest tests, respectively. +`partest` (not `sbt partest`) also allows you to run a subset of the tests using wildcards: 18:52 ~/Projects/scala/sandbox (ticket/6725)$ cd ../test 18:56 ~/Projects/scala/test (ticket/6725)$ partest files/run/*interpol* From 1ea529f4b4c2372c17561398ca1927a004daf7d7 Mon Sep 17 00:00:00 2001 From: Chase Long Date: Mon, 13 Jun 2016 20:11:59 -0500 Subject: [PATCH 0097/1870] Correct misleading instructions for publishing a local Scala version --- contribute/hacker-guide.md | 24 +++++++++++++++--------- 1 file changed, 15 insertions(+), 9 deletions(-) diff --git a/contribute/hacker-guide.md b/contribute/hacker-guide.md index 09eb50a8a3..3426f37f82 100644 --- a/contribute/hacker-guide.md +++ b/contribute/hacker-guide.md @@ -160,20 +160,26 @@ Here are also some tips & tricks that have proven useful in Scala development: * Don't underestimate the power of `print`. When starting with Scala, I spent a lot of time in the debugger trying to figure out how things work. However later I found out that print-based debugging is often more effective than jumping around. While it might be obvious to some, I'd like to explicitly mention that it's also useful to print stack traces to understand the flow of execution. When working with `Trees`, you might want to use the Scala `showRaw` to get the `AST` representation. -* You can publish your newly-built scala version locally using `sbt publishLocal` to use it from `sbt`. Here's how: +* You can publish your newly-built scala version locally using `sbt publishLocal`. Then, you can invoke a REPL using your version: $ sbt publishLocal // This may take a while ... $ sbt ... - > console - [info] Starting scala interpreter... - [info] - Welcome to Scala version 2.10.6 (OpenJDK 64-Bit Server VM, Java 1.8.0_91). - Type in expressions to have them evaluated. - Type :help for more information. - - scala> + > scala + [info] Running scala.tools.nsc.MainGenericRunner -usejavacp + Welcome to Scala 2.12.0-20160613-195040-cd85531 (OpenJDK 64-Bit Server VM, Java 1.8.0_91). + Type in expressions for evaluation. Or try :help. + + scala> + +Alternatively, you can invoke a REPL using the bash script in `./build/quick/bin/`: + + $ ./build/quick/bin/scala + Welcome to Scala 2.12.0-20160613-195040-cd85531 (OpenJDK 64-Bit Server VM, Java 1.8.0_91). + Type in expressions for evaluation. Or try :help. + + scala> * Adding a macro to the `Predef` object is a pretty involved task. Due to bootstrapping, you cannot just throw a macro into it. For this reason, the process is more involved. You might want to follow the way `StringContext.f` itself is added. In short, you need to define your macro under `src/compiler/scala/tools/reflect/` and provide no implementation in `Predef` (`def fn = macro ???`). Now you have to set up the wiring. Add the name of your macro to `src/reflect/scala/reflect/internal/StdNames.scala`, add the needed links to it to `src/reflect/scala/reflect/internal/Definitions.scala`, and finally specify the bindings in `src/compiler/scala/tools/reflect/FastTrack.scala`. [Here's](https://github.com/folone/scala/commit/59536ea833ca16c985339727baed5d70e577b0fe) an example of adding a macro. From 2a94e25b660c8eed80c3e412933d61a2a7eb1835 Mon Sep 17 00:00:00 2001 From: Alex Xandra Albert Sim Date: Wed, 14 Sep 2016 16:27:15 +0700 Subject: [PATCH 0098/1870] Update Ensime's contributing and readme page The current "readme" and "contributing" links on Ensime gives us a standard Github 404 page. This commit updates the links to valid URLs. --- contribute/tools.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/contribute/tools.md b/contribute/tools.md index 1757ae1005..494d2e54cf 100644 --- a/contribute/tools.md +++ b/contribute/tools.md @@ -76,8 +76,8 @@ Stuff changes. Found a broken link or something that needs updating on this page

Scala Support for Text Editors

Home | Issues | -ReadMe | -Contributing

+ReadMe | +Contributing

@@ -126,4 +126,4 @@ The following projects are important to the Scala community but are particularly - \ No newline at end of file + From a41edfc053abb0e97d951e9fdd462ebec99135e8 Mon Sep 17 00:00:00 2001 From: Adriaan Moors Date: Wed, 26 Oct 2016 10:54:45 -0700 Subject: [PATCH 0099/1870] Implement some review feedback, some polish of my own Reworks #438 --- contribute/hacker-guide.md | 54 ++++++++++++++++++++------------------ 1 file changed, 28 insertions(+), 26 deletions(-) diff --git a/contribute/hacker-guide.md b/contribute/hacker-guide.md index 3426f37f82..09532edecd 100644 --- a/contribute/hacker-guide.md +++ b/contribute/hacker-guide.md @@ -108,9 +108,9 @@ You need the following tools: OS X and Linux builds should work. Windows is supported, but it might have issues. Please report to [the issue tracker](https://issues.scala-lang.org/) if you encounter any. -Building Scala is as easy as running `sbt dist/mkPack` in the root of your cloned repository. Be prepared to wait for a while -- a full "clean" build -takes 5+ minutes depending on your machine (longer on older machines with less memory). Incremental builds are usually within 20-120 seconds range (again, your mileage might vary -with your hardware). +Building Scala is as easy as running `sbt dist/mkPack` in the root of your cloned repository. In general, it's much more efficient to enter the `sbt` shell once and run the various tasks from there, instead of running each task by launching `sbt some-task` on your command prompt. + +Be prepared to wait for a while -- a full "clean" build takes 5+ minutes depending on your machine (longer on older machines with less memory). On a recent laptop, incremental builds usually complete within 10-30 seconds. ### IDE @@ -155,31 +155,33 @@ Now, implement your bugfix or new feature! Here are also some tips & tricks that have proven useful in Scala development: -* Even on solid state drives packaging Scala distribution (i.e. creating jars from class files) is a non-trivial task. To save time here, some people in our team do `sbt compile` instead of `sbt dist/mkPack` and then create custom scripts using `sbt/mkBin` to launch Scala from `./build/quick/bin/`. Also see [the Scala README](https://github.com/scala/scala#incremental-compilation) for tips on speeding up compile times. -* If after introducing changes or updating your clone, you get `AbstractMethodError` or other linkage exceptions, try doing `sbt clean` and building again. +* After building your working copy with the `compile` sbt task, there's no need to leave the comfort of your sbt shell to try it out: the REPL is available as the `scala` task, and you can also run the compiler using the `scalac` task. If you prefer to run the REPL outside sbt, you can generate the scripts in `build/quick/bin` using the `dist/mkQuick` task. +* The sbt workflow is also great for debugging, as you can simply create a remote debugging session in your favorite IDE, and then activate the JVM options for the next time you run the `scala` or `scalac` tasks using: + +``` +> set javaOptions in compiler := List("-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=8002") +> scalac test.scala +[info] Running scala.tools.nsc.Main -usejavacp test.scala +Listening for transport dt_socket at address: 8002 +``` + +* Also see [the Scala README](https://github.com/scala/scala#incremental-compilation) for tips on speeding up compile times. +* If after introducing changes or updating your clone, you get `AbstractMethodError` or other linkage exceptions, try the `clean` task and building again. * Don't underestimate the power of `print`. When starting with Scala, I spent a lot of time in the debugger trying to figure out how things work. However later I found out that print-based debugging is often more effective than jumping around. While it might be obvious - to some, I'd like to explicitly mention that it's also useful to print stack traces to understand the flow of execution. When working with `Trees`, you might want to use the Scala `showRaw` to get the `AST` representation. -* You can publish your newly-built scala version locally using `sbt publishLocal`. Then, you can invoke a REPL using your version: - - $ sbt publishLocal // This may take a while - ... - $ sbt - ... - > scala - [info] Running scala.tools.nsc.MainGenericRunner -usejavacp - Welcome to Scala 2.12.0-20160613-195040-cd85531 (OpenJDK 64-Bit Server VM, Java 1.8.0_91). - Type in expressions for evaluation. Or try :help. - - scala> - -Alternatively, you can invoke a REPL using the bash script in `./build/quick/bin/`: - - $ ./build/quick/bin/scala - Welcome to Scala 2.12.0-20160613-195040-cd85531 (OpenJDK 64-Bit Server VM, Java 1.8.0_91). - Type in expressions for evaluation. Or try :help. - - scala> + to some, I'd like to explicitly mention that it's also useful to print stack traces to understand the flow of execution. When working with `Trees`, you might want to use `showRaw` to get the `AST` representation. +* You can publish your newly-built scala version locally using the `publishLocal` task in sbt. +* It's convenient to enable the following local settings to speed up your workflow (put these in `local.sbt` in your working copy): +``` +// skip docs for local publishing +publishArtifact in (Compile, packageDoc) in ThisBuild := false +// set version based on current sha, so that you can easily consume this build from another sbt project +baseVersionSuffix := s"local-${Process("tools/get-scala-commit-sha").lines.head.substring(0, 7)}" +// show more logging during a partest run +testOptions in IntegrationTest in LocalProject("test") ++= Seq(Tests.Argument("--show-log"), Tests.Argument("--show-diff")) +// if incremental compilation is compiling too much (should be fine under sbt 0.13.13) +// antStyle := true +``` * Adding a macro to the `Predef` object is a pretty involved task. Due to bootstrapping, you cannot just throw a macro into it. For this reason, the process is more involved. You might want to follow the way `StringContext.f` itself is added. In short, you need to define your macro under `src/compiler/scala/tools/reflect/` and provide no implementation in `Predef` (`def fn = macro ???`). Now you have to set up the wiring. Add the name of your macro to `src/reflect/scala/reflect/internal/StdNames.scala`, add the needed links to it to `src/reflect/scala/reflect/internal/Definitions.scala`, and finally specify the bindings in `src/compiler/scala/tools/reflect/FastTrack.scala`. [Here's](https://github.com/folone/scala/commit/59536ea833ca16c985339727baed5d70e577b0fe) an example of adding a macro. From 6a5ddf970a857b71779f8e023147ac299f2b0d8d Mon Sep 17 00:00:00 2001 From: Seth Tisue Date: Tue, 8 Nov 2016 14:11:21 -0800 Subject: [PATCH 0100/1870] fix Github -> GitHub --- contribute/codereviews.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/contribute/codereviews.md b/contribute/codereviews.md index 1b9a881b0c..a2df66bd10 100644 --- a/contribute/codereviews.md +++ b/contribute/codereviews.md @@ -43,7 +43,7 @@ own pull requests.

The Scala language web site.

-

All Scala Github Projects

+

All Scala GitHub Projects

For other PRs, follow the scala project from here.

From 78590ba20a3272880bd47994e5a31c7cbae24f01 Mon Sep 17 00:00:00 2001 From: Seth Tisue Date: Tue, 15 Nov 2016 15:27:38 -0800 Subject: [PATCH 0101/1870] recommend sbt, not Activator and remove all mention of Activator from the site (well, except from some old release announcements) --- contribute/documentation.md | 8 -------- contribute/index.md | 2 +- 2 files changed, 1 insertion(+), 9 deletions(-) diff --git a/contribute/documentation.md b/contribute/documentation.md index 6b5c81a0fc..b499571154 100644 --- a/contribute/documentation.md +++ b/contribute/documentation.md @@ -7,7 +7,6 @@ title: Documentation Contributions There are several ways you can help out with the improvement of Scala documentation. These include: * API Documentation in Scaladoc -* Code examples and tutorials in activator templates. * Guides, Overviews, Tutorials, Cheat Sheets and more on the docs.scala-lang.org site * Updating scala-lang.org @@ -28,13 +27,6 @@ Please *follow the issue submission process closely* to help prevent duplicate i [submit new Scaladoc](./scala-standard-library-api-documentation.html) without creating an issue, but please look to see if there is an issue already submitted for your task and claim it if there is. If not, please post your intention to work on a specific scaladoc task on scala-internals so that people know what you are doing. -### Examples/Tutorials in Activator Templates - -[Lightbend Activator](https://www.lightbend.com/community/core-tools/activator-and-sbt) -is a tool based on SBT, with a UI mode that is ideal for code based tutorials, overviews and walk-throughs. To contribute an example in activator, you can fork an existing template, edit it, add a tutorial, upload it to github and then submit the github project into the template repository. It's the fastest way to produce a working code example with tutorial. - -Please see [Contributing an Activator Template](https://www.lightbend.com/activator/template/contribute) for more details. - ### The Main Scala Documentation Site [docs.scala-lang.org](https://wiki.scala-lang.org/) houses the primary source of written, non-API documentation for Scala. It's a github project that you can fork and submit pull requests from. It includes: diff --git a/contribute/index.md b/contribute/index.md index 925e83248e..0a1e2fbaef 100644 --- a/contribute/index.md +++ b/contribute/index.md @@ -27,7 +27,7 @@ Coordination of contribution efforts takes place on the
From 891183e26da4c3f9ccbea5b5bb888aa40e682469 Mon Sep 17 00:00:00 2001 From: Jarrod Brockman Date: Wed, 16 Nov 2016 14:05:22 +0100 Subject: [PATCH 0102/1870] fix a lot of broken links --- contribute/codereviews.md | 2 +- contribute/documentation.md | 3 +-- contribute/guide.md | 9 ++++----- contribute/hacker-guide.md | 2 +- contribute/index.md | 2 +- contribute/scala-standard-library-api-documentation.md | 2 +- 6 files changed, 9 insertions(+), 11 deletions(-) diff --git a/contribute/codereviews.md b/contribute/codereviews.md index a2df66bd10..d0d9a111c3 100644 --- a/contribute/codereviews.md +++ b/contribute/codereviews.md @@ -5,7 +5,7 @@ title: Code Review Contributions ## Code Review Contributions In addition to [bug fixing](./guide.html), you can help us review -[waiting pull requests](#pull_requests_awaiting_comment). +[waiting pull requests](#pull-requests-awaiting-comment). This is also a good (and recommended) way to get to know the feel of the bug-fixing and submissions process before jumping in with your own pull requests. diff --git a/contribute/documentation.md b/contribute/documentation.md index 6b5c81a0fc..27aab024d2 100644 --- a/contribute/documentation.md +++ b/contribute/documentation.md @@ -21,7 +21,7 @@ Thanks The Scala API documentation lives with the scala project source code. There are many ways you can help with improving Scaladoc, including: -* [Log issues for missing scaladoc documentation](./scala-standard-library-api-documentation.html#contribute_api_documentation_bug_reports) - +* [Log issues for missing scaladoc documentation](./scala-standard-library-api-documentation.html#contribute-api-documentation-bug-reports) - Please *follow the issue submission process closely* to help prevent duplicate issues being created. * [Claim Scaladoc Issues and Provide Documentation](./scala-standard-library-api-documentation.html) - please claim issues prior to working on a specific scaladoc task to prevent duplication of effort. If you sit on an issue for too long without submitting a pull request, it will revert back to unassigned and you will need to re-claim it. * You can also just @@ -61,4 +61,3 @@ to Scala and related projects) is provided on the main Please read both the [docs.scala-lang.org contribution](http://docs.scala-lang.org/contribute.html) document and the [scala-lang.org github README](https://github.com/scala/scala-lang#scala-langorg) before embarking on any changes to the Scala language site, as it uses the same Jekyll markdown tool and many of the same conventions as the Scala documentation site. - diff --git a/contribute/guide.md b/contribute/guide.md index b92bd2fe89..02b560b7fc 100644 --- a/contribute/guide.md +++ b/contribute/guide.md @@ -17,7 +17,7 @@ title: Contributing guide
-

Community issues

+

Community issues

Get cracking on some easy to approach issues.

@@ -52,9 +52,9 @@ unencumbered by copyrights or patents. This is the impatient developer's checklist for the steps to submit a bug-fix pull request to the Scala project. For more information, description and justification for the steps, follow the links in that step. Further specific instructions for the release of Scala you are targeting can be found in the `CONTRIBUTING.md` file for that [github branch](https://github.com/scala/scala) -1. [Select a bug to fix from JIRA](/contribute/index.html#community_tickets), or if you found the bug yourself and want to fix it, [create a JIRA issue](./bug-reporting-guide.html) (but please -[make sure it's not a duplicate](./bug-reporting-guide.html#reporting_confirmed_bugs_is_a_sin)). -2. Optional ([but recommended](./scala-internals.html#why_its_a_good_idea)), announce your intention to work on the bug on [scala-internals](./scala-internals.html). After all, don't you want to work on a team with +1. [Select a bug to fix from JIRA](/contribute/index.html#community-tickets), or if you found the bug yourself and want to fix it, [create a JIRA issue](./bug-reporting-guide.html) (but please +[make sure it's not a duplicate](./bug-reporting-guide.html#reporting-confirmed-bugs-is-a-sin)). +2. Optional ([but recommended](./scala-internals.html#why-its-a-good-idea)), announce your intention to work on the bug on [scala-internals](./scala-internals.html). After all, don't you want to work on a team with [these friendly people](./hacker-guide.html#connect) - it's one of the perks of contributing. 3. [Fork the Scala repository](./hacker-guide.html#fork) and clone your fork (if you haven't already). 4. [Create a feature branch](./hacker-guide.html#branch) to work on: use the branch name `issue/NNNN` where NNNN is the JIRA issue number. @@ -77,4 +77,3 @@ on the [scala-internals](http://groups.google.com/group/scala-internals) mailing Contributions, big or small, simple or complex, controversial or undisputed, need to materialize as patches against the Scala project source tree. The [hacker guide](hacker-guide.html) will explain how to materialize your idea into a full-fledged pull request against the Scala code base. - diff --git a/contribute/hacker-guide.md b/contribute/hacker-guide.md index 09532edecd..897c97b1a2 100644 --- a/contribute/hacker-guide.md +++ b/contribute/hacker-guide.md @@ -28,7 +28,7 @@ Sometimes it's appealing to hack alone and not to have to interact with others o this might not be the very best idea. There are people in the Scala community who have spent years accumulating knowledge about Scala libraries and internals. They might provide unique insights and, what's even better, direct assistance in their areas, so it is not only advantageous, but recommended to communicate with the community about your new patch. -Typically bug fixes and new features start out as an idea or an experiment posted on one of [our mailing lists]({{ site.baseurl }}/community/index.html#mailing_lists) to find out how people feel +Typically bug fixes and new features start out as an idea or an experiment posted on one of [our mailing lists]({{ site.baseurl }}/community/index.html#mailing-lists) to find out how people feel about things you want to implement. People proficient in certain areas of Scala usually monitor mailing lists, so you'll often get some help by simply posting a message. But the most efficient way to connect is to cc your message to one of the people responsible for maintaining the aspect of Scala which you wish to contribute to. diff --git a/contribute/index.md b/contribute/index.md index 925e83248e..2fdf75fc71 100644 --- a/contribute/index.md +++ b/contribute/index.md @@ -56,7 +56,7 @@ Coordination of contribution efforts takes place on the

Enhance the Scala tools with features for build tools, IDE plug-ins and other related projects.

-

Compiler/Language

+

Compiler/Language

Larger language features and compiler enhancements including language specification and SIPs.

diff --git a/contribute/scala-standard-library-api-documentation.md b/contribute/scala-standard-library-api-documentation.md index bc57a163df..37e84bd76e 100644 --- a/contribute/scala-standard-library-api-documentation.md +++ b/contribute/scala-standard-library-api-documentation.md @@ -75,7 +75,7 @@ component so that they show up in the correct issue filters. Please familiarize yourself with the following before contributing new API documentation to save time, effort, mistakes and repetition. -* [Forking the Repo](./hacker-guide.html#2_set_up) - follow the setup steps through +* [Forking the Repo](./hacker-guide.html#set-up) - follow the setup steps through the Branch section. If providing new documentation related to an existing JIRA issue, use `issue/NNNN` or `ticket/NNNN` as the guide states. If providing API documentation with no associated JIRA issue, use `scaladoc/xxxx` instead. From ffe3a69da6552a2a9a56da52b92d97665fb46863 Mon Sep 17 00:00:00 2001 From: Jarrod Brockman Date: Thu, 17 Nov 2016 08:52:08 +0100 Subject: [PATCH 0103/1870] fix blank alt tags --- contribute/tools.md | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/contribute/tools.md b/contribute/tools.md index 494d2e54cf..877297636c 100644 --- a/contribute/tools.md +++ b/contribute/tools.md @@ -24,7 +24,7 @@ Stuff changes. Found a broken link or something that needs updating on this page
- +sbt logo

sbt

Interactive build tool.

Home | @@ -33,7 +33,7 @@ Stuff changes. Found a broken link or something that needs updating on this page Contributing

- +scala logo

Scaladoc Tool

(Contribute through scala/scala)

Home | @@ -45,7 +45,7 @@ Stuff changes. Found a broken link or something that needs updating on this page

-

Scala IDE

+scala IDE logo

Scala IDE

The Eclipse Scala IDE project.

Home | Issues | @@ -53,7 +53,7 @@ Stuff changes. Found a broken link or something that needs updating on this page Contributing

-

DBuild

+dbuild logo

DBuild

Multi-project build tool.

Home | Issues | @@ -64,7 +64,7 @@ Stuff changes. Found a broken link or something that needs updating on this page

- +scala logo

Partest

Scala Compiler/Library Testing

Home | @@ -72,7 +72,7 @@ Stuff changes. Found a broken link or something that needs updating on this page ReadMe

-

Ensime

+ensime logo

Ensime

Scala Support for Text Editors

Home | Issues | @@ -83,7 +83,7 @@ Stuff changes. Found a broken link or something that needs updating on this page

-

Scoverage

+scoverage logo

Scoverage

Scala code coverage tool

Home | Issues | @@ -91,7 +91,7 @@ Stuff changes. Found a broken link or something that needs updating on this page Contributing

- +scala logo

Abide

Lint tooling for Scala

Home | @@ -109,7 +109,7 @@ The following projects are important to the Scala community but are particularly

- +scala logo

Scalap

Scala Decoder (part of scala/scala)

Issues | @@ -117,7 +117,7 @@ The following projects are important to the Scala community but are particularly Contributing

-

Scalariform

+white line

Scalariform

Scala code formatter

Home | Issues | From c46edc10b100bb44c25a54356e12b708b6975153 Mon Sep 17 00:00:00 2001 From: "Aaron S. Hawley" Date: Sat, 19 Nov 2016 09:55:19 -0500 Subject: [PATCH 0104/1870] Fix formatting problems in hacker guide --- contribute/hacker-guide.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/contribute/hacker-guide.md b/contribute/hacker-guide.md index 897c97b1a2..db4e06e037 100644 --- a/contribute/hacker-guide.md +++ b/contribute/hacker-guide.md @@ -133,7 +133,7 @@ When hacking on your topic of choice, you'll be modifying Scala, compiling it an Typically you would want to first make sure that your changes work on a small example and afterwards verify that nothing break by running a comprehensive test suite. -We'll start by creating a `sandbox` directory (`./sandbox is listed in the .gitignore of the Scala repository), which will hold a single test file and its compilation results. First, let's make sure that +We'll start by creating a `sandbox` directory (`./sandbox` is listed in the .gitignore of the Scala repository), which will hold a single test file and its compilation results. First, let's make sure that [the bug](https://issues.scala-lang.org/browse/SI-6725) is indeed reproducible by putting together a simple test and compiling and running it with the Scala compiler that we built using `sbt`. The Scala compiler that we just built is located in `build/pack/bin`. 17:25 ~/Projects/scala (ticket/6725)$ mkdir sandbox @@ -172,6 +172,7 @@ Listening for transport dt_socket at address: 8002 to some, I'd like to explicitly mention that it's also useful to print stack traces to understand the flow of execution. When working with `Trees`, you might want to use `showRaw` to get the `AST` representation. * You can publish your newly-built scala version locally using the `publishLocal` task in sbt. * It's convenient to enable the following local settings to speed up your workflow (put these in `local.sbt` in your working copy): + ``` // skip docs for local publishing publishArtifact in (Compile, packageDoc) in ThisBuild := false From c27f49c1cd951c31f7d3f2bf9b07f5d362acb967 Mon Sep 17 00:00:00 2001 From: Jarrod Brockman Date: Sun, 20 Nov 2016 09:47:02 +0100 Subject: [PATCH 0105/1870] fix miscellaneous links --- contribute/tools.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/contribute/tools.md b/contribute/tools.md index 877297636c..008a1425a1 100644 --- a/contribute/tools.md +++ b/contribute/tools.md @@ -12,12 +12,12 @@ Typically, issues for these projects will be reported and kept in the github pro Many of these projects have a gitter channel (usually listed in the README or CONTRIBUTING documents) which is a great place to discuss proposed work before commencing. There are some projects in this section that are in -[particular need](#projects_in_particular_need) so please check those out +[particular need](#projects-in-particular-need) so please check those out if you would like to help revive them. ### Broken Links? -Stuff changes. Found a broken link or something that needs updating on this page? Please, consider [submitting a documentation pull request](./documentation.html#updating_scalalangorg) to fix it. +Stuff changes. Found a broken link or something that needs updating on this page? Please, consider [submitting a documentation pull request](./documentation.html#updating-scala-langorg) to fix it. ### Projects From f2b3a20ec9486c615eed8146248a9c23e450adef Mon Sep 17 00:00:00 2001 From: Seth Tisue Date: Wed, 7 Dec 2016 12:47:28 -0800 Subject: [PATCH 0106/1870] 2.11 -> 2.12 in some more places --- contribute/hacker-guide.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/contribute/hacker-guide.md b/contribute/hacker-guide.md index db4e06e037..8d7903fbea 100644 --- a/contribute/hacker-guide.md +++ b/contribute/hacker-guide.md @@ -8,7 +8,7 @@ This guide is intended to help you get from an idea of fixing a bug or implement This guide covers the entire process, from the conception of your idea or bugfix to the point where it is merged into Scala. Throughout, we will use a running example of an idea or bugfix one might wish to contribute. -Other good starting points for first-time contributors include the [Scala README](https://github.com/scala/scala#get-in-touch) and [contributor's guidelines](https://github.com/scala/scala/blob/2.11.x/CONTRIBUTING.md). +Other good starting points for first-time contributors include the [Scala README](https://github.com/scala/scala#get-in-touch) and [contributor's guidelines](https://github.com/scala/scala/blob/2.12.x/CONTRIBUTING.md). ## The Running Example @@ -336,7 +336,7 @@ Let's go into each of these points in more detail. The [Git Basics](http://git-scm.com/book/en/Git-Basics) chapter in the Git online book covers most of the basic workflow during this stage. There are two things you should know here: -1. Commit messages are often the only way to understand the intentions of authors of code written a few years ago. Thus, writing a quality is of utmost importance. The more context you provide for the change you've introduced, the larger the chance that some future maintainer understand your intentions. Consult [the pull request policies](https://github.com/scala/scala/blob/2.11.x/CONTRIBUTING.md) for more information about the desired style of your commits. +1. Commit messages are often the only way to understand the intentions of authors of code written a few years ago. Thus, writing a quality is of utmost importance. The more context you provide for the change you've introduced, the larger the chance that some future maintainer understand your intentions. Consult [the pull request policies](https://github.com/scala/scala/blob/2.12.x/CONTRIBUTING.md) for more information about the desired style of your commits. 2. Keeping Scala's git history clean is also important. Therefore we won't accept pull requests for bug fixes that have more than one commit. For features, it is okay to have several commits, but all tests need to pass after every single commit. To clean up your commit structure, you want to [rewrite history](http://git-scm.com/book/en/Git-Branching-Rebasing) using `git rebase` so that your commits are against the latest revision of `master`. Once you are satisfied with your work, synced with `master` and cleaned up your commits you are ready to submit a patch to the central Scala repository. Before proceeding make sure you have pushed all of your local changes to your fork on GitHub. From 1a258055bd0966a517c50f8113516e53f2393ad9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Javier=20de=20Sil=C3=B3niz=20Sandino?= Date: Wed, 8 Feb 2017 13:11:11 +0100 Subject: [PATCH 0107/1870] First migration of content pages to new content layout - First migration to using pretty permalinks --- contribute/bug-reporting-guide.md | 4 ++- contribute/codereviews.md | 10 ++++--- contribute/corelibs.md | 10 ++++--- contribute/documentation.md | 10 ++++--- contribute/guide.md | 30 ++++++++++--------- contribute/hacker-guide.md | 4 ++- contribute/index.md | 22 +++++++------- contribute/partest-guide.md | 4 ++- contribute/scala-internals.md | 4 ++- ...cala-standard-library-api-documentation.md | 4 ++- contribute/tools.md | 12 ++++---- 11 files changed, 68 insertions(+), 46 deletions(-) diff --git a/contribute/bug-reporting-guide.md b/contribute/bug-reporting-guide.md index 960f40b704..f4c8282a78 100644 --- a/contribute/bug-reporting-guide.md +++ b/contribute/bug-reporting-guide.md @@ -1,6 +1,8 @@ --- -layout: page title: Bug Reporting +layout: inner-page-no-masthead +permalink: /contribute/bug-reporting-guide/ +includeTOC: true --- The Scala project tracker is located at [http://issues.scala-lang.org](http://issues.scala-lang.org). Before you submit a bug make sure that it is certainly a bug by following instructions in *Is it a Bug?*. diff --git a/contribute/codereviews.md b/contribute/codereviews.md index d0d9a111c3..9239fa8c14 100644 --- a/contribute/codereviews.md +++ b/contribute/codereviews.md @@ -1,10 +1,12 @@ --- -layout: page title: Code Review Contributions +layout: inner-page-no-masthead +permalink: /contribute/codereviews/ +includeTOC: true --- ## Code Review Contributions -In addition to [bug fixing](./guide.html), you can help us review +In addition to [bug fixing](/contribute/guide/), you can help us review [waiting pull requests](#pull-requests-awaiting-comment). This is also a good (and recommended) way to get to know the feel of the bug-fixing and submissions process before jumping in with your @@ -13,7 +15,7 @@ own pull requests. ### Review Guidelines -[Code of Conduct reminder](../conduct.html) +[Code of Conduct reminder](/conduct/) * Keep comments on-topic, concise and precise. * Attach comments to particular lines or regions they pertain to whenever possible. @@ -49,4 +51,4 @@ own pull requests.

-Also note that the [Tools contributions](./tools.html) page has more projects that will generate pull requests. +Also note that the [Tools contributions](/contribute/tools/) page has more projects that will generate pull requests. diff --git a/contribute/corelibs.md b/contribute/corelibs.md index 6e1abbb0d7..1f34d150b0 100644 --- a/contribute/corelibs.md +++ b/contribute/corelibs.md @@ -1,14 +1,16 @@ --- -layout: page title: Core Library Contributions +layout: inner-page-no-masthead +permalink: /contribute/corelibs/ +includeTOC: true --- ## Core Library Contributions There are several options for contributing to Scala's core libraries. You can: -* Help with [Documentation](./scala-standard-library-api-documentation.html). -* [Report Bugs or Issues](./bug-reporting-guide.html) against the core libraries. -* [Fix Bugs or Issues](./guide.html) against the +* Help with [Documentation](/contribute/scala-standard-library-api-documentation/). +* [Report Bugs or Issues](/contribute/bug-reporting-guide/) against the core libraries. +* [Fix Bugs or Issues](/contribute/guide/) against the [reported library bugs/issues](https://issues.scala-lang.org/issues/?filter=13001). * Contribute significant new functionality or a new API by submitting a Scala Library Improvement Process (SLIP) Document. diff --git a/contribute/documentation.md b/contribute/documentation.md index 7657cbf699..2746fa77dc 100644 --- a/contribute/documentation.md +++ b/contribute/documentation.md @@ -1,6 +1,8 @@ --- -layout: page title: Documentation Contributions +layout: inner-page-no-masthead +permalink: /contribute/documentation/ +includeTOC: true --- ## Contributing Documentation to the Scala project @@ -20,11 +22,11 @@ Thanks The Scala API documentation lives with the scala project source code. There are many ways you can help with improving Scaladoc, including: -* [Log issues for missing scaladoc documentation](./scala-standard-library-api-documentation.html#contribute-api-documentation-bug-reports) - +* [Log issues for missing scaladoc documentation](/contribute/scala-standard-library-api-documentation/#contribute-api-documentation-bug-reports) - Please *follow the issue submission process closely* to help prevent duplicate issues being created. -* [Claim Scaladoc Issues and Provide Documentation](./scala-standard-library-api-documentation.html) - please claim issues prior to working on a specific scaladoc task to prevent duplication of effort. If you sit on an issue for too long without submitting a pull request, it will revert back to unassigned and you will need to re-claim it. +* [Claim Scaladoc Issues and Provide Documentation](/contribute/scala-standard-library-api-documentation/) - please claim issues prior to working on a specific scaladoc task to prevent duplication of effort. If you sit on an issue for too long without submitting a pull request, it will revert back to unassigned and you will need to re-claim it. * You can also just -[submit new Scaladoc](./scala-standard-library-api-documentation.html) +[submit new Scaladoc](/contribute/scala-standard-library-api-documentation/) without creating an issue, but please look to see if there is an issue already submitted for your task and claim it if there is. If not, please post your intention to work on a specific scaladoc task on scala-internals so that people know what you are doing. ### The Main Scala Documentation Site diff --git a/contribute/guide.md b/contribute/guide.md index 02b560b7fc..afd3572c53 100644 --- a/contribute/guide.md +++ b/contribute/guide.md @@ -1,6 +1,8 @@ --- -layout: page title: Contributing guide +layout: inner-page-no-masthead +permalink: /contribute/guide/ +includeTOC: true ---
@@ -10,7 +12,7 @@ title: Contributing guide

Get a peek into the inners of the Scala compiler.

-

Report an issue

+

Report an issue

File a bug report or a feature request.

@@ -21,7 +23,7 @@ title: Contributing guide

Get cracking on some easy to approach issues.

-

Hacker's guide

+

Hacker's guide

Learn to write good code and improve your chances of contributing to the Scala galaxy.

@@ -52,19 +54,19 @@ unencumbered by copyrights or patents. This is the impatient developer's checklist for the steps to submit a bug-fix pull request to the Scala project. For more information, description and justification for the steps, follow the links in that step. Further specific instructions for the release of Scala you are targeting can be found in the `CONTRIBUTING.md` file for that [github branch](https://github.com/scala/scala) -1. [Select a bug to fix from JIRA](/contribute/index.html#community-tickets), or if you found the bug yourself and want to fix it, [create a JIRA issue](./bug-reporting-guide.html) (but please -[make sure it's not a duplicate](./bug-reporting-guide.html#reporting-confirmed-bugs-is-a-sin)). -2. Optional ([but recommended](./scala-internals.html#why-its-a-good-idea)), announce your intention to work on the bug on [scala-internals](./scala-internals.html). After all, don't you want to work on a team with -[these friendly people](./hacker-guide.html#connect) - it's one of the perks of contributing. -3. [Fork the Scala repository](./hacker-guide.html#fork) and clone your fork (if you haven't already). -4. [Create a feature branch](./hacker-guide.html#branch) to work on: use the branch name `issue/NNNN` where NNNN is the JIRA issue number. -5. [Fix the bug, or implement the new small feature](./hacker-guide.html#implement), include new tests (yes, for bug fixes too). -6. [Test, rinse](./hacker-guide.html#test) and [test some more](./partest-guide.html) until [all the tests pass](./hacker-guide.html#verify). -7. [Commit your changes](./hacker-guide.html#commit) to your feature branch in your fork. Please choose your commit message based on the [Git Hygiene](https://github.com/scala/scala#user-content-git-hygiene) section of the Scala project README. +1. [Select a bug to fix from JIRA](/contribute/#community-tickets), or if you found the bug yourself and want to fix it, [create a JIRA issue](/contribute/bug-reporting-guide/) (but please +[make sure it's not a duplicate](/contribute/bug-reporting-guide/#reporting-confirmed-bugs-is-a-sin)). +2. Optional ([but recommended](/contribute/scala-internals/#why-its-a-good-idea)), announce your intention to work on the bug on [scala-internals](/contribute/scala-internals/). After all, don't you want to work on a team with +[these friendly people](/contribute/hacker-guide/#connect) - it's one of the perks of contributing. +3. [Fork the Scala repository](/contribute/hacker-guide/#fork) and clone your fork (if you haven't already). +4. [Create a feature branch](/contribute/hacker-guide/#branch) to work on: use the branch name `issue/NNNN` where NNNN is the JIRA issue number. +5. [Fix the bug, or implement the new small feature](/contribute/hacker-guide/#implement), include new tests (yes, for bug fixes too). +6. [Test, rinse](/contribute/hacker-guide/#test) and [test some more](/contribute/partest-guide/) until [all the tests pass](/contribute/hacker-guide/#verify). +7. [Commit your changes](/contribute/hacker-guide#commit) to your feature branch in your fork. Please choose your commit message based on the [Git Hygiene](https://github.com/scala/scala#user-content-git-hygiene) section of the Scala project README. 8. If necessary [re-write git history](http://git-scm.com/book/en/Git-Branching-Rebasing) so that [commits are organized by major steps to the fix/feature]( https://github.com/scala/scala#git-hygiene). For bug fixes, a single commit is requested, for features several commits may be desirable (but each separate commit must compile and pass all tests) 9. [Submit a pull request](./hacker-guide.html#submit) following the [Scala project pull-request guidelines](http://docs.scala-lang.org/scala/pull-request-policy.html). -10. [Work with a reviewer](https://github.com/scala/scala#reviewing) to [get your pull request merged in](./hacker-guide.html#review). +10. [Work with a reviewer](https://github.com/scala/scala#reviewing) to [get your pull request merged in](/contribute/hacker-guide/#review). 11. Celebrate! Need more information or a little more hand-holding for the first one? We got you covered: take a read through the entire [Hacker Guide](./hacker-guide.html) for an example of implementing a new feature (some of the steps can be skipped for bug fixes, this will be obvious from reading it, but many of the steps here will help with bug fixes too). @@ -76,4 +78,4 @@ and on the implementation plan. Announce the change on the [scala-internals](http://groups.google.com/group/scala-internals) mailing list and get developer feedback. For really complex changes, a [Scala Improvement Process (SIP)](http://docs.scala-lang.org/sips/) document might be required, but the first step is always to discuss it on the mailing list and if a SIP is required, that will be discussed on the mailing list. Contributions, big or small, simple or complex, controversial or undisputed, need to materialize as patches against -the Scala project source tree. The [hacker guide](hacker-guide.html) will explain how to materialize your idea into a full-fledged pull request against the Scala code base. +the Scala project source tree. The [hacker guide](/contribute/hacker-guide/) will explain how to materialize your idea into a full-fledged pull request against the Scala code base. diff --git a/contribute/hacker-guide.md b/contribute/hacker-guide.md index 8d7903fbea..ebdad9652b 100644 --- a/contribute/hacker-guide.md +++ b/contribute/hacker-guide.md @@ -1,7 +1,9 @@ --- -layout: page title: Scala hacker guide by: Eugene Burmako +layout: inner-page-no-masthead +permalink: /contribute/hacker-guide/ +includeTOC: true ---
This guide is intended to help you get from an idea of fixing a bug or implementing a new feature into a nightly Scala build, and, ultimately, to a production release of Scala incorporating your idea. diff --git a/contribute/index.md b/contribute/index.md index 1a2f7c7c5b..dcc78e8149 100644 --- a/contribute/index.md +++ b/contribute/index.md @@ -1,6 +1,8 @@ --- -layout: page title: Contribute +layout: inner-page-no-masthead +permalink: /contribute/ +includeTOC: true --- The Scala programming language is an open source project with a very @@ -26,37 +28,37 @@ Coordination of contribution efforts takes place on the
-

Bug Fixes

-

Issues with the tools, core libraries and compiler. Also you can help us by reporting bugs

+

Bug Fixes

+

Issues with the tools, core libraries and compiler. Also you can help us by reporting bugs

-

Code Reviews

+

Code Reviews

Review pull requests against scala/scala, scala/scala-lang, scala/scala.github.com and others.

-

Core Libraries

+

Core Libraries

Update and expand the capabilities of the core (and associated) Scala libraries.

-

IDE and Build Tools

+

IDE and Build Tools

Enhance the Scala tools with features for build tools, IDE plug-ins and other related projects.

-

Compiler/Language

+

Compiler/Language

Larger language features and compiler enhancements including language specification and SIPs.

@@ -109,7 +111,7 @@ with their own maintainers and community of contributors. Helping out one of these projects is another way to help Scala. Consider lending on a hand on a project you're already using. Or, to find out about other projects, see the -[Libraries and Tools section](../community/index.html#community-libraries-and-tools) +[Libraries and Tools section](../community/#community-libraries-and-tools) on our Community page. ### Scala Community Build diff --git a/contribute/partest-guide.md b/contribute/partest-guide.md index e681c569fe..be37d6fc12 100644 --- a/contribute/partest-guide.md +++ b/contribute/partest-guide.md @@ -1,6 +1,8 @@ --- -layout: page title: Running the Test Suite +layout: inner-page-no-masthead +permalink: /contribute/partest-guide/ +includeTOC: true --- Partest is a custom parallel testing tool that we use to run the test suite for the Scala compiler and library. Go the scala project folder from your local checkout and run it via `ant` or standalone as follows. diff --git a/contribute/scala-internals.md b/contribute/scala-internals.md index 5bd97ed8a8..831f2cc864 100644 --- a/contribute/scala-internals.md +++ b/contribute/scala-internals.md @@ -1,6 +1,8 @@ --- -layout: page title: Scala Internals Mailing List +layout: inner-page-no-masthead +permalink: /contribute/scala-internals/ +includeTOC: true --- ## scala-internals diff --git a/contribute/scala-standard-library-api-documentation.md b/contribute/scala-standard-library-api-documentation.md index 37e84bd76e..68df995375 100644 --- a/contribute/scala-standard-library-api-documentation.md +++ b/contribute/scala-standard-library-api-documentation.md @@ -1,6 +1,8 @@ --- -layout: page title: Contribute to API Documentation +layout: inner-page-no-masthead +permalink: /contribute/scala-standard-library-api-documentation/ +includeTOC: true --- This page is specific to API documentation contributions – that is, API diff --git a/contribute/tools.md b/contribute/tools.md index 008a1425a1..876ce88c1c 100644 --- a/contribute/tools.md +++ b/contribute/tools.md @@ -1,12 +1,14 @@ --- -layout: page title: IDE and Build Tool Contributions +layout: inner-page-no-masthead +permalink: /contribute/tools/ +includeTOC: true --- ## Contributing to IDE and Build Tools The links below are to a number of Scala build and IDE related projects that are important in the larger Scala space, and which welcome contributions. -Since these tools are in separate projects, they may (and likely will) have their own rules and guidelines for contributing. The [Hacker Guide](./hacker-guide.html) and [Bug-fixing](guide.html) pages will likely have much in the way of related information on how to contribute to these projects, and are recommended reading. You should also check the README.md and (if it's present) CONTRIBUTING.md files from the actual projects before contributing to them. +Since these tools are in separate projects, they may (and likely will) have their own rules and guidelines for contributing. The [Hacker Guide](/contribute/hacker-guide/) and [Bug-fixing](/contribute/guide/) pages will likely have much in the way of related information on how to contribute to these projects, and are recommended reading. You should also check the README.md and (if it's present) CONTRIBUTING.md files from the actual projects before contributing to them. Typically, issues for these projects will be reported and kept in the github project issue tracker for that project rather than in the Scala project JIRA. Many of these projects have a gitter channel (usually listed in the README or CONTRIBUTING documents) which is a great place to discuss proposed work before commencing. @@ -17,7 +19,7 @@ if you would like to help revive them. ### Broken Links? -Stuff changes. Found a broken link or something that needs updating on this page? Please, consider [submitting a documentation pull request](./documentation.html#updating-scala-langorg) to fix it. +Stuff changes. Found a broken link or something that needs updating on this page? Please, consider [submitting a documentation pull request](/contribute/documentation/#updating-scala-langorg) to fix it. ### Projects @@ -39,7 +41,7 @@ Stuff changes. Found a broken link or something that needs updating on this page

Home | Issues | ReadMe | -Contributing

+Contributing

@@ -114,7 +116,7 @@ The following projects are important to the Scala community but are particularly

Scala Decoder (part of scala/scala)

Issues | ReadMe | -Contributing

+Contributing

white line

Scalariform

From b58955fa85531e7be82639d5d6acf44b779f0f17 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Javier=20de=20Sil=C3=B3niz=20Sandino?= Date: Wed, 8 Feb 2017 17:25:34 +0100 Subject: [PATCH 0108/1870] Short items list for the contribute subpages --- _contribute_resources/1-documentation.md | 6 + _contribute_resources/2-bug-fixes.md | 6 + _contribute_resources/3-code-reviews.md | 8 + _contribute_resources/4-core-libraries.md | 6 + .../5-ide-and-build-tools.md | 6 + _contribute_resources/6-compiler-language.md | 6 + contribute/index.md | 74 +------ contribute/tools.md | 187 ++++++++---------- 8 files changed, 126 insertions(+), 173 deletions(-) create mode 100644 _contribute_resources/1-documentation.md create mode 100644 _contribute_resources/2-bug-fixes.md create mode 100644 _contribute_resources/3-code-reviews.md create mode 100644 _contribute_resources/4-core-libraries.md create mode 100644 _contribute_resources/5-ide-and-build-tools.md create mode 100644 _contribute_resources/6-compiler-language.md diff --git a/_contribute_resources/1-documentation.md b/_contribute_resources/1-documentation.md new file mode 100644 index 0000000000..27739dee6a --- /dev/null +++ b/_contribute_resources/1-documentation.md @@ -0,0 +1,6 @@ +--- +title: Documentation +link: /contribute/documentation/ +icon: fa fa-file-text +--- +[Scaladoc (API)](/contribute/scala-standard-library-api-documentation/),[docs.scala-lang.org](http://docs.scala-lang.org/contribute.html) and [scala-lang.org](https://github.com/scala/scala-lang). \ No newline at end of file diff --git a/_contribute_resources/2-bug-fixes.md b/_contribute_resources/2-bug-fixes.md new file mode 100644 index 0000000000..d10adb7908 --- /dev/null +++ b/_contribute_resources/2-bug-fixes.md @@ -0,0 +1,6 @@ +--- +title: Bug fixes +link: /contribute/guide/ +icon: fa fa-pencil +--- +Issues with the tools, core libraries and compiler. Also you can help us by [reporting bugs](/contribute/bug-reporting-guide/). \ No newline at end of file diff --git a/_contribute_resources/3-code-reviews.md b/_contribute_resources/3-code-reviews.md new file mode 100644 index 0000000000..2ab235993b --- /dev/null +++ b/_contribute_resources/3-code-reviews.md @@ -0,0 +1,8 @@ +--- +title: Code Reviews +link: /contribute/codereviews/ +icon: fa fa-eye +--- +Review pull requests against [scala/scala](https://github.com/scala/scala/pulls), +[scala/scala-lang](https://github.com/scala/scala-lang/pulls), +[scala/scala.github.com](https://github.com/scala/scala.github.com/pulls)and others. \ No newline at end of file diff --git a/_contribute_resources/4-core-libraries.md b/_contribute_resources/4-core-libraries.md new file mode 100644 index 0000000000..7ad75c5752 --- /dev/null +++ b/_contribute_resources/4-core-libraries.md @@ -0,0 +1,6 @@ +--- +title: Core Libraries +link: /contribute/corelibs/ +icon: fa fa-clipboard +--- +Update and expand the capabilities of the core (and associated) Scala libraries. \ No newline at end of file diff --git a/_contribute_resources/5-ide-and-build-tools.md b/_contribute_resources/5-ide-and-build-tools.md new file mode 100644 index 0000000000..4b8bd2ed52 --- /dev/null +++ b/_contribute_resources/5-ide-and-build-tools.md @@ -0,0 +1,6 @@ +--- +title: IDE and Build Tools +link: /contribute/tools/ +icon: fa fa-terminal +--- +Enhance the Scala tools with features for build tools, IDE plug-ins and other related projects. \ No newline at end of file diff --git a/_contribute_resources/6-compiler-language.md b/_contribute_resources/6-compiler-language.md new file mode 100644 index 0000000000..0c4eaa1325 --- /dev/null +++ b/_contribute_resources/6-compiler-language.md @@ -0,0 +1,6 @@ +--- +title: Compiler/Language +link: /contribute/guide/#larger-changes-new-features +icon: fa fa-gears +--- +Larger language features and compiler enhancements including language specification and SIPs. \ No newline at end of file diff --git a/contribute/index.md b/contribute/index.md index dcc78e8149..e843ef2f02 100644 --- a/contribute/index.md +++ b/contribute/index.md @@ -25,84 +25,14 @@ how to efficiently report a bug. Coordination of contribution efforts takes place on the [scala-internals Google group](./scala-internals.html). -
-
- -
-

Bug Fixes

-

Issues with the tools, core libraries and compiler. Also you can help us by reporting bugs

-
-
- -
-
-

Code Reviews

-

Review pull requests against scala/scala, -scala/scala-lang, -scala/scala.github.com and others.

-
-
-

Core Libraries

-

Update and expand the capabilities of the core (and associated) Scala libraries.

-
-
- -
-
-

IDE and Build Tools

-

Enhance the Scala tools with features for build tools, IDE plug-ins and other related projects.

-
-
-

Compiler/Language

-

Larger language features and compiler enhancements including language specification and SIPs.

-
-
-
+{% include column-list-of-items.html collection=site.contribute_resources %} ### Community Tickets The following links provide starting points for various contributor activities: -
-
-
-

Documentation

-

Help augment or correct the documentation.

-
-
-

Core Libraries

-

Community bugs and enhancements on the core libs.

-
-
- -
-
-

Tools

-

Help with the Scala tool chain.

-
-
-

Compiler

-

Ready for a challenge? Here's the compiler bugs.

-
-
- -
-
-

Bugs

-

All bugs marked with the label community.

-
-
-

All Issues

-

Bugs + Enhancements marked with the label community.

-
-
-
+{% include column-list-of-items.html collection=site.contribute_community_tickets %} ### Tools and Libraries diff --git a/contribute/tools.md b/contribute/tools.md index 876ce88c1c..420579913e 100644 --- a/contribute/tools.md +++ b/contribute/tools.md @@ -3,6 +3,90 @@ title: IDE and Build Tool Contributions layout: inner-page-no-masthead permalink: /contribute/tools/ includeTOC: true + +# Projects list: +projects: + - title: sbt + description: Interactive build tool. + icon: http://www.scala-sbt.org/assets/typesafe_sbt_svg.svg + link: https://github.com/sbt/sbt + homeLink: http://www.scala-sbt.org/ + issuesLink: https://github.com/sbt/sbt#issues-and-pull-requests + readmeLink: https://github.com/sbt/sbt/blob/0.13/README.md + contributingLink: https://github.com/sbt/sbt/blob/0.13/CONTRIBUTING.md + - title: Scaladoc Tool + description: (Contribute through scala/scala) + icon: https://avatars1.githubusercontent.com/u/57059?v=3&s=200 + link: https://github.com/scala/scala + homeLink: http://www.scala-lang.org/api + issuesLink: https://issues.scala-lang.org/issues/?jql=status%20%3D%20Open%20AND%20component%20%3D%20%22Scaladoc%20Tool%22 + readmeLink: https://github.com/scala/scala#welcome + contributingLink: http://scala-lang.org/contribute/guide.html + - title: Scala IDE + description: Interactive build tool. + icon: https://avatars2.githubusercontent.com/u/1026788?v=3&s=200 + link: https://github.com/scala-ide/scala-ide + homeLink: http://scala-ide.org/ + issuesLink: http://scala-ide-portfolio.assembla.com/spaces/scala-ide/support/tickets + readmeLink: https://github.com/scala-ide/scala-ide/blob/master/README.md + contributingLink: https://github.com/scala-ide/scala-ide/blob/master/CONTRIBUTING.md + - title: DBuild + description: Multi-project build tool. + icon: https://avatars3.githubusercontent.com/u/784923?v=3&s=200 + link: https://github.com/typesafehub/dbuild + homeLink: http://typesafehub.github.io/dbuild + issuesLink: https://github.com/typesafehub/dbuild/issues + readmeLink: https://github.com/typesafehub/dbuild/blob/master/README.md + contributingLink: https://github.com/typesafehub/dbuild/blob/master/README.md#get-involved + - title: Partest + description: Scala Compiler/Library Testing + icon: https://avatars1.githubusercontent.com/u/57059?v=3&s=200 + link: https://github.com/scala/scala-partest + homeLink: http://docs.scala-lang.org/tutorials/partest-guide.html + issuesLink: https://github.com/scala/scala-partest/issues + readmeLink: https://github.com/scala/scala-partest/blob/master/README.md + contributingLink: + - title: Ensime + description: Scala Support for Text Editors + icon: https://avatars0.githubusercontent.com/u/5089042?v=3&s=200 + link: https://github.com/ensime/ensime-server + homeLink: http://ensime.github.io/ + issuesLink: https://github.com/ensime/ensime-server/issues + readmeLink: https://github.com/ensime/ensime-server/blob/2.0/README.md + contributingLink: https://ensime.github.io/contributing/ + - title: Scoverage + description: Scala code coverage tool + icon: https://avatars1.githubusercontent.com/u/5998302?v=3&s=200 + link: https://github.com/scoverage/scalac-scoverage-plugin + homeLink: http://scoverage.org/ + issuesLink: https://github.com/scoverage/scalac-scoverage-plugin/issues + readmeLink: https://github.com/scoverage/scalac-scoverage-plugin/blob/master/README.md + contributingLink: https://groups.google.com/forum/#!forum/scala-code-coverage-tool + - title: Abide + description: Lint tooling for Scala + icon: https://avatars1.githubusercontent.com/u/57059?v=3&s=200 + link: https://github.com/scala/scala-abide + homeLink: https://github.com/scala/scala-abide#abide--lint-tooling-for-scala + issuesLink: https://github.com/scala/scala-abide/issues + readmeLink: https://github.com/scala/scala-abide/blob/master/README.md + contributingLink: https://github.com/scala/scala-abide#extending-abide + +projectsInNeed: + - title: Scalap + description: Scala Decoder (part of scala/scala) + icon: https://avatars1.githubusercontent.com/u/57059?v=3&s=200 + link: https://github.com/scala/scala + homeLink: + issuesLink: https://issues.scala-lang.org/issues/?jql=status%20%3D%20Open%20AND%20text%20~%20%22scalap%22 + readmeLink: https://github.com/scala/scala#welcome + contributingLink: https://github.com/sbt/sbt/blob/0.13/CONTRIBUTING.md + - title: Scaladoc Tool + description: (Contribute through scala/scala) + icon: /resources/img/white-line.png + link: https://github.com/mdr/scalariform + homeLink: https://github.com/mdr/scalariform/wiki/Command-line-tool + issuesLink: https://github.com/mdr/scalariform/issues + readmeLink: https://github.com/mdr/scalariform/blob/master/README.rst --- ## Contributing to IDE and Build Tools @@ -23,109 +107,10 @@ Stuff changes. Found a broken link or something that needs updating on this page ### Projects -
-
-
-sbt logo -

sbt

-

Interactive build tool.

-

Home | -Issues | -ReadMe | -Contributing

-
-
-scala logo -

Scaladoc Tool

-

(Contribute through scala/scala)

-

Home | -Issues | -ReadMe | -Contributing

-
-
- -
-
-scala IDE logo

Scala IDE

-

The Eclipse Scala IDE project.

-

Home | -Issues | -ReadMe | -Contributing

-
-
-dbuild logo

DBuild

-

Multi-project build tool.

-

Home | -Issues | -ReadMe | -Contributing

-
-
- -
-
-scala logo -

Partest

-

Scala Compiler/Library Testing

-

Home | -Issues | -ReadMe

-
-
-ensime logo

Ensime

-

Scala Support for Text Editors

-

Home | -Issues | -ReadMe | -Contributing

-
-
- -
-
-scoverage logo

Scoverage

-

Scala code coverage tool

-

Home | -Issues | -ReadMe | -Contributing

-
-
-scala logo -

Abide

-

Lint tooling for Scala

-

Home | -Issues | -ReadMe | -Contributing

-
-
-
+{% include contributions-projects-list.html collection=page.projects %} ### Projects in Particular Need The following projects are important to the Scala community but are particularly in need of contributors to continue their development. -
-
-
-scala logo -

Scalap

-

Scala Decoder (part of scala/scala)

-

Issues | -ReadMe | -Contributing

-
-
-white line

Scalariform

-

Scala code formatter

-

Home | -Issues | -ReadMe

-
-
-
- - +{% include contributions-projects-list.html collection=page.projectsInNeed %} \ No newline at end of file From 0aa2f7f9660ea580cc661899ece1f99106f99c4f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Javier=20de=20Sil=C3=B3niz=20Sandino?= Date: Thu, 9 Feb 2017 12:10:38 +0100 Subject: [PATCH 0109/1870] Adding code of conduct --- contribute/index.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/contribute/index.md b/contribute/index.md index e843ef2f02..f0c52986b8 100644 --- a/contribute/index.md +++ b/contribute/index.md @@ -17,13 +17,13 @@ That depends on what you want to contribute. Below are some getting started reso ### Reporting bugs -See our [bug reporting guide](./bug-reporting-guide.html) to learn +See our [bug reporting guide](/contribute/bug-reporting-guide/) to learn how to efficiently report a bug. ### Contribute Coordination of contribution efforts takes place on the -[scala-internals Google group](./scala-internals.html). +[scala-internals Google group](/contribute/scala-internals/). {% include column-list-of-items.html collection=site.contribute_resources %} @@ -41,7 +41,7 @@ with their own maintainers and community of contributors. Helping out one of these projects is another way to help Scala. Consider lending on a hand on a project you're already using. Or, to find out about other projects, see the -[Libraries and Tools section](../community/#community-libraries-and-tools) +[Libraries and Tools section](/community/#community-libraries-and-tools) on our Community page. ### Scala Community Build From 32684bae5d915d7bcf7ce69c860c2930c5f89d6b Mon Sep 17 00:00:00 2001 From: Janek Bogucki Date: Tue, 20 Jun 2017 10:19:33 +0100 Subject: [PATCH 0110/1870] Update bug reporting links --- contribute/bug-reporting-guide.md | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/contribute/bug-reporting-guide.md b/contribute/bug-reporting-guide.md index 960f40b704..13a7553c88 100644 --- a/contribute/bug-reporting-guide.md +++ b/contribute/bug-reporting-guide.md @@ -3,7 +3,7 @@ layout: page title: Bug Reporting --- -The Scala project tracker is located at [http://issues.scala-lang.org](http://issues.scala-lang.org). Before you submit a bug make sure that it is certainly a bug by following instructions in *Is it a Bug?*. +The Scala compiler and standard library bug tracker is located at [https://github.com/scala/bug](https://github.com/scala/bug). Before you submit a bug make sure that it is certainly a bug by following instructions in *Is it a Bug?*. ## Is it a Bug? @@ -43,12 +43,12 @@ If you have a code snippet that is resulting in bytecode which you believe is be 5. If you want to file an improvement in the issue tracker please discuss it first on one of the mailing lists. They offer much bigger audience than issue tracker. The latter is not suitable for long discussions. -* Keep in mind that the behavior you are witnessing could be intended. Good formal resources for verifying whether or not the language behavior is intended is either in the [Scala Improvement Proposal Documents](http://docs.scala-lang.org/sips/sip-list.html) or in the [Scala Language Specification](http://www.scala-lang.org/files/archive/spec/2.11/). If in doubt, you may always ask on the [scala-internals mailing list](https://groups.google.com/forum/?fromgroups#!forum/scala-internals) or [stackoveflow](http://stackoverflow.com/questions/tagged/scala). +* Keep in mind that the behavior you are witnessing could be intended. Good formal resources for verifying whether or not the language behavior is intended is either in the [Scala Improvement Proposal Documents](http://docs.scala-lang.org/sips/sip-list.html) or in the [Scala Language Specification](http://www.scala-lang.org/files/archive/spec/2.12/). If in doubt, you may always ask on the [Community Category](https://contributors.scala-lang.org/c/community) or [Stack Overflow](https://stackoverflow.com/questions/tagged/scala). -In general, if you find yourself stuck on any of these steps, asking on one of the following Scala mailing lists can be helpful: +In general, if you find yourself stuck on any of these steps, asking on [Scala Contributors](https://contributors.scala-lang.org/) can be helpful: - - For unexpected behavior use [scala-language](https://groups.google.com/forum/?fromgroups#!forum/scala-language), or [scala-user](https://groups.google.com/forum/?fromgroups#!forum/scala-user) mailing lists. - - For compiler bugs use the [scala-internals](https://groups.google.com/forum/?fromgroups#!forum/scala-internals) mailing list. + - For unexpected behavior use the [Community Category](https://contributors.scala-lang.org/c/community). + - For compiler bugs use the [Compiler Category](https://contributors.scala-lang.org/c/compiler). * Examples of exceptions reported by the compiler which usually are not bugs: 1. `StackOverflowError` is typically not a bug unless the stacktrace involves the internal packages of the compiler (like `scala.tools.nsc...`). Try to increase the Java stack size (`-Xss`), in most of the cases it helps. @@ -84,4 +84,4 @@ In the description of your issue, be as detailed as you can. Bug reports which h 2. The expected output. 3. The actual output, including the stacktrace. 4. Related discussion on the mailing lists, if applicable. - 4. If you have already looked into the issue provide interesting insights or proposals for fixing the issue. + 5. If you have already looked into the issue provide interesting insights or proposals for fixing the issue. From 7390eec1410fbd55523e919450ef8dda1ffa6c87 Mon Sep 17 00:00:00 2001 From: Janek Bogucki Date: Thu, 22 Jun 2017 10:21:22 +0100 Subject: [PATCH 0111/1870] Add scalacheck tips and note removal of partest --- contribute/hacker-guide.md | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/contribute/hacker-guide.md b/contribute/hacker-guide.md index 8d7903fbea..a8e9d2e14c 100644 --- a/contribute/hacker-guide.md +++ b/contribute/hacker-guide.md @@ -264,11 +264,13 @@ Adding tests to the test suite is as easy as moving them to the appropriate dire * Code which should not compile needs to go into the [“neg” directory](https://github.com/scala/scala/tree/2.12.x/test/files/neg). * Code which should compile and get executed by the test suite needs to go into the [“run” directory](https://github.com/scala/scala/tree/2.12.x/test/files/run) and have a corresponding `.check` file with the expected output. You will get test failures if the content of a `.check` file is different from what the test produces while running. If the change in the output is an expected product of your work, you might not want to change the `.check` file by hand. To make partest change the `.check` file, run it with a `--update-check` flag, like so `./test/partest --update-check path/to/test.scala`. For more information on partest, please refer to its [documentation](http://docs.scala-lang.org/tutorials/partest-guide.html). * Everything that can be unit-tested should go to ["junit" directory](https://github.com/scala/scala/tree/2.12.x/test/junit) -* Property-based tests go to the ["scalacheck" directory](https://github.com/scala/scala/tree/2.12.x/test/files/scalacheck) +* Property-based tests go to the ["scalacheck" directory](https://github.com/scala/scala/tree/2.12.x/test/scalacheck) Here are some more testing tips: -* If you have several tests, and want a tool for only running tests that conform to some regular expression, you can use `partest-ack` in the `tools` directory: `./tools/partest-ack "dottype"` +* If you have several tests, and want a tool for only running tests that conform to some regular expression, you can use `partest-ack` in the `tools` directory: `./tools/partest-ack "dottype"`. `partest-ack` was removed in 2.12. +* If you want to run all scalacheck tests from sbt use `scalacheck/testOnly` +* To run scalacheck tests by name when in sbt use `scalacheck/testOnly ... `, for example `scalacheck/testOnly scala.tools.nsc.scaladoc.HtmlFactoryTest` * If your tests fail in the following way: test.bc: @@ -320,6 +322,8 @@ Run `sbt test` and `sbt partest` to run all of the JUnit and partest tests, resp testing: [...]/files/run/stringinterpolation_macro-run.scala [ OK ] All of 6 tests were successful (elapsed time: 00:00:08) +`partest` was removed in 2.12. + ## 4. Publish After development is finished, it's time to publish the code and submit your patch for discussion and potential inclusion into Scala. From c8305a9b4e7279273842e2701bfdb649a872ab88 Mon Sep 17 00:00:00 2001 From: Heather Miller Date: Thu, 13 Jul 2017 17:23:15 +0200 Subject: [PATCH 0112/1870] Get rid of some of the permalinks that are breaking everything --- contribute/bug-reporting-guide.md | 2 +- contribute/codereviews.md | 8 ++--- contribute/corelibs.md | 6 ++-- contribute/documentation.md | 20 ++++++------- contribute/guide.md | 6 ++-- contribute/hacker-guide.md | 4 +-- contribute/index.md | 4 +-- contribute/partest-guide.md | 30 +++++++++---------- contribute/scala-internals.md | 5 ++-- ...cala-standard-library-api-documentation.md | 2 +- contribute/tools.md | 10 +++---- 11 files changed, 48 insertions(+), 49 deletions(-) diff --git a/contribute/bug-reporting-guide.md b/contribute/bug-reporting-guide.md index 33b61807c2..05569ff8e4 100644 --- a/contribute/bug-reporting-guide.md +++ b/contribute/bug-reporting-guide.md @@ -1,7 +1,7 @@ --- title: Bug Reporting layout: inner-page-no-masthead -permalink: /contribute/bug-reporting-guide/ +# permalink: /contribute/bug-reporting-guide/ includeTOC: true --- diff --git a/contribute/codereviews.md b/contribute/codereviews.md index 9239fa8c14..2c56b4ed37 100644 --- a/contribute/codereviews.md +++ b/contribute/codereviews.md @@ -1,18 +1,18 @@ --- title: Code Review Contributions layout: inner-page-no-masthead -permalink: /contribute/codereviews/ +# permalink: /contribute/codereviews/ includeTOC: true --- ## Code Review Contributions -In addition to [bug fixing](/contribute/guide/), you can help us review -[waiting pull requests](#pull-requests-awaiting-comment). +In addition to [bug fixing](/contribute/guide/), you can help us review +[waiting pull requests](#pull-requests-awaiting-comment). This is also a good (and recommended) way to get to know the feel of the bug-fixing and submissions process before jumping in with your own pull requests. - + ### Review Guidelines [Code of Conduct reminder](/conduct/) diff --git a/contribute/corelibs.md b/contribute/corelibs.md index 1f34d150b0..fd69ae196e 100644 --- a/contribute/corelibs.md +++ b/contribute/corelibs.md @@ -1,7 +1,7 @@ --- title: Core Library Contributions layout: inner-page-no-masthead -permalink: /contribute/corelibs/ +# permalink: /contribute/corelibs/ includeTOC: true --- ## Core Library Contributions @@ -10,14 +10,14 @@ There are several options for contributing to Scala's core libraries. You can: * Help with [Documentation](/contribute/scala-standard-library-api-documentation/). * [Report Bugs or Issues](/contribute/bug-reporting-guide/) against the core libraries. -* [Fix Bugs or Issues](/contribute/guide/) against the +* [Fix Bugs or Issues](/contribute/guide/) against the [reported library bugs/issues](https://issues.scala-lang.org/issues/?filter=13001). * Contribute significant new functionality or a new API by submitting a Scala Library Improvement Process (SLIP) Document. ### Submitting a SLIP -For significant new functionality or a whole new API to be considered for +For significant new functionality or a whole new API to be considered for inclusion in the core Scala distribution, you will be asked to submit a SLIP (Scala Library Improvement Process) document. Please see [instructions for submitting a new SLIP](http://docs.scala-lang.org/sips/slip-submission.html) and familiarize yourself with the [SIP/SLIP](http://docs.scala-lang.org/sips/) section of the Scala documentation site. Also please pay particular attention to the [pre-requisites](http://docs.scala-lang.org/sips/slip-submission.html) before submitting a SLIP. diff --git a/contribute/documentation.md b/contribute/documentation.md index 2746fa77dc..8930a3c32c 100644 --- a/contribute/documentation.md +++ b/contribute/documentation.md @@ -1,7 +1,7 @@ --- title: Documentation Contributions layout: inner-page-no-masthead -permalink: /contribute/documentation/ +# permalink: /contribute/documentation/ includeTOC: true --- ## Contributing Documentation to the Scala project @@ -14,7 +14,7 @@ There are several ways you can help out with the improvement of Scala documentat Please read this page, and the pages linked from this one, fully before contributing documentation. Many of the questions you have will be answered in these resources. If you have a question that isn't answered, feel free to ask on the [scala-internals Google group](https://groups.google.com/forum/#!forum/scala-internals) and then, please, submit a pull request with updated documentation reflecting that answer. -**General requirements** for documentation submissions include spell-checking all written language, ensuring code samples compile and run correctly, correct grammar, and clean formatting/layout of the documentation. +**General requirements** for documentation submissions include spell-checking all written language, ensuring code samples compile and run correctly, correct grammar, and clean formatting/layout of the documentation. Thanks @@ -22,12 +22,12 @@ Thanks The Scala API documentation lives with the scala project source code. There are many ways you can help with improving Scaladoc, including: -* [Log issues for missing scaladoc documentation](/contribute/scala-standard-library-api-documentation/#contribute-api-documentation-bug-reports) - +* [Log issues for missing scaladoc documentation](/contribute/scala-standard-library-api-documentation/#contribute-api-documentation-bug-reports) - Please *follow the issue submission process closely* to help prevent duplicate issues being created. * [Claim Scaladoc Issues and Provide Documentation](/contribute/scala-standard-library-api-documentation/) - please claim issues prior to working on a specific scaladoc task to prevent duplication of effort. If you sit on an issue for too long without submitting a pull request, it will revert back to unassigned and you will need to re-claim it. -* You can also just -[submit new Scaladoc](/contribute/scala-standard-library-api-documentation/) -without creating an issue, but please look to see if there is an issue already submitted for your task and claim it if there is. If not, please post your intention to work on a specific scaladoc task on scala-internals so that people know what you are doing. +* You can also just +[submit new Scaladoc](/contribute/scala-standard-library-api-documentation/) +without creating an issue, but please look to see if there is an issue already submitted for your task and claim it if there is. If not, please post your intention to work on a specific scaladoc task on scala-internals so that people know what you are doing. ### The Main Scala Documentation Site @@ -43,15 +43,15 @@ without creating an issue, but please look to see if there is an issue already s * SIP (Scala Improvement Process) Proposals and more -Please read [contributing to the docs.scala-lang.org site](http://docs.scala-lang.org/contribute.html) through before embarking on changes. The site uses +Please read [contributing to the docs.scala-lang.org site](http://docs.scala-lang.org/contribute.html) through before embarking on changes. The site uses the [Jekyll](http://jekyllrb.com/) markdown engine so you will need to follow the instructions to get that running as well. ### Updating scala-lang.org Additional high-level documentation (including documentation on contributing -to Scala and related projects) is provided on the main -[Scala Language site](http://scala-lang.org), and is also kept in the -[scala-lang github project](https://github.com/scala/scala-lang) which may be forked to create pull requests. +to Scala and related projects) is provided on the main +[Scala Language site](http://scala-lang.org), and is also kept in the +[scala-lang github project](https://github.com/scala/scala-lang) which may be forked to create pull requests. Please read both the [docs.scala-lang.org contribution](http://docs.scala-lang.org/contribute.html) document and the [scala-lang.org github README](https://github.com/scala/scala-lang#scala-langorg) before embarking on any changes to the Scala language site, as it uses the same Jekyll markdown tool and many of the same conventions as the Scala documentation site. diff --git a/contribute/guide.md b/contribute/guide.md index afd3572c53..9edb289e06 100644 --- a/contribute/guide.md +++ b/contribute/guide.md @@ -1,7 +1,7 @@ --- title: Contributing guide layout: inner-page-no-masthead -permalink: /contribute/guide/ +# permalink: /contribute/guide/ includeTOC: true --- @@ -54,9 +54,9 @@ unencumbered by copyrights or patents. This is the impatient developer's checklist for the steps to submit a bug-fix pull request to the Scala project. For more information, description and justification for the steps, follow the links in that step. Further specific instructions for the release of Scala you are targeting can be found in the `CONTRIBUTING.md` file for that [github branch](https://github.com/scala/scala) -1. [Select a bug to fix from JIRA](/contribute/#community-tickets), or if you found the bug yourself and want to fix it, [create a JIRA issue](/contribute/bug-reporting-guide/) (but please +1. [Select a bug to fix from JIRA](/contribute/#community-tickets), or if you found the bug yourself and want to fix it, [create a JIRA issue](/contribute/bug-reporting-guide/) (but please [make sure it's not a duplicate](/contribute/bug-reporting-guide/#reporting-confirmed-bugs-is-a-sin)). -2. Optional ([but recommended](/contribute/scala-internals/#why-its-a-good-idea)), announce your intention to work on the bug on [scala-internals](/contribute/scala-internals/). After all, don't you want to work on a team with +2. Optional ([but recommended](/contribute/scala-internals/#why-its-a-good-idea)), announce your intention to work on the bug on [scala-internals](/contribute/scala-internals/). After all, don't you want to work on a team with [these friendly people](/contribute/hacker-guide/#connect) - it's one of the perks of contributing. 3. [Fork the Scala repository](/contribute/hacker-guide/#fork) and clone your fork (if you haven't already). 4. [Create a feature branch](/contribute/hacker-guide/#branch) to work on: use the branch name `issue/NNNN` where NNNN is the JIRA issue number. diff --git a/contribute/hacker-guide.md b/contribute/hacker-guide.md index abfe59b2da..31602a0909 100644 --- a/contribute/hacker-guide.md +++ b/contribute/hacker-guide.md @@ -2,7 +2,7 @@ title: Scala hacker guide by: Eugene Burmako layout: inner-page-no-masthead -permalink: /contribute/hacker-guide/ +# permalink: /contribute/hacker-guide/ includeTOC: true ---
@@ -54,7 +54,7 @@ it probably makes sense to familiarize yourself with Git first. We recommend * the [Git Pro](http://git-scm.com/book/en/) online book. * the help page on [Forking a Git Repository](https://help.github.com/articles/fork-a-repo). -* this great training tool [LearnGitBranching](http://pcottle.github.io/learnGitBranching/). One hour hands-on training helps more than 1000 hours reading. +* this great training tool [LearnGitBranching](http://pcottle.github.io/learnGitBranching/). One hour hands-on training helps more than 1000 hours reading. ### Fork diff --git a/contribute/index.md b/contribute/index.md index f0c52986b8..3dac16ead4 100644 --- a/contribute/index.md +++ b/contribute/index.md @@ -1,7 +1,7 @@ --- title: Contribute layout: inner-page-no-masthead -permalink: /contribute/ +# permalink: /contribute/ includeTOC: true --- @@ -22,7 +22,7 @@ how to efficiently report a bug. ### Contribute -Coordination of contribution efforts takes place on the +Coordination of contribution efforts takes place on the [scala-internals Google group](/contribute/scala-internals/). {% include column-list-of-items.html collection=site.contribute_resources %} diff --git a/contribute/partest-guide.md b/contribute/partest-guide.md index be37d6fc12..ce4f84ecf1 100644 --- a/contribute/partest-guide.md +++ b/contribute/partest-guide.md @@ -1,7 +1,7 @@ --- title: Running the Test Suite layout: inner-page-no-masthead -permalink: /contribute/partest-guide/ +# permalink: /contribute/partest-guide/ includeTOC: true --- @@ -14,11 +14,11 @@ The test suite can be run by using ant from the command line: $ ant test.suite ## Standalone - -There are launch scripts `partest` and `partest.bat` in the `test` folder of the scala project. To have partest run failing tests only and print details about test failures to the console, you can use - + +There are launch scripts `partest` and `partest.bat` in the `test` folder of the scala project. To have partest run failing tests only and print details about test failures to the console, you can use + ./test/partest --show-diff --show-log --failed - + You can get a summary of the usage by running partest without arguments. * Most commonly you want to invoke partest with an option that tells it which part of the tests to run. For example `--all`, `--pos`, `--neg` or `--run`. @@ -29,13 +29,13 @@ You can get a summary of the usage by running partest without arguments. * You can use the `SCALAC_OPTS` environment variable to pass command line options to the compiler. * You can use the `JAVA_OPTS` environment variable to pass command line options to the runner (e.g., for `run/jvm` tests). * The launch scripts run partest as follows: - + scala -cp scala.tools.partest.nest.NestRunner - + Partest classes from a `quick` build, e.g., can be found in `./build/quick/classes/partest/`. - + Partest will tell you where it loads compiler/library classes from by adding the `partest.debug` property: - + scala -Dpartest.debug=true -cp scala.tools.partest.nest.NestRunner @@ -46,10 +46,10 @@ Tests that depend on [ScalaCheck](https://github.com/rickynils/scalacheck) can b import org.scalacheck._ import Prop._ - + object Test { val prop_ConcatLists = property{ (l1: ListInt, l2: ListInt) => - l1.size + l2.size == (l1 ::: l2).size + l1.size + l2.size == (l1 ::: l2).size } val tests = List(("prop_ConcatLists", prop_ConcatLists)) @@ -59,10 +59,10 @@ Tests that depend on [ScalaCheck](https://github.com/rickynils/scalacheck) can b ### Windows -Some tests might fail because line endings in the `.check` files and the produced results do not match. In that case, set either +Some tests might fail because line endings in the `.check` files and the produced results do not match. In that case, set either - git config core.autocrlf false + git config core.autocrlf false -or +or - git config core.autocrlf input \ No newline at end of file + git config core.autocrlf input diff --git a/contribute/scala-internals.md b/contribute/scala-internals.md index 831f2cc864..e6fde53a81 100644 --- a/contribute/scala-internals.md +++ b/contribute/scala-internals.md @@ -7,11 +7,11 @@ includeTOC: true ## scala-internals -The [scala-internals mailing list](https://groups.google.com/d/forum/scala-internals) is where technical and logistical discussions concerning bugs, bug fixes, documentation, improvements, new features and other contributor related topics occur. +The [scala-internals mailing list](https://groups.google.com/d/forum/scala-internals) is where technical and logistical discussions concerning bugs, bug fixes, documentation, improvements, new features and other contributor related topics occur. ### Coordinating on scala-internals -Prior to commencing on contribution work on larger changes to the Scala project, it is recommended (but not required) that you make a post on scala-internals announcing your intention. It's a great time to invite any help, advice or ask any questions you might have. It's also a great place to meet peers, one of whom will probably be reviewing your contribution at some point. For smaller bug fixes or documentation changes where the risk of effort duplication is minimal, you can skip this post. +Prior to commencing on contribution work on larger changes to the Scala project, it is recommended (but not required) that you make a post on scala-internals announcing your intention. It's a great time to invite any help, advice or ask any questions you might have. It's also a great place to meet peers, one of whom will probably be reviewing your contribution at some point. For smaller bug fixes or documentation changes where the risk of effort duplication is minimal, you can skip this post. To help subscribers on the scala-internals list to sort through the postings, we request that the following topic labels are applied when you start a new post please: @@ -44,4 +44,3 @@ While it is optional to announce your intentions/work items on scala-internals b * There are a lot of nice people waiting to talk to you on scala-internals, you might be surprised how valuable and pleasant you find the experience of talking to them. If all of this has not convinced you then, please, go ahead and work on contributions anyway. It *is* less important to post to scala-internals first for small, self contained bugs than it is for larger issues or features, and not having posted first will not be a reason for your PR to be rejected, it just might be a rougher review/merge process than if you had posted first. It's your choice. - diff --git a/contribute/scala-standard-library-api-documentation.md b/contribute/scala-standard-library-api-documentation.md index 68df995375..c64a176cde 100644 --- a/contribute/scala-standard-library-api-documentation.md +++ b/contribute/scala-standard-library-api-documentation.md @@ -1,7 +1,7 @@ --- title: Contribute to API Documentation layout: inner-page-no-masthead -permalink: /contribute/scala-standard-library-api-documentation/ +# permalink: /contribute/scala-standard-library-api-documentation/ includeTOC: true --- diff --git a/contribute/tools.md b/contribute/tools.md index 420579913e..de96e19fa5 100644 --- a/contribute/tools.md +++ b/contribute/tools.md @@ -1,7 +1,7 @@ --- title: IDE and Build Tool Contributions layout: inner-page-no-masthead -permalink: /contribute/tools/ +# permalink: /contribute/tools/ includeTOC: true # Projects list: @@ -45,7 +45,7 @@ projects: homeLink: http://docs.scala-lang.org/tutorials/partest-guide.html issuesLink: https://github.com/scala/scala-partest/issues readmeLink: https://github.com/scala/scala-partest/blob/master/README.md - contributingLink: + contributingLink: - title: Ensime description: Scala Support for Text Editors icon: https://avatars0.githubusercontent.com/u/5089042?v=3&s=200 @@ -76,7 +76,7 @@ projectsInNeed: description: Scala Decoder (part of scala/scala) icon: https://avatars1.githubusercontent.com/u/57059?v=3&s=200 link: https://github.com/scala/scala - homeLink: + homeLink: issuesLink: https://issues.scala-lang.org/issues/?jql=status%20%3D%20Open%20AND%20text%20~%20%22scalap%22 readmeLink: https://github.com/scala/scala#welcome contributingLink: https://github.com/sbt/sbt/blob/0.13/CONTRIBUTING.md @@ -103,7 +103,7 @@ if you would like to help revive them. ### Broken Links? -Stuff changes. Found a broken link or something that needs updating on this page? Please, consider [submitting a documentation pull request](/contribute/documentation/#updating-scala-langorg) to fix it. +Stuff changes. Found a broken link or something that needs updating on this page? Please, consider [submitting a documentation pull request](/contribute/documentation/#updating-scala-langorg) to fix it. ### Projects @@ -113,4 +113,4 @@ Stuff changes. Found a broken link or something that needs updating on this page The following projects are important to the Scala community but are particularly in need of contributors to continue their development. -{% include contributions-projects-list.html collection=page.projectsInNeed %} \ No newline at end of file +{% include contributions-projects-list.html collection=page.projectsInNeed %} From fbca9ca0b3ef20fbb657aa132f88f85b097607b4 Mon Sep 17 00:00:00 2001 From: Heather Miller Date: Fri, 14 Jul 2017 17:02:30 +0200 Subject: [PATCH 0113/1870] Bug reporting guide link fixes --- _contribute_resources/2-bug-fixes.md | 2 +- contribute/corelibs.md | 2 +- contribute/guide.md | 6 +++--- contribute/index.md | 2 +- 4 files changed, 6 insertions(+), 6 deletions(-) diff --git a/_contribute_resources/2-bug-fixes.md b/_contribute_resources/2-bug-fixes.md index d10adb7908..8661ab9614 100644 --- a/_contribute_resources/2-bug-fixes.md +++ b/_contribute_resources/2-bug-fixes.md @@ -3,4 +3,4 @@ title: Bug fixes link: /contribute/guide/ icon: fa fa-pencil --- -Issues with the tools, core libraries and compiler. Also you can help us by [reporting bugs](/contribute/bug-reporting-guide/). \ No newline at end of file +Issues with the tools, core libraries and compiler. Also you can help us by [reporting bugs](/contribute/bug-reporting-guide.html). diff --git a/contribute/corelibs.md b/contribute/corelibs.md index fd69ae196e..c06a741915 100644 --- a/contribute/corelibs.md +++ b/contribute/corelibs.md @@ -9,7 +9,7 @@ includeTOC: true There are several options for contributing to Scala's core libraries. You can: * Help with [Documentation](/contribute/scala-standard-library-api-documentation/). -* [Report Bugs or Issues](/contribute/bug-reporting-guide/) against the core libraries. +* [Report Bugs or Issues](/contribute/bug-reporting-guide.html) against the core libraries. * [Fix Bugs or Issues](/contribute/guide/) against the [reported library bugs/issues](https://issues.scala-lang.org/issues/?filter=13001). * Contribute significant new functionality or a new API by submitting diff --git a/contribute/guide.md b/contribute/guide.md index 9edb289e06..bda4fa9ff3 100644 --- a/contribute/guide.md +++ b/contribute/guide.md @@ -12,7 +12,7 @@ includeTOC: true

Get a peek into the inners of the Scala compiler.

-

Report an issue

+

Report an issue

File a bug report or a feature request.

@@ -54,8 +54,8 @@ unencumbered by copyrights or patents. This is the impatient developer's checklist for the steps to submit a bug-fix pull request to the Scala project. For more information, description and justification for the steps, follow the links in that step. Further specific instructions for the release of Scala you are targeting can be found in the `CONTRIBUTING.md` file for that [github branch](https://github.com/scala/scala) -1. [Select a bug to fix from JIRA](/contribute/#community-tickets), or if you found the bug yourself and want to fix it, [create a JIRA issue](/contribute/bug-reporting-guide/) (but please -[make sure it's not a duplicate](/contribute/bug-reporting-guide/#reporting-confirmed-bugs-is-a-sin)). +1. [Select a bug to fix from JIRA](/contribute/#community-tickets), or if you found the bug yourself and want to fix it, [create a JIRA issue](/contribute/bug-reporting-guide.html) (but please +[make sure it's not a duplicate](/contribute/bug-reporting-guide.html#reporting-confirmed-bugs-is-a-sin)). 2. Optional ([but recommended](/contribute/scala-internals/#why-its-a-good-idea)), announce your intention to work on the bug on [scala-internals](/contribute/scala-internals/). After all, don't you want to work on a team with [these friendly people](/contribute/hacker-guide/#connect) - it's one of the perks of contributing. 3. [Fork the Scala repository](/contribute/hacker-guide/#fork) and clone your fork (if you haven't already). diff --git a/contribute/index.md b/contribute/index.md index 3dac16ead4..55563f8ac0 100644 --- a/contribute/index.md +++ b/contribute/index.md @@ -17,7 +17,7 @@ That depends on what you want to contribute. Below are some getting started reso ### Reporting bugs -See our [bug reporting guide](/contribute/bug-reporting-guide/) to learn +See our [bug reporting guide](/contribute/bug-reporting-guide.html) to learn how to efficiently report a bug. ### Contribute From e2f7c0712662e555f53f7c77cee608b5aadee722 Mon Sep 17 00:00:00 2001 From: Heather Miller Date: Fri, 14 Jul 2017 17:06:56 +0200 Subject: [PATCH 0114/1870] Removing some mentions of scala-internals --- contribute/documentation.md | 4 ++-- contribute/guide.md | 6 +++--- contribute/hacker-guide.md | 6 +++--- contribute/index.md | 4 ++-- 4 files changed, 10 insertions(+), 10 deletions(-) diff --git a/contribute/documentation.md b/contribute/documentation.md index 8930a3c32c..0111c5c15d 100644 --- a/contribute/documentation.md +++ b/contribute/documentation.md @@ -12,7 +12,7 @@ There are several ways you can help out with the improvement of Scala documentat * Guides, Overviews, Tutorials, Cheat Sheets and more on the docs.scala-lang.org site * Updating scala-lang.org -Please read this page, and the pages linked from this one, fully before contributing documentation. Many of the questions you have will be answered in these resources. If you have a question that isn't answered, feel free to ask on the [scala-internals Google group](https://groups.google.com/forum/#!forum/scala-internals) and then, please, submit a pull request with updated documentation reflecting that answer. +Please read this page, and the pages linked from this one, fully before contributing documentation. Many of the questions you have will be answered in these resources. If you have a question that isn't answered, feel free to ask on the [Scala Contributors](https://contributors.scala-lang.org/) mailing list and then, please, submit a pull request with updated documentation reflecting that answer. **General requirements** for documentation submissions include spell-checking all written language, ensuring code samples compile and run correctly, correct grammar, and clean formatting/layout of the documentation. @@ -27,7 +27,7 @@ Please *follow the issue submission process closely* to help prevent duplicate i * [Claim Scaladoc Issues and Provide Documentation](/contribute/scala-standard-library-api-documentation/) - please claim issues prior to working on a specific scaladoc task to prevent duplication of effort. If you sit on an issue for too long without submitting a pull request, it will revert back to unassigned and you will need to re-claim it. * You can also just [submit new Scaladoc](/contribute/scala-standard-library-api-documentation/) -without creating an issue, but please look to see if there is an issue already submitted for your task and claim it if there is. If not, please post your intention to work on a specific scaladoc task on scala-internals so that people know what you are doing. +without creating an issue, but please look to see if there is an issue already submitted for your task and claim it if there is. If not, please post your intention to work on a specific scaladoc task on [Scala Contributors](https://contributors.scala-lang.org/) so that people know what you are doing. ### The Main Scala Documentation Site diff --git a/contribute/guide.md b/contribute/guide.md index bda4fa9ff3..a824e2297f 100644 --- a/contribute/guide.md +++ b/contribute/guide.md @@ -8,7 +8,7 @@ includeTOC: true
-

Scala Internals

+

Scala Contributors

Get a peek into the inners of the Scala compiler.

@@ -56,7 +56,7 @@ This is the impatient developer's checklist for the steps to submit a bug-fix pu 1. [Select a bug to fix from JIRA](/contribute/#community-tickets), or if you found the bug yourself and want to fix it, [create a JIRA issue](/contribute/bug-reporting-guide.html) (but please [make sure it's not a duplicate](/contribute/bug-reporting-guide.html#reporting-confirmed-bugs-is-a-sin)). -2. Optional ([but recommended](/contribute/scala-internals/#why-its-a-good-idea)), announce your intention to work on the bug on [scala-internals](/contribute/scala-internals/). After all, don't you want to work on a team with +2. Optional ([but recommended](/contribute/scala-internals/#why-its-a-good-idea)), announce your intention to work on the bug on [Scala Contributors](https://contributors.scala-lang.org/). After all, don't you want to work on a team with [these friendly people](/contribute/hacker-guide/#connect) - it's one of the perks of contributing. 3. [Fork the Scala repository](/contribute/hacker-guide/#fork) and clone your fork (if you haven't already). 4. [Create a feature branch](/contribute/hacker-guide/#branch) to work on: use the branch name `issue/NNNN` where NNNN is the JIRA issue number. @@ -75,7 +75,7 @@ Need more information or a little more hand-holding for the first one? We got yo For larger, more ambitious changes (e.g. new language features), the first step to making a change is to discuss it with the community at large, to make sure everyone agrees on the idea and on the implementation plan. Announce the change -on the [scala-internals](http://groups.google.com/group/scala-internals) mailing list and get developer feedback. For really complex changes, a [Scala Improvement Process (SIP)](http://docs.scala-lang.org/sips/) document might be required, but the first step is always to discuss it on the mailing list and if a SIP is required, that will be discussed on the mailing list. +on the [Scala Contributors](https://contributors.scala-lang.org/) mailing list and get developer feedback. For really complex changes, a [Scala Improvement Process (SIP)](http://docs.scala-lang.org/sips/) document might be required, but the first step is always to discuss it on the mailing list and if a SIP is required, that will be discussed on the mailing list. Contributions, big or small, simple or complex, controversial or undisputed, need to materialize as patches against the Scala project source tree. The [hacker guide](/contribute/hacker-guide/) will explain how to materialize your idea into a full-fledged pull request against the Scala code base. diff --git a/contribute/hacker-guide.md b/contribute/hacker-guide.md index 31602a0909..a10fbb70eb 100644 --- a/contribute/hacker-guide.md +++ b/contribute/hacker-guide.md @@ -38,7 +38,7 @@ A list of language features/libraries along with their maintainer's full names a In our running example, since Martin is the person who submitted the string interpolation Scala Improvement Proposal and implemented this language feature for Scala 2.10.0, he might be interested in learning of new bugfixes to that feature. -As alluded to earlier, one must also choose an appropriate mailing list. Typically, one would use the scala-internals mailing list, as it is devoted to discussions about the core internal design and implementation of the Scala system. However, since this issue has been discussed previously on the scala-user mailing list, +As alluded to earlier, one must also choose an appropriate mailing list. Typically, one would use the [Scala Contributors](https://contributors.scala-lang.org/) mailing list, as it is devoted to discussions about the core internal design and implementation of the Scala system. However, since this issue has been discussed previously on the scala-user mailing list, in this example, we post to the [the scala-user mailing list](http://groups.google.com/group/scala-user) about our issue. Posting to scala-user @@ -202,7 +202,7 @@ If you intend on contributing to Scala collections, please make sure you're fami ##### The Scala Compiler -Documentation about the internal workings of the Scala compiler is scarce, and most of the knowledge is passed around by email (scala-internals mailing list), ticket, or word of mouth. However the situation is steadily improving. Here are the resources that might help: +Documentation about the internal workings of the Scala compiler is scarce, and most of the knowledge is passed around by email ([Scala Contributors](https://contributors.scala-lang.org/) mailing list), ticket, or word of mouth. However the situation is steadily improving. Here are the resources that might help: * [Compiler internals videos by Martin Odersky](http://www.scala-lang.org/old/node/598.html) are quite dated, but still very useful. In this three-video series Martin explains the general architecture of the compiler, and the basics of the front-end, which has recently become Scala reflection API. @@ -212,7 +212,7 @@ Documentation about the internal workings of the Scala compiler is scarce, and m at Lang.NEXT 2012 in which Martin elaborates on the design of scalac and the architecture of the reflection API. * [Scala compiler corner](http://lampwww.epfl.ch/~magarcia/ScalaCompilerCornerReloaded/) contains extensive documentation about most of the post-typer phases (i.e. the backend) in the Scala compiler. -* [scala-internals](http://groups.google.com/group/scala-internals), a mailing list which hosts discussions about the core +* [Scala Contributors](https://contributors.scala-lang.org/), a mailing list which hosts discussions about the core internal design and implementation of the Scala system. ##### Other Projects diff --git a/contribute/index.md b/contribute/index.md index 55563f8ac0..f56a91c163 100644 --- a/contribute/index.md +++ b/contribute/index.md @@ -22,8 +22,8 @@ how to efficiently report a bug. ### Contribute -Coordination of contribution efforts takes place on the -[scala-internals Google group](/contribute/scala-internals/). +Coordination of contribution efforts takes place on +[Scala Contributors](https://contributors.scala-lang.org/). {% include column-list-of-items.html collection=site.contribute_resources %} From 5c3fbae7f06170f21acc05a37f278cacc84bdb8d Mon Sep 17 00:00:00 2001 From: Heather Miller Date: Fri, 14 Jul 2017 17:08:59 +0200 Subject: [PATCH 0115/1870] Missing whitespace --- _contribute_resources/1-documentation.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/_contribute_resources/1-documentation.md b/_contribute_resources/1-documentation.md index 27739dee6a..0d9c198ffd 100644 --- a/_contribute_resources/1-documentation.md +++ b/_contribute_resources/1-documentation.md @@ -3,4 +3,4 @@ title: Documentation link: /contribute/documentation/ icon: fa fa-file-text --- -[Scaladoc (API)](/contribute/scala-standard-library-api-documentation/),[docs.scala-lang.org](http://docs.scala-lang.org/contribute.html) and [scala-lang.org](https://github.com/scala/scala-lang). \ No newline at end of file +[Scaladoc (API)](/contribute/scala-standard-library-api-documentation/), [docs.scala-lang.org](http://docs.scala-lang.org/contribute.html) and [scala-lang.org](https://github.com/scala/scala-lang). From d1d0f26798c64d560e8795343b49db234c7b0969 Mon Sep 17 00:00:00 2001 From: Seth Tisue Date: Wed, 19 Jul 2017 11:29:38 -0400 Subject: [PATCH 0116/1870] fix or remove links to wiki the wiki has been mercifully taken offline --- contribute/documentation.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/contribute/documentation.md b/contribute/documentation.md index 0111c5c15d..a329f67369 100644 --- a/contribute/documentation.md +++ b/contribute/documentation.md @@ -31,7 +31,7 @@ without creating an issue, but please look to see if there is an issue already s ### The Main Scala Documentation Site -[docs.scala-lang.org](https://wiki.scala-lang.org/) houses the primary source of written, non-API documentation for Scala. It's a github project that you can fork and submit pull requests from. It includes: +[docs.scala-lang.org](https://docs.scala-lang.org/) houses the primary source of written, non-API documentation for Scala. It's a github project that you can fork and submit pull requests from. It includes: * Overviews * Tutorials From 81a9902665dd90bd0b7e4b971e9f358a2bb492ab Mon Sep 17 00:00:00 2001 From: Seth Tisue Date: Thu, 10 Aug 2017 12:29:30 -0700 Subject: [PATCH 0117/1870] scala.github.com -> docs.scala-lang --- _contribute_resources/3-code-reviews.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/_contribute_resources/3-code-reviews.md b/_contribute_resources/3-code-reviews.md index 2ab235993b..ffdd6d2672 100644 --- a/_contribute_resources/3-code-reviews.md +++ b/_contribute_resources/3-code-reviews.md @@ -5,4 +5,4 @@ icon: fa fa-eye --- Review pull requests against [scala/scala](https://github.com/scala/scala/pulls), [scala/scala-lang](https://github.com/scala/scala-lang/pulls), -[scala/scala.github.com](https://github.com/scala/scala.github.com/pulls)and others. \ No newline at end of file +[scala/docs.scala-lang](https://github.com/scala/docs.scala-lang/pulls)and others. From 287b50a18d6d5cd3f07e6c9de8c7df7fe7a0da0b Mon Sep 17 00:00:00 2001 From: Jimin Hsieh Date: Thu, 17 Aug 2017 21:11:58 +0800 Subject: [PATCH 0118/1870] Fix broken links of https://scala-lang.org/contribute/#contribute. --- _contribute_resources/1-documentation.md | 4 ++-- _contribute_resources/2-bug-fixes.md | 2 +- _contribute_resources/3-code-reviews.md | 2 +- _contribute_resources/4-core-libraries.md | 4 ++-- _contribute_resources/5-ide-and-build-tools.md | 4 ++-- _contribute_resources/6-compiler-language.md | 4 ++-- 6 files changed, 10 insertions(+), 10 deletions(-) diff --git a/_contribute_resources/1-documentation.md b/_contribute_resources/1-documentation.md index 0d9c198ffd..54f18c938c 100644 --- a/_contribute_resources/1-documentation.md +++ b/_contribute_resources/1-documentation.md @@ -1,6 +1,6 @@ --- title: Documentation -link: /contribute/documentation/ +link: /contribute/documentation.html icon: fa fa-file-text --- -[Scaladoc (API)](/contribute/scala-standard-library-api-documentation/), [docs.scala-lang.org](http://docs.scala-lang.org/contribute.html) and [scala-lang.org](https://github.com/scala/scala-lang). +[Scaladoc (API)](/contribute/scala-standard-library-api-documentation.html), [docs.scala-lang.org](http://docs.scala-lang.org/contribute.html) and [scala-lang.org](https://github.com/scala/scala-lang). diff --git a/_contribute_resources/2-bug-fixes.md b/_contribute_resources/2-bug-fixes.md index 8661ab9614..cca6269e06 100644 --- a/_contribute_resources/2-bug-fixes.md +++ b/_contribute_resources/2-bug-fixes.md @@ -1,6 +1,6 @@ --- title: Bug fixes -link: /contribute/guide/ +link: /contribute/guide.html icon: fa fa-pencil --- Issues with the tools, core libraries and compiler. Also you can help us by [reporting bugs](/contribute/bug-reporting-guide.html). diff --git a/_contribute_resources/3-code-reviews.md b/_contribute_resources/3-code-reviews.md index ffdd6d2672..3de87cd929 100644 --- a/_contribute_resources/3-code-reviews.md +++ b/_contribute_resources/3-code-reviews.md @@ -1,6 +1,6 @@ --- title: Code Reviews -link: /contribute/codereviews/ +link: /contribute/codereviews.html icon: fa fa-eye --- Review pull requests against [scala/scala](https://github.com/scala/scala/pulls), diff --git a/_contribute_resources/4-core-libraries.md b/_contribute_resources/4-core-libraries.md index 7ad75c5752..06f1018479 100644 --- a/_contribute_resources/4-core-libraries.md +++ b/_contribute_resources/4-core-libraries.md @@ -1,6 +1,6 @@ --- title: Core Libraries -link: /contribute/corelibs/ +link: /contribute/corelibs.html icon: fa fa-clipboard --- -Update and expand the capabilities of the core (and associated) Scala libraries. \ No newline at end of file +Update and expand the capabilities of the core (and associated) Scala libraries. diff --git a/_contribute_resources/5-ide-and-build-tools.md b/_contribute_resources/5-ide-and-build-tools.md index 4b8bd2ed52..7202f0d953 100644 --- a/_contribute_resources/5-ide-and-build-tools.md +++ b/_contribute_resources/5-ide-and-build-tools.md @@ -1,6 +1,6 @@ --- title: IDE and Build Tools -link: /contribute/tools/ +link: /contribute/tools.html icon: fa fa-terminal --- -Enhance the Scala tools with features for build tools, IDE plug-ins and other related projects. \ No newline at end of file +Enhance the Scala tools with features for build tools, IDE plug-ins and other related projects. diff --git a/_contribute_resources/6-compiler-language.md b/_contribute_resources/6-compiler-language.md index 0c4eaa1325..fcfea35d5a 100644 --- a/_contribute_resources/6-compiler-language.md +++ b/_contribute_resources/6-compiler-language.md @@ -1,6 +1,6 @@ --- title: Compiler/Language -link: /contribute/guide/#larger-changes-new-features +link: /contribute/guide.html#larger-changes-new-features icon: fa fa-gears --- -Larger language features and compiler enhancements including language specification and SIPs. \ No newline at end of file +Larger language features and compiler enhancements including language specification and SIPs. From 18f49fc7d95e020cb39e4c2130299fe5b45b41a6 Mon Sep 17 00:00:00 2001 From: Heather Miller Date: Thu, 17 Aug 2017 17:33:08 +0200 Subject: [PATCH 0119/1870] More link fixes --- contribute/codereviews.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/contribute/codereviews.md b/contribute/codereviews.md index 2c56b4ed37..ab321fd2ca 100644 --- a/contribute/codereviews.md +++ b/contribute/codereviews.md @@ -15,7 +15,7 @@ own pull requests. ### Review Guidelines -[Code of Conduct reminder](/conduct/) +[Code of Conduct reminder]({{ site.baseurl }}/conduct.html) * Keep comments on-topic, concise and precise. * Attach comments to particular lines or regions they pertain to whenever possible. From aaf513b07215bffa7bd36d76d37922d2655a7767 Mon Sep 17 00:00:00 2001 From: Janek Bogucki Date: Wed, 6 Sep 2017 11:17:58 +0100 Subject: [PATCH 0120/1870] Extend partest guide with sbt and mention batch script removals --- contribute/partest-guide.md | 24 ++++++++++++++++++++++-- 1 file changed, 22 insertions(+), 2 deletions(-) diff --git a/contribute/partest-guide.md b/contribute/partest-guide.md index ce4f84ecf1..dccee46a1c 100644 --- a/contribute/partest-guide.md +++ b/contribute/partest-guide.md @@ -5,17 +5,37 @@ layout: inner-page-no-masthead includeTOC: true --- -Partest is a custom parallel testing tool that we use to run the test suite for the Scala compiler and library. Go the scala project folder from your local checkout and run it via `ant` or standalone as follows. +Partest is a custom parallel testing tool that we use to run the test suite for the Scala compiler and library. Go to the scala project folder from your local checkout and run it via `sbt`, `ant` or standalone as follows. + +## Using sbt + +The test suite can be run from the sbt console with: + + > partest + +You can get a summary of the usage by running `partest --help`. + +If you would like to run particular tests pass the test paths as arguments + + > partest test/files/pos/bounds.scala test/scaladoc/run/diagrams-base.scala + +To run only the Scaladoc tests use `--srcpath` with the location of the tests + + > partest --srcpath scaladoc ## Using ant +Please note support for ant was removed on the 2.12 branch. + The test suite can be run by using ant from the command line: $ ant test.suite ## Standalone -There are launch scripts `partest` and `partest.bat` in the `test` folder of the scala project. To have partest run failing tests only and print details about test failures to the console, you can use +Please note the standalone scripts mentioned below were removed in 2.12.2. sbt is the perferred way to run the test suite. + +There are launch scripts `partest` and `partest.bat` in the `test` folder of the scala project. To have partest run failing tests only and print details about test failures to the console, you can use ./test/partest --show-diff --show-log --failed From 48e43e80173efa233cb422e6e1a888c79c74a12e Mon Sep 17 00:00:00 2001 From: Seth Tisue Date: Wed, 6 Sep 2017 16:23:34 -0700 Subject: [PATCH 0121/1870] fix typo --- contribute/partest-guide.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/contribute/partest-guide.md b/contribute/partest-guide.md index dccee46a1c..e7e10621e1 100644 --- a/contribute/partest-guide.md +++ b/contribute/partest-guide.md @@ -33,7 +33,7 @@ The test suite can be run by using ant from the command line: ## Standalone -Please note the standalone scripts mentioned below were removed in 2.12.2. sbt is the perferred way to run the test suite. +Please note the standalone scripts mentioned below were removed in 2.12.2. sbt is the preferred way to run the test suite. There are launch scripts `partest` and `partest.bat` in the `test` folder of the scala project. To have partest run failing tests only and print details about test failures to the console, you can use From 6f2ca77dae73a6b1ccbedc639c5aed31940c8107 Mon Sep 17 00:00:00 2001 From: Philippus Baalman Date: Wed, 15 Nov 2017 10:59:10 +0100 Subject: [PATCH 0122/1870] Fix links to Hacker guide --- contribute/guide.md | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/contribute/guide.md b/contribute/guide.md index a824e2297f..ae69f50fd2 100644 --- a/contribute/guide.md +++ b/contribute/guide.md @@ -23,7 +23,7 @@ includeTOC: true

Get cracking on some easy to approach issues.

-

Hacker's guide

+

Hacker guide

Learn to write good code and improve your chances of contributing to the Scala galaxy.

@@ -57,16 +57,16 @@ This is the impatient developer's checklist for the steps to submit a bug-fix pu 1. [Select a bug to fix from JIRA](/contribute/#community-tickets), or if you found the bug yourself and want to fix it, [create a JIRA issue](/contribute/bug-reporting-guide.html) (but please [make sure it's not a duplicate](/contribute/bug-reporting-guide.html#reporting-confirmed-bugs-is-a-sin)). 2. Optional ([but recommended](/contribute/scala-internals/#why-its-a-good-idea)), announce your intention to work on the bug on [Scala Contributors](https://contributors.scala-lang.org/). After all, don't you want to work on a team with -[these friendly people](/contribute/hacker-guide/#connect) - it's one of the perks of contributing. -3. [Fork the Scala repository](/contribute/hacker-guide/#fork) and clone your fork (if you haven't already). -4. [Create a feature branch](/contribute/hacker-guide/#branch) to work on: use the branch name `issue/NNNN` where NNNN is the JIRA issue number. -5. [Fix the bug, or implement the new small feature](/contribute/hacker-guide/#implement), include new tests (yes, for bug fixes too). -6. [Test, rinse](/contribute/hacker-guide/#test) and [test some more](/contribute/partest-guide/) until [all the tests pass](/contribute/hacker-guide/#verify). -7. [Commit your changes](/contribute/hacker-guide#commit) to your feature branch in your fork. Please choose your commit message based on the [Git Hygiene](https://github.com/scala/scala#user-content-git-hygiene) section of the Scala project README. +[these friendly people](/contribute/hacker-guide.html#1-connect) - it's one of the perks of contributing. +3. [Fork the Scala repository](/contribute/hacker-guide.html#fork) and clone your fork (if you haven't already). +4. [Create a feature branch](/contribute/hacker-guide.html#branch) to work on: use the branch name `issue/NNNN` where NNNN is the JIRA issue number. +5. [Fix the bug, or implement the new small feature](/contribute/hacker-guide.html#implement), include new tests (yes, for bug fixes too). +6. [Test, rinse](/contribute/hacker-guide.html#test) and [test some more](/contribute/partest-guide/) until [all the tests pass](/contribute/hacker-guide.html#verify). +7. [Commit your changes](/contribute/hacker-guide.html#commit) to your feature branch in your fork. Please choose your commit message based on the [Git Hygiene](https://github.com/scala/scala#user-content-git-hygiene) section of the Scala project README. 8. If necessary [re-write git history](http://git-scm.com/book/en/Git-Branching-Rebasing) so that [commits are organized by major steps to the fix/feature]( https://github.com/scala/scala#git-hygiene). For bug fixes, a single commit is requested, for features several commits may be desirable (but each separate commit must compile and pass all tests) 9. [Submit a pull request](./hacker-guide.html#submit) following the [Scala project pull-request guidelines](http://docs.scala-lang.org/scala/pull-request-policy.html). -10. [Work with a reviewer](https://github.com/scala/scala#reviewing) to [get your pull request merged in](/contribute/hacker-guide/#review). +10. [Work with a reviewer](https://github.com/scala/scala#reviewing) to [get your pull request merged in](/contribute/hacker-guide.html#review). 11. Celebrate! Need more information or a little more hand-holding for the first one? We got you covered: take a read through the entire [Hacker Guide](./hacker-guide.html) for an example of implementing a new feature (some of the steps can be skipped for bug fixes, this will be obvious from reading it, but many of the steps here will help with bug fixes too). @@ -78,4 +78,4 @@ and on the implementation plan. Announce the change on the [Scala Contributors](https://contributors.scala-lang.org/) mailing list and get developer feedback. For really complex changes, a [Scala Improvement Process (SIP)](http://docs.scala-lang.org/sips/) document might be required, but the first step is always to discuss it on the mailing list and if a SIP is required, that will be discussed on the mailing list. Contributions, big or small, simple or complex, controversial or undisputed, need to materialize as patches against -the Scala project source tree. The [hacker guide](/contribute/hacker-guide/) will explain how to materialize your idea into a full-fledged pull request against the Scala code base. +the Scala project source tree. The [hacker guide](/contribute/hacker-guide.html) will explain how to materialize your idea into a full-fledged pull request against the Scala code base. From 3db9bb55a2f392f80f5bdb54c7811f948ade5b33 Mon Sep 17 00:00:00 2001 From: Philippus Baalman Date: Sat, 27 Jan 2018 21:04:51 +0100 Subject: [PATCH 0123/1870] Add missing space --- _contribute_resources/3-code-reviews.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/_contribute_resources/3-code-reviews.md b/_contribute_resources/3-code-reviews.md index 3de87cd929..2fc057eb0d 100644 --- a/_contribute_resources/3-code-reviews.md +++ b/_contribute_resources/3-code-reviews.md @@ -5,4 +5,4 @@ icon: fa fa-eye --- Review pull requests against [scala/scala](https://github.com/scala/scala/pulls), [scala/scala-lang](https://github.com/scala/scala-lang/pulls), -[scala/docs.scala-lang](https://github.com/scala/docs.scala-lang/pulls)and others. +[scala/docs.scala-lang](https://github.com/scala/docs.scala-lang/pulls) and others. From 725800ebd3d4e2b71407ea2017428853ce2b96a2 Mon Sep 17 00:00:00 2001 From: Philippus Baalman Date: Sat, 27 Jan 2018 21:11:47 +0100 Subject: [PATCH 0124/1870] Fix links --- contribute/corelibs.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/contribute/corelibs.md b/contribute/corelibs.md index c06a741915..aeb19e89af 100644 --- a/contribute/corelibs.md +++ b/contribute/corelibs.md @@ -8,9 +8,9 @@ includeTOC: true There are several options for contributing to Scala's core libraries. You can: -* Help with [Documentation](/contribute/scala-standard-library-api-documentation/). +* Help with [Documentation](/contribute/documentation.html). * [Report Bugs or Issues](/contribute/bug-reporting-guide.html) against the core libraries. -* [Fix Bugs or Issues](/contribute/guide/) against the +* [Fix Bugs or Issues](/contribute/guide.html) against the [reported library bugs/issues](https://issues.scala-lang.org/issues/?filter=13001). * Contribute significant new functionality or a new API by submitting a Scala Library Improvement Process (SLIP) Document. From 56abdcb1b0912957fc4e9f5c92018fbed73c04cb Mon Sep 17 00:00:00 2001 From: Philippus Baalman Date: Sat, 27 Jan 2018 21:12:47 +0100 Subject: [PATCH 0125/1870] Link to GitHub instead of JIRA --- contribute/corelibs.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/contribute/corelibs.md b/contribute/corelibs.md index aeb19e89af..e1f10cb790 100644 --- a/contribute/corelibs.md +++ b/contribute/corelibs.md @@ -11,7 +11,7 @@ There are several options for contributing to Scala's core libraries. You can: * Help with [Documentation](/contribute/documentation.html). * [Report Bugs or Issues](/contribute/bug-reporting-guide.html) against the core libraries. * [Fix Bugs or Issues](/contribute/guide.html) against the - [reported library bugs/issues](https://issues.scala-lang.org/issues/?filter=13001). + [reported library bugs/issues](https://github.com/scala/bug). * Contribute significant new functionality or a new API by submitting a Scala Library Improvement Process (SLIP) Document. From 46fc7ea2c1117a6fc9ea612e4cf53d92f802aa5d Mon Sep 17 00:00:00 2001 From: Philippus Baalman Date: Sat, 27 Jan 2018 21:19:43 +0100 Subject: [PATCH 0126/1870] Reword and link to GitHub instead of JIRA --- contribute/guide.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/contribute/guide.md b/contribute/guide.md index ae69f50fd2..1b530a1769 100644 --- a/contribute/guide.md +++ b/contribute/guide.md @@ -43,7 +43,7 @@ The main Scala project consists of the standard Scala library, the Scala reflect the Scala compiler and the Scaladoc tool. This means there's plenty to choose from when deciding what to work on. Typically the scaladoc tool provides a low entry point for new committers, so it is a good first step into contributing. -On the Scala bug tracker you will find many bugs that are [marked as good starting points to contributing ("community" bugs)](https://issues.scala-lang.org/secure/IssueNavigator.jspa?requestId=12111) or [that are not currently assigned](https://issues.scala-lang.org/secure/IssueNavigator.jspa?requestId=12112) and that you could pick up. Once you decided on a ticket to look at, see the next step on how to proceed further. +On the [Scala bug tracker](https://github.com/scala/bug) you will find the bugs that you could pick up. Once you decided on a ticket to look at, see the next step on how to proceed further. If you are interested in contributing code, we ask you to sign the [Scala Contributor License Agreement](http://www.lightbend.com/contribute/cla/scala), From 381b641dfb1a00ef2da9d646078cc4e8a85e4501 Mon Sep 17 00:00:00 2001 From: Philippus Baalman Date: Sat, 27 Jan 2018 21:20:28 +0100 Subject: [PATCH 0127/1870] Link to GitHub instead of JIRA --- contribute/scala-standard-library-api-documentation.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/contribute/scala-standard-library-api-documentation.md b/contribute/scala-standard-library-api-documentation.md index c64a176cde..6467cea947 100644 --- a/contribute/scala-standard-library-api-documentation.md +++ b/contribute/scala-standard-library-api-documentation.md @@ -42,7 +42,7 @@ and identify missing, incorrect or inadequate documentation. A good place to sta package objects for important packages (these often get overlooked for documentation and are a good place for API overviews). -If you find an issue, please log it in the [Scala issue tracker](https://issues.scala-lang.org) +If you find an issue, please log it in the [Scala bug tracker](https://github.com/scala/bug) **after making sure it is not already logged as an issue**. To help with disambiguation, please use the following format for issue title: From 74ce0815244088f76cab5e1f3d9cab4e4248a59d Mon Sep 17 00:00:00 2001 From: Philippus Baalman Date: Sat, 27 Jan 2018 21:39:58 +0100 Subject: [PATCH 0128/1870] Fix ironically broken link --- contribute/tools.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/contribute/tools.md b/contribute/tools.md index de96e19fa5..599cbf381e 100644 --- a/contribute/tools.md +++ b/contribute/tools.md @@ -103,7 +103,7 @@ if you would like to help revive them. ### Broken Links? -Stuff changes. Found a broken link or something that needs updating on this page? Please, consider [submitting a documentation pull request](/contribute/documentation/#updating-scala-langorg) to fix it. +Stuff changes. Found a broken link or something that needs updating on this page? Please, consider [submitting a documentation pull request](/contribute/documentation.html#updating-scala-langorg) to fix it. ### Projects From 832e674c2c10dcf1f1341d50dbcc549e917662f6 Mon Sep 17 00:00:00 2001 From: Philippus Baalman Date: Sat, 27 Jan 2018 21:41:15 +0100 Subject: [PATCH 0129/1870] Link to GitHub instead of JIRA --- contribute/tools.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/contribute/tools.md b/contribute/tools.md index 599cbf381e..8337c10935 100644 --- a/contribute/tools.md +++ b/contribute/tools.md @@ -19,7 +19,7 @@ projects: icon: https://avatars1.githubusercontent.com/u/57059?v=3&s=200 link: https://github.com/scala/scala homeLink: http://www.scala-lang.org/api - issuesLink: https://issues.scala-lang.org/issues/?jql=status%20%3D%20Open%20AND%20component%20%3D%20%22Scaladoc%20Tool%22 + issuesLink: https://github.com/scala/bug/labels/scaladoc readmeLink: https://github.com/scala/scala#welcome contributingLink: http://scala-lang.org/contribute/guide.html - title: Scala IDE From e4f39bf320ae3e8ee2fda6a3e91b94644ae239da Mon Sep 17 00:00:00 2001 From: Philippus Baalman Date: Sat, 27 Jan 2018 21:42:23 +0100 Subject: [PATCH 0130/1870] Fix Scalariform section --- contribute/tools.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/contribute/tools.md b/contribute/tools.md index 8337c10935..feb11afa8f 100644 --- a/contribute/tools.md +++ b/contribute/tools.md @@ -80,8 +80,8 @@ projectsInNeed: issuesLink: https://issues.scala-lang.org/issues/?jql=status%20%3D%20Open%20AND%20text%20~%20%22scalap%22 readmeLink: https://github.com/scala/scala#welcome contributingLink: https://github.com/sbt/sbt/blob/0.13/CONTRIBUTING.md - - title: Scaladoc Tool - description: (Contribute through scala/scala) + - title: Scalariform + description: Scala source code formatter icon: /resources/img/white-line.png link: https://github.com/mdr/scalariform homeLink: https://github.com/mdr/scalariform/wiki/Command-line-tool From 4a9c5f05ca7161756ae3b7f1be520908caa53910 Mon Sep 17 00:00:00 2001 From: Philippus Baalman Date: Sat, 27 Jan 2018 21:46:12 +0100 Subject: [PATCH 0131/1870] Remove Scalap --- contribute/tools.md | 8 -------- 1 file changed, 8 deletions(-) diff --git a/contribute/tools.md b/contribute/tools.md index feb11afa8f..a1e2ef78e2 100644 --- a/contribute/tools.md +++ b/contribute/tools.md @@ -72,14 +72,6 @@ projects: contributingLink: https://github.com/scala/scala-abide#extending-abide projectsInNeed: - - title: Scalap - description: Scala Decoder (part of scala/scala) - icon: https://avatars1.githubusercontent.com/u/57059?v=3&s=200 - link: https://github.com/scala/scala - homeLink: - issuesLink: https://issues.scala-lang.org/issues/?jql=status%20%3D%20Open%20AND%20text%20~%20%22scalap%22 - readmeLink: https://github.com/scala/scala#welcome - contributingLink: https://github.com/sbt/sbt/blob/0.13/CONTRIBUTING.md - title: Scalariform description: Scala source code formatter icon: /resources/img/white-line.png From 0dc0f0dab8532365fd069f7f3984d66976562635 Mon Sep 17 00:00:00 2001 From: Philippus Baalman Date: Sat, 27 Jan 2018 21:52:55 +0100 Subject: [PATCH 0132/1870] Link to GitHub instead of JIRA --- contribute/hacker-guide.md | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/contribute/hacker-guide.md b/contribute/hacker-guide.md index a10fbb70eb..4200df478c 100644 --- a/contribute/hacker-guide.md +++ b/contribute/hacker-guide.md @@ -17,7 +17,7 @@ Other good starting points for first-time contributors include the [Scala README Let's say that you particularly enjoy the new string interpolation language feature introduced in Scala 2.10.0, and you use it quite heavily. Though, there's an annoying issue -which you occasionally stumble upon: the formatting string interpolator `f` [does not support](https://issues.scala-lang.org/browse/SI-6725) +which you occasionally stumble upon: the formatting string interpolator `f` [does not support](https://github.com/scala/bug/issues/6725) new line tokens `%n`. One approach would be to go the mailing list, request that the bug be fixed, and then to wait indefinitely for the fix arrive. Another approach would be to instead patch Scala oneself, and to submit the fix to the Scala repository in hopes that it might make it into a subsequent release. @@ -88,10 +88,10 @@ Before you start making changes, always create your own branch. Never work on th the changes you plan on making. Use a prefix that describes the nature of your change. There are essentially two kinds of changes: bug fixes and new features. -* For bug fixes, use `issue/NNNN` or `ticket/NNNN` for bug NNNN from the [Scala issue tracker](https://issues.scala-lang.org/). +* For bug fixes, use `issue/NNNN` or `ticket/NNNN` for bug NNNN from the [Scala bug tracker](https://github.com/scala/bug). * For new feature use `topic/XXX` for feature XXX. Use feature names that make sense in the context of the whole Scala project and not just to you personally. For example, if you work on diagrams in Scaladoc, use `topic/scaladoc-diagrams` instead of just `topic/diagrams` would be a good branch name. -Since in our example, we're going to fix an existing bug [SI-6725](https://issues.scala-lang.org/browse/SI-6725), we'll create a branch named `ticket/6725`. +Since in our example, we're going to fix an existing bug [6725](https://github.com/scala/bug/issues/6725), we'll create a branch named `ticket/6725`. 16:39 ~/Projects/scala (master)$ git checkout -b ticket/6725 Switched to a new branch 'ticket/6725' @@ -108,7 +108,7 @@ You need the following tools: * `sbt`, an interactive build tool commonly used in Scala projects. Acquiring sbt manually is not necessary -- the recommended approach is to download the [sbt-extras runner script](https://github.com/paulp/sbt-extras/blob/master/sbt) and use it in place of `sbt`. The script will download and run the correct version of sbt when run from the Scala repository's root directory. * `curl` -- the build uses `curl` in the `pull-binary-libs.sh` script to download bootstrap libs. -OS X and Linux builds should work. Windows is supported, but it might have issues. Please report to [the issue tracker](https://issues.scala-lang.org/) if you encounter any. +OS X and Linux builds should work. Windows is supported, but it might have issues. Please report to the [Scala bug tracker](https://github.com/scala/bug) if you encounter any. Building Scala is as easy as running `sbt dist/mkPack` in the root of your cloned repository. In general, it's much more efficient to enter the `sbt` shell once and run the various tasks from there, instead of running each task by launching `sbt some-task` on your command prompt. @@ -136,7 +136,7 @@ Typically you would want to first make sure that your changes work on a small ex by running a comprehensive test suite. We'll start by creating a `sandbox` directory (`./sandbox` is listed in the .gitignore of the Scala repository), which will hold a single test file and its compilation results. First, let's make sure that -[the bug](https://issues.scala-lang.org/browse/SI-6725) is indeed reproducible by putting together a simple test and compiling and running it with the Scala compiler that we built using `sbt`. The Scala compiler that we just built is located in `build/pack/bin`. +[the bug](https://github.com/scala/bug/issues/6725) is indeed reproducible by putting together a simple test and compiling and running it with the Scala compiler that we built using `sbt`. The Scala compiler that we just built is located in `build/pack/bin`. 17:25 ~/Projects/scala (ticket/6725)$ mkdir sandbox 17:26 ~/Projects/scala (ticket/6725)$ cd sandbox @@ -221,7 +221,7 @@ Tools like Scaladoc also welcome contributions. Unfortunately these smaller proj ### Interlude -To fix [the bug we're interested in](https://issues.scala-lang.org/browse/SI-6725) we've tracked the `StringContext.f` interpolator +To fix [the bug we're interested in](https://github.com/scala/bug/issues/6725) we've tracked the `StringContext.f` interpolator down to a macro implemented in `MacroImplementations.scala` There we notice that the interpolator only processes conversions, but not tokens like `%n`. Looks like an easy fix. From 5ad09fd1367de5fc65748ded6df8c003c636ee84 Mon Sep 17 00:00:00 2001 From: Philippus Baalman Date: Sun, 28 Jan 2018 00:11:41 +0100 Subject: [PATCH 0133/1870] Remove link to 'Actors Migration Kit' --- contribute/bug-reporting-guide.md | 1 - 1 file changed, 1 deletion(-) diff --git a/contribute/bug-reporting-guide.md b/contribute/bug-reporting-guide.md index 05569ff8e4..71cb5e7ad8 100644 --- a/contribute/bug-reporting-guide.md +++ b/contribute/bug-reporting-guide.md @@ -21,7 +21,6 @@ If your issue is related to any of the following external projects, make sure to - [Akka](http://doc.akka.io/docs/akka/current/project/issue-tracking.html) - [Play!](http://github.com/playframework/Play20/issues) - [Slick](http://github.com/slick/slick/issues) - - [Actors Migration Kit](http://github.com/scala/actors-migration/issues?state=open) - [Scala IDE](https://scala-ide-portfolio.assembla.com/spaces/scala-ide/support/tickets) - [sbt](https://github.com/sbt/sbt/issues) From 1b4d548cbcfe92a861d226c07164006e8afb44fe Mon Sep 17 00:00:00 2001 From: Philippus Baalman Date: Sun, 28 Jan 2018 00:16:53 +0100 Subject: [PATCH 0134/1870] Replace references to 'JIRA' with 'GitHub' --- contribute/guide.md | 4 ++-- contribute/scala-standard-library-api-documentation.md | 6 +++--- contribute/tools.md | 2 +- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/contribute/guide.md b/contribute/guide.md index 1b530a1769..c2949683ae 100644 --- a/contribute/guide.md +++ b/contribute/guide.md @@ -54,12 +54,12 @@ unencumbered by copyrights or patents. This is the impatient developer's checklist for the steps to submit a bug-fix pull request to the Scala project. For more information, description and justification for the steps, follow the links in that step. Further specific instructions for the release of Scala you are targeting can be found in the `CONTRIBUTING.md` file for that [github branch](https://github.com/scala/scala) -1. [Select a bug to fix from JIRA](/contribute/#community-tickets), or if you found the bug yourself and want to fix it, [create a JIRA issue](/contribute/bug-reporting-guide.html) (but please +1. [Select a bug to fix from GitHub](/contribute/#community-tickets), or if you found the bug yourself and want to fix it, [create a GitHub issue](/contribute/bug-reporting-guide.html) (but please [make sure it's not a duplicate](/contribute/bug-reporting-guide.html#reporting-confirmed-bugs-is-a-sin)). 2. Optional ([but recommended](/contribute/scala-internals/#why-its-a-good-idea)), announce your intention to work on the bug on [Scala Contributors](https://contributors.scala-lang.org/). After all, don't you want to work on a team with [these friendly people](/contribute/hacker-guide.html#1-connect) - it's one of the perks of contributing. 3. [Fork the Scala repository](/contribute/hacker-guide.html#fork) and clone your fork (if you haven't already). -4. [Create a feature branch](/contribute/hacker-guide.html#branch) to work on: use the branch name `issue/NNNN` where NNNN is the JIRA issue number. +4. [Create a feature branch](/contribute/hacker-guide.html#branch) to work on: use the branch name `issue/NNNN` where NNNN is the GitHub issue number. 5. [Fix the bug, or implement the new small feature](/contribute/hacker-guide.html#implement), include new tests (yes, for bug fixes too). 6. [Test, rinse](/contribute/hacker-guide.html#test) and [test some more](/contribute/partest-guide/) until [all the tests pass](/contribute/hacker-guide.html#verify). 7. [Commit your changes](/contribute/hacker-guide.html#commit) to your feature branch in your fork. Please choose your commit message based on the [Git Hygiene](https://github.com/scala/scala#user-content-git-hygiene) section of the Scala project README. diff --git a/contribute/scala-standard-library-api-documentation.md b/contribute/scala-standard-library-api-documentation.md index 6467cea947..cae67a5db0 100644 --- a/contribute/scala-standard-library-api-documentation.md +++ b/contribute/scala-standard-library-api-documentation.md @@ -22,7 +22,7 @@ contribution steps and guidelines. Thank you.* Since API documentation is located in Scala source code files, the process for contributing API documentation is similar to that of contributing bug-fixes -to the Scala code base, but without the requirement that there be an issue filed on JIRA +to the Scala code base, but without the requirement that there be an issue filed on GitHub first. When forking/branching, just use a `scaladoc/xxxx` branch name, where xxxx is a descriptive, but short branch name (e.g. `scaladoc/future-object`). However, if an issue *does* exist, please use `issue/NNNN`, where NNNN is the ticket number, @@ -78,9 +78,9 @@ Please familiarize yourself with the following before contributing new API documentation to save time, effort, mistakes and repetition. * [Forking the Repo](./hacker-guide.html#set-up) - follow the setup steps through - the Branch section. If providing new documentation related to an existing JIRA issue, use `issue/NNNN` + the Branch section. If providing new documentation related to an existing GitHub issue, use `issue/NNNN` or `ticket/NNNN` as the guide states. If providing API documentation with no associated - JIRA issue, use `scaladoc/xxxx` instead. + GitHub issue, use `scaladoc/xxxx` instead. * [Scaladoc for library authors](http://docs.scala-lang.org/overviews/scaladoc/for-library-authors.html) covers the use of scaladoc tags, markdown and other features. * [Scaladoc's interface](http://docs.scala-lang.org/overviews/scaladoc/interface.html) diff --git a/contribute/tools.md b/contribute/tools.md index a1e2ef78e2..19f953785f 100644 --- a/contribute/tools.md +++ b/contribute/tools.md @@ -86,7 +86,7 @@ The links below are to a number of Scala build and IDE related projects that are Since these tools are in separate projects, they may (and likely will) have their own rules and guidelines for contributing. The [Hacker Guide](/contribute/hacker-guide/) and [Bug-fixing](/contribute/guide/) pages will likely have much in the way of related information on how to contribute to these projects, and are recommended reading. You should also check the README.md and (if it's present) CONTRIBUTING.md files from the actual projects before contributing to them. -Typically, issues for these projects will be reported and kept in the github project issue tracker for that project rather than in the Scala project JIRA. +Typically, issues for these projects will be reported and kept in the GitHub project issue tracker for that project rather than in the Scala bug tracker. Many of these projects have a gitter channel (usually listed in the README or CONTRIBUTING documents) which is a great place to discuss proposed work before commencing. There are some projects in this section that are in From 76665323a75257fc23570b416e1dd102824b5e1d Mon Sep 17 00:00:00 2001 From: Philippus Baalman Date: Sun, 28 Jan 2018 00:30:03 +0100 Subject: [PATCH 0135/1870] Remove 'Community Tickets' section almost completely --- contribute/index.md | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/contribute/index.md b/contribute/index.md index f56a91c163..f8d71a1f69 100644 --- a/contribute/index.md +++ b/contribute/index.md @@ -29,10 +29,8 @@ Coordination of contribution efforts takes place on ### Community Tickets -The following links provide starting points for -various contributor activities: - -{% include column-list-of-items.html collection=site.contribute_community_tickets %} +All issues can be found in the [Scala bug tracker](https://github.com/scala/bug). Most issues are labeled +to make it easier to find issues you are interested in. ### Tools and Libraries From 0dda54719465b83ce5267a663ca5e31927c51486 Mon Sep 17 00:00:00 2001 From: Philippus Baalman Date: Sun, 28 Jan 2018 11:48:36 +0100 Subject: [PATCH 0136/1870] Fix links to Mailing Lists --- contribute/hacker-guide.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/contribute/hacker-guide.md b/contribute/hacker-guide.md index a10fbb70eb..c6ce1c7eea 100644 --- a/contribute/hacker-guide.md +++ b/contribute/hacker-guide.md @@ -30,7 +30,7 @@ Sometimes it's appealing to hack alone and not to have to interact with others o this might not be the very best idea. There are people in the Scala community who have spent years accumulating knowledge about Scala libraries and internals. They might provide unique insights and, what's even better, direct assistance in their areas, so it is not only advantageous, but recommended to communicate with the community about your new patch. -Typically bug fixes and new features start out as an idea or an experiment posted on one of [our mailing lists]({{ site.baseurl }}/community/index.html#mailing-lists) to find out how people feel +Typically bug fixes and new features start out as an idea or an experiment posted on one of [our mailing lists]({{ site.baseurl }}/community/index.html#forums--mailing-lists) to find out how people feel about things you want to implement. People proficient in certain areas of Scala usually monitor mailing lists, so you'll often get some help by simply posting a message. But the most efficient way to connect is to cc your message to one of the people responsible for maintaining the aspect of Scala which you wish to contribute to. From 2f7d9fbed9fbb41c9489d5cb22c148e4f16155d1 Mon Sep 17 00:00:00 2001 From: Philippus Baalman Date: Sun, 28 Jan 2018 12:43:49 +0100 Subject: [PATCH 0137/1870] Fix broken links --- contribute/codereviews.md | 4 ++-- contribute/guide.md | 2 +- contribute/scala-standard-library-api-documentation.md | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/contribute/codereviews.md b/contribute/codereviews.md index ab321fd2ca..6e0a2592b6 100644 --- a/contribute/codereviews.md +++ b/contribute/codereviews.md @@ -6,7 +6,7 @@ includeTOC: true --- ## Code Review Contributions -In addition to [bug fixing](/contribute/guide/), you can help us review +In addition to [bug fixing](/contribute/guide.html), you can help us review [waiting pull requests](#pull-requests-awaiting-comment). This is also a good (and recommended) way to get to know the feel of the bug-fixing and submissions process before jumping in with your @@ -51,4 +51,4 @@ own pull requests.
-Also note that the [Tools contributions](/contribute/tools/) page has more projects that will generate pull requests. +Also note that the [Tools contributions](/contribute/tools.html) page has more projects that will generate pull requests. diff --git a/contribute/guide.md b/contribute/guide.md index ae69f50fd2..1f1a014a1b 100644 --- a/contribute/guide.md +++ b/contribute/guide.md @@ -61,7 +61,7 @@ This is the impatient developer's checklist for the steps to submit a bug-fix pu 3. [Fork the Scala repository](/contribute/hacker-guide.html#fork) and clone your fork (if you haven't already). 4. [Create a feature branch](/contribute/hacker-guide.html#branch) to work on: use the branch name `issue/NNNN` where NNNN is the JIRA issue number. 5. [Fix the bug, or implement the new small feature](/contribute/hacker-guide.html#implement), include new tests (yes, for bug fixes too). -6. [Test, rinse](/contribute/hacker-guide.html#test) and [test some more](/contribute/partest-guide/) until [all the tests pass](/contribute/hacker-guide.html#verify). +6. [Test, rinse](/contribute/hacker-guide.html#test) and [test some more](/contribute/partest-guide.html) until [all the tests pass](/contribute/hacker-guide.html#verify). 7. [Commit your changes](/contribute/hacker-guide.html#commit) to your feature branch in your fork. Please choose your commit message based on the [Git Hygiene](https://github.com/scala/scala#user-content-git-hygiene) section of the Scala project README. 8. If necessary [re-write git history](http://git-scm.com/book/en/Git-Branching-Rebasing) so that [commits are organized by major steps to the fix/feature]( https://github.com/scala/scala#git-hygiene). For bug fixes, a single commit is requested, for features several commits may be desirable (but each separate commit must compile and pass all tests) diff --git a/contribute/scala-standard-library-api-documentation.md b/contribute/scala-standard-library-api-documentation.md index c64a176cde..d7c69ef099 100644 --- a/contribute/scala-standard-library-api-documentation.md +++ b/contribute/scala-standard-library-api-documentation.md @@ -77,7 +77,7 @@ component so that they show up in the correct issue filters. Please familiarize yourself with the following before contributing new API documentation to save time, effort, mistakes and repetition. -* [Forking the Repo](./hacker-guide.html#set-up) - follow the setup steps through +* [Forking the Repo](./hacker-guide.html#2-set-up) - follow the setup steps through the Branch section. If providing new documentation related to an existing JIRA issue, use `issue/NNNN` or `ticket/NNNN` as the guide states. If providing API documentation with no associated JIRA issue, use `scaladoc/xxxx` instead. From f00b6f35c233152a7d5d3abea317d45369779a96 Mon Sep 17 00:00:00 2001 From: Philippus Baalman Date: Sun, 28 Jan 2018 13:26:28 +0100 Subject: [PATCH 0138/1870] Update links for ENSIME --- contribute/tools.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/contribute/tools.md b/contribute/tools.md index de96e19fa5..99bc353663 100644 --- a/contribute/tools.md +++ b/contribute/tools.md @@ -52,8 +52,8 @@ projects: link: https://github.com/ensime/ensime-server homeLink: http://ensime.github.io/ issuesLink: https://github.com/ensime/ensime-server/issues - readmeLink: https://github.com/ensime/ensime-server/blob/2.0/README.md - contributingLink: https://ensime.github.io/contributing/ + readmeLink: http://ensime.github.io/ + contributingLink: http://ensime.github.io/server/contributing/ - title: Scoverage description: Scala code coverage tool icon: https://avatars1.githubusercontent.com/u/5998302?v=3&s=200 From 5d99628ed6021cadecb44b96154134f4b3196795 Mon Sep 17 00:00:00 2001 From: Philippus Baalman Date: Sun, 28 Jan 2018 16:26:24 +0100 Subject: [PATCH 0139/1870] Remove link to not-existing page --- contribute/guide.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/contribute/guide.md b/contribute/guide.md index 1f1a014a1b..73b21ec22b 100644 --- a/contribute/guide.md +++ b/contribute/guide.md @@ -65,7 +65,7 @@ This is the impatient developer's checklist for the steps to submit a bug-fix pu 7. [Commit your changes](/contribute/hacker-guide.html#commit) to your feature branch in your fork. Please choose your commit message based on the [Git Hygiene](https://github.com/scala/scala#user-content-git-hygiene) section of the Scala project README. 8. If necessary [re-write git history](http://git-scm.com/book/en/Git-Branching-Rebasing) so that [commits are organized by major steps to the fix/feature]( https://github.com/scala/scala#git-hygiene). For bug fixes, a single commit is requested, for features several commits may be desirable (but each separate commit must compile and pass all tests) -9. [Submit a pull request](./hacker-guide.html#submit) following the [Scala project pull-request guidelines](http://docs.scala-lang.org/scala/pull-request-policy.html). +9. [Submit a pull request](./hacker-guide.html#submit). 10. [Work with a reviewer](https://github.com/scala/scala#reviewing) to [get your pull request merged in](/contribute/hacker-guide.html#review). 11. Celebrate! From d13b13bd0cb4d050f5bada2b510d12b4b326701b Mon Sep 17 00:00:00 2001 From: Philippus Baalman Date: Sun, 28 Jan 2018 17:42:37 +0100 Subject: [PATCH 0140/1870] Update DBuild links --- contribute/tools.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/contribute/tools.md b/contribute/tools.md index 99bc353663..571005612a 100644 --- a/contribute/tools.md +++ b/contribute/tools.md @@ -33,11 +33,11 @@ projects: - title: DBuild description: Multi-project build tool. icon: https://avatars3.githubusercontent.com/u/784923?v=3&s=200 - link: https://github.com/typesafehub/dbuild - homeLink: http://typesafehub.github.io/dbuild - issuesLink: https://github.com/typesafehub/dbuild/issues - readmeLink: https://github.com/typesafehub/dbuild/blob/master/README.md - contributingLink: https://github.com/typesafehub/dbuild/blob/master/README.md#get-involved + link: https://github.com/lightbend/dbuild + homeLink: http://lightbend.github.io/dbuild + issuesLink: https://github.com/lightbend/dbuild/issues + readmeLink: https://github.com/lightbend/dbuild/blob/master/README.md + contributingLink: https://github.com/lightbend/dbuild/blob/master/README.md#get-involved - title: Partest description: Scala Compiler/Library Testing icon: https://avatars1.githubusercontent.com/u/57059?v=3&s=200 From df0a9ab333fd0fa892f7ccf6e28fe28cc68a7f72 Mon Sep 17 00:00:00 2001 From: Philippus Baalman Date: Wed, 14 Feb 2018 20:24:48 +0100 Subject: [PATCH 0141/1870] Update broken/outdated links --- contribute/tools.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/contribute/tools.md b/contribute/tools.md index 4ae371d64e..0a3bd6e80e 100644 --- a/contribute/tools.md +++ b/contribute/tools.md @@ -44,7 +44,7 @@ projects: link: https://github.com/scala/scala-partest homeLink: http://docs.scala-lang.org/tutorials/partest-guide.html issuesLink: https://github.com/scala/scala-partest/issues - readmeLink: https://github.com/scala/scala-partest/blob/master/README.md + readmeLink: https://github.com/scala/scala-partest/blob/1.1.x/README.md contributingLink: - title: Ensime description: Scala Support for Text Editors @@ -84,7 +84,7 @@ projectsInNeed: The links below are to a number of Scala build and IDE related projects that are important in the larger Scala space, and which welcome contributions. -Since these tools are in separate projects, they may (and likely will) have their own rules and guidelines for contributing. The [Hacker Guide](/contribute/hacker-guide/) and [Bug-fixing](/contribute/guide/) pages will likely have much in the way of related information on how to contribute to these projects, and are recommended reading. You should also check the README.md and (if it's present) CONTRIBUTING.md files from the actual projects before contributing to them. +Since these tools are in separate projects, they may (and likely will) have their own rules and guidelines for contributing. The [Hacker Guide](/contribute/hacker-guide.html) and [Bug-fixing](/contribute/guide.html) pages will likely have much in the way of related information on how to contribute to these projects, and are recommended reading. You should also check the README.md and (if it's present) CONTRIBUTING.md files from the actual projects before contributing to them. Typically, issues for these projects will be reported and kept in the GitHub project issue tracker for that project rather than in the Scala bug tracker. Many of these projects have a gitter channel (usually listed in the README or CONTRIBUTING documents) which is a great place to discuss proposed work before commencing. From d0fc35c74940a14777bf68d393159ebfe56e1ed0 Mon Sep 17 00:00:00 2001 From: Olivier Blanvillain Date: Fri, 16 Feb 2018 10:59:33 +0100 Subject: [PATCH 0142/1870] s/username/user-name/ to please htmlproofer --- contribute/hacker-guide.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/contribute/hacker-guide.md b/contribute/hacker-guide.md index d63ad12cf4..78af87bbcd 100644 --- a/contribute/hacker-guide.md +++ b/contribute/hacker-guide.md @@ -67,7 +67,7 @@ If you're new to Git, don't be afraid of messing up-- there is no way you can co ### Clone -If everything went okay, you will be redirected to your own fork at `https://github.com/username/scala`, where `username` +If everything went okay, you will be redirected to your own fork at `https://github.com/user-name/scala`, where `username` is your github user name. You might find it helpful to read [http://help.github.com/fork-a-repo/](http://help.github.com/fork-a-repo/), which covers some of the things that will follow below. Then, _clone_ your repository (i.e. pull a copy from GitHub to your local machine) by running the following on the command line: From 084649625b4db03be95dcceef418f470bedaabff Mon Sep 17 00:00:00 2001 From: Olivier Blanvillain Date: Fri, 16 Feb 2018 12:00:21 +0100 Subject: [PATCH 0143/1870] Fix contribute link --- contribute/documentation.md | 6 +++--- contribute/scala-standard-library-api-documentation.md | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/contribute/documentation.md b/contribute/documentation.md index a329f67369..40f7ad9c6e 100644 --- a/contribute/documentation.md +++ b/contribute/documentation.md @@ -22,11 +22,11 @@ Thanks The Scala API documentation lives with the scala project source code. There are many ways you can help with improving Scaladoc, including: -* [Log issues for missing scaladoc documentation](/contribute/scala-standard-library-api-documentation/#contribute-api-documentation-bug-reports) - +* [Log issues for missing scaladoc documentation](/contribute/scala-standard-library-api-documentation.html#contribute-api-documentation-bug-reports) - Please *follow the issue submission process closely* to help prevent duplicate issues being created. -* [Claim Scaladoc Issues and Provide Documentation](/contribute/scala-standard-library-api-documentation/) - please claim issues prior to working on a specific scaladoc task to prevent duplication of effort. If you sit on an issue for too long without submitting a pull request, it will revert back to unassigned and you will need to re-claim it. +* [Claim Scaladoc Issues and Provide Documentation](/contribute/scala-standard-library-api-documentation.html) - please claim issues prior to working on a specific scaladoc task to prevent duplication of effort. If you sit on an issue for too long without submitting a pull request, it will revert back to unassigned and you will need to re-claim it. * You can also just -[submit new Scaladoc](/contribute/scala-standard-library-api-documentation/) +[submit new Scaladoc](/contribute/scala-standard-library-api-documentation.html) without creating an issue, but please look to see if there is an issue already submitted for your task and claim it if there is. If not, please post your intention to work on a specific scaladoc task on [Scala Contributors](https://contributors.scala-lang.org/) so that people know what you are doing. ### The Main Scala Documentation Site diff --git a/contribute/scala-standard-library-api-documentation.md b/contribute/scala-standard-library-api-documentation.md index f05df8663b..33ee4ad558 100644 --- a/contribute/scala-standard-library-api-documentation.md +++ b/contribute/scala-standard-library-api-documentation.md @@ -1,7 +1,7 @@ --- title: Contribute to API Documentation layout: inner-page-no-masthead -# permalink: /contribute/scala-standard-library-api-documentation/ +# permalink: /contribute/scala-standard-library-api-documentation.html includeTOC: true --- From 44032b5473103a5cf21a47552398910667898f0d Mon Sep 17 00:00:00 2001 From: Seth Tisue Date: Wed, 19 Jun 2019 07:38:39 +0200 Subject: [PATCH 0144/1870] update spec links and advisements partially addresses scala/bug#11566 --- contribute/bug-reporting-guide.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/contribute/bug-reporting-guide.md b/contribute/bug-reporting-guide.md index 71cb5e7ad8..bd2f2c70c4 100644 --- a/contribute/bug-reporting-guide.md +++ b/contribute/bug-reporting-guide.md @@ -44,7 +44,7 @@ If you have a code snippet that is resulting in bytecode which you believe is be 5. If you want to file an improvement in the issue tracker please discuss it first on one of the mailing lists. They offer much bigger audience than issue tracker. The latter is not suitable for long discussions. -* Keep in mind that the behavior you are witnessing could be intended. Good formal resources for verifying whether or not the language behavior is intended is either in the [Scala Improvement Proposal Documents](http://docs.scala-lang.org/sips/sip-list.html) or in the [Scala Language Specification](http://www.scala-lang.org/files/archive/spec/2.12/). If in doubt, you may always ask on the [Community Category](https://contributors.scala-lang.org/c/community) or [Stack Overflow](https://stackoverflow.com/questions/tagged/scala). +* Keep in mind that the behavior you are witnessing could be intended. Good formal resources for verifying whether or not the language behavior is intended is either in the [Scala Improvement Proposal Documents](http://docs.scala-lang.org/sips/sip-list.html) or in the [Scala Language Specification](http://www.scala-lang.org/files/archive/spec/2.13/). If in doubt, you may always ask on the [Community Category](https://contributors.scala-lang.org/c/community) or [Stack Overflow](https://stackoverflow.com/questions/tagged/scala). In general, if you find yourself stuck on any of these steps, asking on [Scala Contributors](https://contributors.scala-lang.org/) can be helpful: From 4643f1228a86fb6c347d746267989a73cc89b695 Mon Sep 17 00:00:00 2001 From: Dale Wijnand <344610+dwijnand@users.noreply.github.com> Date: Tue, 9 Jul 2019 14:41:22 +0100 Subject: [PATCH 0145/1870] Point the hacker guide to 2.13 --- contribute/hacker-guide.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/contribute/hacker-guide.md b/contribute/hacker-guide.md index 78af87bbcd..b9e657adfb 100644 --- a/contribute/hacker-guide.md +++ b/contribute/hacker-guide.md @@ -10,7 +10,7 @@ This guide is intended to help you get from an idea of fixing a bug or implement This guide covers the entire process, from the conception of your idea or bugfix to the point where it is merged into Scala. Throughout, we will use a running example of an idea or bugfix one might wish to contribute. -Other good starting points for first-time contributors include the [Scala README](https://github.com/scala/scala#get-in-touch) and [contributor's guidelines](https://github.com/scala/scala/blob/2.12.x/CONTRIBUTING.md). +Other good starting points for first-time contributors include the [Scala README](https://github.com/scala/scala#get-in-touch) and [contributor's guidelines](https://github.com/scala/scala/blob/2.13.x/CONTRIBUTING.md). ## The Running Example From 4a881b17668f274112b934d07c719b1e2c21039f Mon Sep 17 00:00:00 2001 From: Seth Tisue Date: Wed, 9 Oct 2019 19:16:52 -0700 Subject: [PATCH 0146/1870] renamed community-builds repo to community-build --- contribute/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/contribute/index.md b/contribute/index.md index f8d71a1f69..f7b6082226 100644 --- a/contribute/index.md +++ b/contribute/index.md @@ -55,6 +55,6 @@ which leverages [sbt](http://www.scala-sbt.org). If you're the maintainer -- or just an interested user! -- of an open-source Scala library or tool, please visit the -[community build documentation](https://github.com/scala/community-builds/wiki) +[community build documentation](https://github.com/scala/community-build/wiki) for guidelines on what projects are suitable for the community build and how projects can be added. From ef84a9323cf7607406a976be1b6956a43b868052 Mon Sep 17 00:00:00 2001 From: Seth Tisue Date: Sat, 12 Oct 2019 07:18:26 -0700 Subject: [PATCH 0147/1870] ENSIME is dead, Abide is dead (#1083) --- contribute/tools.md | 16 ---------------- 1 file changed, 16 deletions(-) diff --git a/contribute/tools.md b/contribute/tools.md index 0a3bd6e80e..4a32124731 100644 --- a/contribute/tools.md +++ b/contribute/tools.md @@ -46,14 +46,6 @@ projects: issuesLink: https://github.com/scala/scala-partest/issues readmeLink: https://github.com/scala/scala-partest/blob/1.1.x/README.md contributingLink: - - title: Ensime - description: Scala Support for Text Editors - icon: https://avatars0.githubusercontent.com/u/5089042?v=3&s=200 - link: https://github.com/ensime/ensime-server - homeLink: http://ensime.github.io/ - issuesLink: https://github.com/ensime/ensime-server/issues - readmeLink: http://ensime.github.io/ - contributingLink: http://ensime.github.io/server/contributing/ - title: Scoverage description: Scala code coverage tool icon: https://avatars1.githubusercontent.com/u/5998302?v=3&s=200 @@ -62,14 +54,6 @@ projects: issuesLink: https://github.com/scoverage/scalac-scoverage-plugin/issues readmeLink: https://github.com/scoverage/scalac-scoverage-plugin/blob/master/README.md contributingLink: https://groups.google.com/forum/#!forum/scala-code-coverage-tool - - title: Abide - description: Lint tooling for Scala - icon: https://avatars1.githubusercontent.com/u/57059?v=3&s=200 - link: https://github.com/scala/scala-abide - homeLink: https://github.com/scala/scala-abide#abide--lint-tooling-for-scala - issuesLink: https://github.com/scala/scala-abide/issues - readmeLink: https://github.com/scala/scala-abide/blob/master/README.md - contributingLink: https://github.com/scala/scala-abide#extending-abide projectsInNeed: - title: Scalariform From 7fbd26db957db39e4c611d5b7d9d9c7295449088 Mon Sep 17 00:00:00 2001 From: Seth Tisue Date: Mon, 27 Jan 2020 18:16:47 -0800 Subject: [PATCH 0148/1870] fix dead links fixes #1101 --- contribute/bug-reporting-guide.md | 2 +- contribute/corelibs.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/contribute/bug-reporting-guide.md b/contribute/bug-reporting-guide.md index bd2f2c70c4..22642e1289 100644 --- a/contribute/bug-reporting-guide.md +++ b/contribute/bug-reporting-guide.md @@ -44,7 +44,7 @@ If you have a code snippet that is resulting in bytecode which you believe is be 5. If you want to file an improvement in the issue tracker please discuss it first on one of the mailing lists. They offer much bigger audience than issue tracker. The latter is not suitable for long discussions. -* Keep in mind that the behavior you are witnessing could be intended. Good formal resources for verifying whether or not the language behavior is intended is either in the [Scala Improvement Proposal Documents](http://docs.scala-lang.org/sips/sip-list.html) or in the [Scala Language Specification](http://www.scala-lang.org/files/archive/spec/2.13/). If in doubt, you may always ask on the [Community Category](https://contributors.scala-lang.org/c/community) or [Stack Overflow](https://stackoverflow.com/questions/tagged/scala). +* Keep in mind that the behavior you are witnessing could be intended. Good formal resources for verifying whether or not the language behavior is intended is either in the [Scala Improvement Proposal Documents](https://docs.scala-lang.org/sips/) or in the [Scala Language Specification](http://www.scala-lang.org/files/archive/spec/2.13/). If in doubt, you may always ask on the [Community Category](https://contributors.scala-lang.org/c/community) or [Stack Overflow](https://stackoverflow.com/questions/tagged/scala). In general, if you find yourself stuck on any of these steps, asking on [Scala Contributors](https://contributors.scala-lang.org/) can be helpful: diff --git a/contribute/corelibs.md b/contribute/corelibs.md index e1f10cb790..bd6827e438 100644 --- a/contribute/corelibs.md +++ b/contribute/corelibs.md @@ -20,4 +20,4 @@ There are several options for contributing to Scala's core libraries. You can: For significant new functionality or a whole new API to be considered for inclusion in the core Scala distribution, you will be asked to submit a SLIP (Scala Library Improvement Process) document. -Please see [instructions for submitting a new SLIP](http://docs.scala-lang.org/sips/slip-submission.html) and familiarize yourself with the [SIP/SLIP](http://docs.scala-lang.org/sips/) section of the Scala documentation site. Also please pay particular attention to the [pre-requisites](http://docs.scala-lang.org/sips/slip-submission.html) before submitting a SLIP. +Please see [instructions for submitting a new SLIP](https://web.archive.org/web/20180116192845/http://docs.scala-lang.org/sips/slip-submission.html) and familiarize yourself with the [SIP/SLIP](http://docs.scala-lang.org/sips/) section of the Scala documentation site. Also please pay particular attention to the [pre-requisites](http://docs.scala-lang.org/sips/slip-submission.html) before submitting a SLIP. From cd0e4fa3ac7bb6206a70ef844d17afad9dd21fe8 Mon Sep 17 00:00:00 2001 From: Seth Tisue Date: Wed, 29 Jan 2020 10:58:27 -0800 Subject: [PATCH 0149/1870] fix some 404s --- contribute/corelibs.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/contribute/corelibs.md b/contribute/corelibs.md index bd6827e438..260d49fb2f 100644 --- a/contribute/corelibs.md +++ b/contribute/corelibs.md @@ -20,4 +20,4 @@ There are several options for contributing to Scala's core libraries. You can: For significant new functionality or a whole new API to be considered for inclusion in the core Scala distribution, you will be asked to submit a SLIP (Scala Library Improvement Process) document. -Please see [instructions for submitting a new SLIP](https://web.archive.org/web/20180116192845/http://docs.scala-lang.org/sips/slip-submission.html) and familiarize yourself with the [SIP/SLIP](http://docs.scala-lang.org/sips/) section of the Scala documentation site. Also please pay particular attention to the [pre-requisites](http://docs.scala-lang.org/sips/slip-submission.html) before submitting a SLIP. +Please see [instructions for submitting a new SLIP](https://web.archive.org/web/20180116192845/http://docs.scala-lang.org/sips/slip-submission.html) and familiarize yourself with the [SIP/SLIP](http://docs.scala-lang.org/sips/) section of the Scala documentation site. Also please pay particular attention to the pre-requisites in the instructions before submitting a SLIP. From ae348d24df52b095cb0ab8b2c64bc1b03ca69770 Mon Sep 17 00:00:00 2001 From: Philippus Date: Thu, 30 Jan 2020 07:55:03 +0100 Subject: [PATCH 0150/1870] Replace references to SLIP with SIP --- contribute/corelibs.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/contribute/corelibs.md b/contribute/corelibs.md index 260d49fb2f..a63707a8e3 100644 --- a/contribute/corelibs.md +++ b/contribute/corelibs.md @@ -13,11 +13,11 @@ There are several options for contributing to Scala's core libraries. You can: * [Fix Bugs or Issues](/contribute/guide.html) against the [reported library bugs/issues](https://github.com/scala/bug). * Contribute significant new functionality or a new API by submitting - a Scala Library Improvement Process (SLIP) Document. + a Scala Improvement Process (SIP) Document. -### Submitting a SLIP +### Submitting a SIP For significant new functionality or a whole new API to be considered for -inclusion in the core Scala distribution, you will be asked to submit a SLIP (Scala Library Improvement Process) document. +inclusion in the core Scala distribution, you will be asked to submit a SIP (Scala Improvement Process) document. -Please see [instructions for submitting a new SLIP](https://web.archive.org/web/20180116192845/http://docs.scala-lang.org/sips/slip-submission.html) and familiarize yourself with the [SIP/SLIP](http://docs.scala-lang.org/sips/) section of the Scala documentation site. Also please pay particular attention to the pre-requisites in the instructions before submitting a SLIP. +Please see [instructions for submitting a new SIP](https://docs.scala-lang.org/sips/sip-submission.html) and familiarize yourself with the [SIP](http://docs.scala-lang.org/sips/) section of the Scala documentation site. Also please pay particular attention to the pre-requisites in the instructions before submitting a SIP. From 6342df91471689c4eb7dfc3d45b91c8140b09d63 Mon Sep 17 00:00:00 2001 From: Philippus Date: Sat, 1 Feb 2020 09:40:38 +0100 Subject: [PATCH 0151/1870] Reword bit about significant changes --- contribute/corelibs.md | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) diff --git a/contribute/corelibs.md b/contribute/corelibs.md index a63707a8e3..6b2cc5d95f 100644 --- a/contribute/corelibs.md +++ b/contribute/corelibs.md @@ -12,12 +12,8 @@ There are several options for contributing to Scala's core libraries. You can: * [Report Bugs or Issues](/contribute/bug-reporting-guide.html) against the core libraries. * [Fix Bugs or Issues](/contribute/guide.html) against the [reported library bugs/issues](https://github.com/scala/bug). -* Contribute significant new functionality or a new API by submitting - a Scala Improvement Process (SIP) Document. -### Submitting a SIP +### Significant changes -For significant new functionality or a whole new API to be considered for -inclusion in the core Scala distribution, you will be asked to submit a SIP (Scala Improvement Process) document. - -Please see [instructions for submitting a new SIP](https://docs.scala-lang.org/sips/sip-submission.html) and familiarize yourself with the [SIP](http://docs.scala-lang.org/sips/) section of the Scala documentation site. Also please pay particular attention to the pre-requisites in the instructions before submitting a SIP. +For significant new functionality or a whole new API to be considered for inclusion in the core Scala distribution, +please take into account [https://github.com/scala/scala-dev/issues/661] before doing so. From fa1fc2b169352c1aec176bb5a2df8b65ce10e9f8 Mon Sep 17 00:00:00 2001 From: Seth Tisue Date: Tue, 13 Oct 2020 09:07:35 -0700 Subject: [PATCH 0152/1870] remove incorrect bit about partest (#1163) --- contribute/hacker-guide.md | 2 -- 1 file changed, 2 deletions(-) diff --git a/contribute/hacker-guide.md b/contribute/hacker-guide.md index b9e657adfb..f2f11d4f71 100644 --- a/contribute/hacker-guide.md +++ b/contribute/hacker-guide.md @@ -324,8 +324,6 @@ Run `sbt test` and `sbt partest` to run all of the JUnit and partest tests, resp testing: [...]/files/run/stringinterpolation_macro-run.scala [ OK ] All of 6 tests were successful (elapsed time: 00:00:08) -`partest` was removed in 2.12. - ## 4. Publish After development is finished, it's time to publish the code and submit your patch for discussion and potential inclusion into Scala. From 545f84c9e697b7754a86260771cccc982f456091 Mon Sep 17 00:00:00 2001 From: Marcono1234 Date: Mon, 14 Dec 2020 23:54:24 +0100 Subject: [PATCH 0153/1870] Use HTTPS for links Does not update links in documentation of third party content in - _sass/vendors - resources/js/vendor --- _contribute_resources/1-documentation.md | 2 +- contribute/bug-reporting-guide.md | 8 ++--- contribute/documentation.md | 8 ++--- contribute/guide.md | 6 ++-- contribute/hacker-guide.md | 36 +++++++++---------- contribute/index.md | 2 +- ...cala-standard-library-api-documentation.md | 14 ++++---- contribute/tools.md | 14 ++++---- 8 files changed, 45 insertions(+), 45 deletions(-) diff --git a/_contribute_resources/1-documentation.md b/_contribute_resources/1-documentation.md index 54f18c938c..b39290a394 100644 --- a/_contribute_resources/1-documentation.md +++ b/_contribute_resources/1-documentation.md @@ -3,4 +3,4 @@ title: Documentation link: /contribute/documentation.html icon: fa fa-file-text --- -[Scaladoc (API)](/contribute/scala-standard-library-api-documentation.html), [docs.scala-lang.org](http://docs.scala-lang.org/contribute.html) and [scala-lang.org](https://github.com/scala/scala-lang). +[Scaladoc (API)](/contribute/scala-standard-library-api-documentation.html), [docs.scala-lang.org](https://docs.scala-lang.org/contribute.html) and [scala-lang.org](https://github.com/scala/scala-lang). diff --git a/contribute/bug-reporting-guide.md b/contribute/bug-reporting-guide.md index 22642e1289..88317da0ce 100644 --- a/contribute/bug-reporting-guide.md +++ b/contribute/bug-reporting-guide.md @@ -18,9 +18,9 @@ The first step in identifying a bug is to identify which component of the Scala If your issue is related to any of the following external projects, make sure to use its appropriate issue tracker: - - [Akka](http://doc.akka.io/docs/akka/current/project/issue-tracking.html) - - [Play!](http://github.com/playframework/Play20/issues) - - [Slick](http://github.com/slick/slick/issues) + - [Akka](https://doc.akka.io/docs/akka/current/project/issue-tracking.html) + - [Play!](https://github.com/playframework/Play20/issues) + - [Slick](https://github.com/slick/slick/issues) - [Scala IDE](https://scala-ide-portfolio.assembla.com/spaces/scala-ide/support/tickets) - [sbt](https://github.com/sbt/sbt/issues) @@ -44,7 +44,7 @@ If you have a code snippet that is resulting in bytecode which you believe is be 5. If you want to file an improvement in the issue tracker please discuss it first on one of the mailing lists. They offer much bigger audience than issue tracker. The latter is not suitable for long discussions. -* Keep in mind that the behavior you are witnessing could be intended. Good formal resources for verifying whether or not the language behavior is intended is either in the [Scala Improvement Proposal Documents](https://docs.scala-lang.org/sips/) or in the [Scala Language Specification](http://www.scala-lang.org/files/archive/spec/2.13/). If in doubt, you may always ask on the [Community Category](https://contributors.scala-lang.org/c/community) or [Stack Overflow](https://stackoverflow.com/questions/tagged/scala). +* Keep in mind that the behavior you are witnessing could be intended. Good formal resources for verifying whether or not the language behavior is intended is either in the [Scala Improvement Proposal Documents](https://docs.scala-lang.org/sips/) or in the [Scala Language Specification](https://www.scala-lang.org/files/archive/spec/2.13/). If in doubt, you may always ask on the [Community Category](https://contributors.scala-lang.org/c/community) or [Stack Overflow](https://stackoverflow.com/questions/tagged/scala). In general, if you find yourself stuck on any of these steps, asking on [Scala Contributors](https://contributors.scala-lang.org/) can be helpful: diff --git a/contribute/documentation.md b/contribute/documentation.md index 40f7ad9c6e..19a72fbe34 100644 --- a/contribute/documentation.md +++ b/contribute/documentation.md @@ -43,15 +43,15 @@ without creating an issue, but please look to see if there is an issue already s * SIP (Scala Improvement Process) Proposals and more -Please read [contributing to the docs.scala-lang.org site](http://docs.scala-lang.org/contribute.html) through before embarking on changes. The site uses -the [Jekyll](http://jekyllrb.com/) markdown engine so you will need to follow the instructions to get that running as well. +Please read [contributing to the docs.scala-lang.org site](https://docs.scala-lang.org/contribute.html) through before embarking on changes. The site uses +the [Jekyll](https://jekyllrb.com/) markdown engine so you will need to follow the instructions to get that running as well. ### Updating scala-lang.org Additional high-level documentation (including documentation on contributing to Scala and related projects) is provided on the main -[Scala Language site](http://scala-lang.org), and is also kept in the +[Scala Language site](https://scala-lang.org), and is also kept in the [scala-lang github project](https://github.com/scala/scala-lang) which may be forked to create pull requests. Please read both the -[docs.scala-lang.org contribution](http://docs.scala-lang.org/contribute.html) document and the [scala-lang.org github README](https://github.com/scala/scala-lang#scala-langorg) before embarking on any changes to the Scala language site, as it uses the same Jekyll markdown tool and many of the same conventions as the Scala documentation site. +[docs.scala-lang.org contribution](https://docs.scala-lang.org/contribute.html) document and the [scala-lang.org github README](https://github.com/scala/scala-lang#scala-langorg) before embarking on any changes to the Scala language site, as it uses the same Jekyll markdown tool and many of the same conventions as the Scala documentation site. diff --git a/contribute/guide.md b/contribute/guide.md index 6751849aaa..f54d47ca45 100644 --- a/contribute/guide.md +++ b/contribute/guide.md @@ -46,7 +46,7 @@ Typically the scaladoc tool provides a low entry point for new committers, so it On the [Scala bug tracker](https://github.com/scala/bug) you will find the bugs that you could pick up. Once you decided on a ticket to look at, see the next step on how to proceed further. If you are interested in contributing code, we ask you to sign the -[Scala Contributor License Agreement](http://www.lightbend.com/contribute/cla/scala), +[Scala Contributor License Agreement](https://www.lightbend.com/contribute/cla/scala), which allows us to ensure that all code submitted to the project is unencumbered by copyrights or patents. @@ -63,7 +63,7 @@ This is the impatient developer's checklist for the steps to submit a bug-fix pu 5. [Fix the bug, or implement the new small feature](/contribute/hacker-guide.html#implement), include new tests (yes, for bug fixes too). 6. [Test, rinse](/contribute/hacker-guide.html#test) and [test some more](/contribute/partest-guide.html) until [all the tests pass](/contribute/hacker-guide.html#verify). 7. [Commit your changes](/contribute/hacker-guide.html#commit) to your feature branch in your fork. Please choose your commit message based on the [Git Hygiene](https://github.com/scala/scala#user-content-git-hygiene) section of the Scala project README. -8. If necessary [re-write git history](http://git-scm.com/book/en/Git-Branching-Rebasing) so that [commits are organized by major steps to the fix/feature]( +8. If necessary [re-write git history](https://git-scm.com/book/en/Git-Branching-Rebasing) so that [commits are organized by major steps to the fix/feature]( https://github.com/scala/scala#git-hygiene). For bug fixes, a single commit is requested, for features several commits may be desirable (but each separate commit must compile and pass all tests) 9. [Submit a pull request](./hacker-guide.html#submit). 10. [Work with a reviewer](https://github.com/scala/scala#reviewing) to [get your pull request merged in](/contribute/hacker-guide.html#review). @@ -75,7 +75,7 @@ Need more information or a little more hand-holding for the first one? We got yo For larger, more ambitious changes (e.g. new language features), the first step to making a change is to discuss it with the community at large, to make sure everyone agrees on the idea and on the implementation plan. Announce the change -on the [Scala Contributors](https://contributors.scala-lang.org/) mailing list and get developer feedback. For really complex changes, a [Scala Improvement Process (SIP)](http://docs.scala-lang.org/sips/) document might be required, but the first step is always to discuss it on the mailing list and if a SIP is required, that will be discussed on the mailing list. +on the [Scala Contributors](https://contributors.scala-lang.org/) mailing list and get developer feedback. For really complex changes, a [Scala Improvement Process (SIP)](https://docs.scala-lang.org/sips/) document might be required, but the first step is always to discuss it on the mailing list and if a SIP is required, that will be discussed on the mailing list. Contributions, big or small, simple or complex, controversial or undisputed, need to materialize as patches against the Scala project source tree. The [hacker guide](/contribute/hacker-guide.html) will explain how to materialize your idea into a full-fledged pull request against the Scala code base. diff --git a/contribute/hacker-guide.md b/contribute/hacker-guide.md index f2f11d4f71..01775e4580 100644 --- a/contribute/hacker-guide.md +++ b/contribute/hacker-guide.md @@ -39,7 +39,7 @@ A list of language features/libraries along with their maintainer's full names a In our running example, since Martin is the person who submitted the string interpolation Scala Improvement Proposal and implemented this language feature for Scala 2.10.0, he might be interested in learning of new bugfixes to that feature. As alluded to earlier, one must also choose an appropriate mailing list. Typically, one would use the [Scala Contributors](https://contributors.scala-lang.org/) mailing list, as it is devoted to discussions about the core internal design and implementation of the Scala system. However, since this issue has been discussed previously on the scala-user mailing list, -in this example, we post to the [the scala-user mailing list](http://groups.google.com/group/scala-user) about our issue. +in this example, we post to the [the scala-user mailing list](https://groups.google.com/group/scala-user) about our issue. Posting to scala-user Response from Martin @@ -48,17 +48,17 @@ Now that we have the approval of the feature's author, we can get to work! ## 2. Set up -Hacking Scala begins with creating a branch for your work item. To develop Scala we use [Git](http://git-scm.com/) -and [GitHub](http://github.com/). This section of the guide provides a short walkthrough, but if you are new to Git, +Hacking Scala begins with creating a branch for your work item. To develop Scala we use [Git](https://git-scm.com/) +and [GitHub](https://github.com/). This section of the guide provides a short walkthrough, but if you are new to Git, it probably makes sense to familiarize yourself with Git first. We recommend -* the [Git Pro](http://git-scm.com/book/en/) online book. +* the [Git Pro](https://git-scm.com/book/en/) online book. * the help page on [Forking a Git Repository](https://help.github.com/articles/fork-a-repo). -* this great training tool [LearnGitBranching](http://pcottle.github.io/learnGitBranching/). One hour hands-on training helps more than 1000 hours reading. +* this great training tool [LearnGitBranching](https://pcottle.github.io/learnGitBranching/). One hour hands-on training helps more than 1000 hours reading. ### Fork -Log into [GitHub](http://github.com/), go to [https://github.com/scala/scala](https://github.com/scala/scala) and click the `Fork` +Log into [GitHub](https://github.com/), go to [https://github.com/scala/scala](https://github.com/scala/scala) and click the `Fork` button in the top right corner of the page. This will create your own copy of our repository that will serve as a scratchpad for your work. If you're new to Git, don't be afraid of messing up-- there is no way you can corrupt our repository. @@ -68,7 +68,7 @@ If you're new to Git, don't be afraid of messing up-- there is no way you can co ### Clone If everything went okay, you will be redirected to your own fork at `https://github.com/user-name/scala`, where `username` -is your github user name. You might find it helpful to read [http://help.github.com/fork-a-repo/](http://help.github.com/fork-a-repo/), +is your github user name. You might find it helpful to read [https://help.github.com/fork-a-repo/](https://help.github.com/fork-a-repo/), which covers some of the things that will follow below. Then, _clone_ your repository (i.e. pull a copy from GitHub to your local machine) by running the following on the command line: 16:35 ~/Projects$ git clone https://github.com/xeno-by/scala @@ -96,7 +96,7 @@ Since in our example, we're going to fix an existing bug [6725](https://github.c 16:39 ~/Projects/scala (master)$ git checkout -b ticket/6725 Switched to a new branch 'ticket/6725' -If you are new to Git and branching, read the [Branching Chapter](http://git-scm.com/book/en/Git-Branching) in the Git Pro book. +If you are new to Git and branching, read the [Branching Chapter](https://git-scm.com/book/en/Git-Branching) in the Git Pro book. ### Build @@ -198,19 +198,19 @@ Contributing to the Scala standard library is about the same as working on one o If documentation is necessary for some trait/class/object/method/etc in the Scala standard library, typically maintainers will include inline comments describing their design decisions or rationale for implementing things the way they have, if it is not straightforward. -If you intend on contributing to Scala collections, please make sure you're familiar with the design of the Scala collections library. It can be easy to put an implementation in the wrong location if you are unfamiliar with the collections architecture. There is an excellent and very detailed guide covering [the Architecture of Scala Collections](http://docs.scala-lang.org/overviews/core/architecture-of-scala-collections.html), as well as a larger more general [Scala collections Guide](http://docs.scala-lang.org/overviews/collections/introduction.html) covering the sequential portion of collections. For parallel collections, there also exists a detailed [Scala Parallel Collections Guide](http://docs.scala-lang.org/overviews/parallel-collections/overview.html). +If you intend on contributing to Scala collections, please make sure you're familiar with the design of the Scala collections library. It can be easy to put an implementation in the wrong location if you are unfamiliar with the collections architecture. There is an excellent and very detailed guide covering [the Architecture of Scala Collections](https://docs.scala-lang.org/overviews/core/architecture-of-scala-collections.html), as well as a larger more general [Scala collections Guide](https://docs.scala-lang.org/overviews/collections/introduction.html) covering the sequential portion of collections. For parallel collections, there also exists a detailed [Scala Parallel Collections Guide](https://docs.scala-lang.org/overviews/parallel-collections/overview.html). ##### The Scala Compiler Documentation about the internal workings of the Scala compiler is scarce, and most of the knowledge is passed around by email ([Scala Contributors](https://contributors.scala-lang.org/) mailing list), ticket, or word of mouth. However the situation is steadily improving. Here are the resources that might help: -* [Compiler internals videos by Martin Odersky](http://www.scala-lang.org/old/node/598.html) are quite dated, but still very useful. In this three-video +* [Compiler internals videos by Martin Odersky](https://www.scala-lang.org/old/node/598.html) are quite dated, but still very useful. In this three-video series Martin explains the general architecture of the compiler, and the basics of the front-end, which has recently become Scala reflection API. -* [Reflection documentation](http://docs.scala-lang.org/overviews/reflection/overview.html) describes fundamental data structures (like `Tree`s, `Symbol`s, and `Types`) that +* [Reflection documentation](https://docs.scala-lang.org/overviews/reflection/overview.html) describes fundamental data structures (like `Tree`s, `Symbol`s, and `Types`) that are used to represent Scala programs and operations defined on then. Since much of the compiler has been factored out and made accessible via the Reflection API, all of the fundamentals needed for reflection are the same for the compiler. -* [Reflection and Compilers by Martin Odersky](http://channel9.msdn.com/Events/Lang-NEXT/Lang-NEXT-2012/Reflection-and-Compilers), a talk +* [Reflection and Compilers by Martin Odersky](https://channel9.msdn.com/Events/Lang-NEXT/Lang-NEXT-2012/Reflection-and-Compilers), a talk at Lang.NEXT 2012 in which Martin elaborates on the design of scalac and the architecture of the reflection API. -* [Scala compiler corner](http://lampwww.epfl.ch/~magarcia/ScalaCompilerCornerReloaded/) contains extensive documentation about +* [Scala compiler corner](https://lampwww.epfl.ch/~magarcia/ScalaCompilerCornerReloaded/) contains extensive documentation about most of the post-typer phases (i.e. the backend) in the Scala compiler. * [Scala Contributors](https://contributors.scala-lang.org/), a mailing list which hosts discussions about the core internal design and implementation of the Scala system. @@ -264,7 +264,7 @@ Adding tests to the test suite is as easy as moving them to the appropriate dire * Code which should compile successfully, but doesn't need to be executed, needs to go into the [“pos” directory](https://github.com/scala/scala/tree/2.12.x/test/files/pos). * Code which should not compile needs to go into the [“neg” directory](https://github.com/scala/scala/tree/2.12.x/test/files/neg). -* Code which should compile and get executed by the test suite needs to go into the [“run” directory](https://github.com/scala/scala/tree/2.12.x/test/files/run) and have a corresponding `.check` file with the expected output. You will get test failures if the content of a `.check` file is different from what the test produces while running. If the change in the output is an expected product of your work, you might not want to change the `.check` file by hand. To make partest change the `.check` file, run it with a `--update-check` flag, like so `./test/partest --update-check path/to/test.scala`. For more information on partest, please refer to its [documentation](http://docs.scala-lang.org/tutorials/partest-guide.html). +* Code which should compile and get executed by the test suite needs to go into the [“run” directory](https://github.com/scala/scala/tree/2.12.x/test/files/run) and have a corresponding `.check` file with the expected output. You will get test failures if the content of a `.check` file is different from what the test produces while running. If the change in the output is an expected product of your work, you might not want to change the `.check` file by hand. To make partest change the `.check` file, run it with a `--update-check` flag, like so `./test/partest --update-check path/to/test.scala`. For more information on partest, please refer to its [documentation](https://docs.scala-lang.org/tutorials/partest-guide.html). * Everything that can be unit-tested should go to ["junit" directory](https://github.com/scala/scala/tree/2.12.x/test/junit) * Property-based tests go to the ["scalacheck" directory](https://github.com/scala/scala/tree/2.12.x/test/scalacheck) @@ -309,7 +309,7 @@ This means your change is backward or forward binary incompatible with the speci ### Verify -Now to make sure that my fix doesn't break anything I need to run the test suite. The Scala test suite uses [JUnit](http://junit.org/junit4/) and [partest](partest-guide.html), a tool we wrote for testing Scala. +Now to make sure that my fix doesn't break anything I need to run the test suite. The Scala test suite uses [JUnit](https://junit.org/junit4/) and [partest](partest-guide.html), a tool we wrote for testing Scala. Run `sbt test` and `sbt partest` to run all of the JUnit and partest tests, respectively. `partest` (not `sbt partest`) also allows you to run a subset of the tests using wildcards: @@ -337,11 +337,11 @@ Let's go into each of these points in more detail. ### Commit -The [Git Basics](http://git-scm.com/book/en/Git-Basics) chapter in the Git online book covers most of the basic workflow during this stage. +The [Git Basics](https://git-scm.com/book/en/Git-Basics) chapter in the Git online book covers most of the basic workflow during this stage. There are two things you should know here: 1. Commit messages are often the only way to understand the intentions of authors of code written a few years ago. Thus, writing a quality is of utmost importance. The more context you provide for the change you've introduced, the larger the chance that some future maintainer understand your intentions. Consult [the pull request policies](https://github.com/scala/scala/blob/2.12.x/CONTRIBUTING.md) for more information about the desired style of your commits. -2. Keeping Scala's git history clean is also important. Therefore we won't accept pull requests for bug fixes that have more than one commit. For features, it is okay to have several commits, but all tests need to pass after every single commit. To clean up your commit structure, you want to [rewrite history](http://git-scm.com/book/en/Git-Branching-Rebasing) using `git rebase` so that your commits are against the latest revision of `master`. +2. Keeping Scala's git history clean is also important. Therefore we won't accept pull requests for bug fixes that have more than one commit. For features, it is okay to have several commits, but all tests need to pass after every single commit. To clean up your commit structure, you want to [rewrite history](https://git-scm.com/book/en/Git-Branching-Rebasing) using `git rebase` so that your commits are against the latest revision of `master`. Once you are satisfied with your work, synced with `master` and cleaned up your commits you are ready to submit a patch to the central Scala repository. Before proceeding make sure you have pushed all of your local changes to your fork on GitHub. @@ -364,7 +364,7 @@ Once you are satisfied with your work, synced with `master` and cleaned up your Now, we must simply submit our proposed patch. Navigate to your branch in GitHub (for me it was `https://github.com/xeno-by/scala/tree/ticket/6725`) and click the pull request button to submit your patch as a pull request to Scala. If you've never submitted patches to Scala, you will -need to sign the contributor license agreement, which [can be done online](http://www.lightbend.com/contribute/cla/scala) within a few minutes. +need to sign the contributor license agreement, which [can be done online](https://www.lightbend.com/contribute/cla/scala) within a few minutes. Submit a pull request diff --git a/contribute/index.md b/contribute/index.md index f7b6082226..7f672ec97c 100644 --- a/contribute/index.md +++ b/contribute/index.md @@ -51,7 +51,7 @@ against development versions of the Scala compiler and standard library in order to discover regressions prior to releases. The build uses Lightbend's [dbuild](https://github.com/typesafehub/dbuild) tool, -which leverages [sbt](http://www.scala-sbt.org). +which leverages [sbt](https://www.scala-sbt.org). If you're the maintainer -- or just an interested user! -- of an open-source Scala library or tool, please visit the diff --git a/contribute/scala-standard-library-api-documentation.md b/contribute/scala-standard-library-api-documentation.md index 33ee4ad558..6f3af62b30 100644 --- a/contribute/scala-standard-library-api-documentation.md +++ b/contribute/scala-standard-library-api-documentation.md @@ -7,12 +7,12 @@ includeTOC: true This page is specific to API documentation contributions – that is, API documentation for -[Scala's standard library](http://scala-lang.org/api/current/#package) – +[Scala's standard library](https://scala-lang.org/api/current/#package) – sometimes referred to as Scaladoc contributions. For contributions to tutorial and guide-style documentation on -[docs.scala-lang.org](http://docs.scala-lang.org), -see the ["doc-site"'s contribution guide](http://docs.scala-lang.org/contribute.html). +[docs.scala-lang.org](https://docs.scala-lang.org), +see the ["doc-site"'s contribution guide](https://docs.scala-lang.org/contribute.html). *Please note, these instructions cover documentation contributions Scala core libraries only. For other Scala projects please check those projects for the @@ -37,7 +37,7 @@ If you want to contribute new API documentation, ## Contribute API Documentation Bug Reports One good way to contribute is by helping us to identify missing documentation. To do -this, [browse the current API documentation](http://www.scala-lang.org/api/current/) +this, [browse the current API documentation](https://www.scala-lang.org/api/current/) and identify missing, incorrect or inadequate documentation. A good place to start is package objects for important packages (these often get overlooked for documentation and are a good place for API overviews). @@ -81,14 +81,14 @@ new API documentation to save time, effort, mistakes and repetition. the Branch section. If providing new documentation related to an existing GitHub issue, use `issue/NNNN` or `ticket/NNNN` as the guide states. If providing API documentation with no associated GitHub issue, use `scaladoc/xxxx` instead. -* [Scaladoc for library authors](http://docs.scala-lang.org/overviews/scaladoc/for-library-authors.html) +* [Scaladoc for library authors](https://docs.scala-lang.org/overviews/scaladoc/for-library-authors.html) covers the use of scaladoc tags, markdown and other features. -* [Scaladoc's interface](http://docs.scala-lang.org/overviews/scaladoc/interface.html) +* [Scaladoc's interface](https://docs.scala-lang.org/overviews/scaladoc/interface.html) covers all of the features of Scaladoc's interface, e.g. switching between companions, browsing package object documentation, searching, token searches and so on. * Prior to commit, be sure to read - [A note about git commit messages](http://tbaggery.com/2008/04/19/a-note-about-git-commit-messages.html) and the [Scala Project & Developer Guidelines](https://github.com/scala/scala/blob/2.11.x/CONTRIBUTING.md). + [A note about git commit messages](https://tbaggery.com/2008/04/19/a-note-about-git-commit-messages.html) and the [Scala Project & Developer Guidelines](https://github.com/scala/scala/blob/2.11.x/CONTRIBUTING.md). Some of this latter document will clearly not apply (like the sections on providing tests, however see below for some special requirements for documentation). Do still read the whole document though, and pay close attention to the title and commit diff --git a/contribute/tools.md b/contribute/tools.md index 4a32124731..7c33ebfda6 100644 --- a/contribute/tools.md +++ b/contribute/tools.md @@ -8,9 +8,9 @@ includeTOC: true projects: - title: sbt description: Interactive build tool. - icon: http://www.scala-sbt.org/assets/typesafe_sbt_svg.svg + icon: https://www.scala-sbt.org/assets/typesafe_sbt_svg.svg link: https://github.com/sbt/sbt - homeLink: http://www.scala-sbt.org/ + homeLink: https://www.scala-sbt.org/ issuesLink: https://github.com/sbt/sbt#issues-and-pull-requests readmeLink: https://github.com/sbt/sbt/blob/0.13/README.md contributingLink: https://github.com/sbt/sbt/blob/0.13/CONTRIBUTING.md @@ -18,23 +18,23 @@ projects: description: (Contribute through scala/scala) icon: https://avatars1.githubusercontent.com/u/57059?v=3&s=200 link: https://github.com/scala/scala - homeLink: http://www.scala-lang.org/api + homeLink: https://www.scala-lang.org/api issuesLink: https://github.com/scala/bug/labels/scaladoc readmeLink: https://github.com/scala/scala#welcome - contributingLink: http://scala-lang.org/contribute/guide.html + contributingLink: https://scala-lang.org/contribute/guide.html - title: Scala IDE description: Interactive build tool. icon: https://avatars2.githubusercontent.com/u/1026788?v=3&s=200 link: https://github.com/scala-ide/scala-ide homeLink: http://scala-ide.org/ - issuesLink: http://scala-ide-portfolio.assembla.com/spaces/scala-ide/support/tickets + issuesLink: https://scala-ide-portfolio.assembla.com/spaces/scala-ide/support/tickets readmeLink: https://github.com/scala-ide/scala-ide/blob/master/README.md contributingLink: https://github.com/scala-ide/scala-ide/blob/master/CONTRIBUTING.md - title: DBuild description: Multi-project build tool. icon: https://avatars3.githubusercontent.com/u/784923?v=3&s=200 link: https://github.com/lightbend/dbuild - homeLink: http://lightbend.github.io/dbuild + homeLink: https://lightbend.github.io/dbuild issuesLink: https://github.com/lightbend/dbuild/issues readmeLink: https://github.com/lightbend/dbuild/blob/master/README.md contributingLink: https://github.com/lightbend/dbuild/blob/master/README.md#get-involved @@ -42,7 +42,7 @@ projects: description: Scala Compiler/Library Testing icon: https://avatars1.githubusercontent.com/u/57059?v=3&s=200 link: https://github.com/scala/scala-partest - homeLink: http://docs.scala-lang.org/tutorials/partest-guide.html + homeLink: https://docs.scala-lang.org/tutorials/partest-guide.html issuesLink: https://github.com/scala/scala-partest/issues readmeLink: https://github.com/scala/scala-partest/blob/1.1.x/README.md contributingLink: From b129513da84f1367e7806e36e85bdb5a41485aaa Mon Sep 17 00:00:00 2001 From: Marcono1234 Date: Tue, 15 Dec 2020 01:33:43 +0100 Subject: [PATCH 0154/1870] Use correct capitalization for "GitHub" --- contribute/documentation.md | 6 +++--- contribute/guide.md | 2 +- contribute/hacker-guide.md | 2 +- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/contribute/documentation.md b/contribute/documentation.md index 19a72fbe34..967806de42 100644 --- a/contribute/documentation.md +++ b/contribute/documentation.md @@ -31,7 +31,7 @@ without creating an issue, but please look to see if there is an issue already s ### The Main Scala Documentation Site -[docs.scala-lang.org](https://docs.scala-lang.org/) houses the primary source of written, non-API documentation for Scala. It's a github project that you can fork and submit pull requests from. It includes: +[docs.scala-lang.org](https://docs.scala-lang.org/) houses the primary source of written, non-API documentation for Scala. It's a GitHub project that you can fork and submit pull requests from. It includes: * Overviews * Tutorials @@ -51,7 +51,7 @@ the [Jekyll](https://jekyllrb.com/) markdown engine so you will need to follow t Additional high-level documentation (including documentation on contributing to Scala and related projects) is provided on the main [Scala Language site](https://scala-lang.org), and is also kept in the -[scala-lang github project](https://github.com/scala/scala-lang) which may be forked to create pull requests. +[scala-lang GitHub project](https://github.com/scala/scala-lang) which may be forked to create pull requests. Please read both the -[docs.scala-lang.org contribution](https://docs.scala-lang.org/contribute.html) document and the [scala-lang.org github README](https://github.com/scala/scala-lang#scala-langorg) before embarking on any changes to the Scala language site, as it uses the same Jekyll markdown tool and many of the same conventions as the Scala documentation site. +[docs.scala-lang.org contribution](https://docs.scala-lang.org/contribute.html) document and the [scala-lang.org GitHub README](https://github.com/scala/scala-lang#scala-langorg) before embarking on any changes to the Scala language site, as it uses the same Jekyll markdown tool and many of the same conventions as the Scala documentation site. diff --git a/contribute/guide.md b/contribute/guide.md index f54d47ca45..7e4f375005 100644 --- a/contribute/guide.md +++ b/contribute/guide.md @@ -52,7 +52,7 @@ unencumbered by copyrights or patents. ### Bug-fix Check List -This is the impatient developer's checklist for the steps to submit a bug-fix pull request to the Scala project. For more information, description and justification for the steps, follow the links in that step. Further specific instructions for the release of Scala you are targeting can be found in the `CONTRIBUTING.md` file for that [github branch](https://github.com/scala/scala) +This is the impatient developer's checklist for the steps to submit a bug-fix pull request to the Scala project. For more information, description and justification for the steps, follow the links in that step. Further specific instructions for the release of Scala you are targeting can be found in the `CONTRIBUTING.md` file for that [GitHub branch](https://github.com/scala/scala) 1. [Select a bug to fix from GitHub](/contribute/#community-tickets), or if you found the bug yourself and want to fix it, [create a GitHub issue](/contribute/bug-reporting-guide.html) (but please [make sure it's not a duplicate](/contribute/bug-reporting-guide.html#reporting-confirmed-bugs-is-a-sin)). diff --git a/contribute/hacker-guide.md b/contribute/hacker-guide.md index 01775e4580..87cb8c25e4 100644 --- a/contribute/hacker-guide.md +++ b/contribute/hacker-guide.md @@ -68,7 +68,7 @@ If you're new to Git, don't be afraid of messing up-- there is no way you can co ### Clone If everything went okay, you will be redirected to your own fork at `https://github.com/user-name/scala`, where `username` -is your github user name. You might find it helpful to read [https://help.github.com/fork-a-repo/](https://help.github.com/fork-a-repo/), +is your GitHub user name. You might find it helpful to read [https://help.github.com/fork-a-repo/](https://help.github.com/fork-a-repo/), which covers some of the things that will follow below. Then, _clone_ your repository (i.e. pull a copy from GitHub to your local machine) by running the following on the command line: 16:35 ~/Projects$ git clone https://github.com/xeno-by/scala From e82659ce55ccc1d4a8a2a3fac5ba71257b90508e Mon Sep 17 00:00:00 2001 From: Alvin Alexander Date: Thu, 24 Dec 2020 15:42:46 -0700 Subject: [PATCH 0155/1870] Resolving TODO tags, Part 2 --- .../scala3-book/domain-modeling-tools.md | 8 +++++-- _overviews/scala3-book/fp-immutable-values.md | 4 ---- _overviews/scala3-book/fp-pure-functions.md | 16 +++++--------- _overviews/scala3-book/fp-what-is-fp.md | 11 +++------- _overviews/scala3-book/fun-eta-expansion.md | 22 ++++++++----------- _overviews/scala3-book/scala-features.md | 10 ++------- _overviews/scala3-book/scala-for-java-devs.md | 8 +++---- .../scala3-book/taste-toplevel-definitions.md | 8 +++---- 8 files changed, 33 insertions(+), 54 deletions(-) diff --git a/_overviews/scala3-book/domain-modeling-tools.md b/_overviews/scala3-book/domain-modeling-tools.md index ff1a365204..c35e43bbd0 100644 --- a/_overviews/scala3-book/domain-modeling-tools.md +++ b/_overviews/scala3-book/domain-modeling-tools.md @@ -7,7 +7,6 @@ previous-page: domain-modeling-intro next-page: domain-modeling-oop --- - Scala 3 provides us with many different tools to model the world around us: - Classes @@ -398,7 +397,12 @@ For more details, see the remainder of these modeling lessons. ## Abstract classes {% comment %} -TODO: I have some notes on when to use abstract classes, and can update this section. +LATER: If anyone wants to update this section, our comments about abstract classes and traits are on Slack. The biggest points seem to be: +- The `super` of a trait is dynamic +- At the use site, people can mix in traits but not classes +- It remains easier to extend a class than a trait from Java, if the trait has at least a field +- Similarly, in Scala.js, a class can be imported from or exported to JavaScript. A trait cannot +- There are also some point that unrelated classes can’t be mixed together, and this can be a modeling advantage {% endcomment %} When you want to write a class, but you know it will have abstract members, you can either create a trait or an abstract class. diff --git a/_overviews/scala3-book/fp-immutable-values.md b/_overviews/scala3-book/fp-immutable-values.md index 5821201e3f..e4993a601e 100644 --- a/_overviews/scala3-book/fp-immutable-values.md +++ b/_overviews/scala3-book/fp-immutable-values.md @@ -19,10 +19,6 @@ Using only immutable variables raises an interesting question: If everything is When it comes to using collections, one answer is that you don’t mutate an existing collection; instead, you apply a function to an existing collection to create a new collection. This is where higher-order functions like `map` and `filter` come in. -{% comment %} -TODO: need a better example -{% endcomment %} - For example, imagine that you have a list of names---a `List[String]`---that are all in lowercase, and you want to find all the names that begin with the letter `"j"`, and then you want to capitalize those names. In FP you write this code: diff --git a/_overviews/scala3-book/fp-pure-functions.md b/_overviews/scala3-book/fp-pure-functions.md index f8cbf2ea16..1b7424f505 100644 --- a/_overviews/scala3-book/fp-pure-functions.md +++ b/_overviews/scala3-book/fp-pure-functions.md @@ -8,15 +8,11 @@ next-page: fp-functions-are-values --- -{% comment %} -TODO: Use someone else’s definition? -{% endcomment %} - Another feature that Scala offers to help you write functional code is the ability to write pure functions. A _pure function_ can be defined like this: - A function `f` is pure if, given the same input `x`, it always returns the same output `f(x)` -- The function’s output depends *only* on its input variables and its internal algorithm +- The function’s output depends _only_ on its input variables and its internal algorithm - It doesn’t modify its input parameters - It doesn’t mutate any hidden state - It doesn’t have any “back doors”: It doesn’t read data from the outside world (including the console, web services, databases, files, etc.), or write data to the outside world @@ -42,23 +38,23 @@ These `String` methods are also pure functions: Most methods on the Scala collections classes also work as pure functions, including `drop`, `filter`, `map`, and many more. -> In Scala, *functions* and *methods* are almost completely interchangeable, so even though we use the common industry term “pure function,” this term can be used to describe both functions and methods. +> In Scala, _functions_ and _methods_ are almost completely interchangeable, so even though we use the common industry term “pure function,” this term can be used to describe both functions and methods. > If you’re interested in how methods can be used like functions, see the [Eta Expansion][eta] discussion. ## Examples of impure functions -Conversely, the following functions are *impure* because they violate the definition. +Conversely, the following functions are _impure_ because they violate the definition. The `foreach` method on collections classes is impure because it’s only used for its side effects, such as printing to STDOUT. > A great hint that `foreach` is impure is that it’s method signature declares that it returns the type `Unit`. > Because it doesn’t return anything, logically the only reason you ever call it is to achieve some side effect. -> Similarly, *any* method that returns `Unit` is going to be an impure function. +> Similarly, _any_ method that returns `Unit` is going to be an impure function. Date and time related methods like `getDayOfWeek`, `getHour`, and `getMinute` are all impure because their output depends on something other than their input parameters. -Their results rely on some form of hidden I/O; *hidden inputs,* in these examples. +Their results rely on some form of hidden I/O; _hidden inputs,_ in these examples. Additionally, methods that interact with the console, files, databases, web services, sensors, etc., are all impure. @@ -111,7 +107,7 @@ If you understand that code, you’ll see that it meets the pure function defini The first key point of this section is the definition of a pure function: -> A *pure function* is a function that depends only on its declared inputs and its internal algorithm to produce its output. +> A _pure function_ is a function that depends only on its declared inputs and its internal algorithm to produce its output. > It does not read any other values from “the outside world”---the world outside of the function’s scope---and it doesn’t modify any values in the outside world. A second key point is that every real-world application interacts with the outside world. diff --git a/_overviews/scala3-book/fp-what-is-fp.md b/_overviews/scala3-book/fp-what-is-fp.md index 9899dfb996..0b380447c8 100644 --- a/_overviews/scala3-book/fp-what-is-fp.md +++ b/_overviews/scala3-book/fp-what-is-fp.md @@ -9,12 +9,7 @@ next-page: fp-immutable-values -[Wikipedia defines *functional programming*](https://en.wikipedia.org/wiki/Functional_programming) like this: - - -{% comment %} -TODO: Update the CSS so this extra paragraph isn’t needed. -{% endcomment %} +[Wikipedia defines _functional programming_](https://en.wikipedia.org/wiki/Functional_programming) like this:

Functional programming is a programming paradigm where programs are constructed by applying and composing functions. @@ -26,8 +21,8 @@ This allows programs to be written in a declarative and composable style, where It can also be helpful to know that experienced functional programmers have a strong desire to see their code as math, that combining pure functions together is like combining a series of algebraic equations. -When you write functional code you feel like a mathematician, and once you understand the paradigm, you want to write pure functions that always return *values*---not exceptions or null values---so you can combine (compose) them together to create solutions. -The feeling that you’re writing math-like equations (expressions) is the driving desire that leads you to use *only* pure functions and immutable values, because that’s what you use in algebra and other forms of math. +When you write functional code you feel like a mathematician, and once you understand the paradigm, you want to write pure functions that always return _values_---not exceptions or null values---so you can combine (compose) them together to create solutions. +The feeling that you’re writing math-like equations (expressions) is the driving desire that leads you to use _only_ pure functions and immutable values, because that’s what you use in algebra and other forms of math. Functional programming is a large topic, and there’s no simple way to condense the entire topic into one chapter, but hopefully the following sections will provide an overview of the main topics, and show some of the tools Scala provides for writing functional code. diff --git a/_overviews/scala3-book/fun-eta-expansion.md b/_overviews/scala3-book/fun-eta-expansion.md index b801631a16..d48e6c059b 100644 --- a/_overviews/scala3-book/fun-eta-expansion.md +++ b/_overviews/scala3-book/fun-eta-expansion.md @@ -8,25 +8,25 @@ next-page: fun-hofs --- -When you look at the Scaladoc for the `map` method on Scala collections classes, you see that it’s defined to accept a *function*: +When you look at the Scaladoc for the `map` method on Scala collections classes, you see that it’s defined to accept a _function_: ```scala def map[B](f: (A) => B): List[B] ----------- ``` -Indeed, the Scaladoc clearly states, “`f` is the *function* to apply to each element.” -But despite that, somehow you can pass a *method* into `map`, and it still works: +Indeed, the Scaladoc clearly states, “`f` is the _function_ to apply to each element.” +But despite that, somehow you can pass a _method_ into `map`, and it still works: ```scala def times10(i: Int) = i * 10 // a method List(1, 2, 3).map(times10) // List(10,20,30) ``` -Have you ever wondered how this works---how you can pass a *method* into `map`, which expects a *function*? +Have you ever wondered how this works---how you can pass a _method_ into `map`, which expects a _function_? -The technology behind this is known as *Eta Expansion*. -It converts an expression of *method type* to an equivalent expression of *function type*, and it does so seamlessly and quietly. +The technology behind this is known as _Eta Expansion_. +It converts an expression of _method type_ to an equivalent expression of _function type_, and it does so seamlessly and quietly. @@ -37,14 +37,9 @@ NOTE: I got the following “method” definition from this page (https://dotty. I’ve made a few changes to that description that I hope are more accurate and up to date. {% endcomment %} +Historically, _methods_ have been a part of the definition of a class, although in Scala 3 you can now have methods outside of classes, such as [Toplevel definitions][toplevel] and [extension methods][extension]. -{% comment %} -TODO: link to Toplevel definitions -{% endcomment %} - -Historically, *methods* have been a part of the definition of a class, although in Scala 3 you can now have methods outside of classes, such as Toplevel definitions and [extension methods][extension]. - -Unlike methods, *functions* are complete objects themselves, making them first-class entities. +Unlike methods, _functions_ are complete objects themselves, making them first-class entities. Their syntax is also different. This example shows how to define a method and a function that perform the same task, determining if the given integer is even: @@ -89,3 +84,4 @@ For more details on how this works, see the [Eta Expansion page][eta_expansion] [eta_expansion]: {{ site.scala3ref }}/changed-features/eta-expansion.html [extension]: {% link _overviews/scala3-book/ca-extension-methods.md %} +[toplevel]: {% link _overviews/scala3-book/taste-toplevel-definitions.md %} diff --git a/_overviews/scala3-book/scala-features.md b/_overviews/scala3-book/scala-features.md index 60a7a0e5ac..6c1f261570 100644 --- a/_overviews/scala3-book/scala-features.md +++ b/_overviews/scala3-book/scala-features.md @@ -126,7 +126,7 @@ val z = nums.filter(_ > 100) .map(_ * 2) ``` -Because Scala is considered to be a [strong, statically-typed language](https://heather.miller.am/blog/types-in-scala.html), you get all the benefits of static types: +As Heather Miller states, Scala is considered to be a [strong, statically-typed language](https://heather.miller.am/blog/types-in-scala.html), and you get all the benefits of static types: - Correctness: you catch most errors at compile-time - Great IDE support @@ -138,7 +138,7 @@ Because Scala is considered to be a [strong, statically-typed language](https:// - Method type declarations tell readers what the method does, and help serve as documentation - Types make your code easier to maintain - Scalability: types help ensure correctness across arbitrarily large applications and development teams -- Strong types enable Scala features like implicits (TODO: I need help on this wording and description) +- Strong types enable Scala features like implicits {% comment %} In that list: @@ -149,12 +149,6 @@ In that list: - Reliable code completion {% endcomment %} -{% comment %} -In this section or the next section: -- TODO: Add a note about the benefits of the DOT calculus -- TODO: Also add a note about TASTy? -{% endcomment %} - ### Expressive type system diff --git a/_overviews/scala3-book/scala-for-java-devs.md b/_overviews/scala3-book/scala-for-java-devs.md index 4ecf11a238..5ed39eb9ee 100644 --- a/_overviews/scala3-book/scala-for-java-devs.md +++ b/_overviews/scala3-book/scala-for-java-devs.md @@ -53,7 +53,10 @@ Also at a high level, the differences between Java and Scala are: - The [Scala Native](http://www.scala-native.org) project adds low-level constructs to let you write “systems” level code, and also compiles to native executables {% comment %} +These are several notes that came up early in the writing process, and I (Alvin) can’t really address them: TODO: Need a good, simple way to state that Scala has a sound type system +TODO: Points to make about Scala’s consistency? +TODO: Add a point about how the type system lets you express details as desired {% endcomment %} @@ -61,11 +64,6 @@ TODO: Need a good, simple way to state that Scala has a sound type system Finally, these are some of the differences you’ll see every day when writing code: -{% comment %} -TODO: points to make about Scala’s consistency? -TODO: add a point about how the type system lets you express details as desired -{% endcomment %} - - Scala’s syntax is extremely consistent - Variables and parameters are defined as `val` (immutable, like `final` in Java) or `var` (mutable) - *Type inference* makes your code feel dynamically typed, and helps to keep your code brief diff --git a/_overviews/scala3-book/taste-toplevel-definitions.md b/_overviews/scala3-book/taste-toplevel-definitions.md index 9c5981ccda..4eed953712 100644 --- a/_overviews/scala3-book/taste-toplevel-definitions.md +++ b/_overviews/scala3-book/taste-toplevel-definitions.md @@ -9,7 +9,7 @@ next-page: taste-summary In Scala 3, all kinds of definitions can be written at the “top level” of your source code files. -For instance, you can create a file named *MyCoolApp.scala* and put these contents into it: +For instance, you can create a file named _MyCoolApp.scala_ and put these contents into it: ```scala import scala.collection.mutable.ArrayBuffer @@ -42,8 +42,8 @@ As shown, there’s no need to put those definitions inside a `package`, `class` ## Replaces package objects -If you’re familiar with Scala 2, this approach replaces *package objects*. -But while being much easier to use, they work similarly: When you place a definition in a package named *foo*, you can then access that definition under all other packages under *foo*, such as within the *foo.bar* package in this example: +If you’re familiar with Scala 2, this approach replaces _package objects_. +But while being much easier to use, they work similarly: When you place a definition in a package named _foo_, you can then access that definition under all other packages under _foo_, such as within the _foo.bar_ package in this example: ```scala package foo { @@ -60,6 +60,6 @@ package foo { Curly braces are used in this example to put an emphasis on the package nesting. -The benefit of this approach is that you can place definitions under a package named *com.acme.myapp*, and then those definitions can be referenced within *com.acme.myapp.model*, *com.acme.myapp.controller*, etc. +The benefit of this approach is that you can place definitions under a package named _com.acme.myapp_, and then those definitions can be referenced within _com.acme.myapp.model_, _com.acme.myapp.controller_, etc. From 948bb580c5e94328aedc579b6cc01c60337e88fd Mon Sep 17 00:00:00 2001 From: Alvin Alexander Date: Thu, 24 Dec 2020 19:28:56 -0700 Subject: [PATCH 0156/1870] Resolving TODO tags, Part 3 --- _overviews/scala3-book/scala-for-java-devs.md | 94 ++++++++++++------- .../scala3-book/scala-for-javascript-devs.md | 56 ++++++----- .../scala3-book/scala-for-python-devs.md | 67 +++++++------ _overviews/scala3-book/scala-tools.md | 40 ++++---- _overviews/scala3-book/taste-modeling.md | 4 - 5 files changed, 150 insertions(+), 111 deletions(-) diff --git a/_overviews/scala3-book/scala-for-java-devs.md b/_overviews/scala3-book/scala-for-java-devs.md index 4ecf11a238..0a921cc6cc 100644 --- a/_overviews/scala3-book/scala-for-java-devs.md +++ b/_overviews/scala3-book/scala-for-java-devs.md @@ -11,7 +11,7 @@ next-page: scala-for-javascript-devs

-This page provides a comparison between the Java and Scala programming languages by sharing side-by-sde examples of each language. +This page provides a comparison between the Java and Scala programming languages by sharing side-by-side examples of each language. It’s intended for programmers who know Java and want to learn about Scala, specifically by seeing how Scala features compare to Java. @@ -25,13 +25,13 @@ It presents the similarities and differences between Java and Scala at a high le At a high level, Scala shares these similarities with Java: -- Scala code is compiled to *.class* files, packaged in JAR files, and runs on the JVM -- It’s an object-oriented programming (OOP) language +- Scala code is compiled to _.class_ files, packaged in JAR files, and runs on the JVM +- It’s an [object-oriented programming][modeling-oop] (OOP) language - It’s statically typed -- Both languages have support for immutable collections, lambdas, and higher-order functions +- Both languages have support for immutable collections, lambdas, and [higher-order functions][hofs] - They can both be used with IDEs like IntelliJ IDEA and Microsoft VS Code - Projects can be built with build tools like Gradle, Ant, and Maven -- It has terrific libraries and frameworks for building server-side, network-intensive applications, including web server applications, microservices, machine learning, and more +- It has terrific libraries and frameworks for building server-side, network-intensive applications, including web server applications, microservices, machine learning, and more (see the [“Awesome Scala” list](https://github.com/lauris/awesome-scala)) - Both Java and Scala can use Scala libraries: - They can use the [Akka actors library](https://akka.io) to build actor-based concurrent systems, and Apache Spark to build data-intensive applications - They can use the [Play Framework](https://www.playframework.com) to develop server-side applications @@ -42,13 +42,13 @@ At a high level, Scala shares these similarities with Java: Also at a high level, the differences between Java and Scala are: -- Scala has a concise but readable syntax; we call it *expressive* +- Scala has a concise but readable syntax; we call it _expressive_ - Though it’s statically typed, Scala often feels like a dynamic language - Scala is a pure OOP language, so every object is an instance of a class, and symbols like `+` and `+=` that look like operators are really methods; this means that you can create your own operators - In addition to being a pure OOP language, Scala is also a pure FP language; in fact, it encourages a fusion of OOP and FP, with functions for the logic and objects for modularity -- Everything in Scala is an *expression*: constructs like `if` statements, `for` loops, `match` expressions, and even `try`/`catch` expressions all have return values +- Everything in Scala is an _expression_: constructs like `if` statements, `for` loops, `match` expressions, and even `try`/`catch` expressions all have return values - Scala idioms favor immutability by default: you’re encouraged to use immutable (`final`) variables and immutable collections -- The Scala ecosystem has other build tools in sbt, Mill, and others +- The Scala ecosystem has other [build tools][tools] in sbt, Mill, and others - In addition to running on the JVM, the [Scala.js](https://www.scala-js.org) project lets you use Scala as a JavaScript replacement - The [Scala Native](http://www.scala-native.org) project adds low-level constructs to let you write “systems” level code, and also compiles to native executables @@ -68,22 +68,22 @@ TODO: add a point about how the type system lets you express details as desired - Scala’s syntax is extremely consistent - Variables and parameters are defined as `val` (immutable, like `final` in Java) or `var` (mutable) -- *Type inference* makes your code feel dynamically typed, and helps to keep your code brief +- _Type inference_ makes your code feel dynamically typed, and helps to keep your code brief - In addition to simple `for` loops, Scala has powerful `for` comprehensions that yield results based on your algorithms - Pattern matching and `match` expressions will change the way you write code -- Writing immutable code by default leads to writing *expressions* rather than *statements*; in time you see that writing expressions simplifies your code (and your tests) -- *Toplevel definitions* let you put method, field, and other definitions anywhere, also leading to concise, expressive code -- You can create *mixins* by “mixing” multiple traits into classes and objects (traits are similar to interfaces in Java 8 and newer) -- Classes are closed by default, supporting Joshua Bloch’s *Effective Java* idiom, “Design and document for inheritance or else forbid it” -- Scala’s *contextual abstractions* and *term inference* provide a collection of features: - - *Extension methods* let you add new functionality to closed classes - - *Given* instances let you define terms that the compiler can synthesize at *using* points, making your code less verbose and essentially letting the compiler write code for you - - *Multiversal equality* lets you limit equality comparisons---at compile time---to only those comparisons that make sense +- Writing immutable code by default leads to writing _expressions_ rather than _statements_; in time you see that writing expressions simplifies your code (and your tests) +- [Toplevel definitions][toplevel] let you put method, field, and other definitions anywhere, also leading to concise, expressive code +- You can create _mixins_ by “mixing” multiple traits into classes and objects (traits are similar to interfaces in Java 8 and newer) +- Classes are closed by default, supporting Joshua Bloch’s _Effective Java_ idiom, “Design and document for inheritance or else forbid it” +- Scala’s [contextual abstractions][contextual] and _term inference_ provide a collection of features: + - [Extension methods][extension-methods] let you add new functionality to closed classes + - [_Given_ instances][givens] let you define terms that the compiler can synthesize at _using_ points, making your code less verbose and essentially letting the compiler write code for you + - [Multiversal equality][multiversal] lets you limit equality comparisons---at compile time---to only those comparisons that make sense - Scala has state of the art, third-party, open source functional programming libraries - Scala case classes are like records in Java 14; they help you model data when writing FP code, with built-in support for concepts like pattern matching and cloning -- Thanks to features like by-name parameters, infix notation, optional parentheses, extension methods, and higher-order functions, you can create your own “control structures” and DSLs +- Thanks to features like by-name parameters, infix notation, optional parentheses, extension methods, and [higher-order functions][hofs], you can create your own “control structures” and DSLs - Scala files do not have to be named according to the classes or traits they contain -- Many other goodies: companion classes and objects, macros, union and intersection types, toplevel definitions, numeric literals, multiple parameter lists, default values for parameters, named arguments, and more +- Many other goodies: companion classes and objects, macros, [union][union-types] and [intersection][intersection-types], [toplevel definitions][toplevel], numeric literals, multiple parameter lists, default values for parameters, named arguments, and more ### Features compared with examples @@ -522,7 +522,7 @@ These interfaces and traits have concrete, implemented methods (default methods) ## Control structures -This section compares control structures in Java and Scala. +This section compares [control structures][control] in Java and Scala. ### `if` statement, one line: @@ -891,7 +891,7 @@ Called a _ternary operator_ in Java: ## Collections classes -This section compares the collections classes that are available in Java and Scala. +This section compares the [collections classes][collections-classes] that are available in Java and Scala. ### Immutable collections classes @@ -964,8 +964,8 @@ Examples of how to create instances of immutable collections. ### Mutable collections classes -Scala has mutable collections classes like `ArrayBuffer`, `Map`, and `Set`, in its *scala.collection.mutable* package. -After importing them into the current scope, they’re created just like the immutable `List`, `Vector`, `Map`, and `Set` examples just shown. +Scala has mutable collections classes like `ArrayBuffer`, `Map`, and `Set` in its _scala.collection.mutable_ package. +After [importing them][imports] into the current scope, they’re created just like the immutable `List`, `Vector`, `Map`, and `Set` examples just shown. You can also convert between Java and Scala collections classes with the Scala `CollectionConverters` objects. There are two objects in different packages, one for converting from Java to Scala, and another for converting from Scala to Java. @@ -1016,13 +1016,13 @@ With the ability to treat Java collections as streams, Java and Scala now have m - `findFirst`/`find` - `reduce` -If you’re used to using these methods with lambda expressions in Java, you’ll find it easy to use the same methods on Scala’s collection classes. +If you’re used to using these methods with lambda expressions in Java, you’ll find it easy to use the same methods on Scala’s [collection classes][collections-classes]. -Scala also has *dozens* of other collections methods, including `head`, `tail`, `drop`, `take`, `distinct`, `flatten`, and many more. -At first you may wonder why there are so many methods, but after working with Scala you’ll realize that because of these methods, you rarely ever need to write custom `for` loops any more. +Scala also has _dozens_ of other [collections methods][collections-methods], including `head`, `tail`, `drop`, `take`, `distinct`, `flatten`, and many more. +At first you may wonder why there are so many methods, but after working with Scala you’ll realize that _because_ of these methods, you rarely ever need to write custom `for` loops any more. -(This also means that you rarely need to *read* custom `for` loops, as well. -Because developers tend to spend on the order of ten times as much time *reading* code as *writing* code, this is significant.) +(This also means that you rarely need to _read_ custom `for` loops, as well. +Because developers tend to spend on the order of ten times as much time _reading_ code as _writing_ code, this is significant.) @@ -1197,10 +1197,10 @@ throws NumberFormatException { ### Scala doesn’t use checked exceptions -The Scala idiom is to *not* use checked exceptions like this. +The Scala idiom is to _not_ use checked exceptions like this. When working with code that can throw exceptions, you can use `try`/`catch`/`finally` blocks to catch exceptions from code that throws them, but how you proceed from there is different. -The best way to explain this is that Scala code consists of *expressions*, which return values. +The best way to explain this is that Scala code consists of _expressions_, which return values. As a result, you end up writing your code as a series of algebraic expressions: ```scala @@ -1253,13 +1253,12 @@ That concludes are comparison of the Java and Scala languages. Currently there are other concepts in Scala which currently have no equal in Java 11. This includes: -- Everything related to Scala’s contextual abstractions +- Everything related to Scala’s [contextual abstractions][contextual] - Several Scala method features: - Multiple parameter lists - Default parameter values - Using named arguments when calling methods -- Case classes (like “records” in Java 14) and case objects -- Companion classes and objects +- Case classes (like “records” in Java 14), case objects, and companion classes and objects (see the [Domain Modeling][modeling-intro]) chapter - The ability to create your own control structures and DSLs - [Toplevel definitions][toplevel] - Pattern matching @@ -1273,11 +1272,34 @@ This includes: - Macros and metaprogramming -[toplevel]: {% link _overviews/scala3-book/taste-toplevel-definitions.md %} -[opaque]: {% link _overviews/scala3-book/types-opaque-types.md %} +[collections-classes]: {% link _overviews/scala3-book/collections-classes.md %} +[collections-methods]: {% link _overviews/scala3-book/collections-methods.md %} +[control]: {% link _overviews/scala3-book/control-structures.md %} [equality]: {% link _overviews/scala3-book/ca-multiversal-equality.md %} -[type-classes]: {% link _overviews/scala3-book/ca-type-classes.md %} [error-handling]: {% link _overviews/scala3-book/fp-functional-error-handling.md %} +[extension-methods]: {% link _overviews/scala3-book/ca-extension-methods.md %} +[givens]: {% link _overviews/scala3-book/ca-given-using-clauses.md %} +[hofs]: {% link _overviews/scala3-book/fun-hofs.md %} +[imports]: {% link _overviews/scala3-book/packaging-imports.md %} +[modeling-intro]: {% link _overviews/scala3-book/domain-modeling-intro.md %} +[modeling-oop]: {% link _overviews/scala3-book/domain-modeling-oop.md %} +[opaque]: {% link _overviews/scala3-book/types-opaque-types.md %} +[tools]: {% link _overviews/scala3-book/scala-tools.md %} +[toplevel]: {% link _overviews/scala3-book/taste-toplevel-definitions.md %} +[type-classes]: {% link _overviews/scala3-book/ca-type-classes.md %} + + + + + +[concurrency]: {% link _overviews/scala3-book/concurrency.md %} +[contextual]: {% link _overviews/scala3-book/ca-contextual-abstractions-intro.md %} +[control]: {% link _overviews/scala3-book/control-structures.md %} +[fp-intro]: {% link _overviews/scala3-book/fp-intro.md %} +[intersection-types]: {% link _overviews/scala3-book/types-intersection.md %} +[modeling-fp]: {% link _overviews/scala3-book/domain-modeling-fp.md %} +[multiversal]: {% link _overviews/scala3-book/ca-multiversal-equality.md %} +[union-types]: {% link _overviews/scala3-book/types-union.md %}
diff --git a/_overviews/scala3-book/scala-for-javascript-devs.md b/_overviews/scala3-book/scala-for-javascript-devs.md index 485bd4c39b..abeb4da378 100644 --- a/_overviews/scala3-book/scala-for-javascript-devs.md +++ b/_overviews/scala3-book/scala-for-javascript-devs.md @@ -29,14 +29,14 @@ At a high level, Scala shares these similarities with JavaScript: - Both have a relatively simple, concise syntax - Both support a C/C++/Java style curly-brace syntax for writing methods and other block of code - Both include features (like classes) for object-oriented programming (OOP) -- Both include features (like lambdas) for functional programming (FP) +- Both include features (like lambdas) for [functional programming][fp-intro] (FP) - JavaScript runs in the browser and other environments like Node.js. The [Scala.js](https://www.scala-js.org) flavor of Scala targets JavaScript and Scala programs can thus run in the same environments. - Developers write server-side applications in JavaScript and Scala using [Node.js](https://nodejs.org); projects like the [Play Framework](https://www.playframework.com/) also let you write server-side applications in Scala - Both languages have similar `if` statements, `while` loops, and `for` loops - Starting [at this Scala.js page](https://www.scala-js.org/libraries/index.html), you’ll find dozens of libraries to support React, Angular, jQuery, and many other JavaScript and Scala libraries - JavaScript objects are mutable; Scala objects _can_ be mutable when writing in an imperative style -- Both JavaScript and Scala support *promises* as a way of running asynchronous computations (Scala uses futures and promises) +- Both JavaScript and Scala support _promises_ as a way of running asynchronous computations ([Scala concurrency][concurrency] uses futures and promises) ### High-level differences @@ -45,11 +45,11 @@ Also at a high level, some of the differences between JavaScript and Scala are: - JavaScript is dynamically typed, and Scala is statically typed - Although Scala is statically typed, features like type inference make it feel like a dynamic language (as you’ll see in the examples that follow) - Scala idioms favor immutability by default: you’re encouraged to use immutable variables and immutable collections -- Scala has a concise but readable syntax; we call it *expressive* +- Scala has a concise but readable syntax; we call it _expressive_ - Scala is a pure OOP language, so every object is an instance of a class, and symbols like `+` and `+=` that look like operators are really methods; this means that you can create your own methods that work as operators - As a pure OOP language and a pure FP language, Scala encourages a fusion of OOP and FP, with functions for the logic and immutable objects for modularity - Scala has state of the art, third-party, open source functional programming libraries -- Everything in Scala is an *expression*: constructs like `if` statements, `for` loops, `match` expressions, and even `try`/`catch` expressions all have return values +- Everything in Scala is an _expression_: constructs like `if` statements, `for` loops, `match` expressions, and even `try`/`catch` expressions all have return values - The [Scala Native](https://scala-native.readthedocs.io/en/v0.3.9-docs) project lets you write “systems” level code, and also compiles to native executables ### Programming level differences @@ -59,15 +59,15 @@ At a lower level, these are some of the differences you’ll see every day when - Scala variables and parameters are defined with `val` (immutable, like a JavaScript `const`) or `var` (mutable, like a JavaScript `var` or `let`) - Scala does not use semi-colons at the end of lines - Scala is statically-typed, though in many situations you don’t need to declare the type -- Scala uses traits as interfaces and to create *mixins* +- Scala uses traits as interfaces and to create _mixins_ - In addition to simple `for` loops, Scala has powerful `for` comprehensions that yield results based on your algorithms - Pattern matching and `match` expressions will change the way you write code -- Scala’s *contextual abstractions* and *term inference* provide a collection of features: - - *Extension methods* let you add new functionality to closed classes without breaking modularity, by being available only in specific scopes (as opposed to monkey-patching, which can pollute other areas of the code) - - *Given* instances let you define terms that the compiler can use to synthesize code for you - - Type safety and *multiversal equality* let you limit equality comparisons---at compile time---to only those comparisons that make sense -- Thanks to features like by-name parameters, infix notation, optional parentheses, extension methods, and higher-order functions, you can create your own “control structures” and DSLs -- Many other goodies that you can read about throughout this book: case classes, companion classes and objects, macros, union and intersection types, multiple parameter lists, named arguments, and more... +- Scala’s [contextual abstractions][contextual] and _term inference_ provide a collection of features: + - [Extension methods][extension-methods] let you add new functionality to closed classes without breaking modularity, by being available only in specific scopes (as opposed to monkey-patching, which can pollute other areas of the code) + - [Given instances][givens] let you define terms that the compiler can use to synthesize code for you + - Type safety and [multiversal equality][multiversal] let you limit equality comparisons---at compile time---to only those comparisons that make sense +- Thanks to features like by-name parameters, infix notation, optional parentheses, extension methods, and [higher-order functions][hofs], you can create your own “control structures” and DSLs +- Many other goodies that you can read about throughout this book: case classes, companion classes and objects, macros, [union][union-types] and [intersection][intersection-types] types, multiple parameter lists, named arguments, and more @@ -137,7 +137,7 @@ The rule of thumb in Scala is to declare variables using `val`, unless there’s ## Naming standards -JavaScript and Scala generally use the same *CamelCase* naming standards. +JavaScript and Scala generally use the same _CamelCase_ naming standards. Variables are named like `myVariableName`, methods are named like `lastIndexOf`, and classes and object are named like `Animal` and `PrintedBook`. @@ -300,7 +300,7 @@ The biggest difference is that Scala doesn’t offer `++` and `--` operators. -Perhaps the biggest difference is that “operators” like `+` and `-` are really *methods* in Scala, not operators. +Perhaps the biggest difference is that “operators” like `+` and `-` are really _methods_ in Scala, not operators. Scala numbers also have these related methods: ```scala @@ -419,7 +419,7 @@ Dates are another commonly used type in both languages. In this case, Scala uses the date and time classes that come with Java. Many date/time methods are similar between JavaScript and Scala. -See [the *java.time* package](https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/time/package-summary.html) for more details. +See [the _java.time_ package](https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/time/package-summary.html) for more details. @@ -522,7 +522,7 @@ Both JavaScript and Scala let you define anonymous functions, which you can pass In Scala you rarely define a function using the first syntax shown. Instead, you often define anonymous functions right at the point of use. -Many collections methods are higher-order functions and accept function parameters, so you write code like this: +Many collections methods are [higher-order functions][hofs] and accept function parameters, so you write code like this: ```scala // map method, long form @@ -543,7 +543,7 @@ List(1,2,3,4,5).filter(_ < 3).map(_ * 10) // List(10, 20) ## Classes Scala has both classes and case classes. -A *class* is similar to a JavaScript class, and is generally intended for use in OOP style applications (though they can also be used in FP code), and *case classes* have additional features that make them very useful in FP style applications. +A _class_ is similar to a JavaScript class, and is generally intended for use in [OOP style applications][modeling-oop] (though they can also be used in FP code), and _case classes_ have additional features that make them very useful in [FP style applications][modeling-fp]. The following example shows how to create several types as enumerations, and then defines an OOP-style `Pizza` class. At the end, a `Pizza` instance is created and used: @@ -1069,7 +1069,7 @@ A `for` comprehension is a `for` loop that uses `yield` to return (yield) a valu ## switch & match Where JavaScript has `switch` statements, Scala has `match` expressions. -Like everything else in Scala, these truly are *expressions*, meaning they return a result: +Like everything else in Scala, these truly are _expressions_, meaning they return a result: ```scala val day = 1 @@ -1108,14 +1108,14 @@ def isPerson(x: Matchable): Boolean = x match ## Collections classes -Scala has different collections classes for different needs. +Scala has different [collections classes][collections-classes] for different needs. -Common *immutable* sequences are: +Common _immutable_ sequences are: - `List` - `Vector` -Common *mutable* sequences are: +Common _mutable_ sequences are: - `Array` - `ArrayBuffer` @@ -1208,7 +1208,7 @@ val men = List("Fred", "Barney") // List(Fred, Barney) val couples = women.zip(men) // List((Wilma,Fred), (Betty,Barney)) ``` -Scala has *many* more methods that are available to you. +Scala has _many_ more methods that are available to you. The benefits of all these methods are: - You don’t have to write custom `for` loops to solve problems @@ -1351,7 +1351,7 @@ There are other concepts in Scala which currently have no equivalent in JavaScri - Using traits as interfaces - Case classes - Companion classes and objects -- The ability to create your own control structures and DSLs +- The ability to create your own [control structures][control] and DSLs - Advanced features of `match` expressions and pattern matching - `for` comprehensions - Infix methods @@ -1359,7 +1359,19 @@ There are other concepts in Scala which currently have no equivalent in JavaScri - More ... +[collections-classes]: {% link _overviews/scala3-book/collections-classes.md %} +[concurrency]: {% link _overviews/scala3-book/concurrency.md %} [contextual]: {% link _overviews/scala3-book/ca-contextual-abstractions-intro.md %} +[control]: {% link _overviews/scala3-book/control-structures.md %} +[extension-methods]: {% link _overviews/scala3-book/ca-extension-methods.md %} +[fp-intro]: {% link _overviews/scala3-book/fp-intro.md %} +[givens]: {% link _overviews/scala3-book/ca-given-using-clauses.md %} +[hofs]: {% link _overviews/scala3-book/fun-hofs.md %} +[intersection-types]: {% link _overviews/scala3-book/types-intersection.md %} +[modeling-fp]: {% link _overviews/scala3-book/domain-modeling-fp.md %} +[modeling-oop]: {% link _overviews/scala3-book/domain-modeling-oop.md %} +[multiversal]: {% link _overviews/scala3-book/ca-multiversal-equality.md %} +[union-types]: {% link _overviews/scala3-book/types-union.md %}
diff --git a/_overviews/scala3-book/scala-for-python-devs.md b/_overviews/scala3-book/scala-for-python-devs.md index 112d0ca98f..eb1f2f4a80 100644 --- a/_overviews/scala3-book/scala-for-python-devs.md +++ b/_overviews/scala3-book/scala-for-python-devs.md @@ -38,25 +38,25 @@ At a high level, Scala shares these *similarities* with Python: - Both are high-level programming languages, where you don’t have to concern yourself with low-level concepts like pointers and manual memory management - Both have a relatively simple, concise syntax -- Both are functional programming (FP) languages +- Both are [functional programming][fp-intro] (FP) languages - Both are object-oriented programming (OOP) languages - Both have comprehensions: Python has list comprehensions and Scala has `for` comprehensions -- Both languages have support for lambdas and higher-order functions +- Both languages have support for lambdas and [higher-order functions][hofs] - Both can be used with [Apache Spark](https://spark.apache.org) for big data processing - Both have a wealth of terrific libraries ### High level differences -Also at a high level, the *differences* between Python and Scala are: +Also at a high level, the _differences_ between Python and Scala are: - Python is dynamically typed, and Scala is statically typed - Though it’s statically typed, Scala features like type inference make it feel like a dynamic language -- Python is interpreted, and Scala code is compiled to *.class* files, and runs on the Java Virtual Machine (JVM) +- Python is interpreted, and Scala code is compiled to _.class_ files, and runs on the Java Virtual Machine (JVM) - In addition to running on the JVM, the [Scala.js](https://www.scala-js.org) project lets you use Scala as a JavaScript replacement - The [Scala Native](https://scala-native.readthedocs.io/en/v0.3.9-docs) project lets you write “systems” level code, and compiles to native executables -- Everything in Scala is an *expression*: constructs like `if` statements, `for` loops, `match` expressions, and even `try`/`catch` expressions all have return values +- Everything in Scala is an _expression_: constructs like `if` statements, `for` loops, `match` expressions, and even `try`/`catch` expressions all have return values - Scala idioms favor immutability by default: you’re encouraged to use immutable variables and immutable collections -- Scala has excellent support for concurrent and parallel programming +- Scala has excellent support for [concurrent and parallel programming][concurrency] ### Programming level similarities @@ -68,9 +68,8 @@ This section looks at the similarities you’ll see between Python and Scala whe - The syntax for defining methods is similar - Both have lists, dictionaries (maps), sets, and tuples - Both have comprehensions for mapping and filtering -- Both have higher-order functions and strong support for lambdas -- With Scala 3’s toplevel definitions you can put method, field, and other definitions anywhere - - One difference is that Python can operate without even declaring a single method, while Scala 3 can’t do _everything_ at the toplevel; for instance, a `@main def` method is required to start a Scala application +- With Scala 3’s [toplevel definitions][toplevel] you can put method, field, and other definitions anywhere + - One difference is that Python can operate without even declaring a single method, while Scala 3 can’t do _everything_ at the toplevel; for instance, a [main method][main-method] (`@main def`) is required to start a Scala application ### Programming level differences @@ -78,7 +77,7 @@ Also at a programming level, these are some of the differences you’ll see ever - Scala’s syntax is extremely consistent: - Lists, maps, sets, and tuples are all created and accessed similarly - - Collections classes generally have most of the same higher-order functions + - [Collections classes][collections-classes] generally have most of the same higher-order functions - `val` and `var` fields are used consistently to define fields and parameters - Pattern matching is used consistently throughout the language - Scala variables and parameters are defined with the `val` (immutable) or `var` (mutable) keywords @@ -89,22 +88,23 @@ Also at a programming level, these are some of the differences you’ll see ever - Scala is statically typed, so you declare types for method parameters, method return values, and in other places - Pattern matching and `match` expressions are used extensively in Scala (and will change the way you write code) - Traits are used heavily in Scala; interfaces and abstract classes are used less often in Python -- Scala’s *contextual abstractions* and *term inference* provide a collection of different features: - - *Extension methods* let you easily add new functionality to classes using a clear syntax - - *Multiversal equality* lets you limit equality comparisons---at compile time---to only those comparisons that make sense -- Scala has state-of-the-art open source functional programming libraries +- Scala’s [contextual abstractions][contextual] and _term inference_ provide a collection of different features: + - [Extension methods][extension-methods] let you easily add new functionality to classes using a clear syntax + - [Multiversal equality][multiversal] lets you limit equality comparisons---at compile time---to only those comparisons that make sense +- Scala has state-of-the-art open source functional programming libraries (see the [“Awesome Scala” list](https://github.com/lauris/awesome-scala)) - You can create your own “control structures” and DSLs, thanks to features like objects, by-name parameters, infix notation, optional parentheses, extension methods, higher-order functions, and more -- Scala code can run in the JVM and even be compiled to native images (using Scala Native and GraalVM) for high performance -- Many other goodies: case classes, companion classes and objects, macros, union and intersection types, toplevel definitions, numeric literals, multiple parameter lists, and more - +- Scala code can run in the JVM and even be compiled to native images (using [Scala Native](https://github.com/scala-native/scala-native) and [GraalVM](https://www.graalvm.org)) for high performance +- Many other goodies: case classes, companion classes and objects, macros, [union][union-types] and [intersection][intersection-types] types, [toplevel definitions][toplevel], numeric literals, multiple parameter lists, and more ### Features compared with examples Given that introduction, the following sections provide side-by-side comparisons of Python and Scala programming language features. -> The general Python standard is to indent code with four spaces, but in the following examples only two spaces are used. -> This is only done so the examples can be shown side by side. +{% comment %} +TODO: Update the Python examples to use four spaces. I started to do this, but then thought it would be better to do that in a separate PR. +{% endcomment %} + ## Comments @@ -336,7 +336,7 @@ This section provides comparisons of features related to OOP-style classes and m If you’re familiar with Java 8 and newer, Scala traits are similar to those Java interfaces. Traits are used all the time in Scala, while Python interfaces and abstract classes are used much less often. -Therefore, rather than attempt to compare the two side by side, this example shows how to use Scala traits to build a small solution to a simulated math problem: +Therefore, rather than attempt to compare the two, this example shows how to use Scala traits to build a small solution to a simulated math problem: ```scala trait Adder: @@ -352,13 +352,13 @@ sm.add(1,1) // 2 sm.multiply(2,2) // 4 ``` -There are many other ways to use traits with classes and objects, but this gives you a little idea of how they can be used to organize concepts into logical groups of behavior, and then merge them as needed to create a complete solution. +There are [many other ways to use traits with classes and objects][modeling-intro], but this gives you a little idea of how they can be used to organize concepts into logical groups of behavior, and then merge them as needed to create a complete solution. ## Control structures -This section compares control structures in Python and Scala. +This section compares [control structures][control-structures] in Python and Scala. Both languages have constructs like `if`/`else`, `while`, `for` loops, and `try`. Scala also has `match` expressions. @@ -727,13 +727,13 @@ Scala also has `match` expressions. -Match expressions and pattern matching are a big part of the Scala programming experience, but only a few `match` expression features are shown here. See the [Control Structures][control_structures] page for many more examples. +Match expressions and pattern matching are a big part of the Scala programming experience, but only a few `match` expression features are shown here. See the [Control Structures][control-structures] page for many more examples. ## Collections classes -This section compares the collections classes that are available in Python and Scala, including lists, dictionaries/maps, sets, and tuples. +This section compares the [collections classes][collections-classes] that are available in Python and Scala, including lists, dictionaries/maps, sets, and tuples. ### Lists @@ -1297,7 +1297,7 @@ This section compares enums (enumerations) in Python and Scala 3. There are other concepts in Scala which currently don’t have equivalent functionality in Python. Follow the links below for more details: -- Most concepts related to [contextual abstractions][contextual], such as [extension methods][extension], [type classes][type_classes], implicit values +- Most concepts related to [contextual abstractions][contextual], such as [extension methods][extension-methods], [type classes][type-classes], implicit values - Scala allows multiple parameter lists, which enables features like partially-applied functions, and the ability to create your own DSLs - Case classes, which are extremely useful for functional programming and pattern matching - The ability to create your own control structures and DSLs @@ -1307,12 +1307,21 @@ Follow the links below for more details: - Macros and metaprogramming -[toplevel]: {% link _overviews/scala3-book/taste-toplevel-definitions.md %} +[collections-classes]: {% link _overviews/scala3-book/collections-classes.md %} +[concurrency]: {% link _overviews/scala3-book/concurrency.md %} [contextual]: {% link _overviews/scala3-book/ca-contextual-abstractions-intro.md %} -[extension]: {% link _overviews/scala3-book/ca-extension-methods.md %} -[type_classes]: {% link _overviews/scala3-book/types-type-classes.md %} +[control-structures]: {% link _overviews/scala3-book/control-structures.md %} +[extension-methods]: {% link _overviews/scala3-book/ca-extension-methods.md %} +[fp-intro]: {% link _overviews/scala3-book/fp-intro.md %} +[hofs]: {% link _overviews/scala3-book/fun-hofs.md %} +[intersection-types]: {% link _overviews/scala3-book/types-intersection.md %} +[main-method]: {% link _overviews/scala3-book/methods-main-methods.md %} +[modeling-intro]: {% link _overviews/scala3-book/domain-modeling-intro.md %} [multiversal]: {% link _overviews/scala3-book/ca-multiversal-equality.md %} -[control_structures]: {% link _overviews/scala3-book/control-structures.md %} +[toplevel]: {% link _overviews/scala3-book/taste-toplevel-definitions.md %} +[type-classes]: {% link _overviews/scala3-book/types-type-classes.md %} +[union-types]: {% link _overviews/scala3-book/types-union.md %} +
diff --git a/_overviews/scala3-book/scala-tools.md b/_overviews/scala3-book/scala-tools.md index 4d2c4243fd..5200beb589 100644 --- a/_overviews/scala3-book/scala-tools.md +++ b/_overviews/scala3-book/scala-tools.md @@ -22,7 +22,7 @@ We’ll start by showing how to use sbt to build your Scala projects, and then w ## Building Scala projects with sbt You can use several different tools to build your Scala projects, including Ant, Maven, Gradle, Mill, and more. -But a tool named *sbt* was the first build tool that was specifically created for Scala, and these days it’s supported by [Lightbend](https://www.lightbend.com), the company that also maintains [Akka](https://akka.io), the [Play framework](https://www.playframework.com), the [Lagom framework](https://www.lagomframework.com), and more. +But a tool named _sbt_ was the first build tool that was specifically created for Scala, and these days it’s supported by [Lightbend](https://www.lightbend.com), the company that also maintains [Akka](https://akka.io), the [Play framework](https://www.playframework.com), the [Lagom framework](https://www.lagomframework.com), and more. > To install sbt, see [its download page](https://www.scala-sbt.org/download.html) or our [Getting Started][getting_started] page. @@ -38,13 +38,13 @@ $ mkdir hello $ cd hello ``` -Then create a file named *build.sbt* that contains this line: +Then create a file named _build.sbt_ that contains this line: ```scala scalaVersion := "{{ site.scala-3-version }}" ``` -Now create a file named something like *Hello.scala*---the first part of the name doesn’t matter---with this line: +Now create a file named something like _Hello.scala_---the first part of the name doesn’t matter---with this line: ```scala @main def helloWorld = println("Hello, world") @@ -70,13 +70,13 @@ Hello, world [success] Total time: 2 s ``` -When you look at your directory, you’ll see that sbt has created two directories named *project* and *target*. +When you look at your directory, you’ll see that sbt has created two directories named _project_ and _target_. These are working directories that sbt uses. As you can see, creating and running a little Scala project with sbt takes just a few simple steps. {% comment %} -NOTE: This currently requires this line in a *project/plugins.sbt* file: +NOTE: This currently requires this line in a _project/plugins.sbt_ file: addSbtPlugin("ch.epfl.lamp" % "sbt-dotty" % "{{ site.scala-3-plugin-version }}") {% endcomment %} @@ -110,9 +110,9 @@ src/ target/ ``` -You can also add a *lib* directory under the root directory if you want to add unmanaged dependencies---JAR files---to your project. +You can also add a _lib_ directory under the root directory if you want to add unmanaged dependencies---JAR files---to your project. -If you’re going to create a project that has Scala source code files and tests, but won’t be using any Java source code files, and doesn’t need any “resources”---such as embedded images, configuration files, etc.---this is all you really need under the *src* directory: +If you’re going to create a project that has Scala source code files and tests, but won’t be using any Java source code files, and doesn’t need any “resources”---such as embedded images, configuration files, etc.---this is all you really need under the _src_ directory: ```bash src/ @@ -126,7 +126,7 @@ src/ ### “Hello, world” with an sbt directory structure {% comment %} -TODO: using something like `sbt new scala/scala3.g8` may eventually +LATER: using something like `sbt new scala/scala3.g8` may eventually be preferable, but that seems to have a few bugs atm (creates a 'target' directory above the root; renames the root dir; uses 'dottyVersion'; 'name' doesn’t match the supplied name; @@ -168,10 +168,10 @@ If you see that, you’re in great shape for the next step. At this point you only need two more things to run a “Hello, world” project: -- A *build.sbt* file -- A *Hello.scala* file +- A _build.sbt_ file +- A _Hello.scala_ file -For a little project like this, the *build.sbt* file only needs a `scalaVersion` entry, but we’ll add three lines that you commonly see: +For a little project like this, the _build.sbt_ file only needs a `scalaVersion` entry, but we’ll add three lines that you commonly see: ```scala name := "HelloWorld" @@ -186,8 +186,8 @@ Now you just need to add a little “Hello, world” program. ### A “Hello, world” program -In large projects, all of your Scala source code files will go under the *src/main/scala* and *src/test/scala* directories, but for a little sample project like this, you can put your source code file in the root directory of your project. -Therefore, create a file named *HelloWorld.scala* in the root directory with these contents: +In large projects, all of your Scala source code files will go under the _src/main/scala_ and _src/test/scala_ directories, but for a little sample project like this, you can put your source code file in the root directory of your project. +Therefore, create a file named _HelloWorld.scala_ in the root directory with these contents: ```scala @main def helloWorld = println("Hello, world") @@ -281,7 +281,7 @@ See Coursier’s [launch page](https://get-coursier.io/docs/cli-launch) for more ### Creating the project directory structure -As with the previous lesson, create an sbt project directory structure for a project named *HelloScalaTest* with the following commands: +As with the previous lesson, create an sbt project directory structure for a project named _HelloScalaTest_ with the following commands: ```bash $ mkdir HelloScalaTest @@ -293,7 +293,7 @@ $ mkdir project target ### Creating the build.sbt file -Next, create a *build.sbt* file in the root directory of your project with these contents: +Next, create a _build.sbt_ file in the root directory of your project with these contents: ```scala name := "HelloScalaTest" @@ -314,14 +314,14 @@ The `libraryDependencies` lines tell sbt to include the dependencies (JAR files) ### Create a Scala source code file Next, create a Scala program that you can use to demonstrate ScalaTest. -First, create a directory under *src/main/scala* named *math*: +First, create a directory under _src/main/scala_ named _math_: ```bash $ mkdir src/main/scala/math ---- ``` -Then, inside that directory, create a file named *MathUtils.scala* with these contents: +Then, inside that directory, create a file named _MathUtils.scala_ with these contents: ```scala package math @@ -355,14 +355,14 @@ With that compiled, let’s create a ScalaTest file to test the `double` method. ScalaTest is very flexible, and offers several different ways to write tests. A simple way to get started is to write tests using the ScalaTest `AnyFunSuite`. -To get started, create a directory named *math* under the *src/test/scala* directory: +To get started, create a directory named _math_ under the _src/test/scala_ directory: ```bash $ mkdir src/test/scala/math ---- ``` -Next, create a file named *MathUtilsTests.scala* in that directory with the following contents: +Next, create a file named _MathUtilsTests.scala_ in that directory with the following contents: ```scala package math @@ -422,7 +422,7 @@ Welcome to the world of testing Scala applications with sbt and ScalaTest. ### Support for many types of tests -This example demonstrates a style of testing that’s similar to xUnit *Test-Driven Development* (TDD) style testing, with a few benefits of the *Behavior-Driven Development* (BDD) style. +This example demonstrates a style of testing that’s similar to xUnit _Test-Driven Development_ (TDD) style testing, with a few benefits of the _Behavior-Driven Development_ (BDD) style. As mentioned, ScalaTest is flexible and you can also write tests using other styles, such as a style similar to Ruby’s RSpec. You can also use mock objects, property-based testing, and use ScalaTest to test Scala.js code. diff --git a/_overviews/scala3-book/taste-modeling.md b/_overviews/scala3-book/taste-modeling.md index 64ac59d57a..7fa94df0d6 100644 --- a/_overviews/scala3-book/taste-modeling.md +++ b/_overviews/scala3-book/taste-modeling.md @@ -35,10 +35,6 @@ Scala traits can be used as simple interfaces, but they can also contain abstrac They provide a great way for you to organize behaviors into small, modular units. Later, when you want to create concrete implementations of attributes and behaviors, classes and objects can extend traits, mixing in as many traits as needed to achieve the desired behavior. -{% comment %} -TODO: Need a better example. This one shows behaviors, not data. -{% endcomment %} - As an example of how to use traits as interfaces, here are three traits that define well-organized and modular behaviors for animals like dogs and cats: ```scala From a63de05d23ac3d351c237bae14f78129621d58a0 Mon Sep 17 00:00:00 2001 From: Alvin Alexander Date: Thu, 7 Jan 2021 17:32:39 -0700 Subject: [PATCH 0157/1870] Update _overviews/scala3-book/fp-pure-functions.md Co-authored-by: Jonathan --- _overviews/scala3-book/fp-pure-functions.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/_overviews/scala3-book/fp-pure-functions.md b/_overviews/scala3-book/fp-pure-functions.md index 1b7424f505..0516f041a8 100644 --- a/_overviews/scala3-book/fp-pure-functions.md +++ b/_overviews/scala3-book/fp-pure-functions.md @@ -12,7 +12,7 @@ Another feature that Scala offers to help you write functional code is the abili A _pure function_ can be defined like this: - A function `f` is pure if, given the same input `x`, it always returns the same output `f(x)` -- The function’s output depends _only_ on its input variables and its internal algorithm +- The function’s output depends _only_ on its input variables and its implementation - It doesn’t modify its input parameters - It doesn’t mutate any hidden state - It doesn’t have any “back doors”: It doesn’t read data from the outside world (including the console, web services, databases, files, etc.), or write data to the outside world From 523f76fdf03b2835fa4bdbbc99501f1026b925ce Mon Sep 17 00:00:00 2001 From: Alvin Alexander Date: Thu, 7 Jan 2021 17:33:33 -0700 Subject: [PATCH 0158/1870] Update _overviews/scala3-book/fp-pure-functions.md Co-authored-by: Jonathan --- _overviews/scala3-book/fp-pure-functions.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/_overviews/scala3-book/fp-pure-functions.md b/_overviews/scala3-book/fp-pure-functions.md index 0516f041a8..6ed6bd9ba1 100644 --- a/_overviews/scala3-book/fp-pure-functions.md +++ b/_overviews/scala3-book/fp-pure-functions.md @@ -13,6 +13,9 @@ A _pure function_ can be defined like this: - A function `f` is pure if, given the same input `x`, it always returns the same output `f(x)` - The function’s output depends _only_ on its input variables and its implementation +- it only computes the output and does not modify the world around it. + +This implies: - It doesn’t modify its input parameters - It doesn’t mutate any hidden state - It doesn’t have any “back doors”: It doesn’t read data from the outside world (including the console, web services, databases, files, etc.), or write data to the outside world From 12b40f0d381d4d87e8be7a7c16ce38b730342961 Mon Sep 17 00:00:00 2001 From: Alvin Alexander Date: Thu, 7 Jan 2021 17:35:21 -0700 Subject: [PATCH 0159/1870] Update _overviews/scala3-book/fp-pure-functions.md Co-authored-by: Jonathan --- _overviews/scala3-book/fp-pure-functions.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/_overviews/scala3-book/fp-pure-functions.md b/_overviews/scala3-book/fp-pure-functions.md index 6ed6bd9ba1..800519bb1d 100644 --- a/_overviews/scala3-book/fp-pure-functions.md +++ b/_overviews/scala3-book/fp-pure-functions.md @@ -110,8 +110,8 @@ If you understand that code, you’ll see that it meets the pure function defini The first key point of this section is the definition of a pure function: -> A _pure function_ is a function that depends only on its declared inputs and its internal algorithm to produce its output. -> It does not read any other values from “the outside world”---the world outside of the function’s scope---and it doesn’t modify any values in the outside world. +> A _pure function_ is a function that depends only on its declared inputs and its implementation to produce its output. +> It only computes its output and does not depend on or modify the outside world. A second key point is that every real-world application interacts with the outside world. Therefore, a simplified way to think about functional programs is that they consist of a core of pure functions that are wrapped with other functions that interact with the outside world. From 56d08b8afdc7e9bef6b8313421b397cb0107eb51 Mon Sep 17 00:00:00 2001 From: Alvin Alexander Date: Sun, 10 Jan 2021 21:38:31 -0700 Subject: [PATCH 0160/1870] Two formatting changes --- _overviews/scala3-book/fp-pure-functions.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/_overviews/scala3-book/fp-pure-functions.md b/_overviews/scala3-book/fp-pure-functions.md index 800519bb1d..e9aff86437 100644 --- a/_overviews/scala3-book/fp-pure-functions.md +++ b/_overviews/scala3-book/fp-pure-functions.md @@ -13,7 +13,7 @@ A _pure function_ can be defined like this: - A function `f` is pure if, given the same input `x`, it always returns the same output `f(x)` - The function’s output depends _only_ on its input variables and its implementation -- it only computes the output and does not modify the world around it. +- It only computes the output and does not modify the world around it This implies: - It doesn’t modify its input parameters From 3e2448706fb11df9db0f0982fb1b3ca967054acd Mon Sep 17 00:00:00 2001 From: Alvin Alexander Date: Sun, 10 Jan 2021 22:15:45 -0700 Subject: [PATCH 0161/1870] Working on resolving open comments --- _overviews/scala3-book/scala-for-java-devs.md | 28 +++++++++++++++++-- .../scala3-book/scala-for-python-devs.md | 4 +-- 2 files changed, 28 insertions(+), 4 deletions(-) diff --git a/_overviews/scala3-book/scala-for-java-devs.md b/_overviews/scala3-book/scala-for-java-devs.md index 0a921cc6cc..88160d3e92 100644 --- a/_overviews/scala3-book/scala-for-java-devs.md +++ b/_overviews/scala3-book/scala-for-java-devs.md @@ -28,7 +28,7 @@ At a high level, Scala shares these similarities with Java: - Scala code is compiled to _.class_ files, packaged in JAR files, and runs on the JVM - It’s an [object-oriented programming][modeling-oop] (OOP) language - It’s statically typed -- Both languages have support for immutable collections, lambdas, and [higher-order functions][hofs] +- Both languages have support for lambdas and [higher-order functions][hofs] - They can both be used with IDEs like IntelliJ IDEA and Microsoft VS Code - Projects can be built with build tools like Gradle, Ant, and Maven - It has terrific libraries and frameworks for building server-side, network-intensive applications, including web server applications, microservices, machine learning, and more (see the [“Awesome Scala” list](https://github.com/lauris/awesome-scala)) @@ -46,6 +46,7 @@ Also at a high level, the differences between Java and Scala are: - Though it’s statically typed, Scala often feels like a dynamic language - Scala is a pure OOP language, so every object is an instance of a class, and symbols like `+` and `+=` that look like operators are really methods; this means that you can create your own operators - In addition to being a pure OOP language, Scala is also a pure FP language; in fact, it encourages a fusion of OOP and FP, with functions for the logic and objects for modularity +- Scala has a full suite of immutable collections, including `List`, `Vector`, and immutable `Map` and `Set` implementations - Everything in Scala is an _expression_: constructs like `if` statements, `for` loops, `match` expressions, and even `try`/`catch` expressions all have return values - Scala idioms favor immutability by default: you’re encouraged to use immutable (`final`) variables and immutable collections - The Scala ecosystem has other [build tools][tools] in sbt, Mill, and others @@ -83,7 +84,7 @@ TODO: add a point about how the type system lets you express details as desired - Scala case classes are like records in Java 14; they help you model data when writing FP code, with built-in support for concepts like pattern matching and cloning - Thanks to features like by-name parameters, infix notation, optional parentheses, extension methods, and [higher-order functions][hofs], you can create your own “control structures” and DSLs - Scala files do not have to be named according to the classes or traits they contain -- Many other goodies: companion classes and objects, macros, [union][union-types] and [intersection][intersection-types], [toplevel definitions][toplevel], numeric literals, multiple parameter lists, default values for parameters, named arguments, and more +- Many other goodies: companion classes and objects, macros, [union][union-types] and [intersection][intersection-types], numeric literals, multiple parameter lists, default values for parameters, named arguments, and more ### Features compared with examples @@ -967,6 +968,29 @@ Examples of how to create instances of immutable collections. Scala has mutable collections classes like `ArrayBuffer`, `Map`, and `Set` in its _scala.collection.mutable_ package. After [importing them][imports] into the current scope, they’re created just like the immutable `List`, `Vector`, `Map`, and `Set` examples just shown. +Scala also has an `Array` class, which you can think of as being a wrapper around the Java `array` primitive type. +A Scala `Array[A]` maps to a Java `A[]`, so you can think of this Scala `Array[String]`: + +```scala +val a = Array("a", "b") +``` + +as being backed by this Java `String[]`: + +```scala +String[] a = ["a", "b"] +``` + +However, a Scala `Array` also has all of the functional methods you expect in a Scala collection, including `map` and `filter`: + +```scala +val nums = Array(1, 2, 3, 4, 5) +val doubledNums = nums.map(_ * 2) +val filteredNums = nums.filter(_ > 2) +``` + +Because the Scala `Array` is represented in the same way as the Java `array`, you can easily use Java methods that return arrays in your Scala code. + You can also convert between Java and Scala collections classes with the Scala `CollectionConverters` objects. There are two objects in different packages, one for converting from Java to Scala, and another for converting from Scala to Java. This table shows the possible conversions: diff --git a/_overviews/scala3-book/scala-for-python-devs.md b/_overviews/scala3-book/scala-for-python-devs.md index eb1f2f4a80..5a7c07e1d2 100644 --- a/_overviews/scala3-book/scala-for-python-devs.md +++ b/_overviews/scala3-book/scala-for-python-devs.md @@ -37,8 +37,8 @@ The two languages are first compared at a high level, and then at an everyday pr At a high level, Scala shares these *similarities* with Python: - Both are high-level programming languages, where you don’t have to concern yourself with low-level concepts like pointers and manual memory management -- Both have a relatively simple, concise syntax -- Both are [functional programming][fp-intro] (FP) languages +- Both have a relatively simple, concise syntax +- Both support a [functional style of programming][fp-intro] - Both are object-oriented programming (OOP) languages - Both have comprehensions: Python has list comprehensions and Scala has `for` comprehensions - Both languages have support for lambdas and [higher-order functions][hofs] From 60a948797f9867c1bdf81b1f5c9501b5c32ef552 Mon Sep 17 00:00:00 2001 From: Alvin Alexander Date: Wed, 13 Jan 2021 13:19:34 -0700 Subject: [PATCH 0162/1870] Addressed comments on #1875 --- _overviews/scala3-book/scala-for-java-devs.md | 3 +++ _overviews/scala3-book/scala-for-python-devs.md | 7 ++++--- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/_overviews/scala3-book/scala-for-java-devs.md b/_overviews/scala3-book/scala-for-java-devs.md index 88160d3e92..249bf2250d 100644 --- a/_overviews/scala3-book/scala-for-java-devs.md +++ b/_overviews/scala3-book/scala-for-java-devs.md @@ -991,6 +991,9 @@ val filteredNums = nums.filter(_ > 2) Because the Scala `Array` is represented in the same way as the Java `array`, you can easily use Java methods that return arrays in your Scala code. +> Despite that discussion of `Array`, bear in mind that normal Scala code doesn’t use `Array`. +> It’s primarily useful for interoperating with other languages (Java, JavaScript), and it may also be useful when writing low-level code that needs to squeeze maximum performance out of the underlying platform. But in general, when you need to use a sequence, the Scala idiom is to prefer immutable sequences like `Vector` and `List`, and then use `ArrayBuffer` if and when when you really need a mutable sequence. + You can also convert between Java and Scala collections classes with the Scala `CollectionConverters` objects. There are two objects in different packages, one for converting from Java to Scala, and another for converting from Scala to Java. This table shows the possible conversions: diff --git a/_overviews/scala3-book/scala-for-python-devs.md b/_overviews/scala3-book/scala-for-python-devs.md index 5a7c07e1d2..958fa50033 100644 --- a/_overviews/scala3-book/scala-for-python-devs.md +++ b/_overviews/scala3-book/scala-for-python-devs.md @@ -75,11 +75,12 @@ This section looks at the similarities you’ll see between Python and Scala whe Also at a programming level, these are some of the differences you’ll see every day when writing code: -- Scala’s syntax is extremely consistent: - - Lists, maps, sets, and tuples are all created and accessed similarly - - [Collections classes][collections-classes] generally have most of the same higher-order functions +- Programming in Scala feels very consistent: - `val` and `var` fields are used consistently to define fields and parameters + - Lists, maps, sets, and tuples are all created and accessed similarly; for instance, parentheses are used to create all types---`List(1,2,3)`, `Set(1,2,3)`, `Map(1->"one")`---just like creating any other Scala class + - [Collections classes][collections-classes] generally have most of the same higher-order functions - Pattern matching is used consistently throughout the language + - The syntax that’s used to define functions that are passed into methods is the same syntax that’s used to define anonymous functions - Scala variables and parameters are defined with the `val` (immutable) or `var` (mutable) keywords - Scala idioms prefer immutable data structures - Scala has terrific IDE support with IntelliJ IDEA and Microsoft VS Code From d3c699a0a495179b110e9345a67cb448bf189240 Mon Sep 17 00:00:00 2001 From: Alvin Alexander Date: Tue, 23 Feb 2021 19:01:22 -0700 Subject: [PATCH 0163/1870] Added to the tuple intro, related to #1918 --- .../scala-book/prelude-taste-of-scala.md | 49 ++++++++++++++++--- 1 file changed, 41 insertions(+), 8 deletions(-) diff --git a/_overviews/scala-book/prelude-taste-of-scala.md b/_overviews/scala-book/prelude-taste-of-scala.md index 1564032440..dd8dd9bec4 100644 --- a/_overviews/scala-book/prelude-taste-of-scala.md +++ b/_overviews/scala-book/prelude-taste-of-scala.md @@ -462,19 +462,30 @@ There are many (many!) more methods available to Scala collections classes, and ## Tuples -Tuples let you put a heterogenous collection of elements in a little container. Tuples can contain between two and 22 values, and they can all be different types. For example, given a `Person` class like this: +Tuples let you put a heterogenous collection of elements in a little container. A tuple can contain between two and 22 values, and all of the values can have different types. For example, this is a tuple that holds three different types, an `Int`, a `Double`, and a `String`: ```scala -class Person(var name: String) +(11, 11.0, "Eleven") ``` -You can create a tuple that contains three different types like this: +This is known as a `Tuple3`, because it contains three elements. + +Tuples are convenient in many places, such as where you might use an ad-hoc class in other languages. For instance, you can return a tuple from a method instead of returning a class: + +```scala +def getAaplInfo() = { + // get the stock symbol, price, and volume + ("AAPL", BigDecimal(123.45), 101202303L) +} +``` + +Then you can assign the result of the method to a variable: ```scala -val t = (11, "Eleven", new Person("Eleven")) +val t = getAaplInfo() ``` -You can access the tuple values by number: +Once you have a tuple variable, you can access its values by number, preceded by an underscore: ```scala t._1 @@ -482,13 +493,35 @@ t._2 t._3 ``` -Or assign the tuple fields to variables: +The REPL demonstrates the results of accessing those fields: + +```scala +scala> t._1 +res0: String = AAPL + +scala> t._2 +res1: scala.math.BigDecimal = 123.45 + +scala> t._3 +res2: Long = 101202303 +``` + +The values of a tuple can also be extracted using pattern matching. In this next example, the fields inside the tuple are assigned to the variables `symbol`, `price`, and `volume`: + +```scala +val (symbol, price, volume) = getAaplInfo() +``` + +Once again, the REPL shows the result: ```scala -val (num, string, person) = (11, "Eleven", new Person("Eleven")) +scala> val (symbol, price, volume) = getAaplInfo() +symbol: String = AAPL +price: scala.math.BigDecimal = 123.45 +volume: Long = 101202303 ``` -Tuples are nice for those times when you need to put a little “bag” of things together for a little while. +Tuples are nice for those times when you want to put a little “bag” of things together for a little while. From 467f8ea1fdb6765355a40dd1d974278b77ad1730 Mon Sep 17 00:00:00 2001 From: Alvin Alexander Date: Thu, 25 Feb 2021 10:36:35 -0700 Subject: [PATCH 0164/1870] Update _overviews/scala-book/prelude-taste-of-scala.md Co-authored-by: Julien Richard-Foy --- _overviews/scala-book/prelude-taste-of-scala.md | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/_overviews/scala-book/prelude-taste-of-scala.md b/_overviews/scala-book/prelude-taste-of-scala.md index dd8dd9bec4..0e6cf9ffa9 100644 --- a/_overviews/scala-book/prelude-taste-of-scala.md +++ b/_overviews/scala-book/prelude-taste-of-scala.md @@ -473,7 +473,7 @@ This is known as a `Tuple3`, because it contains three elements. Tuples are convenient in many places, such as where you might use an ad-hoc class in other languages. For instance, you can return a tuple from a method instead of returning a class: ```scala -def getAaplInfo() = { +def getAaplInfo(): (String, BigDecimal, Long) = { // get the stock symbol, price, and volume ("AAPL", BigDecimal(123.45), 101202303L) } @@ -558,4 +558,3 @@ Scala was created by [Martin Odersky](https://en.wikipedia.org/wiki/Martin_Oders - From 2b2ce6ae89cbb4da6ddc4652b83b86e15374285f Mon Sep 17 00:00:00 2001 From: arbitrary-dev Date: Tue, 27 Oct 2020 21:00:29 +0200 Subject: [PATCH 0165/1870] Add consistency to parameter lists formatting --- _style/declarations.md | 21 ++++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-) diff --git a/_style/declarations.md b/_style/declarations.md index ed02e81785..cde8b922a2 100644 --- a/_style/declarations.md +++ b/_style/declarations.md @@ -224,13 +224,20 @@ There are three main reasons you should do this: List("").foldLeft[Int](0, _ + _.length) For complex DSLs, or with type-names that are long, it can be difficult -to fit the entire signature on one line. In those cases, align the -open-paren of the parameter lists, one list per line (i.e. if you can't -put them all on one line, put one each per line): - - protected def forResource(resourceInfo: Any) - (f: (JsonNode) => Any) - (implicit urlCreator: URLCreator, configurer: OAuthConfiguration): Any = { +to fit the entire signature on one line. In those cases, split the parameter +lists, one parameter per line with +[trailing commas](https://docs.scala-lang.org/sips/trailing-commas.html#motivation) +and parentheses being on a separate lines adding to visual separation between +lists: + + protected def forResource( + resourceInfo: Any, + )( + f: (JsonNode) => Any, + )(implicit + urlCreator: URLCreator, + configurer: OAuthConfiguration, + ): Any = { ... } From 31619990c49f81561740afb5cf0287647298e310 Mon Sep 17 00:00:00 2001 From: arbitrary-dev Date: Sun, 7 Mar 2021 16:38:39 +0200 Subject: [PATCH 0166/1870] Add alternative formatting --- _style/declarations.md | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/_style/declarations.md b/_style/declarations.md index cde8b922a2..1e73ce7912 100644 --- a/_style/declarations.md +++ b/_style/declarations.md @@ -241,6 +241,15 @@ lists: ... } +Other possibility is to align the open-paren of the parameter lists, +one list per line: + + protected def forResource(resourceInfo: Any) + (f: (JsonNode) => Any) + (implicit urlCreator: URLCreator, configurer: OAuthConfiguration): Any = { + ... + } + #### Higher-Order Functions It's worth keeping in mind when declaring higher-order functions the From 87d27ffc1ddb3d5134e36fcee9d908400e4ac6c1 Mon Sep 17 00:00:00 2001 From: Alvin Alexander Date: Wed, 17 Mar 2021 11:01:36 -0600 Subject: [PATCH 0167/1870] Update _overviews/scala-book/prelude-taste-of-scala.md Co-authored-by: Jonathan --- _overviews/scala-book/prelude-taste-of-scala.md | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/_overviews/scala-book/prelude-taste-of-scala.md b/_overviews/scala-book/prelude-taste-of-scala.md index 0e6cf9ffa9..1317561825 100644 --- a/_overviews/scala-book/prelude-taste-of-scala.md +++ b/_overviews/scala-book/prelude-taste-of-scala.md @@ -521,7 +521,11 @@ price: scala.math.BigDecimal = 123.45 volume: Long = 101202303 ``` -Tuples are nice for those times when you want to put a little “bag” of things together for a little while. +Tuples are nice for those times when you want to quickly (and temporarily) group some things together. +If you notice that you are using the same tuples multiple times, it could be useful to declare a dedicated case class, such as: +```scala +case class StockInfo(symbol: String, price: BigDecimal, volume: Long) +``` @@ -557,4 +561,3 @@ Scala was created by [Martin Odersky](https://en.wikipedia.org/wiki/Martin_Oders - From 90a5f74119f33f3a3a33ea9886e3c5ca791b352e Mon Sep 17 00:00:00 2001 From: arbitrary-dev Date: Sat, 20 Mar 2021 16:43:56 +0200 Subject: [PATCH 0168/1870] Re-word --- _style/declarations.md | 45 +++++++++++++++++++++--------------------- 1 file changed, 23 insertions(+), 22 deletions(-) diff --git a/_style/declarations.md b/_style/declarations.md index 1e73ce7912..85bcd995b4 100644 --- a/_style/declarations.md +++ b/_style/declarations.md @@ -224,31 +224,32 @@ There are three main reasons you should do this: List("").foldLeft[Int](0, _ + _.length) For complex DSLs, or with type-names that are long, it can be difficult -to fit the entire signature on one line. In those cases, split the parameter -lists, one parameter per line with +to fit the entire signature on one line. For those cases there are several +different styles in use: + +1. Split the parameter lists, one parameter per line with [trailing commas](https://docs.scala-lang.org/sips/trailing-commas.html#motivation) -and parentheses being on a separate lines adding to visual separation between -lists: - - protected def forResource( - resourceInfo: Any, - )( - f: (JsonNode) => Any, - )(implicit - urlCreator: URLCreator, - configurer: OAuthConfiguration, - ): Any = { - ... - } +and parentheses being on separate lines adding to visual separation between +the lists: + + protected def forResource( + resourceInfo: Any, + )( + f: (JsonNode) => Any, + )(implicit + urlCreator: URLCreator, + configurer: OAuthConfiguration, + ): Any = { + ... + } -Other possibility is to align the open-paren of the parameter lists, -one list per line: +2. Or align the open-paren of the parameter lists, one list per line: - protected def forResource(resourceInfo: Any) - (f: (JsonNode) => Any) - (implicit urlCreator: URLCreator, configurer: OAuthConfiguration): Any = { - ... - } + protected def forResource(resourceInfo: Any) + (f: (JsonNode) => Any) + (implicit urlCreator: URLCreator, configurer: OAuthConfiguration): Any = { + ... + } #### Higher-Order Functions From 4cda350402ff5021d9716b5f8b00ad5197b804de Mon Sep 17 00:00:00 2001 From: xhudik Date: Tue, 6 Apr 2021 14:17:04 +0200 Subject: [PATCH 0169/1870] a weird sentence changed --- _tour/package-objects.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/_tour/package-objects.md b/_tour/package-objects.md index 0b785361b8..5285567ca0 100644 --- a/_tour/package-objects.md +++ b/_tour/package-objects.md @@ -48,7 +48,7 @@ package object fruits { } ``` -As an example of how the use site looks, the following object `PrintPlanted` imports `planted` and `showFruit` in exactly the same +As an example of how to use this, the following object `PrintPlanted` imports `planted` and `showFruit` in exactly the same way it imports class `Fruit`, using a wildcard import on package gardening.fruits: ``` From b205b340818f945c5c99cc7c7f36f33a834b157d Mon Sep 17 00:00:00 2001 From: Torsten Schmits Date: Tue, 17 Mar 2020 17:23:46 +0100 Subject: [PATCH 0170/1870] Document the advanced error formatting engine Based on https://github.com/tek/splain See https://github.com/scala/scala/pull/7785 --- _data/compiler-options.yml | 15 +++- _data/overviews.yml | 5 ++ _overviews/compiler-options/errors.md | 105 ++++++++++++++++++++++++++ resources/img/foundreq.jpg | Bin 0 -> 6611 bytes resources/img/foundreq_record.jpg | Bin 0 -> 9112 bytes resources/img/implicits-circe.jpg | Bin 0 -> 108511 bytes resources/img/implicits-compact.jpg | Bin 0 -> 30995 bytes 7 files changed, 124 insertions(+), 1 deletion(-) create mode 100644 _overviews/compiler-options/errors.md create mode 100644 resources/img/foundreq.jpg create mode 100644 resources/img/foundreq_record.jpg create mode 100644 resources/img/implicits-circe.jpg create mode 100644 resources/img/implicits-compact.jpg diff --git a/_data/compiler-options.yml b/_data/compiler-options.yml index fb67497392..0490b25127 100644 --- a/_data/compiler-options.yml +++ b/_data/compiler-options.yml @@ -611,9 +611,22 @@ - option: "-Vimplicits" schema: type: "Boolean" - description: "Show more detail on why some implicits are not applicable." + description: "Print dependent missing implicits." abbreviations: - "-Xlog-implicits" + - option: "-Vimplicits-verbose-tree" + schema: + type: "Boolean" + description: "Display all intermediate implicits in a chain." + - option: "-Vimplicits-max-refined" + schema: + type: "Int" + default: "0" + description: "max chars for printing refined types, abbreviate to `F {...}`" + - option: "-Vtype-diffs" + schema: + type: "Boolean" + description: "Print found/required error messages as colored diffs." - option: "-Vinline" schema: type: "String" diff --git a/_data/overviews.yml b/_data/overviews.yml index bd12fb5844..54bb90a02b 100644 --- a/_data/overviews.yml +++ b/_data/overviews.yml @@ -254,6 +254,11 @@ icon: cog url: "compiler-options/index.html" description: "Various options to control how scalac compiles your code." + - title: Error Formatting + by: Torsten Schmits + icon: cog + url: "compiler-options/errors.html" + description: "A new engine for more user-friendly error messages, printing chains of dependent implicits and colored found/required type diffs." - category: Legacy diff --git a/_overviews/compiler-options/errors.md b/_overviews/compiler-options/errors.md new file mode 100644 index 0000000000..f6e7823689 --- /dev/null +++ b/_overviews/compiler-options/errors.md @@ -0,0 +1,105 @@ +# Introduction + +An advanced mechanism for formatting type errors and inspecting missing +implicits has been introduced in Scala 2.13.6. +It is based on the compiler plugin [splain](https://github.com/tek/splain). + +This tool abstracts several classes of compiler errors with simple data types +that can be processed by a few built-in routines as well as +[user-provided analyzer plugins](/overviews/plugins/index.html). + +The most significant feature is the illustration of chains of implicit instances +that allows a user to determine the root cause of an implicit error: + +![implicits](/resources/img/implicits-circe.jpg) + +# Basic Configuration + +* `-Vimplicits` enables printing of implicit chains +* `-Vtype-diffs` enables colored diffs for found/required errors + +## Additional Configuration + +`-Vimplicits-verbose-tree` shows the implicits between the error site and the +root cause, see [#implicit-resolution-chains]. + +`-Vimplicits-max-refined` reduces the verbosity of refined types, see +[#truncating-refined-types]. + +# Features + +The error formatting engine provides the following enhancements: + +## Infix Types + +Instead of `shapeless.::[A, HNil]`, prints `A :: HNil`. + +## Found/Required Types + +Rather than printing up to four types, only the dealiased types are shown as a colored diff: + +![foundreq](/resources/img/foundreq.jpg) + +## Implicit Resolution Chains + +When an implicit is not found, only the outermost error at the invocation point is printed by the regular error +reporter. +Previously, the flag `-Xlog-implicits` caused the compiler to print all information about processed implicits, but the +output was highly verbose and contained all invalid implicits for parameters that have been resolved successfully. +The flag has been renamed to `-Vimplicits` and prints a compact list of all involved implicit instances. +`-Xlog-implicits` will continue to work as a deprecated alias. + +![compact](/resources/img/implicits-compact.jpg) + +Here, `!I` stands for *could not find implicit value*, the name of the implicit +parameter is in yellow, and its type in green. + +If the parameter `-Vimplicits-verbose-tree` is given, all intermediate implicits will be +printed, potentially spanning tens of lines. +An example of this is the circe error at the top of the page. + +For comparison, this is the regular compiler output for this case: + +``` +[error] /path/Example.scala:20:5: could not find implicit value for parameter a: io.circe.Decoder[A] +[error] A.fun +[error] ^ +``` + +## Infix Type and Type Argument Line Breaking + +Types longer than 79 characters will be split into multiple lines: + +``` +implicit error; +!I e: String +f invalid because +!I impPar4: List[ + ( + VeryLongTypeName :::: + VeryLongTypeName :::: + VeryLongTypeName :::: + VeryLongTypeName + ) + :::: + (Short :::: Short) :::: + ( + VeryLongTypeName :::: + VeryLongTypeName :::: + VeryLongTypeName :::: + VeryLongTypeName + ) + :::: + VeryLongTypeName :::: + VeryLongTypeName :::: + VeryLongTypeName :::: + VeryLongTypeName +] +``` + +## Truncating Refined Types + +Refined types, like `T { type A = X; type B = Y }`, can get rather long and clutter up error messages. +The option `-Vimplicits-max-refined` controls how many characters the refinement may take up before it gets displayed as +`T {...}`. +The default is to display the unabridged type. diff --git a/resources/img/foundreq.jpg b/resources/img/foundreq.jpg new file mode 100644 index 0000000000000000000000000000000000000000..47c56099dac528a7120018e60299836d7218760b GIT binary patch literal 6611 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 OkF~1*Q^x{c&i)JFZZUQM literal 0 HcmV?d00001 diff --git a/resources/img/implicits-circe.jpg b/resources/img/implicits-circe.jpg new file mode 100644 index 0000000000000000000000000000000000000000..840898eb81dc81dcabfd286c7f1b26f87101f284 GIT binary patch literal 108511 zcmce-1yo$kwl2CF8kgXKpn=9ExJz(o2rfZ`yEQJsAxLnC0Kwg@u>=VYf#5+y&;Y?9 z1izhs?|sjH=e+x$ci$c3R*zcsb=9n@Ip?ZgYt{N@KYV>y1Mr}7igEx5gaptdKET6w zayD6STPpxiRAd3r0RX@N01y}eAy5Po0{#H9~H3o!`}qD(+!ZUiPml(~p(8}X0v8xXh;kVc`luxLsD4$SJ&_FmCX=vH#C@7c&nAteFczJoL8HL0IxkWj6 zc)9-!0>Z$+z{bKR#la!veoFC_`+qwY94?@NVJ@f(82t83if2Dtz zg7}Vv3`RjkL&w0xLI^bD{qYns5*Qf;1q?>C`Xkx_Fg^;wQ!YtVLUmI#S{M;`aAH0> zom71fvBu;vgvZP^1Ot=gF)7&-dIm-&W)@yPegQ!tVQCpzIe7&|sHT>-j_yl6eRB&- zD{C8DJ2!U^PcLsD-_Wq|HxZFh(MicEscGpMnOOyeMa3nhW#ttOjZMuh@Yc5W-cNn~ z1A{}uBU95evvc!b7Z$&-Z)|RD@BG-^J2^c&zxZ|e`|A3SU4QKSSNex#|H&?Vgk4Br zFfthJk6j=nuRn(4gHfJxp%O@{qnW}8X}N>ZiKG(q>w7Thcr=cQ&0HrjNg%x6=}-Qc z_LpV<-wX@+|7F?#H0(d@S_H6>L5P!wj1NcvXUs*x3`pJ!OAZ$1*&LID#uC>T=(+RA z9v{7TFybD7SJ1jCBS`BTKIaRI2jD|+{I0Uzvl(nTbYyBjp`Cr5%LgDtSa(Z5a1;Ij zM39cxTDqDW)o-D$=5}uI5#ffQE{7e+fy2;}r_0Mrc*yNTxq}9+$;QzH`yqtOk$6vI zSjy>yhJiEv{$?l5G$^jyuh`<{Q!1B#k#b1$1QJg~n z8eMi=XW&JJdq+naN)m5Oy?-m&aQB32u@qy6BG?j-H!P2_>+{70LxWe6?Y(8Iy3XbM zl?MQvc<6q2WnitnvI06744it;d+i-z)8s*~^t4-WTsZq|Dk|yjH>WIZqtnnPh5rkg zO5aF)Q~4|YY*!Zy%J{iPD988%5SeYeQh5(9cXKjumCl%ww+sy*TI5tU&ft?elt~`J zZzPss5%8eqq6v`E35veD9ZV8TKyG_mKd20wP<|3^Q!CA6Z^94caiL}3`JQj=s^DT8 z+)K>EREQ3W-Y;9NT|d!{Ep*`Q>6Qq0WVJ)VxDnnAY>v5!^VPzI%dM*N5mUX07TVld zf)f|idQBf;s28LqJ6@B$Be!vI@!nUWP-U&4-O5<=+-}lY-+$4VXvdbf_d2 z-hc?z!sR8e9f{G{BJ&w^dhE1o)jT=c5($&3AR{E2DG%vCWgMNj&EcE!Zt4zdepCZw ziU4g2m=RtF$Kz7ciQ4J8+~a|%GuRf46gf~mc!F{NO3RG&<)iZ!GPKG#q3e6TvDMn! zc%7uz_1_){OxZ86Uyi-ZBWMw<3KAEi^Z?Uxs}rL2j2jsi=-I#^hpmUpWCK zYK6h9XP&x~Ow^-a72C5x_DScdGZ%r}No;?8jK5G-QTAh={Y`f_^^|Na&$HX8kXMwe zmOEHyK$n0R3&WdVY;thcaB^MSgZC$8N2VnGogF2vq)5o2agXwU6~A=MLg`;(z0#wp z8&L7Slh7X@rss$sa?N=Zk@#(<;j#MDs17pGvoG-hEKNzTd?Mf5aEt+KJIJC00nNtvS{VyehcPFW%%&5`HbS*B1Q;2 z+g!|NcY?H}=y8l9PmKbp*lA(hw`!I}gU5_F(m^}-`hcoa+pXIRzn6rJ2TSQRrWS?= zw?8!EMo(FD!;gmUPm&ClmETc$n2{&>j02Q@zsls^F$=C{-umzF5)tEJnKi*_}+63xo?Kn*BXIV z!`VKGheM=j^Ag{c+|6I&Rn;&qy9T#PCJ)vYqY9GDZYrHl1+~5?3Lu8MHXr@Q7=08N zdV;q*kyEi}KpsWyb(Zfw{D?sYYwrkozzrTv0;?6nwMrGa!}wM>6W& zenHTZ%5?HH-F1LR&h~KAvy3Hq$y^jF_xER$*E>g4&Au7NVsGnqRoRdnziXPBC%EN$ z-!ZjJ6?MQB&6BvYH-!d(%L+MLg`UKd82^o_@H82KEd~%G6~lQF{iD5I^ygUqI=vQ` zkl@ZYQr@je4ugArDNYyHuY+XUWj<5pROTC`0~=H66Yqr1UI|UCirLIO!;k5pOi6Ho zCAcy(6_iQJ5~Eg3SQNjI1R1sfO8)JRcNjvonC;S zRl+*AHyScB;wG^<4K73bYz7NWuEYH!u;bPBs`GsJ^t3kO(D{gT{ZWIV&vW7tpwD6_ z`z(%yG&XNxo2}>pAVKecnF!ZkCJq}YHNgrJ^Wl51KWH9Z*(^7Ii!9mIm~la~lWl>m z32OLS90f*lX`3)cg(>?5^Qt~6JoMDy^hXueo^20jCwM%a8L85GG@z>b0BBqCuBX=A zTWi_7jp)QUbi!#hOF3>Sc1n&_&&$5rZf+?B$E+pqPoGxWx;a@0POEqka93~*PUUs9 zMQ=71CrXXM=6N)6yweMbA=y*B zAaA;@tt4lY6T=tX7>9S|Sgh&k`znrxWPQld8*i{H!hY+l^41 zq(m8|;KBZj2SAb~JZgM0p>03c&sV$LDgS$J_aP*92b>&ZaWY@p4AGq%!CetehTEGw zDiIF6*ky(;NqoT7e#MvlcvhDOurIAaok-Vc4Dr0r|(QPw+J=I zSg(Y)5(?Q(k)OXUhqLTR1G*7ef?Nfvs~0lj%3`0jYkwJ5*;MnLy4B+S!seD+w)-aT zduZI~&s@VUI|uhgKuGj#DZ0iaQw3Xfp4zJm>e8H@=geI9@|ns`vAZ0%+>GnM_r4RH%B^E6 zJku<;Pss2HCfkE&Qfc3!+{RL7$&p?)_)iCqyDc?qc9Qh2y_HgaNeX!YF2Z#Sa>7=6 zqnSz+)Mbf)f6JgMV<)okeG|^?j5SxC(Wn9kuz(salbo%JGnROijvXKk*>_Q zd#+kysIs+eojrmZEUB3X9#dHF?qBKhR(sX&Pibz(wtdt&`r@$a18=pJLh`h**u;fJ zSHQiP@^#kL@=SmoK)XC~YIRfL>UF*#>BUB|j)CI{`FNOxHOf_WzCD${`(5Fk7d7$L z60~q4@ibt+jpokI%}Z2@yO**$LGXt#b+N92SrvL~DBWFqCOf1x9@TqD1+^QOC--AY zQGR8jJEMVuhVKK=%?7>Prz?x*F5B|L&74rqie5Q9EHovMlVURZ!1FCWF#Wt7TOil0 za@o}aZ0g&>m7C*Y$LeR_y5Y>CPIZhy*7E@DdsPv)`5NwL^|yIYIUc!DXdAO!-YTYTaL10&8Nbu{Z4@l9z0U>`I9v*R-D~66+!hlL1ah_?4n%5 zx#Cu4*Q~HO_hZ;M>lu>g_sUKxuk5HYNpD;4SV-wUMAfxaC?b1Z#s?ZVvqc3cd>&#A z?Rn*pASVHhUVf!OTD1irqdBh*O21cGD9Wy`d=)9Uo-)<=@xw=pWQP0{)D^D%+(#qc zw;+jBS@!0>4(l&6+@Dqg*7;h{-egDfN#M?Pqa#@g)Po0=Jtx%YQ_UA%*cPs8SQBrGc1sB3OHX$ zQk>oMam{lKAs({P>9#IE%Pm@Df()rsk`%g051vm`)ZeWwa*YdbS_i8xO1JuJ5(b93 z+7k{wDUe0i-ULc(YxOOzi!Sj*mFvS@v4{-`W4vxrkd;%)OkB_zu{pg<1FaewD%-Z| zPitTo=Y@X_fp>0oHCbAB#HOCDnCY3GqtpL-3NmfF{p7| zz7Blrm_FOr{21yQcKbt4fzqveLfKk;<}ef?rt|(6@#?H|I*OOqMlHNq+Ng(LXJ4bO z(H4}F8;J@cB_+FW>UKaUPl>~IQLX*0gEMj$urXPR>BRi;)jN~PLCWIZqIccQ<1QFG zb%K0yHA7$gvpgb!wij*SB%k45WyIAXv6D~(ibN)4#Fe(%ynaxdod`4vj?dKa^ZK-hH83=lCg|ks>j-Ic6z& zTUTC&iK#}HsVifs0RFf{$a0K^u#>_%CNA?x^Db@J)apjTng+#i11)}{77le&Eak)s zLKR`&SAX^^(En@qZuXSp@HZ`iH%hXCU70j>jaN}KL;&nkUUXyrq&R6>l@Wg>bty=( z2TklIK+LxK7b;D-(;Wyo_@0ll>+3u$9a6U&dU_LhvF9juc)!UQVYu8mc{BU~H2%Ep z#5(7AX_DV*kGrVbc|ep221=%a3Xjux#A5+^dTk zTlT=U+-im^lG+CV)b*;*A<3z!m6c3}9+eYS_$+#&8bjZzrPWrAl``AnSZF}v&O_Vj z5MQdQiU=EIAZ;GfbwW90r%;5SK5@cK%(&zfxYMZN-?DS>$EP_n{w#Hc#59*=X3mF> z9b*GKbMp~2*Pz1{lRZ)-C1}+cW46r=@LINYR{(RJ;i}=l0F#-2j{NJjbF!Tvd!a@9%!55Xl^CP!_sggk zUMEg_@3K*}yFYO}qJCrdvi4vdG&e}9#!ck5R88YAeMIiQ{IV>jd{}V!4!!J?F*i?! zW<{RP&<-8x4rRD1+Y|U6MU&1{pv$kW7VGYMln9N{G%=wPMK3H4^G5vB?8x9j!_&YC zqUiKQ9_5zNwv6%~$g$7SfktB4&t*rThni!0Nv!eE_O!?GDoQTd_`D10Ltnx&*Mc)` z?D#ShTCO~w$*O^%j<6qIhq@~W>AWK-L8zwX`@$GGy#i-|aWbP(&zI)3Z7wqRt_hdAvwa*sd$zT?N_1U)Z2kD<5Nx8lT=0EjIvH1 zE89harA)nhSO<9~diGlx#RE{ljGTQy1N&C3!?1n0uwaTRwjrW8BzXSW9;2+%)>(r^ zv#>qc`AhkhViW&B&nAUh!st^FohM@nQPvDR>lZl;?~PzD^V4j8gKcC=f7NF8@nRoG z=4g9A4>RfGN9Pi+#+$SWJ(YL1jFj`St7GH_>0G)G_Mb;fRrK<+3<4X~cEz7(_}8DY zfHgrL!)DNni%aoY{dt|-DdH%)s1(A>V6ng_cDi5L(zc$lpX9{GePF_G`w`>kUb$a2 zUi@w(tdU8hkNTuv%wu@w1WY;(Ys!Yj>-$De9$HR9$BY)@HC%03!idym|GaDn;>+a7 zeYGqI_?R3br*#iH7t19W1EOu_KVVJfF?V8tEN)8}5b9m*4E!JrHXr2oXS?d`6?N3R z9BtrJVeGZb8mrj{V2!GoX}DKd;udoy5M-%GvbYJ|d&Q(Od9hx>-qG*|hXj3syX?N% zP9e;59(l}*rc|h#F?VGz+z}^U{9`KO7cO!S`DU4X^W_2fwu!iuh>tQ}7CZo5!}okR z#B#Df*lRRLxwtLbdPq&ssS3rLY4ukO4%38)B@MeMMK*|03eXm@+P9VQ$SKUL*&BS; z-L0SY#%8|uBD-T{KGQ$=;nAz*uJSBvWi)R7lz&ou9b)1}iX0@gJH42RQ@qlNHuBD1 zXiMwS&OI??(OtdZ;Dgyxox-3*t$w8?rlIV!cP^6$-C#I!===!~z!znw;O+_KpxTrv4iE_8~aA1OUz_ zx^`diD^kdN3|p~vR=TU~)PA66dUX#Ho$-~u+b~P|Jw8+uYRd?FQOFqgsg{rNRyj3r zW6dHl7@q5P(9if4e}H6b7G6gm=ZYq@@ioA^^Z~H$RohUbhnvH8Z+C^JyKX_U(@HP9 zI%C*>Br1)Ce{}3(Vk{Nh2!1Y5&!JohV}8F9x(C|LzMzgp{VX~(%gE+(^Ug~;W}}v9 z(!BLG9FjAfHiQf&P}s?RUh3@uU)iRZ=}Nu3mx;YATIvdrh{V$cuiY`{zSt02qRl1- zx8o}O@TIu(o2f084SfIzkpQ&h@uQMQJL(x~5{E_3A2XhwohDA~L%HKshidEu=AIqV z%gx}mS-+85yR8!3j|+{qPA`*_8y-L(g$=l(Df?l%?neK-aVCpKf|lJ0&*14@)xk48 z8q_`^2e@+GL)5bQ?7q3UsV^noZ7{U9$7*%v_XRxwk5;Ze=D70c96CHZ1j%`SOZY@* zPld`gi2Qyo{{|aM{`%f|#2bxV<(OywOR~Bh9=VT~ERU!;R_jLv@%P2H7@AI_fznz2 zQ(tlpYBqwJlHMR8Z+&+=-DE!hDS4!}yvw~L$u_=Ww_(#WYE5zDaXlS_U%|1U*VDog z5ZL~eLdQ?xC+B#dU)J0^)$g=Adp49Lo4xdMa#F!27r=wXV4ok&6~3xV5P%H|LN?x)7AvujQQ7dwy`mK*;0XeT z_7U53_Rn?5?x0qo-i_=#f7YC%ne*M^k&o0_{@0=J0vlCmmtsn$e3QpvxprAWFHr@- zr~WMa4)VP$1r=w& zdFm1)R)E{m)2iRa-j;fFjy0t;aWivfKlR!mo743az3Q^WGT}t(&r$wU#>Ak+AWBhJ zF#V@_|GpFbgFz1qz{5IHouah#D>V&OIYnhz1jB@2hw>cE9o@j30O084?y4a#MS~za zXwWtRYy=%e0tf?7P0ih0B-PZE|3$g{*YelgANB|UrrH0D^$_Ba{$D`(Frj=(#wBfi$D1FAMEJhfza)*^v6PMODAnj zLFreGej?2z#P#- z25<%(0n@+w1Aoo|LI#ok!?$i$Jlua(fv}|j0A=;z;S9lmq9p^sUBbh|P5#5fT>*j} zTn2z{r~l~hoCg4c7l`_V|EPn!2Y^Rm0MOF+A9ZHw0055w0MZ2)Q&-c!=0Qdrk*ur$ z;ItF~aP$Cx@CyK78vMg=h_*lNK;b+9Xd!&1{22f;vk?5JHDYYT|ApOu2-^SYx4)J7 zr~m$9B$1K+q(4VwL;|CN|0D!WiGqqCC^0e6F)%Q(A7Nu+;bLK6;NaunKElJp$HT-X zASA#eL}0wX7|B09k-_MQj(AuYScuyH&GZ)|36emHKn5YmxPLK{6o`e7^oP6qYrgTy;2#-c^ zBEOldTYY2GV}blhUQP3)kkB5)803ht|IF~O;SuFuBch@q8s+i-On~4!!C({+Di{U) zX99cxOn@K;2_;d9Xw|t*VZn5X`8~uuQX2J>BxbJPk53?cNe%S8njwwSZlMLqy`LWb zA57h?xp!Kb1a{N8LcJ-C;YyaJuxUf-{JlAxAP8#e|5mn{lc*L92F| zdwasJLp%9}g#l1uO~Ht#MVOLuG=`k*4=JrqJgofi+%l8Bv*c5_Db&E0{zWi+9PK@2 zaCQQ#_MYh@=AgwWMM8YMLg4J$ZTt(1QXqQyKI#SW3V)bjYRXmu{fiK-Ag*mRo|ps> zBuM={DYr$wz2*XxX3=u`4wpEb*|8{qt* z1{aY#Xd9Q9YVhDi8DONSAGH~c-1b>C&zcm+_t)w1xA1stWHMh#yKKo5M;JNA$UGR} zS+%iCFXj;MVYG+LHte{?Pr-_*v82f2fb-Es^!HEf&ES{DC3vS9IAtk`T=zZq=NXxHOcaC;%sA<(Le+;6Ym~M=z9NeKT_n6=Dm6(pX+h+ZOBfR_rP3>Fd9Quxf z3(Ll;-)se~?ZlVL59A^Pu2$&ecX~^$O}fKy=S}~%2SE57)DcKO*S#fpcA6P^$2yqW zwIi(OYtA7KqquJ#ndfdNo|c?sZMWU^8g)FRJM4+E9FFR})_T($q8(liYG!f*7qJe& zvY(t?KKb4BQ8woj3sk2{qg)c4pl}{e444Ed>||u^@s&J2NV!o#(twl@*JW(RC{j)L zYrlOmo}*KEmD5Sj1D24pc%-E$cc>zPpqE>IUhQ=(I1_&!oKBf_bkv`p9FLotE;cwH zQ)r}HVfd=w*8FTHoEJW3Y{_3T;;Xorhpr$ywQiEu^<`u+8Y% z7gL2y(y_M~eeI=2_7KPx6SJbubQ4p|%?53iKsEW>VuK~l;$qAmC6uR64G3t;m^SEW zL2*-()k>s!%upba#`!*#nflRo&1(8bdvwFcP68GNT~T9Y`Sb>G$Au0P)};;+zq46g z-6%b!ElPU#&>Y&GQi^SaR-@A?atxoirQ_jIxHJSJt0gHM4xR zXCtZmw;V<39a^;r8^wv?ULo9KmG8>EqqbVZ^ztP^=e)(&Fh)+23`V9c9*Qxl3s#+S zAT?1inf%7_w4%rcW51mReH5hb2$sdU{il#-;$5M~cSurUED* zv)WBf8@g1US_I<@$;m(}=$@ryy&b6}OXT7@eE_J17YM&!Z!XZjTA67nn=EO3>QKBT zm|8ujq16(!w1YhExmje9gkp0UC9NB$$FO3jfeDIHz|aF&tYd%w&LhObs4AILqhJBZ z?nHES^`H^Qr=LhfZEPPuW+3Arjb+~Y=|S$Yt8%{aOKrb!*4}C;(6}Ae&vgFDJ0^vI z8(KPr%Mf64)VkWxZ0-~UtXi9j#@)`mId`n~MbYIpzS=d_wI~dn{DIsPdcJYE(&jU< z$bw=IXP)c-xN5+WGH|C6S1LY<5r4>62UmoTUbo#S2aXpm(6d+t&$w*Ly=m%}(WPtK zee&q3QUX#}G-2l^0jHLnaQOwQ^plms>hkBUIz-$$5Y#bWYy4jnNBS*Q)pO|NG7gOI z1MCxOHMMr38Y#uh{}&FdRjm{Ch5^(IYglbgJ2tNBT-YADYWtBi;qgT#NPf3kCU^~g zPf}9Sx^wz%{PaFBe3?N@b(J2I#hZHB%G^Q}#F8~OmMagz1nsol zR8P=2`u{&o=r!_C`>utS?3~Yxi6%FX+ zY3n4%LTcre@multxjH8-_WQ^@nMl$Oj#|!%1#2u7F`<_U+UE{nPgL=mjx#w&L%XfP zkzmZ&LKua!MDDlLXBTgkKF}_yNV7l}ScHf}a4m>^g-v3+<{a&b4o3cH90Medq z+rV#|xrGoxEd6zbUR29RUp;p`#ZI)xGYSf_9{}u1!Pspp2Jf8Txzk26zuWSrjDAq_ zlKnv0+5JSp{fTUhW4cG_7HFKTNoXdDaa;zS3*DT#Pwrex<}X&K zu#bI4Uu$-}lszZ$*!d?ZnPwdk6d)g;M6)!WLq=SNE1nAl#f!z9En|X zWKEwa>f3xReXMnyz87E;+xfjA$kXL6XUFL$BKF4!=02Eu`kO2>JA#YCd~hV-qKALN zC-lUr{g<|v6ONjrvwa)ukxh{G}q5IBH7N5d8R+DpPvjVJ6K^X zkKdmP;R}!P?p2ozzAMk5di+eICSxIv>KXj-8t(I})*jW$vsQwRH1=+)?zIl# z6`*qLP!;UodMoYeKIZC7XCtNeT{F^#KPk1GJi<9?P=47RJK-E8)lPa2>nUnJ3xAfb+ zkDjHCD?d-@R(`q~wJm)|$KT@N<)3tfoTQVpClxb#3TsFL)|Va5MMhs&1h*=?dDqW0 zp!6E%G^rK;reCT&D8J9uosl2%7Y|%m@&uk!=Yd{}s zeIfVx%K^KBPTub>@Hr~Ojya~m*)+WYA334xLb3xc4WE3%_zJGfMOwi)^Bn{H z6UZ$JQ7S9aRC=G@1qE;cDLENiGA&4UNXb;`a8uJx1<+)2)}*_aZAb3 zHsT|$`CjZO?Eg-=#A0z~FD&&1^ve!2O5mq;uxDa?)kf#eQn7XM@{*nEH|Cj?b^@;M z5UvC1Dg?bUszpo3BNuLdzM|DMid-C0>N^xoYy?wJ;}Na+2-Oi6kcu{L6*( zak#WXt(O+rwSuSiS+%H~B^Z0uoVqi6&L`Fx=azVArMnt$w@_fak?|?=T$dFchD+>S zva1C(KXhH%i^FJ{OkX{BTq}UyuTJq8v5xw6FZ0gHR6hNv5Su)~M?e(DoiCEH z^us=*R#w~g|H7T)ue%d#>qjG}#E&Gqep-GhCHcypYZh|SBTA}7oePTkpx!z^GD)+<^jWF=6T7wmFC=RKf1;1y#uyDD?0w^3d31 z1pFPNLR=Rhy^>M%(o+EB$@CoWLV;1qH%jw4{@;$ZDi~W1*5Jck$N_LQ5@D>sa=p3C z{$>e{Ad_d|m6H!wAFj=OgnQ9$jGch4oxC=OlndJ2*9=DXBxML`l9m_^lAOX6OlySp z-PnCkNPhC8r-*!ii`8NIyr>RMs0e! z!w%qAHB`lAtOZ`m{r0MSKFXO%L>q?DTAl6fKY8NsQn^cJ{K;3(<0S0@|vZ0!ko=u&VeF^W()8rVa} zaOSNpv&FikjtGGQ*RqU%iG8yDcZkt0?yI8K)cl5>YJfiv9sE=;l`5x}ez~qgU^u$LOd!SuVN9l_@1J}o zw^ZETXVIB?G`Q&`Os?+8&Z|MBfqFROCnPrWld-f+Ff5t0s0VTgErDcgG`lrFM)~%} z(TPF|>C-r^Mi?ZexFr%?OvePt)XKT!V;9CbvsLbAG4UTlT}wspS_t7!4SURUNfh&Y zK!F%Er#a6a8C2zSq1?AYfqb^%`{QrbqieTf)%U3!u^3AzeX^-hSeH&_>O;f74nI`f zA65||{j8EBY1hub2|^WsFvYvjqTk$WPyGFQp`7N@pZ;vD$zTyKI8U2O8P+Lt$SBZ2rrLT7N&FTk~w~VC*!cw-UXnRc27)cn>Px2ZthFv{<+$as zcUi|Hp@I>lJcSgqH$A6kCXhGNQcuTwo*okJxeY()yMZcUpgHSlqx4rUi-eei8Vmg zC>frAua~&g5oW}&!VIR)Ovv4gj8FLHc3IJq#gGXr6e({#i`4X!lycFG2%|Srj$19J z@Tbd_`EAzlfuaqz-R@n=8kiXY}JNIB;l{rEeU0^-pk7eo;!a`wT_ z(csmaRF~1xsXe3wwFGVrijdS0t>+jaNkB3et-a&lyKpY%zpO>ozxSYAx;+#XyLUSP_&7 z4ib*{?K0u=PNTPrT6Z}JFf5&K#Dh>Q5pU0b&C#!pC>x2F;lVIv(gcx^M#MbUjA z{7x=FF0I(An_)odUJ8lbkDqjE-9??)`omGSscBL{ zU4gtq{paST24`+=-a3J@Su!}ejU^+=JZ@H3-Nop))!g?!8aB~&dL}7FsDVuoRD(N2 zF;(%K+sjyv1tr(8EnhzUS(s*L01<|y^F*#8okXkPuc`+CpIbe?R+Kj2>;WhZoNA^b zk;G`-yT^b(OO*!`gv6Qo)31#?FZ-J0Q;af>qCyL7#jMop6dPBWVOOY z-wPko(vjwlfnQeZ4o<^<8=1E$M4%8PdS^b$jC81LZiqaICTLjH&<$y(sAOzhA#4oO zA+pR1u>Mtz3f2uE6@i7j`x|E+QMRd5hD~XXY&^p&5+%}kuH?;3gV;pw^JQN26a`R( zuC|Mb6}sPLmRA{Wi?E!~DU7y9j=Tw%w-6#~{enyEvz*-xVh;#OGs@u zm@YUm5}+*$o0`KSPQse+7~5Q_aX}g2^*)|zQCo~|P1=ZtL5RUSyNZkGXJ5%th$-L9 zl1XVKCN3Z8;E7Z4xK5rP9khABWugC|OMT#ix2%U#Y|5gfw8<()5$@2_L#cz6P*xrK zmycbKJ7v z8*YM|OpYH&Sl^9EKdKTWS*+tpit(2Qu1c)g?CJCHQ(wZ5J)|I^li*;$u|d{bJ>=GGtEi2 zW)7)LeJLy~+}2de1(9G7}d$;MI^;;RPNU1VGjTvd56rB;ZjR;z99XlTvNK>hF)Az zq@pC$l`vC|-{ooEX&we<{28*c@C3t6k&i#OEX5Ke(wC}qKI^@CZ`7?vuTE#P6gLf@ z-&bF?e{=T2Tv-!c!49g$Gdg>sTva;roPmIrKbSlHwbrPpl5llBxiW3R(h!F$RnW zmBMVY4Ci2B)Sf0@4{SfXP#E|e>P96mhY2KNqq@(7=(|Wg=}l@cZrVX z9t|M|KKb*^M))fSot4L4jr=ng%ZJ}n1Pky;9oaicxK`H{NKdw_Qj+rgFgL;>G;!N) zS*rz=8HJ+;xY1$Q1l}@LA2ZTlj~;TXkTQunBpo>EM8G zx4IKr$tt_FWY7{`jnXX0Gn98qQ&phsB*nOhdl5M^{VB@pjku;0f6sa4O+iTZ)lHph zfP~%f^dc?f*5_{9A8}18uSSbH?EREcB8?LFs9Qr*^j6Jh-A^mI$}*$B*np;dR`SYq zlc?>3L)d}Bz(HONV;!nz%ueU0TXv8SN(J{APJxxG?Kl6ZBe+fbYfG1xyX9|2MvahK zjb-byHN-_Fm64y)WXlXCSS)*(v-d~#*Fdzz*L=9gffR9REDnxg9ZoJPI8p;y z#q3ZYIUW{_Mcf<0rn}Mu-HT@=O)DMjFZn}u(v_et;oF&DcDfn-o|t+D43MF$`C_m} zo&bSm4dD^@P~1#$1ag^!HzgBfqnjSGaa*y@7V4DR(g5PtY$E*DbhL`&^6CWC(e$GE zbBDb?VThs7Hh~~H8_h;Hiz1EVSGksFc6MVOtjBZ;HtnU02JdTNC6=75Ez2l`SrLO?u$*Q{VL?(#W{|J` z;CZB9tb}4i2i9q~<~vv&lBqeDHMC z83djZ9-#TY;jkldvp!enwD65r@4tneA1rj;ivPZyxi|EQ=Sp0s^%or*>>6(?)S^=s zwpPT`&Go)#{6xBSm$NRkYH$Czna|27^*4SIuaV{f`{(Zttwmv}jCMg{^kPi-vvM8J zD}!B9@k|hZazs)sc+T<*OQt|)Q2_2t4*YI|HN>u-X5vW5?Wc0{Q`NsiUhVhD zTK%*pPHI{^ic9BPQ^BIw-XR&NQj&sEi8Q-`8rSbc{Y2)JToZ|#`9}*g*y-izy>T5` z7?(@GJ_0ZkNhk$oUDAnJxaCXu501zD_ZsgR&V=pt&0Ave78RgfL`=j^+Mq8X1wQm> zL9_tzTj6lF1&aFHxYd#z4MT$p&D-$4VoBEB&ut*v? zVLgdJE2jcDPdU$%*KR*RszK@1k_^I@!NZ^-Lt8!}Hv0RuD|WN5yo>6-|0p8I~$f%BuU$C2?|RSzDiSB^LD%PL)0Z z#`V;gF?29GgR=J9tnloGJ0fK=s=^sqAcen(r!ykP=%WOm+h{!3Hn*sZYH4Q1<<&gc zF3dJUd6yRRY=XM)w>d>uW2d~xXT2PAwgGmQ1r(KvN2BR9#h>>r813W)9KohyK|D>? zV%zVJn@~1M%0@Z)qcX)x{eLljTq$h*zkD^4+NdORVv}Qs(UzasIbk)-gh!}hD!`B# zokL@n+(KMz{_FMag;IaDfYYcBPF~yA)KvCUpAtzdg$uBYIh$h0b6tG3{(~2K>6QUt zTb##QH%e~a1{};!=@FddBSlpx*h4qnhS-IJpa2^%qX|+3hQxOwYXt{dN}Bp@of^Um zX`50llZcAKlCrfDEFcbf`LyO)xpx;O?xDgS5ue7}uY6|TjCjBM@y0daXPJ|j37&}1 zUOU@N$C-ORfKGlI*s;|zI~Qo|_#Ovd(9}6ooXXTg%4kNOd;%S?0waM58HD!sbYp9> z_*p%GvK7j?nj2wFh1UwUtgJDL`qZvc^Urcr^Rb|myT?IA5yZi8+e^hi z)>TD36?}ddI9Cim5&rSkJEnuacp;G4C}EjosrU@L#Q=S`J9bzRV0Cgyz@VeqC}Dh` zV_juN1EaRvsDQrdpuT(2_SO&fu0h`*Yqoat^RilmzZC5Ov&M4{*da3uiUChJ9{N81 zIl_+ezwF>cHEuK-81HY{Ej@69^hMGPwzg6cJh2p7%%<;NjF#+Xk)-kX$(0bvjbmq+ z2-dB&*JW6sTja57#l%&>TV~>5+xV&?vb?Z}*+*BZK>N*k8YB<8hRE zYTm>FW#`bt-fG!>-KVdW)4KVU2&r97#TVGLc&w}{A?y(&gG*cZd|pMr>eO-WgOKf8 z76)R3B17^=XM(-;twiZq2C2cRVC1_;?o7#$IpmB;7wEaf>%6rQLK^Hv`?{CUjmh$ zo(JP!v}1OtcePYXg0=;-T?g3wN_%xNn{m@MDB07c1FGJd5G!wltz(9` zCgofOxy2WyTr`NydX-@}(!*1}x>PYMIYP?o_^-OpHV_*R6uS?~Pq#S9)tPC{Xo*ay z0#$q#Q52oO6N{Ow7Ic(+i6CgmZUC3pK@(6#ySHIU03-oZJV|qI=u&$%k9#a_RnxS$ z4)HE2siYf0iciFKk1G)UzXX@0-Q#P{;q0-tJEFr_nMY}$@4)4N`53M>84Z#mu$Dtl zua2Diktwar%GdPnb$F0~(>VW*%?ey-@LC69aO=NE`sg$EKCAfptSYYFzUm1g&?lw@ z)(ayG+Y&q)pZ#y+e6VJEsWd^&1W63EPvt;6=Q}xhI=}u_xy7%R70#bxRZ*2+D#^Ct zQ^f2PT8J;ELr?-q8591&npf`O)!B~}joP8Xujh$1X87#bPgK&h=P@s6*XXXUJz=Td zx0~7=?YBqr*Rc1U{l1`5gB)Ow{KB_~;vf#i&~L)GS>}b%HL+KrwfDGk4{~6oh!;up z75~9)JX~VOI7q;G6A{B&N)@2VMP2ND3cuY^dZuhSI8OI|u1$YiSE_xf&t5q`;@8`s z_G~YCwB1rsc1R6MGjSSvlZsKQpR;nXinvJFo$+%lH`hp5ZHyTB^Rl6Uuc2vcG(^P= zPiYxc$J;N_Eq&dbi$N^Iid-T=DT&-FH@S4X>I31e=~=2(Z+Dj)$-kA2w4h3*g@ukcai;K;*g*lYPrBL{8MxvE``-{3} zH@jEmn6}OtogIN$*X-#Wbd1y6u*qOl3@T$b=BNWKTk=K>J$4@Et_yraf);3GbW* zdrD_1L38^EH0=xd>ouS8<&>DD=hajvOm-)ukfmy<^oQPVqo=ZyNB+se9zBRvmaoQD&rCn^B zHY2y&Bgvv%0WM>mK|QARto98IMzE7^-ww!iLuCxHK9|nPt+|dn8yB*CCBqO>+!uj| ztcp5a4!Voen9yY7O0LFo8$(AT88oP|XRK~#G0)UaieYrEa>HzRj~;YnbbEi$~MvY3w=_Tt(v z$D*R*(|=#hR)F;K-Y;2;M7oCtSZS&NCc+uk##^>KPi zVx#ulABQ<0TX77f1Y<-nFUov5iJnrkl>G5*xxMyoqMBVyf0v;5-Y#H6D_7Mg!7Jw*!sxKn&;Y+ ztze-MM5L0eU&~K4Gia}uwax7s)l?_6*9ps?&%O7PWk9ynFcPh6Or)Zg+$(0jSN|3h z6!R-dnN`#;b?Oe4C@L{#s4iQn!eg!h@tX)qNp%#Fik$c#w7qvAoNd=Hsz!-kf*^Vu zB}()iM(K}It3=xEA&z|?}@9cfv@7v$=?z6vh z{-3$;b**c)`?`MXw?2vjK8Jkm=rZbUAvV{oqiNEoqW!>59Frz0%1V#sd_4Oh87Hfl zi0Z*#SO@wUKkr@82cdgS@t*>=1737r!AFy+jJgBX-nHTMcDJ3PugPS>XpU-yVl!&)u8OPv;xylQ5VkEUm*E!0WW@sNpeY7mcKNOzO^!*889A; z2g-_lvj`00;8^bL%1JD=NPLk`L&5SK^s17|7uz|;C(S@){L_hks|$q4j5pk6lF{janHbnXfr;X})H!@0z2 zoF0@V9<&Q}pD$-ErbkA>AUG948|lf|B3SvO?he=k#n?qNtq%TKRgvTZB6g^R3~wJB z=(oh_LaQOYcCxG!u%ZK5m%MSC+nbA{N+$huEy=_YAO~knIO~?v9@$Om5x=p-cP!Gq z0P5kB33X4^<%MD+U#^qFY}x>j)nTRil87uHu>gc!O#l!xk9yk=G-Q+e&Gh4;cowlJgk7fmM?|5b_XB#;AN#jd7E z*IuN4S!OxwVZ6m(exrXoTuO@a0}7@r5|}zgkoL=lH9xv6LIy zp>KDESl!vj0dKgdDTd5;$vR>PO|Mn4c=`rau^;k$sMgSMBU&|n)B0}Oom45EWIvq>X6t2|1FYknunSJmn$K}a1+t8c&^Z4z_kR9EG~=5%RjXO z%N=uL=`b8xM%68;^+@?Xz|O|eqnwZzZSVv`ShJxIKOWOC;N0&MWAu|2#_`{O4@r9F zIEQMm46CB3T9%|lo&7=o(f7&TcYGT;X24N&6=p#!>5ZPed*cykw?S)pkPP6P`Z?N?xbA4{l(dnA7N6C5n@`HM z9(@KZjIxS=i+mOkfe(<0!2?k)G=GogGG=J?uFYWq-~l93k={M`p%F%7ee;4s=WpGm zNviqnt9FbDr6ES&4`L*7rJ`VI7a;L=ePZM7GW)Hioo9|MKN@c3F5Xy_S!5G;bx%L$z^V6TJiT0Bkvg$?h&p`GV&5QkuR+W z98cZMEzoHNzj_*-mpAN7iINMeJh7y9yUaV|I|?VO#F>v<*|3~M zUEf=wRFas<{UwdnGq;}iRh%(~P!b?3E;~u;8@zDW5dX32FGFg#y>f#C(Xu&*l*H2q z=`ByB_37aEs`7`_-_8r1t{M$ysN>vcv5JM9;AA3CP@#sghU}k5?0Rku?nG%*B9Yuq zXd`z2T<19p?Q}^4VL2hI@|PklOmeS0*DgHH&{i=d<7mqfdZg!xQERK~%kDl(wvvuB z_vK*JQvq|vmI}MfU`A!CDPs6@AR?1MpVjFOd7h#Nsl?}jH zRiBoLi*wLQ(s@Zkr;0G|j~eC8yl4cc#=FW~#IVspHKldMdhDa)iqd*SYBj%|&8o6j zW;~XcsNB9|4`8kLSHnBftZIkPnLtgvJT@VFR`8a-`j4O#z|ZQYSW!GTOhf;^k%{&T z*A8b3aFOE-U!Fv(ObM5PK0VYi#r(?o@76G zY71T&0DeFNphMJNiW|D{g=6#Kv&oB7CnsxM_^Z{7c^M@wQh4fMG@wc~UY(zE|dI$vkD(T9X^BP;S&#e~T}1PT%e?PU~Lgu3^DQwnZHW=f#cA*ngJ) zvo_#zw98FGzdVOb8()CRKCTlIEt{ml@nMV82tz>gz@Bgs{U>s=Sq;e_oH}`5;6GMV zm;6CU{atJ60+BPB_m9b+1;ux!vN}reRHJV>*STyz8ORA@ykHL54$=!*@C1?Ga@5BsU<{C@nE*%Wsq^12XnQOhrHes zI)9MG(~mR*1wxyYc+j2!!@86*fD}k0d88XW3JOFqat?PHCV*CcX67TGot2QUdvw-~w`P2NWMp7wD!HYLJ zLKn#*7Y^Cpg?ecbRj5!c!@}1p+lMKR0f}iGxqs%7Van~ft0xBwmR&W&wNyJv-R6Q` z*^vDw<0nMR3sCY`rAR5va;9r5Fs_lkdVVWone0 zqo~)8XGfED#+XqyBxl7~o2mjIVzGQf49eq{r2(6j`~ zwv>KG)1(2V+Ed0m=Hg5nO8o!Pqo&?D6qTTLD^qXcEhnEKmU--e6L1SHkl8 z@rG&mF&yz-t(L8gPcAKxo8N(t*oLnFiN2^+z2{%GC`=gaY_WgQV?o-^J7O1`nC2nB z#KS)+m%ms0DTOa4(XrdI`vzHETB}W5=RzRYuPO6_J-26v5^-2f(GYcM;P;y+hay}~A-Vl- z?wvI%2er+`Vg1kM2Sy-_Pg!Nm2-}u=87oHApgQz$^TLL zSthw&Zc{x4bUGrPMP^JXZOeMXgcF1}|9x5cQiw{3ropzN)cT2{2Ud)V1+UJPs>?R~O==t;Tbm7DFM2-*6y;{L#LZbxns9mJ{P@4aH3 z_zNzxKVLHF{Y6Hk&xiO2e1`U!JW&_T5|G}pxVN#S!gd|gYoPHstN zBUlb;6>Z}3+OkmIdEX66E_~F9banZ+Ih^|kuxk^P6E5}*@LSrpI`L!~cl z*gnfkObk(W$a6=OWp8**Nl3 z((gi^`_+X)odkbc^Wgprde}D9mzSxI-3JL=m%{r=RR0wbe{9KVN$(uXjLJSVwr9m{ zqAH7q!?2(MfBNg0X3@)Dh*BRs!q^S#pzVmDT8VY?IS;f!$h5(XzG1Pi5*!F%npDC8 z*|Fkf(AEc(OIG5~%slHE0X_Vl4Wq&5GF8rJjtR)jygIdb2&w&;Qb@K~u$em0A%`^b zKLB{XxMzzJ-DG$}rJhwoQGwcoYY>YxC9b=g9Nd(IQ(jSbddqvsqSi^{LtEfM1dY;1 z6Q28K$eJKyxky7~FlcaynuY=*kku|Pb)kUaN6{-T*E zuEP$2ChPA_PuaHf(4i=uv?GIve=@Q1|5QJ<55XA`DkgiY0nZlO6~(g%zA&@#auM@R zqRY~U(l2TjWb$XSr+tmzZ0$Wi1(j-8C#<+*% zBCvjR+IU}+f^F44Y~sd6h|nEnfZQ|RF~FSO5MXU{5ImWqpIrlkJECVE@Eq~cA@_7BE}$uPdu zzaHrR{W2Y^h|-~JqWn?Z?_`iH zs(2cwfN8buq3gNO0&QM%3s>KKeJ%RcW1b}1xoJ7pi_c^)tp*Ifc+aLxKl0Y#(^G+2 ztM5rN{$QO8@ta%HRj_{SYGXf4nge0R$Q0dkyz=$r3ATc4E%)6&3FSlmt>A@mp%3@p!DH(o@A58K9wF8bylPe_E+x)_k6!$0;<5p7 zL0)(?4(sLO6RC|tz{KB09{mO7o?gG~0`}X)#)*y}&L2D?TzSchWt4S6GkM$RMZWjxYgg8|KUiVwd{1J81)05 z<)ES)U(2{FCq1J|I1y!%l{AlN^ymPOfC}?=lnz$@Pv@ibu}ohtlyfCTrG;j*#q+dc zDq?7ia+WB0^g5ZCndF3j2)o7u5*#I-53EXe-Se@Z7e1=LYQ!s1s%FzvHY`iRE9U~L zsIw}q#-!z;~~`t1|`WQ<}Go77pi=Se#A)p4s#>_6uji|=>d&Z&ht^IT6#n3A0s_z5Ss2>Psse!A#v8Q+27dGH`i+NU&%ToN=G3$8O@ zR;Xfl&%VJ0q|U;gTuc9u%AsQ!VfpS|f|#~cyv*`T=rWT(7Q`@%ilzh-M)uP?e|1BA z?t2m^y)Y40Au<~G_leP)H;rMCJ}V;SXnp1ExM~e5A`mDh5uy~`Nx+aiA!GX!6I@7I zTcSot&p5K0$vwRH12#6E$eymb_&>nyyHA~JhJ6fFiuG*XXnBmRe4u+A1f+&<2^g7q0x^1vNQ z9MB@vMvDKY7kYoC35M(~&;SoR*1pHkBFbRX{4Xr+fgYfvCb*k#v7vk@Hc3yJ(Rk+@ z9||<}^6Jdg;j(8Ly~-K|DZ!EE1g=i80G2Uqm`(RYp4H3c&gO6n7h+vqDYjO7HX?S= z9L+Z5wOx=%&n>25B1pbwZXtfH_3P5y*f85b zBiK13jVYuYba4&EE0x?s@cdnI0NH3_KG4WZils)&>D+bJRR5eTt<{mD;-KpB0XyKr z;=rbfvO`#f*y7yUg%hqx%#zM6cuRVje7rVU)udc@g7H+v8XS1r^aSgr9*0}sTm(3+ zGZ{0vr4tF#6ug%kEx#{2!aSD!=}Z>9n>GnSAblDxY?Uf1L)P3BAX6SKZLhpn$m;Gy z{Gfl^yFKr=owiB~PpQ>1+zyfq^t`HzgB2p@IRK&&r7o<~Btkpo`FSDT3~*N(&&9#T zDHVgLuw#$%!BHVKRRs>2Ngc-gDVH(V zf|5{SM}=3grv(LE)IMA9(#@)tj?1BVWWZ@pVU&Rv%czlrm3;AcS#+NC-|gj+0>iA4 z^FEG>tx1~3c(G4Y(ikN{&?a?1ciBkGQoT1v1zN)T9YEB9i$oO0R#xZGRBA}XX$`l- zx|!8pv$Pa^5to9&4%rWhV4V(4${HONFltTLuYgMrua6~|u!%H4%5lZKFdR@EHDw}4 zCVNv6&cd|^?bbt4bN?mqpudnD6DXNtxt)gyENUEbGL*lRvwr5OFw@cD}CW2FnM+{N3yiVvu?nJ@>5<4oe0Wh#}fCp|cdo!=L76XLH&Y>1_{bG6E> z1fzCYnfvY2J(|Vz0T*Rm42CgUIKY_j=){`(tB}(pu2%@%vNHR!Hx$NMgjUK!Gtz!sG~~-W1t- ztK+)`5EYC^7`lZsYM&BA+{_BGa~5Hx{Qqu0>uO;G4M}TK+cHcp)I@KTE8D(i&keR# z7gx;dk8Y<|b7s#Lm#S%?WG9?+Y5-dD3=w}}wYp;f>Z$sIjz8>>q}SMfnpUk1{(~sZ zYS(~Y5V?yVkp%RI+_o)WEp^sQNg1k0+P)DcuA>oa(+!3{&P$rV`386?Kvd<98NCZ@ zr4#cPDyq}7=C!`p&ek$6TzOdRv@jIu-v~@O_%JwmfiDoWJy_~fW(;_n2Ertdr?g*4 z6XylDIRAz9rLA7i`K`>eJUXIBe|RJGt(4zti}rs1{F-mX?~b#Uo;kl?Z@6sUFl&=W z@hCa%817v_CQcOhxx`@Q^_a`n^6VD_S3U>tp;@S=i>@9=**5cDOHK_xeTeAYUsx{f zGm)g+TG2vBVS;Mbrn_sl&3UQZ%CYX%+8yScjj13Vc!2D83RffP2L!zy2^v(5wyp`) zF2u);MI@Et?(J&=!1fg%Kd`#!#v<9(-J0H-6K?4`JnM^F%k(+PESX!@uHUwsep-d$m3(K|>JACDk_oLyt zz%kK!TTFWt5yKG&E1cL7I~JUu>_Z#%wJWMC8`CxWvfczDZSWV?79K6^&si%c`s~I) zT&49$Dl(aoPpp($$U&!yVo`DE zGww20m)qA@9e$pzMup|4(jsg#7S@4Gx z6E;4>9#05RN5%SPd&<(@Ir;e^Cq8E_--xngQCx`D6Ox55ET^$g576Zg4LsQ(;}6Vq zb%}TjtJ#q891eu?o1d23!l##iziVBw9m(ec8jPA7j_NP%qP&WmLsrt;dv1){+}B^M zGz#$0s(3ifpcaQB!$0~XXT>$?5Sp5g9_<@Jn}OdbQtZJ?|%Q8(VY{p`YI@3 zYEfVe8o_5}yI}>{B89dz+T>fZEzpX=bPx)H9FCgM`L3h~A zRxPvq9|80X|D^qtw2F%FdJy_$+*J{nNc;Thc*RCZ0^h-3SON&TLW7?SpUK}|m)7q8 zy?kblYdbHyehqjVs_uo$xu*nPuIyWeKR5gks)G1n(Xn`0m9`KB;q^{-T3S^DjoCWeT3|C^c^_xDk=*?dT96l=N`}EnwLMzfqcF60Nlx7@O z>@!i|O&J@2)Nl0HLw(o>E)JR#yu!Kd<=!{-S|y!igSkj- zthTqIWCU11)!?Lch{0ESg{!l#k8L5>N!S{IQ6JsZ{cle)31Y=-?}Z)i2cT8@E-JI({9rLVt47KG~6`2sUJ#$1VXu&~@8I`h!*rN!5#|ag`Lr5gfwmV)Ur5$dhA$ zMJSs2F>aU7YG6%k$;3MibzaRRqOm#>rb}Z{j&I`m{sMaCA5G0d_ka%`TOC;^T9Re$ zORx1%ZZm3}EVoKLJnMC4R!o-Nr=LQo9Rdum@}i4_abUr@g81&~Ds@sSxXi#H%AQ+}Y3rYkT~Dt*<(&VXj<0Tq3_IcqRPo|v=@>$`lrx&+ zp8T}_@i-q@apzkN=dKyAHFFT;NaPhqYZ9jN5vjTclvHqMbm!!G4m`YDx|9KLz>L^9%r`Xo8n^Y*; zBeBzC!q$)8mfgZVtG+TI^Mgflw2s;b#MRy5jDV$uOj8szo}Z61hMQA`;g1J@dX0Xvf^DQ~ID8cf zB~Y?A=(7gyk{Z+AQghR$c9}XDlvoLPs4@^6hoWyu?~tp6S76P%71)Pq{DJ&w);E1z>mYgG;5>5Uo39U z4CX3OUgnMepksOuz4QsoK{n*1W%E~Bkq^1H)VEnoI3LWQWO=#Qn;)iAR{g}ef8TQX zU6`^#T*9@pmDxB2UL|P?L<>vjUnE79|Ckf!|3ymt7>*hVXjidpcl;njB0?$HHflW6 zt+7}?s8soWaXBpF!Z}+=u)tJFLm8F@1yWP7liaq`4$X=SJ~e5!F(LLQZ~o%O#Rr1a zInml169*`i#I#e9-GIRrh&V}KzMQj1=vM+H-j#8GVG$yjHo6sUCf7cOV~9x#Z?gjq zVEdv@@KSc^6S;tfnlPP8yozhOJp<1#pJ^~x$Jyo&r}(Z&zP%Z|(=#L0wl#?8oSmdL zax|)I&dxy6Jl@uP*Y1ReorOO7I2Btxa|}GFWRl4n&%0`7=Q!$_O*&P8mIYVh7Wlfj zpAvzo7!S&WorIOB;1Z%hVeJ0{7dDMVk@QuzWeIBcBs>>pZ~!WCmWGtQp`uC6V!ezd zc&$-XnUHCeJKAyGs!lDFm?rexZ}jMPWl#M2LXb`=5p74P?2l()w5r4zXv9(Qrj6d-SOR@x0UTrtw3eZZVa7t z{K}G8#vk6OE3E#7H9MDeRrp0FN5t@<@(}Jeuf9`Jf{xsfOS;0geYZuakVT7W!2|ll z>=g%o=e4pQ##_Y(Uw^nOD2BlP7n`c7JB#SG8i}{$Ln@2`o3hFQ${*lH8K!)T*9pX{ z>au8Qnfz&rwegBq;})%9O(Lj5>Ra|Nz7ap}-pB_0xg0c+3H@cZQegrgDfCH9-0wME z?y5djfK$Eu{whzq?>ULV%)Qy`r*f5>VhJpC7cbPoh}ILqkcb(Lh#4^eCLsL-{7+v+1)2=ytE*zT|&Xb zHzK5C6ixZgUZPN-V>zQ!bFDBYeWraBLcG|#&fXORa(D4=pRWp)Y29AYVEC1&=DLFR8Qqw(#l>2ec3x_lQjfI zgNX^OSrquIDxSR9f7wI~Qr3bJ#%QIcoS`r^#jM+tFOdnW)z04SkG8zk^^Ni=;D(@S z1AMGu;>FXp-|7FtbqzEAW72qed22m(9qOz+yE1GqhMjFlg9GBJQTJw3Us5Iy5)P=N zd#Kg>Y_P$#IWH6YfLsJQYWyacDlO|DqRK^uh4Tc#SscMvYGt1` zCjwvnec4Sj28%g+^6cHa%*BF70QPE<=J+-Yk#Il>CcOdsvCbPAp16G0dTCy*ZqHc) z0<1z*^4PJ&dQe-Pf%)0#^`bMEqu%6g%NA^WAZX76UgH(&mc zRJYSHYGHHcZ$F@Uu!397*kL&)zEje{N)uzNtR#}#XKpcbY*C?}C$B2voH#Y;Y44;o%Nxw(Ygu2y}>u!eG$Q73DXs0x--aO$AXiMSw(xkKei))tF9qD@&J#uY@O zTbDeoYmLc|);CAAdvbWYD4^U>7j00kIuwLuZmy@cR7s$zqf=tY95WSExR+sSTg znyk1yPD;EyMuz>=n)l|ZvCHH?S73rd5?iZaK4MUdGIes2Imo)00o&q<#QIvjo{jD7 zjw&S=^sa8ef^_gTr#!*|lNQHTOE%NmS){PO7#H}o$IJrbcezx(ixSxJ$R`yr43C() zjKuk{&0dfz;Ep|N#oC`E@L`@~PnIMe4n#{`{ec+Wk!DEvnBNFBPZdf~gyE|GN6Nvy zpL|ChXFx!dSmB|=l7dHUeN=|1x*m+&HaAJ(tlee*L*v23_rvB+^K~hjl85f}Z7p}| zfuc0Hf}wqLlR<58tBIw1d2Mml2Fo?p5;CS!&#Q&H#7EYkHz z#-WuJmDl?C#TYgtb&+nxqeYXo-wx0Fq<+_jI9=pV8R{(aD~s>o-OB&Le#^68?QDzy z4FnCg>JW^I6|DRL(xW6WM1RI!(o>%61$r|>eJma>dx}VA7HS=N_k{7Qnw-js`o)x$ z_X$W$i!;sry_#e_2Wyl*O&A*M&_Yk_tp0NqQ8b!%e5iMk>osG4C%m&0rtF< zH|CMBii{8T^;|uVqE~UccpADlsOTV7F;ENSnLgXgb5})jC+EszlM?Sdk+*NYx;blc zp)7*2d-s&|KyQm-KZb{vUn{rd59`Y~h&o}uWMw+Rz0*RX9@EqT+H)Z<&4cyc*|abT zs0y%cVh)?8aeNA5@v3$>M2efCP{92Rg{DpjwnAeHc!{&yceoG%D z8N630XSeb!Kz)X7)d41oSsR%Y>{IqfLwk^3lu3JCHYVi1LKzVAg;I2EeEWOVFoJCxfa)7>b2z zkUk?pXAS34!)TO8b=!#WP|jy3N3oRs)54ZNRTC@N>q(|#%Yn5cU;Sy93V;GnOBEZb z(?!J4vO3i5;vWj+!^1P!-l?=A%$~-Vml~ktY86Dx0oO~!gJ3L2_Rt%{@vA`N@TN24 zFM$ZjWo-fM<~C2{$L5SFh~V9lr{?Khpf>{5tD29Wa$*ocys(`GY|eLt^3m9KQnd zT#=jHT=S?1KO~br%}7pdvcWx|K;GxeWo>$C{@U_nHq-uvvp^S97zdN3btREPAiT)a z1rDVlu(L#zbKzamj$-)qFbr5QDf3l{=b?M5pLkzv56wYiFdP`*n)ci$c4MfkUB#e= zs_AUMmKuAJL%;2wEhB}m2%~&IB&~C7HMqo{ODM!=sM0r31Zb-2osK(|eDwAiqo>#` z6B4+`jp<7XoOn9!C;VqTjhnmk@V$v^V{C~?8CgRw0L`3J=$$+K)_o6;jmXS@knc5- z+le}!lcLFX-&60cr}uofLNgWRSj5TjA*d=JHh@c+h!yF6((X{t{}&d)KFctUIz`?l zE+>@L6YFGS8REzNEP8IC{N?-Rvq>=qO81`rI5vKvj&eb4!GZ&NiofR0nTzp!ZT z>6~ZuqwrsV?M66gqF_`dco18O%f)%vUs$nc={wk*gjzqbp&AsDQGq9D!+rI`Xg8ys zgPS+S&z*yY&kwgr;Wic@QUYX87jGAIUCq5a9u@fc6LB!b4WpmjFn?67jwJ6s@V|B$ z;I>AF-T|=Mr-Vsoff?UpKf*`0Oeg{w+dNT{c0Eo~4e+Go>IXcnYIXDc6`>jyC1&oI zu7#E93@dP>QCrChe-}Q@x1RVKj6i_fLZK?+=F(%uVg>dfi>lln!dVX3%vlB`WGH7Y|K8t}yf# zk|-?PCQhpc&Nh{%QSJt#M7|z3NY@|KbxwPqTlKEi>~}PoMFQDy77Y2ovnLy6+YyA%~{x8LoVG zs(xCeRcPKi1I}DZJ;41=a8byY=L-{k+bB^68AeV2GLl+Hp;tT5hXSs=2Vk)IM04G zLYFyrzeJ5hhN4c#Jx#xNzA>PFa^YnCC9oDr6d3qTGu6{}1K{eD;$z{}98+I>E(}ti z+CSUsT+T^E3s}9Vc?6RwFTs~4Vt{ZVPjOUpL031 zAj|mB5YY{@>Z1AHdH6MX-d0miBQkv^aM*lUO>*0lJw~zKE3IdEE+I2%xWZ>yG{)-^ zuKEh}VR!E9k+F3QU;U1VyjR^ic&%jXM+FlPD$QY2( z7L=yJvo(y37wMeQwmMt$+}Q>Yn^A~iAWmPe5c|11qPN-3sH!u`v6A0PaH$}Rr|^MV`vNkg;v+d+l5aFjt*jP4#b_VZC6v6!&U?N2pH zv+l6KotQpqruVB_Zb2gJQW?TnQdv_M!fr|Jg+R> z#~4gQdFLAEzo%OF3=V!Fmi;x0`c2Q4=(SP0P(!+T#75tKtMA-e&3QS03HWVcJ$=0+ zXA3gt>P|8&zAnx;LgE)M$Mpi?(Riw0OcYTplE=%rh zrVWoJP87e6d+fVtKHR&|z@)Gs4yI61Ve*3guIa<$-z&!LcF(e34y*F8CG%{Jk`!I4 z&SkN+HkSj3)xz5qzTPZ|TgBA=SAnW82MV!}8&4`SOq19#nO;9-PCoy=(I&_>yK-&_EC2QFJd2-6MTD4CTGfdT@*c zy4U+e+)(V>5x=YKhgr8S9YgVPnw zYTaG>U%FIY1^t(|Yfjv$7PMAf+w~zvDb(rbcl)^<9xKylM$Z+VG`F>MGpml3zgG8R zK~jz=0poTu4;ASufa210-BOx?zCPf+9|?=r-i^V5iS6)h#{ux|@nm?5QEE9dTX?av zP@i3NY~AS^QyKYZG&o1|&W3CmxR`$5>PfzK_~`u^M@JXF7l3jh8LM?W(A1I*zj#tA zy2E#cE}yOPNeSj9k^*mr-g~rU8k@HPdi{sY&ui&C+&IvBlYIvYN*|WA?Cwl>pHh6 zfm_8F>5Bojwh6uY`P_AmdXD%rt;0{s>{lcKLt6z`wMa&m`=W+qBNgZO^cZyDX# zFrM_lM{9o+w^nWzikVqh%@0YMN7<~tvXJPkEBNoETTEWaIMJgV6wc(v!z*_!Q+;a7 zUuyNLtn`tgm&56JQrd)|>;5T?*zt$~y^Up6-H$Eva)DOf1%m1eRv!gZXjZJ5KeAR5 zfAq!kWV}JYGe38^`^y^#r>kdEDsI?}E1OK_6fiH!>PZNIi zB4JK^r&~R+-q!iz${&mNL+{2r`H*;m09kObd*V6j_Uz??mE)|$O`7KyBsU4P3?ggC zIId9t56`Merc&&QB|ayr8Qjgy5nXcqeunAE)-H) ze<<^#F=Q+vyUA406X`8r!IUm8q~z`)u~jBh$2C}76;7-%N*i4?={o9sP2*x>($1z- z-Cw3Wi;Yc4r4IvM;K(cMOar#tsiqmV+$0x63wI)uo51zWAr&;W$#31i?+ePe^$>Bv z$|O@F6VvWD!sc*G*ZpR3L*F%>aBM!*7%Q?4*hd)l`l)YRbDYq=3Z1t&Z;kon8o`ld zySNiv?St#;-A>CkXCowt|NOf?ShtSk-q+;(j#!+(b_G&wxT(*EVMmN3;sX_5M?Wdy zIiRKfCs`)9!yOf3nk?!cmp7V_jwHiK%M{|Hu2z=c+7J&&mffkHNKI<1xnkzlc^ur- z+Qobhs>`ChattB{P*riv+{q$|N7u09xE`)*rQY0?)?3V8d-FQ!GLA~NRA@t%gI?|! ztm0!}cq|M&Sp`dzs$!PAm~y2CDgL43$lpPjI`%n;wssy{&_dgC0^ z1NKrpYs&lN?!&!H!s#g%s%@#{U_*t)b~sU#JLDBwkT(Z6wZw&)v<78x&k_5wn}w9X zLx{O=j8@J#%i%jKURG5Z^Cc7iqIwlmS6rDSbqY1(!C0L{rTtkncB}3^+Z725YRrckIL`jWZ)abi`ue%~{<>UV6^p;!6WgAkbGxbc{1KaVYwOEN)?o+Ct8`-9NOQ z-fKPa7nbI=aYKX4BgoHbPqSXS%AhXJQ$bu#9&6z6KsyTuYk=ycb61X$@rZTSpR(RU z^&t|d7D@B4CkG`8`GZhq7T@6`J?i$;jgk0oqfFf;LF&h|ZpsleE?TrJYYtmmtIF9v zOCVz5-X$&&m`M8flm*!FOsgln+yYj<0QwwNip9oGLmX2sf zfepS7nXY~m+7=V-?(^pf&5>MnW9|v!Kve(GY?)D?qHJG~B9JES(rN^s4VCx}i@SXA)7z*N9( z>M2ip_rc2kdKYTzWGVqyF*fc(l!XQ*b%r_{a(P4J_iJoUPR%p8;ZK1>DaCe(jaDay zRy%`HrXeiNjaWbUEu2woHWU7*e-FyJ*PoZW~KSw&?h~3XqofXOB=`3P0_?cxC zouYGujP!SQ{0po6j^D&Y{Gob~vt-@++nJu1R6*I%Q0gYu9UF`E42Ued+Osvynp*oN zP}sE96sKK+2KNIqd&!K%ZQB3>?D=AT!JjC}J@Vz!*6L?hU!0x`{o3@`OWAmd?5z$B zdR2m2TUEnWx$Egr^z?TKF*=>^OG${sw~0&QOFZ&rNW#pxL!Y{v6TJKGCyEw3yWglh zF}e&5>wHD#cYB2x8LiZ>o+XDjFq2EY!g_kv%WWRu%YEVP$)R54$xw zER{>?XO7dy(>_aS2%&usgq+GY!=-qn`y2clV^^IF+!x&iC5cB!OIoWfQXFLCh6Z`& zSiQvoCo%aPKHx7JtmNT0H=!ouN8kO&8>?FC5XwxRT6{SQuYPej8BJwOM1yohd}AF$ zpuR;?42|$c<$0RSsu-DGk17vpVKQuat@nRqLp72QA0{ZmR_Kcs67LVUFef0W#~c^7 z$6QZqzPqE5f_{jEnAuIM@MI|A&>7iHqs6V>=ekG|($SD`}G6*}OR$nPdgcSkcozlr1&;!+ZVZJh`2pTI4mPr{E+DlO`pu#2T|e zW~+8XNupc=tilSt+k)P*L4W-JX@tJN`NKLk$Xmq+f5&i)tEdP!f4F_Yt-gvi8S?3O z!}@!lnXcV;gra4%FhW_Jr6f5|qh$^4uGt`wd)Kr^lmGG@js~bzK@0G!mpIA0vKg-~ z!E;n{VwFJDOcG|2wGcj8mihp>9dmF!PLduipRzJe(&~aN>Ko9H%>w(AvCP!Ac$>0q zV10-y-y})s@5bj(`RSdVSgUM!hW0+>tAz|Z40>fEPggb$l*UF;kIjYw^ctssDx8_W zGk9Bap2`JWUYo!@+;$i1^H4whi%`xGxKqfGc91{oP@m^yFG)|GO*uTKB(8`h-!Wso z`G5ZDIWBmqK}O~v!uCL1l2P432W4safF_5Tw9>U?0=XFjRJx70h$*GP$H4{~9`nD$ zR1lai2EYNDE69a47cUSyB`?{zefp&)KwZ~NHP8;v3AZt1|Gj|?*zb}tYvchZebQF1 z>^kLaUK<@N*Q*3(zK0s7?n)G;Nu#VIQFfU))mN*$LUH`oQh*_|TgS#7Zk~{{aPh4D z2l6*2B{{H^XDtvz;mqwb(+Q4Vd(o{9jjbT`$$34B-*)4OmV=B=8JDZoz7p?bEwy9H zbkaqkm%{Ijx0_{0jnKMGtY@U__84?xK*M!DGaIBWd5HiPgi0K@>0``XGeW3Ixdt(8@_OzJV5N}TG^C^BZ66ZaAs-*~Lrk#U8B|X% zvOP58wvOXr$BykG?K6M#Po`|gCL+5aSofC%dV$$Jou@`Md#~{t|7KU}Y>kJqgqu&`F=LdzN+q8B6}g zleFF5H{DKO|2DGDFh%MmAxZWe6i(e2Ah9iPCtY>@rgjGRbza64!uQ4~(z@o&piT1f`_3s#lL(_&-B$;y1veL%Dx-I@i9vi1ozNS%Op z)3!*hrL|m5h*GCuB>Q;?Opn+o(E48+t?vIc+Uc2RZ!W--?{mU7l8Epeloy79qqi#3t@G&tFHB%#x}Gx zO04MoIIBKcWkWr_p8Q((eG?>TAWbaY4NiiYU^mOg_Cm=c^l~NrOna;TxJ%D?O%~Tc ztruAIDD?Qn@_-d+DHtKqT4ICb^kdd><_tcL*7r_cQ;&<+HhJgE*Ah128}QNofdNf( zPjzqEFZ^vsQHgEoOBBEJI=|_%i}o9Bo!JLA$@x)aX*uH@DOVvP!t)Q4%f7S}_THL3P-hL}T z#YHqaFOzR8=1;g9q3Eh?G6RgMN;NF_#QvB8pI9`WaT< zvfD|K9)DqB&VPyyKqjSfF(XiV-#F&-iAs-1hSPj)j@}@KAjB)ur-{tvq2Mo(47by; zc*hU_ug8M~1YSW4u3XD@B^lilYqRcFWpFraK#_%)ZNuM;Ld1V&n^i4%&5#2 zR<=qORDkW#`n#8LZ9!?Yd%v3P>!E1E1}|Fp2~4Mq=3sDT+S6bkA3q&XqL1NrcWOeC2EH zMt+E6Qzr%xebPe-lM$WJ+B{0Z+!0y=@1bOzL`)D{ZoA;su!_!{$9p9eK`tW_IYhbs z{MbmoAOU5nvUu9KsQ<>^TSmpzwcCP)TW}8!g%yDy!Cis}DO>}=oq_| zMDQZ$)~m(-x2nae)hV+Ym`0&|>5OEED3Xz*k{v^ds#k=)OZ%TT{kJU(@^!{Cqqzkv ziG0GNj%zcAipSOR^L@!j#I~8=ThZ-RWsom&_Fnm=kYjBYo^J8M*-y+UuGk_=OfPWG z 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"wkEGH{ZBXr`;7)-BY?g?`wCg-7l0Ibs0ACvz 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⪼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 Date: Thu, 15 Apr 2021 01:41:34 +0900 Subject: [PATCH 0171/1870] Fix typo in self-types.md MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Add 'な' --- _ja/tour/self-types.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/_ja/tour/self-types.md b/_ja/tour/self-types.md index 103fa0d2c2..cb585dc09e 100644 --- a/_ja/tour/self-types.md +++ b/_ja/tour/self-types.md @@ -38,4 +38,4 @@ class VerifiedTweeter(val username_ : String) extends Tweeter with User { // Tw val realBeyoncé = new VerifiedTweeter("Beyoncé") realBeyoncé.tweet("Just spilled my glass of lemonade") // "real Beyoncé: Just spilled my glass of lemonade"と出力します。 ``` -`trait Tweeter`の中で`this: User =>`と記述したので、今は変数`username`は`tweet`メソッドのスコープ内にあります。これはさらに、`VerifiedTweeter`が`Tweeter`を継承する際、(`with User`を使って)`User`もミックスインしなければならいことを意味します。 +`trait Tweeter`の中で`this: User =>`と記述したので、今は変数`username`は`tweet`メソッドのスコープ内にあります。これはさらに、`VerifiedTweeter`が`Tweeter`を継承する際、(`with User`を使って)`User`もミックスインしなければならないことを意味します。 From 4be0ba6764da3da8c82f67c207b37cae0341db75 Mon Sep 17 00:00:00 2001 From: Seth Tisue Date: Sun, 18 Apr 2021 17:00:32 -0700 Subject: [PATCH 0172/1870] so long, Bintray --- _overviews/contributors/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/_overviews/contributors/index.md b/_overviews/contributors/index.md index 36d227e374..0d31996273 100644 --- a/_overviews/contributors/index.md +++ b/_overviews/contributors/index.md @@ -106,7 +106,7 @@ For reference, here is our complete ## Publish a Release Most build tools resolve third-party dependencies by looking them up on public repositories such as -[Maven Central](https://search.maven.org/) or [Bintray](https://bintray.com/). These repositories host +[Maven Central](https://search.maven.org/). These repositories host the library binaries as well as additional information such as the library authors, the open source license, and the dependencies of the library itself. Each release of a library is identified by a `groupId`, an `artifactId`, and a `version` number. For instance, consider the following dependency From ccf3bfec2e2447990bd93e8bcac91da13639e5e3 Mon Sep 17 00:00:00 2001 From: Seth Tisue Date: Sun, 18 Apr 2021 17:17:17 -0700 Subject: [PATCH 0173/1870] fix some 404 links --- _sips/sips/2011-10-12-implicit-classes.md | 2 +- _sips/sips/2012-01-21-futures-promises.md | 2 +- learn.md | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/_sips/sips/2011-10-12-implicit-classes.md b/_sips/sips/2011-10-12-implicit-classes.md index 6868d5fb34..988d146267 100644 --- a/_sips/sips/2011-10-12-implicit-classes.md +++ b/_sips/sips/2011-10-12-implicit-classes.md @@ -11,7 +11,7 @@ redirect_from: /sips/pending/implicit-classes.html This SIP is based on [this pre-draft](https://docs.google.com/document/d/1k-aGAGmbrDB-2pJ3uDPpHVKno6p-XbnkVHDc07zPrzQ/edit?hl=en_US). -Material adapted from [https://jorgeortiz85.github.com/ImplicitClassSIP.xhtml](https://jorgeortiz85.github.com/ImplicitClassSIP.xhtml) which is Copyright © 2009, Jorge Ortiz and David Hall +Material adapted from [https://jorgeortiz85.github.io/ImplicitClassSIP.xhtml](https://jorgeortiz85.github.io/ImplicitClassSIP.xhtml) which is Copyright © 2009, Jorge Ortiz and David Hall ## Abstract ## diff --git a/_sips/sips/2012-01-21-futures-promises.md b/_sips/sips/2012-01-21-futures-promises.md index 85da52ba91..1bc4670945 100644 --- a/_sips/sips/2012-01-21-futures-promises.md +++ b/_sips/sips/2012-01-21-futures-promises.md @@ -721,7 +721,7 @@ Examples: 5. [Scalaz Futures][5] [1]: https://www.microsoft.com/download/en/details.aspx?id=19957 "NETAsync" - [2]: https://twitter.github.com/scala_school/finagle.html "Finagle" + [2]: https://twitter.github.io/scala_school/finagle.html "Finagle" [3]: https://doc.akka.io/docs/akka/current/futures.html "AkkaFutures" [4]: https://web.archive.org/web/20140814211520/https://www.scala-lang.org/api/2.9.3/scala/actors/Future.html "SActorsFutures" [5]: https://code.google.com/p/scalaz/ "Scalaz" diff --git a/learn.md b/learn.md index 62ff6b5fbb..036bd2ddd2 100644 --- a/learn.md +++ b/learn.md @@ -58,4 +58,4 @@ You can visit his [YouTube channel](https://www.youtube.com/user/DrMarkCLewis/fe [DevInsideYou](https://youtube.com/devinsideyou) is a YouTube channel with hundreds of hours of free Scala content. ## Visual Scala Reference -[Visual Scala Reference](https://superruzafa.github.com/visual-scala-reference/), a guide to visually learn about Scala concepts and functions. +[Visual Scala Reference](https://superruzafa.github.io/visual-scala-reference/), a guide to visually learn about Scala concepts and functions. From 2514889b4a1dacc4d73f9a2c20c1a377e2b4c950 Mon Sep 17 00:00:00 2001 From: chaitanyawaikar1993 Date: Mon, 19 Apr 2021 21:24:21 +0200 Subject: [PATCH 0174/1870] Add Graal Native Image description in JDK compatibility section. --- _overviews/jdk-compatibility/overview.md | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/_overviews/jdk-compatibility/overview.md b/_overviews/jdk-compatibility/overview.md index 3c2bc2376e..17978b9d06 100644 --- a/_overviews/jdk-compatibility/overview.md +++ b/_overviews/jdk-compatibility/overview.md @@ -22,7 +22,7 @@ Sometimes new JVM and JDK (Java Development Kit) versions require us to update S Even when a version combination isn't listed as supported, most features may still work. (But Scala 2.12+ definitely doesn't work at all on JDK 6 or 7.) -In general, Scala works on JDK 11+, including GraalVM, but it probably won't take special advantage of features that were added after JDK 8. See [below](#jdk-11-compatibility-notes). +In general, Scala works on JDK 11+, including [GraalVM](https://www.graalvm.org/docs/reference-manual/scala/), but it probably won't take special advantage of features that were added after JDK 8. See [below](#jdk-11-compatibility-notes). Lightbend offers [commercial support](https://www.lightbend.com/lightbend-platform-subscription) for Scala. The linked page includes contact information for inquiring about supported and recommended versions. @@ -32,6 +32,8 @@ We generally recommend JDK 8 or 11 for *compiling* Scala code. Since the JVM ten If you compile on JDK 11+ but have users on JDK 8, additional care is needed to avoid using APIs and features that don't exist in 8. Therefore, compiling on 8 may be the safer choice. Some Scala developers use JDK 11+ for their daily work but do release builds on JDK 8. +Additionally, you can also run your scala application on [GraalVM](https://www.graalvm.org/docs/reference-manual/scala/) which is a JVM. GraalVM performs well on the Scala benchmarks, and it benefits from GraalVM runtime and runs faster too. + ## Long Term Support (LTS) versions After Java 8, Oracle introduced the concept of LTS versions of the JDK. These versions will remain supported (by Oracle, and likely by the rest of the ecosystem, including Scala) for longer than the versions in between. See . @@ -48,7 +50,7 @@ In almost every case, you're free to use the JDK and JVM of your choice. JDK 8 users typically use the Oracle JDK or some flavor of OpenJDK. -Most JDK 11+ users are using either OpenJDK or GraalVM. +Most JDK 11+ users are using either OpenJDK or [GraalVM](https://www.graalvm.org/docs/reference-manual/scala/) which can run in the context of OpenJDK. Developers can take advantage of the [sbt-native-image](https://github.com/scalameta/sbt-native-image) which takes advantage of GraalVM under the hood. OpenJDK comes in various flavors, offered by different providers. We build and test Scala using [AdoptOpenJDK](https://adoptopenjdk.net) in particular, but the differences are unlikely to matter to most users. From 3e7c0c8c3fd4a009ef71cd40d6e9ee4182e9cb68 Mon Sep 17 00:00:00 2001 From: chaitanyawaikar1993 Date: Mon, 19 Apr 2021 21:30:02 +0200 Subject: [PATCH 0175/1870] Modify Graal Native Image description in JDK compatibility section. --- _overviews/jdk-compatibility/overview.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/_overviews/jdk-compatibility/overview.md b/_overviews/jdk-compatibility/overview.md index 17978b9d06..64556958b8 100644 --- a/_overviews/jdk-compatibility/overview.md +++ b/_overviews/jdk-compatibility/overview.md @@ -50,7 +50,7 @@ In almost every case, you're free to use the JDK and JVM of your choice. JDK 8 users typically use the Oracle JDK or some flavor of OpenJDK. -Most JDK 11+ users are using either OpenJDK or [GraalVM](https://www.graalvm.org/docs/reference-manual/scala/) which can run in the context of OpenJDK. Developers can take advantage of the [sbt-native-image](https://github.com/scalameta/sbt-native-image) which takes advantage of GraalVM under the hood. +Most JDK 11+ users are using either OpenJDK or [GraalVM](https://www.graalvm.org/docs/reference-manual/scala/) which runs in the context of OpenJDK. Developers can use [sbt-native-image](https://github.com/scalameta/sbt-native-image) which uses GraalVM under the hood. OpenJDK comes in various flavors, offered by different providers. We build and test Scala using [AdoptOpenJDK](https://adoptopenjdk.net) in particular, but the differences are unlikely to matter to most users. From 06c107faaf6bc5f045993a5bb3bc618c4be7d9eb Mon Sep 17 00:00:00 2001 From: Mario Galic Date: Fri, 23 Apr 2021 13:44:21 +0100 Subject: [PATCH 0176/1870] Update links to point to Scala 2.13 specific documents * This 2.13 document was pointing to older Scala introduction overview * Point "The Collections API" link which talks about common operations to more specific overviews/collections-2.13/trait-iterable.html --- _overviews/core/architecture-of-scala-213-collections.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/_overviews/core/architecture-of-scala-213-collections.md b/_overviews/core/architecture-of-scala-213-collections.md index 2aa2c6a15b..4a49e9b42a 100644 --- a/_overviews/core/architecture-of-scala-213-collections.md +++ b/_overviews/core/architecture-of-scala-213-collections.md @@ -9,13 +9,13 @@ permalink: /overviews/core/:title.html This document describes the architecture of the Scala collections framework in detail. Compared to -[the Collections Introduction]({{ site.baseurl }}/overviews/collections/introduction.html) you +[the Collections Introduction]({{ site.baseurl }}/overviews/collections-2.13/introduction.html) you will find out more about the internal workings of the framework. You will also learn how this architecture helps you define your own collections in a few lines of code, while reusing the overwhelming part of collection functionality from the framework. -[The Collections API]({{ site.baseurl }}/overviews/collections/introduction.html) +[The Collections API]({{ site.baseurl }}/overviews/collections-2.13/trait-iterable.html) contains a large number of collection operations, which exist uniformly on many different collection implementations. Implementing every collection operation anew for From f4ac351a508638d94d0bc0506b3943e1c67d77bc Mon Sep 17 00:00:00 2001 From: amos Date: Sat, 24 Apr 2021 07:40:22 +0800 Subject: [PATCH 0177/1870] Update pattern-matching.md MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Find a word spelling mistake in line 83,"gaurds" => "guards" --- _zh-cn/tour/pattern-matching.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/_zh-cn/tour/pattern-matching.md b/_zh-cn/tour/pattern-matching.md index c340c48546..dce4cd0e69 100644 --- a/_zh-cn/tour/pattern-matching.md +++ b/_zh-cn/tour/pattern-matching.md @@ -80,7 +80,7 @@ println(showNotification(someVoiceRecording)) // you received a Voice Recording ``` `showNotification`函数接受一个抽象类`Notification`对象作为输入参数,然后匹配其具体类型。(也就是判断它是一个`Email`,`SMS`,还是`VoiceRecording`)。在`case Email(sender, title, _)`中,对象的`sender`和`title`属性在返回值中被使用,而`body`属性则被忽略,故使用`_`代替。 -## 模式守卫(Pattern gaurds) +## 模式守卫(Pattern guards) 为了让匹配更加具体,可以使用模式守卫,也就是在模式后面加上`if `。 ``` From 5bca645bd5b728c6e716564878c7f6b4b8c61bc6 Mon Sep 17 00:00:00 2001 From: Senthil Nayagan Date: Sun, 25 Apr 2021 13:08:05 +0530 Subject: [PATCH 0178/1870] Update types-variance.md A minor typo. Changed from Pipeline[Item] to Pipeline[Book] as Pipeline[Item] repeated twice. --- _overviews/scala3-book/types-variance.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/_overviews/scala3-book/types-variance.md b/_overviews/scala3-book/types-variance.md index eb7c2658e0..5eec37b647 100644 --- a/_overviews/scala3-book/types-variance.md +++ b/_overviews/scala3-book/types-variance.md @@ -40,7 +40,7 @@ We will now go into detail on what this annotation means and why we use it. ### Invariant Types By default, types like `Pipeline` are invariant in their type argument (`T` in this case). -This means that types like `Pipeline[Item]`, `Pipeline[Buyable]`, and `Pipeline[Item]` are in _no subtyping relationship_ to each other. +This means that types like `Pipeline[Item]`, `Pipeline[Buyable]`, and `Pipeline[Book]` are in _no subtyping relationship_ to each other. And rightfully so! Assume the following method that consumes two values of type `Pipeline[Buyable]`, and passes its argument `b` to one of them, based on the price: From 1af2426fa03478b4dbc2ca4f82716d3d7d3b5b7d Mon Sep 17 00:00:00 2001 From: vincenzobaz Date: Wed, 28 Apr 2021 09:17:18 +0200 Subject: [PATCH 0179/1870] Fix link to coursier installation --- _getting-started/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/_getting-started/index.md b/_getting-started/index.md index f2ea968c32..2d3cb5345d 100644 --- a/_getting-started/index.md +++ b/_getting-started/index.md @@ -22,7 +22,7 @@ The Scala installer is a tool named `cs` that ensures that a JVM and standard Sc From d943f2d1e9d80e0e30a39585f767d59af919a934 Mon Sep 17 00:00:00 2001 From: Nicolas Stucki Date: Fri, 30 Apr 2021 09:38:50 +0200 Subject: [PATCH 0180/1870] Update Scala 3 macro tuorial to 3.0.0-RC3 --- _overviews/scala3-macros/tutorial/index.md | 2 +- _overviews/scala3-macros/tutorial/quotes.md | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/_overviews/scala3-macros/tutorial/index.md b/_overviews/scala3-macros/tutorial/index.md index dd278b5607..c386a1c41c 100644 --- a/_overviews/scala3-macros/tutorial/index.md +++ b/_overviews/scala3-macros/tutorial/index.md @@ -26,7 +26,7 @@ abstractions and offers more fine-grained control. - Macros can also be defined in terms of a more _low-level_ API of [Reflection][reflection], that allows detailed inspection of programs. -> The tutorial uses the API of Scala 3.0.0-M3. The API had many small changes in this revision. +> The tutorial uses the API of Scala 3.0.0-RC3. The API had many small changes in this revision. > 🚧 We are still in the process of writing the tutorial. You can [help us][contributing] 🚧 diff --git a/_overviews/scala3-macros/tutorial/quotes.md b/_overviews/scala3-macros/tutorial/quotes.md index ec073284bf..ef55869a88 100644 --- a/_overviews/scala3-macros/tutorial/quotes.md +++ b/_overviews/scala3-macros/tutorial/quotes.md @@ -93,11 +93,11 @@ def evalAndUse[X](x: Expr[X])(using Type[X])(using Quotes) = '{ This code will be equivalent to the more verbose ```scala def evalAndUse[X](x: Expr[X])(using t: Type[X])(using Quotes) = '{ - val x2: t.T = $x + val x2: t.Underlying = $x ... // use x2 } ``` -Note that `Type` has a type member called `T` that refers to the type held within the `Type`, in this case `t.T` is `X`. +Note that `Type` has a type member called `T` that refers to the type held within the `Type`, in this case `t.Underlying` is `X`. Note that even if we used it implicitly is better to keep it contextual as some changes inside the quote may require it. The less verbose version is usually the best way to write the types as it is much simpler to read. In some cases, we will not know statically the type within the `Type` and will need to use the `.T` to refer to it. From b374ba62d014b4299dd6d43d0153af8d0cfda951 Mon Sep 17 00:00:00 2001 From: Nicolas Stucki Date: Fri, 30 Apr 2021 11:00:20 +0200 Subject: [PATCH 0181/1870] Add more sections to Scala 3 macro reflection tutorial * Basic interaction with Expr/Type * Hint on how to properly desing an API with Quotes * Debugging tips --- .../scala3-macros/tutorial/reflection.md | 141 +++++++++++++++++- 1 file changed, 133 insertions(+), 8 deletions(-) diff --git a/_overviews/scala3-macros/tutorial/reflection.md b/_overviews/scala3-macros/tutorial/reflection.md index e2cbe91837..db9d560dea 100644 --- a/_overviews/scala3-macros/tutorial/reflection.md +++ b/_overviews/scala3-macros/tutorial/reflection.md @@ -12,13 +12,23 @@ It provides a view on the *Typed Abstract Syntax Trees* and their properties suc ## How to use the API Accessing this API needs an import that depends the current `Quotes`. +The following definition + +```scala +package scala.quoted + +transparent inline def quotes(using inline q: Quotes): q.type = q +``` + + We can use `scala.quoted.quotes` to import it. ```scala -def pow(x: Expr[Int])(using Quotes): Expr[Int] = { - import quotes.reflect.* // Import Tree, Type, Symbol, Position, ..... +import scala.quoted.* // Import `quotes` + +def f(x: Expr[Int])(using Quotes): Expr[Int] = + import quotes.reflect.* // Import `Tree`, `TypeRepr`, `Symbol`, `Position`, ..... ... -} ``` This will import all the types and modules (with extension methods) of the API. @@ -31,11 +41,126 @@ As it is a subtype of `Tree` we can also look into the `TreeMethods` to find mor Each type is also a module with some _static-ish_ methods, for example in the [`TypeReprModule`](https://dotty.epfl.ch/api/scala/quoted/Quotes$reflectModule$TypeReprModule.html) we can find the method `TypeRepr.of[T]` which will create an instance of `Type` containing `T`. -## Relation with expressions - - -*Coming soon* +## Relation with Expr/Type + +Expressions `Expr[T]` can be seen as wrapper around a `Term` that knows statically the type of the term. +Bellow we use the `asTerm` extension method to transform the expression into a term. +This extension method is only available after importing `quotes.reflect.asTerm`. +Then we use `asExprOf[Int]` to transform the term back into `Expr[Int]`. +This operation will fail if the term does not have provided type or if the term is not a valued expression. + +```scala +def f(x: Expr[Int])(using Quotes): Expr[Int] = + import quotes.reflect.* + val tree: Term = x.asTerm + val expr: Expr[Int] = tree.asExprOf[Int] + expr +``` + +Similarly, we can also a `Type[T]` as a wrapper over a `TypeRepr` that knows statically its type. +To get a `TypeRepr` we use `TypeRepr.of[X]` which expects a given `Type[X]` in scope (similar to `Type.of[X]`). +We can also transform it back into a `Type[?]` using the `asType` method. +As the type of `Type[?]` is not statically know we need to name it with an existential type to use it, can be done using the `'[t]` pattern. + +```scala +def g[T: Type](using Quotes) = + import quotes.reflect.* + val tpe: TypeRepr = TypeRepr.of[T] + tpe.asType match + case '[t] => '{ val x: t = ${...} } + ... +``` + +## Macro API design + +It will be often useful to create helper methods or extractors that to perform some common logic of your macros. + +The simples methods will be those that only mention `Expr`, `Type` and `Quotes` in their signature. +Internally they may use reflection but this will not be seen at the use site of the method. + +```scala +def f(x: Expr[Int])(using Quotes): Expr[Int] = + import quotes.reflect.* + ... +``` + +In some cases it is inevitable to require some methods that work on `Tree`s or other types in `quotes.reflect`. +For these cases, the best is to follow the following example of method signatures. +A method that takes a `quotes.reflect.Term` parameter +```scala +def f(using Quotes)(term: quotes.reflect.Term): String = + import quotes.reflect.* + ... +``` + +An extension method for a `quotes.reflect.Term` returning a `quotes.reflect.Tree` +```scala +extension (using Quotes)(term: quotes.reflect.Term) + def g: quotes.reflect.Tree = ... +``` + +An extractor that matches on `quotes.reflect.Term`s. +```scala +object MyExtractor: + def unapply(using Quotes)(x: quotes.reflect.Term) = + ... + Some(y) +``` + +> **Avoid saving the `Quotes` context in a field.** +> `Quotes` in fields inevitably make its use harder by hitting errors involving `Quotes` with different paths. +> +> Usually these patterns have been seen in code that uses the Scala 2 ways to define extension methods or contextual unapplies. +> Now that we have `given` parameters that can be added before other parameters, all these old workarounds are no needed. +> The new abstraction make it simpler on the definition site, use site and also have a better performance. + +## Debugging + +### Runtime checks + +Unlike `Expr`, it is not possible to guaranty statically that the generated code will be well-formed. +Hence these checks will be done at runtime (i.e. compile-time when the macro expands). + +It is recommended to enable the `-Xcheck-macros` flag while developing macros or on the tests for the macro. +This flag will enable extra runtime checks that will try to find ill-formed trees or types as soon as they are created. + +There is also the `-Ycheck:all` flag that checks all compiler invariants for tree well-formedness. +These check will usually fail with an assertion error. + +### Printing the trees + +The `toString` of types in `quotes.reflect` is no great for debugging as they show the internal representation rather than the `quotes.reflect` representation. +In many cases these are similar but they may lead the debugging process astray. + +Hence, `quotes.reflect.Printers` provide a set of useful printers for debugging. +Notably the `TreeStructure`, `TypeReprStructure` and `ConstantStructure` can be quite useful. +These will print the three structure following loosely the extractors that would be needed to match it. + +```scala +val tree: Tree = ... +println(tree.show(using Printer.TreeStructure)) +``` + +One of the most useful places where this can be added is at the end of a pattern match on a `Tree`. + +```scala +tree match + case Ident(_) => + case Select(_, _) => + ... + case _ => + throw new MatchError(tree.show(using Printer.TreeStructure)) +``` +This way if a case is missed the error will report a familiar structure that can be copy pasted to start fixing the issue. + +We can make this printer the default if needed +```scala + import quotes.reflect.* + given Printer[Tree] = Printer.TreeStructure + ... + println(tree.show) +``` -## Examples +## More *Coming soon* From 2ecb80598619ad1f0387a6b3cb5521a38e0a3755 Mon Sep 17 00:00:00 2001 From: Nicolas Stucki Date: Mon, 3 May 2021 14:22:43 +0200 Subject: [PATCH 0182/1870] Review comments --- .../scala3-macros/tutorial/reflection.md | 40 ++++++++++--------- 1 file changed, 22 insertions(+), 18 deletions(-) diff --git a/_overviews/scala3-macros/tutorial/reflection.md b/_overviews/scala3-macros/tutorial/reflection.md index db9d560dea..72cbc82949 100644 --- a/_overviews/scala3-macros/tutorial/reflection.md +++ b/_overviews/scala3-macros/tutorial/reflection.md @@ -11,8 +11,11 @@ It provides a view on the *Typed Abstract Syntax Trees* and their properties suc ## How to use the API -Accessing this API needs an import that depends the current `Quotes`. -The following definition +The reflection API is defined in the type `Quotes` as `reflect`. +The actual instance depends on the current scope, in which quotes or quoted pattern matching is used. +Hence, every macro method receives Quotes as an additional argument. +Since `Quotes` is contextual, to access its members we either need to name the parameter, or summon it. +The following definition of the standard library provides the canonical way of accessing it. ```scala package scala.quoted @@ -20,14 +23,14 @@ package scala.quoted transparent inline def quotes(using inline q: Quotes): q.type = q ``` - -We can use `scala.quoted.quotes` to import it. +We can use `scala.quoted.quotes` to import it the current `Quotes` in scope like this ```scala -import scala.quoted.* // Import `quotes` +import scala.quoted.* // Import `quotes`, `Quotes` and `Expr` def f(x: Expr[Int])(using Quotes): Expr[Int] = import quotes.reflect.* // Import `Tree`, `TypeRepr`, `Symbol`, `Position`, ..... + val tree: Tree = ... ... ``` @@ -43,11 +46,12 @@ Each type is also a module with some _static-ish_ methods, for example in the [` ## Relation with Expr/Type -Expressions `Expr[T]` can be seen as wrapper around a `Term` that knows statically the type of the term. -Bellow we use the `asTerm` extension method to transform the expression into a term. +Expressions `Expr[T]` can be seen as wrappers around a `Term`, where `T` is the statically known type of the term. +Below we use the extension method `asTerm` to transform the expression into a term. This extension method is only available after importing `quotes.reflect.asTerm`. Then we use `asExprOf[Int]` to transform the term back into `Expr[Int]`. -This operation will fail if the term does not have provided type or if the term is not a valued expression. +This operation will fail if the term does not have provided type or if the term is not a valid expression. +For example, a `Ident(fn)` is non-valid term if the method `fn` takes type parameters, in which case we would need an `Apply(Ident(fn), args)`. ```scala def f(x: Expr[Int])(using Quotes): Expr[Int] = @@ -57,10 +61,10 @@ def f(x: Expr[Int])(using Quotes): Expr[Int] = expr ``` -Similarly, we can also a `Type[T]` as a wrapper over a `TypeRepr` that knows statically its type. +Similarly, we can also see `Type[T]` as a wrapper over `TypeRepr`, with `T` being the statically known type. To get a `TypeRepr` we use `TypeRepr.of[X]` which expects a given `Type[X]` in scope (similar to `Type.of[X]`). We can also transform it back into a `Type[?]` using the `asType` method. -As the type of `Type[?]` is not statically know we need to name it with an existential type to use it, can be done using the `'[t]` pattern. +As the type of `Type[?]` is not statically know we need to name it with an existential type to use it. This can be achieved using a `'[t]` pattern. ```scala def g[T: Type](using Quotes) = @@ -73,9 +77,9 @@ def g[T: Type](using Quotes) = ## Macro API design -It will be often useful to create helper methods or extractors that to perform some common logic of your macros. +It will be often useful to create helper methods or extractors that perform some common logic of your macros. -The simples methods will be those that only mention `Expr`, `Type` and `Quotes` in their signature. +The simplest methods will be those that only mention `Expr`, `Type`, and `Quotes` in their signature. Internally they may use reflection but this will not be seen at the use site of the method. ```scala @@ -112,14 +116,14 @@ object MyExtractor: > `Quotes` in fields inevitably make its use harder by hitting errors involving `Quotes` with different paths. > > Usually these patterns have been seen in code that uses the Scala 2 ways to define extension methods or contextual unapplies. -> Now that we have `given` parameters that can be added before other parameters, all these old workarounds are no needed. -> The new abstraction make it simpler on the definition site, use site and also have a better performance. +> Now that we have `given` parameters that can be added before other parameters, all these old workarounds are not needed anymore. +> The new abstraction make it simpler on the definition site and at use site. ## Debugging ### Runtime checks -Unlike `Expr`, it is not possible to guaranty statically that the generated code will be well-formed. +Expressions `Expr[T]` can be seen as wrappers around a `Term`, where `T` is the statically known type of the term. Hence these checks will be done at runtime (i.e. compile-time when the macro expands). It is recommended to enable the `-Xcheck-macros` flag while developing macros or on the tests for the macro. @@ -130,12 +134,12 @@ These check will usually fail with an assertion error. ### Printing the trees -The `toString` of types in `quotes.reflect` is no great for debugging as they show the internal representation rather than the `quotes.reflect` representation. +The `toString` methods of types in `quotes.reflect` are not great for debugging as they show the internal representation rather than the `quotes.reflect` representation. In many cases these are similar but they may lead the debugging process astray. Hence, `quotes.reflect.Printers` provide a set of useful printers for debugging. Notably the `TreeStructure`, `TypeReprStructure` and `ConstantStructure` can be quite useful. -These will print the three structure following loosely the extractors that would be needed to match it. +These will print the tree structure following loosely the extractors that would be needed to match it. ```scala val tree: Tree = ... @@ -152,7 +156,7 @@ tree match case _ => throw new MatchError(tree.show(using Printer.TreeStructure)) ``` -This way if a case is missed the error will report a familiar structure that can be copy pasted to start fixing the issue. +This way, if a case is missed the error will report a familiar structure that can be copy-pasted to start fixing the issue. We can make this printer the default if needed ```scala From d8de777f1974b1fbc19082353758ad529b6fdf6d Mon Sep 17 00:00:00 2001 From: Nicolas Stucki Date: Mon, 3 May 2021 14:42:19 +0200 Subject: [PATCH 0183/1870] Update Type.T to Type.Underlying --- _overviews/scala3-macros/tutorial/quotes.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/_overviews/scala3-macros/tutorial/quotes.md b/_overviews/scala3-macros/tutorial/quotes.md index ef55869a88..da92bcec54 100644 --- a/_overviews/scala3-macros/tutorial/quotes.md +++ b/_overviews/scala3-macros/tutorial/quotes.md @@ -97,7 +97,7 @@ def evalAndUse[X](x: Expr[X])(using t: Type[X])(using Quotes) = '{ ... // use x2 } ``` -Note that `Type` has a type member called `T` that refers to the type held within the `Type`, in this case `t.Underlying` is `X`. +Note that `Type` has a type member called `Underlying` that refers to the type held within the `Type`, in this case `t.Underlying` is `X`. Note that even if we used it implicitly is better to keep it contextual as some changes inside the quote may require it. The less verbose version is usually the best way to write the types as it is much simpler to read. In some cases, we will not know statically the type within the `Type` and will need to use the `.T` to refer to it. From 700f943dd826efd91ba16df8fc52ae2b98c1c4c4 Mon Sep 17 00:00:00 2001 From: Nicolas Stucki Date: Mon, 3 May 2021 16:51:18 +0200 Subject: [PATCH 0184/1870] Update _overviews/scala3-macros/tutorial/reflection.md Co-authored-by: Jonathan --- _overviews/scala3-macros/tutorial/reflection.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/_overviews/scala3-macros/tutorial/reflection.md b/_overviews/scala3-macros/tutorial/reflection.md index 72cbc82949..f5d9132dc3 100644 --- a/_overviews/scala3-macros/tutorial/reflection.md +++ b/_overviews/scala3-macros/tutorial/reflection.md @@ -50,7 +50,7 @@ Expressions `Expr[T]` can be seen as wrappers around a `Term`, where `T` is the Below we use the extension method `asTerm` to transform the expression into a term. This extension method is only available after importing `quotes.reflect.asTerm`. Then we use `asExprOf[Int]` to transform the term back into `Expr[Int]`. -This operation will fail if the term does not have provided type or if the term is not a valid expression. +This operation will fail if the term does not have the provided type (here `Int`) or if the term is not a valid expression. For example, a `Ident(fn)` is non-valid term if the method `fn` takes type parameters, in which case we would need an `Apply(Ident(fn), args)`. ```scala From 691cfb37b1fc3c3507f3358d140ab9e3720022da Mon Sep 17 00:00:00 2001 From: Nicolas Stucki Date: Fri, 30 Apr 2021 11:22:57 +0200 Subject: [PATCH 0185/1870] Avoid text fragmentation with inline code --- _sass/layout/type-md.scss | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/_sass/layout/type-md.scss b/_sass/layout/type-md.scss index 973a606c02..ccaed1bb9e 100755 --- a/_sass/layout/type-md.scss +++ b/_sass/layout/type-md.scss @@ -156,8 +156,8 @@ background: $gray-lighter; color: #667b83; // border: 1px solid #ced7d7; - padding: 0 6px; - margin: 0 4px; + padding: 1px 3px; + margin: 0 2px; } } From 5ee8625aa3bd8a2d124e0d1f13cd5b86679a83f8 Mon Sep 17 00:00:00 2001 From: Nicolas Stucki Date: Mon, 3 May 2021 17:05:37 +0200 Subject: [PATCH 0186/1870] Remove old Reflection name We have stopped using the name TASTy reflect since 2019 to avoid confusion with TASTy files. We usually only refer to it as reflection or quotes reflection following the import `quotes.reflect`. --- _ja/scala3/new-in-scala3.md | 2 +- _overviews/scala3-macros/best-practices.md | 2 +- scala3/guides/tasty-overview.md | 4 ++-- scala3/new-in-scala3.md | 2 +- 4 files changed, 5 insertions(+), 5 deletions(-) diff --git a/_ja/scala3/new-in-scala3.md b/_ja/scala3/new-in-scala3.md index d8dcb3b415..bb33e3219e 100644 --- a/_ja/scala3/new-in-scala3.md +++ b/_ja/scala3/new-in-scala3.md @@ -77,7 +77,7 @@ Scala 2 のマクロはあくまで実験的な機能という位置づけだが - **Inline**. [inline][meta-inline] を使うことで値やメソッドをコンパイル時に評価できる。 このシンプルな機能はさまざまなユースケースに対応している。また同時に`inline`はより高度な機能のエントリーポイントとしても使える。 - **Compile-time operations**. [`scala.compiletime`][meta-compiletime] パッケージには inline method を実装するのに役立つ追加的な機能が含まれている。 - **Quoted code blocks**. Scala 3 には [quasi-quotation][meta-quotes]という新機能がある。この機能を使えば扱いやすい高レベルなインターフェースを介してコードを組み立てたり分析したりすることができる。 `'{ 1 + 1 }` と書くだけで1 と 1 を足すASTを組み立てられる。 -- **Reflection API**. もっと高度なユースケースでは [TASTy reflect][meta-reflection]を使ってより細かくプログラムツリーを操作したり生成したりすることができる。 +- **Reflection API**. もっと高度なユースケースでは [quotes.reflect][meta-reflection]を使ってより細かくプログラムツリーを操作したり生成したりすることができる。 Scala 3 のメタプログラミングについてもっと知りたいかたは、 こちらの[tutorial][meta-tutorial]を参照。 diff --git a/_overviews/scala3-macros/best-practices.md b/_overviews/scala3-macros/best-practices.md index 261ddd9e0d..06bb160689 100644 --- a/_overviews/scala3-macros/best-practices.md +++ b/_overviews/scala3-macros/best-practices.md @@ -57,5 +57,5 @@ val y: Expr[Int] = ... -## TASTy reflection +## Quotes Reflect **Coming soon** diff --git a/scala3/guides/tasty-overview.md b/scala3/guides/tasty-overview.md index bd3cb9291b..ff0c21a21c 100644 --- a/scala3/guides/tasty-overview.md +++ b/scala3/guides/tasty-overview.md @@ -138,11 +138,11 @@ These articles provide more information about Scala 3 macros: - [Scala Macro Libraries](https://scalacenter.github.io/scala-3-migration-guide/docs/macros/macro-libraries.html) - [Macros: The Plan for Scala 3](https://www.scala-lang.org/blog/2018/04/30/in-a-nutshell.html) -- [The reference documentation on TASTy Reflect][tasty-reflect] +- [The reference documentation on Quotes Reflect][quotes-reflect] - [The reference documentation on macros](macros) [benefits]: https://www.scala-lang.org/blog/2018/04/30/in-a-nutshell.html [erasure]: https://www.scala-lang.org/files/archive/spec/2.13/03-types.html#type-erasure [binary]: {% link _overviews/tutorials/binary-compatibility-for-library-authors.md %} -[tasty-reflect]: {{ site.scala3ref }}/metaprogramming/reflection.html +[quotes-reflect]: {{ site.scala3ref }}/metaprogramming/reflection.html [macros]: {{ site.scala3ref }}/metaprogramming/macros.html diff --git a/scala3/new-in-scala3.md b/scala3/new-in-scala3.md index 85ae083537..ccc9abe1f1 100644 --- a/scala3/new-in-scala3.md +++ b/scala3/new-in-scala3.md @@ -89,7 +89,7 @@ The [macro tutorial]({% link _overviews/scala3-macros/index.md %}) contains deta - **Inline**. As the basic starting point, the [inline feature][meta-inline] allows values and methods to be reduced at compile time. This simple feature already covers many use-cases and at the same time provides the entry point for more advanced features. - **Compile-time operations**. The package [`scala.compiletime`][meta-compiletime] contains additional functionality that can be used to implement inline methods. - **Quoted code blocks**. Scala 3 adds the new feature of [quasi-quotation][meta-quotes] for code, providing a convenient high-level interface to construct and analyse code. Constructing code for adding one and one is as easy as `'{ 1 + 1 }`. -- **Reflection API**. For more advanced use cases [TASTy reflect][meta-reflection] provides more detailed control to inspect and generate program trees. +- **Reflection API**. For more advanced use cases [quotes.reflect][meta-reflection] provides more detailed control to inspect and generate program trees. If you want to learn more about metaprogramming in Scala 3, we invite you to take our [tutorial][meta-tutorial]. From aad4d06baa5020251d693486eeda546163957f41 Mon Sep 17 00:00:00 2001 From: Adrien Piquerez Date: Thu, 22 Apr 2021 16:09:07 +0200 Subject: [PATCH 0187/1870] Add Scala 3 Migration Guide --- _config.yml | 11 + .../compatibility-classpath.md | 143 +++++++++ .../scala3-migration/compatibility-intro.md | 36 +++ .../compatibility-metaprogramming.md | 86 ++++++ .../scala3-migration/compatibility-runtime.md | 28 ++ .../scala3-migration/compatibility-source.md | 28 ++ .../incompat-contextual-abstractions.md | 133 ++++++++ .../incompat-dropped-features.md | 221 ++++++++++++++ .../incompat-other-changes.md | 288 ++++++++++++++++++ .../scala3-migration/incompat-syntactic.md | 221 ++++++++++++++ .../scala3-migration/incompat-type-checker.md | 116 +++++++ .../incompat-type-inference.md | 93 ++++++ .../scala3-migration/incompatibility-table.md | 126 ++++++++ _overviews/scala3-migration/options-intro.md | 19 ++ _overviews/scala3-migration/options-lookup.md | 270 ++++++++++++++++ _overviews/scala3-migration/options-new.md | 97 ++++++ .../tooling-migration-mode.md | 62 ++++ .../tooling-syntax-rewriting.md | 259 ++++++++++++++++ _overviews/scala3-migration/tooling-tour.md | 138 +++++++++ _overviews/scala3-migration/tutorial-intro.md | 21 ++ .../tutorial-macro-cross-building.md | 227 ++++++++++++++ .../scala3-migration/tutorial-macro-mixing.md | 197 ++++++++++++ .../tutorial-prerequisites.md | 125 ++++++++ _overviews/scala3-migration/tutorial-sbt.md | 227 ++++++++++++++ .../compatibility-213-to-3.svg | 3 + .../compatibility-3-to-213.svg | 3 + .../compatibility-sandwich.svg | 3 + .../tutorial-macro-cross-building.svg | 3 + .../tutorial-macro-mixing.svg | 3 + 29 files changed, 3187 insertions(+) create mode 100644 _overviews/scala3-migration/compatibility-classpath.md create mode 100644 _overviews/scala3-migration/compatibility-intro.md create mode 100644 _overviews/scala3-migration/compatibility-metaprogramming.md create mode 100644 _overviews/scala3-migration/compatibility-runtime.md create mode 100644 _overviews/scala3-migration/compatibility-source.md create mode 100644 _overviews/scala3-migration/incompat-contextual-abstractions.md create mode 100644 _overviews/scala3-migration/incompat-dropped-features.md create mode 100644 _overviews/scala3-migration/incompat-other-changes.md create mode 100644 _overviews/scala3-migration/incompat-syntactic.md create mode 100644 _overviews/scala3-migration/incompat-type-checker.md create mode 100644 _overviews/scala3-migration/incompat-type-inference.md create mode 100644 _overviews/scala3-migration/incompatibility-table.md create mode 100644 _overviews/scala3-migration/options-intro.md create mode 100644 _overviews/scala3-migration/options-lookup.md create mode 100644 _overviews/scala3-migration/options-new.md create mode 100644 _overviews/scala3-migration/tooling-migration-mode.md create mode 100644 _overviews/scala3-migration/tooling-syntax-rewriting.md create mode 100644 _overviews/scala3-migration/tooling-tour.md create mode 100644 _overviews/scala3-migration/tutorial-intro.md create mode 100644 _overviews/scala3-migration/tutorial-macro-cross-building.md create mode 100644 _overviews/scala3-migration/tutorial-macro-mixing.md create mode 100644 _overviews/scala3-migration/tutorial-prerequisites.md create mode 100644 _overviews/scala3-migration/tutorial-sbt.md create mode 100644 resources/images/scala3-migration/compatibility-213-to-3.svg create mode 100644 resources/images/scala3-migration/compatibility-3-to-213.svg create mode 100644 resources/images/scala3-migration/compatibility-sandwich.svg create mode 100644 resources/images/scala3-migration/tutorial-macro-cross-building.svg create mode 100644 resources/images/scala3-migration/tutorial-macro-mixing.svg diff --git a/_config.yml b/_config.yml index f510ed6db3..7d1e5026d0 100644 --- a/_config.yml +++ b/_config.yml @@ -103,6 +103,17 @@ defaults: overview-name: "Scala 3 — Book" layout: multipage-overview permalink: "/scala3/book/:title.html" + - + scope: + path: "_overviews/scala3-migration" + values: + scala3: true + # num: 99 # to list them in the TOC, should be overwritten individually + partof: scala3-migration + type: section + overview-name: "Scala 3 Migration Guide" + layout: multipage-overview + permalink: "/scala3/guides/migration/:title.html" - scope: path: "_overviews/scala3-macros" diff --git a/_overviews/scala3-migration/compatibility-classpath.md b/_overviews/scala3-migration/compatibility-classpath.md new file mode 100644 index 0000000000..35448fd9e2 --- /dev/null +++ b/_overviews/scala3-migration/compatibility-classpath.md @@ -0,0 +1,143 @@ +--- +title: Classpath Level +type: section +description: This section describes the compatibility between Scala 2.13 and Scala 3 class files. +num: 3 +previous-page: compatibility-source +next-page: compatibility-runtime +--- + +In your code you can use public types and terms, and call public methods that are defined in a different module or library. +It works well as long as the type checker, which is the compiler phase that validates the semantic consistency of the code, is able to read the signatures of those types, terms and methods, from the class files containing them. + +In Scala 2 the signatures are stored in a dedicated format called the Pickle format. +In Scala 3 the story is a bit different because it relies on the TASTy format which is a lot more than a signature layout. +But, for the purpose of moving from Scala 2.13 to Scala 3, only the signatures are useful. + +## The Scala 3 Unpickler + +The first piece of good news is that the Scala 3 compiler is able to read the Scala 2.13 Pickle format and thus it can type check code that depends on modules or libraries compiled with Scala 2.13. + +The Scala 3 unpickler has been extensively tested in the community build for many years now. It is safe to use. + +### A Scala 3 module can depend on a Scala 2.13 artifact + +![Scala 3 module depending on a Scala 2.13 artifact](/resources/images/scala3-migration/compatibility-3-to-213.svg) + +As an sbt build it can be illustrated by (sbt 1.5.0 or higher is required): + +```scala +lazy val foo = project.in(file("foo")) + .settings(scalaVersion := "3.0.0-RC3") + .dependsOn(bar) + +lazy val bar = project.in(file("bar")) + .settings(scalaVersion := "2.13.5) +``` + +Or, in case bar is a published Scala 2.13 library, we can have: + +```scala +lazy val foo = project.in(file("foo")) + .settings( + scalaVersion := "3.0.0-RC3", + libraryDependencies += ("org.bar" %% "bar" % "1.0.0").cross(CrossVersion.for3Use2_13) + ) +``` + +We use `CrossVersion.for3Use2_13` in sbt to resolve `bar_2.13` instead of `bar_3`. + +### The Standard Library + +One notable example is the Scala 2.13 library. +We have indeed decided that the Scala 2.13 library is the official standard library for Scala 3. + +Let's note that the standard library is automatically provided by the build tool, you should not need to configure it manually. + +## The Scala 2.13 TASTy Reader + +The second piece of good news is that the Scala 2.13 TASTy reader, which enables consuming Scala 3 libraries has been shipped into Scala 2.13.5. + +> The TASTy reader is very new. That's why it is only available under the `-Ytasty-reader` flag. + +### Supported Features + +The TASTy reader supports all the traditional language features as well as the following brand-new features: +- [Enumerations](http://dotty.epfl.ch/docs/reference/enums/enums.html) +- [Intersection Types](http://dotty.epfl.ch/docs/reference/new-types/intersection-types.html) +- [Opaque Type Aliases](http://dotty.epfl.ch/docs/reference/other-new-features/opaques.html) +- [Type Lambdas](http://dotty.epfl.ch/docs/reference/new-types/type-lambdas.html) +- [Contextual Abstractions](http://dotty.epfl.ch/docs/reference/contextual/motivation.html) (new syntax) +- [Open Classes](http://dotty.epfl.ch/docs/reference/other-new-features/open-classes.html) (and inheritance of super traits) +- [Export Clauses](http://dotty.epfl.ch/docs/reference/other-new-features/export.html) + +We have limited support on: +- [Top-Level Definitions](http://dotty.epfl.ch/docs/reference/dropped-features/package-objects.html) +- [Extension Methods](http://dotty.epfl.ch/docs/reference/contextual/extension-methods.html) + +More exotic features are not supported: +- [Context Functions](http://dotty.epfl.ch/docs/reference/contextual/context-functions.html) +- [Polymorphic Function Types](http://dotty.epfl.ch/docs/reference/new-types/polymorphic-function-types.html) +- [Trait Parameters](http://dotty.epfl.ch/docs/reference/other-new-features/trait-parameters.html) +- `@static` Annotation +- `@alpha` Annotation +- [Functions and Tuples larger than 22 parameters](https://dotty.epfl.ch/docs/reference/dropped-features/limit22.html) +- [Match Types](https://dotty.epfl.ch/docs/reference/new-types/match-types.html) +- [Union Types](https://dotty.epfl.ch/docs/reference/new-types/union-types.html) +- [Multiversal Equality](https://dotty.epfl.ch/docs/reference/contextual/multiversal-equality.html) (unless explicit) +- [Inline](https://dotty.epfl.ch/docs/reference/metaprogramming/inline.html) (including Scala 3 macros) +- [Kind Polymorphism](https://dotty.epfl.ch/docs/reference/other-new-features/kind-polymorphism.html) (the `scala.AnyKind` upper bound) + +### A Scala 2.13 module can depend on a Scala 3 artifact + +By enabling the TASTy reader with `-Ytasty-reader`, a Scala 2.13 module can depend on a Scala 3 artifact. + +![Scala 2 module depending on a Scala 3 artifact](/resources/images/scala3-migration/compatibility-213-to-3.svg) + +As an sbt build it can be illustrated by: + +```scala +lazy val foo = project.in.file("foo") + .settings( + scalaVersion := "2.13.5", + scalacOptions += "-Ytasty-reader" + ) + .dependsOn(bar) + +lazy val bar = project.in(file("bar")) + .settings(scalaVersion := "3.0.0-RC3") +``` + +Or, in case `bar` is a published Scala 3 library: + +```scala +lazy val foo = project.in.file("foo") + .settings( + scalaVersion := "3.0.0-RC3", + scalacOptions += "-Ytasty-reader", + libraryDependencies += ("org.bar" %% "bar" % "1.0.0").cross(CrossVersion.for2_13Use3) + ) +``` + +Similarly to `CrossVersion.for2_13Use3`, we use `CrossVersion.for3Use2_13` in sbt to resolve `bar_2.13` instead of `bar_3`. + +## Interoperability Overview + +In short, we have backward and forward compatibility and so **migration can happen gradually**. + +You can port a big Scala application one module at a time, even if its library dependencies have not yet been ported (excepting the macro libraries). + +During the transition period, you can have a Scala 3 module layered in between two 2.13 modules. + +![Sandwich pattern](/resources/images/scala3-migration/compatibility-sandwich.svg) + +This is permitted as long as all libraries are resolved to a single binary version: you can have `lib-foo_3` and `lib-bar_2.13` in the same classpath, but you cannot have `lib-foo_3` and `lib-foo_2.13`. + +The inverted pattern, with a 2.13 module in the middle, is also possible. + +> #### Disclaimer for library maintainers +> +> Using the interoperability between Scala 2.13 and Scala 3 in a published library is generally not safe for your end-users. +> +> Unless you know exactly what you are doing, it is discouraged to publish a Scala 3 library that depends on a Scala 2.13 library (the scala-library being excluded) or vice versa. +> The reason is to prevent library users from ending up with two conflicting versions `foo_2.13` and `foo_3` of the same foo library in their classpath, this problem being unsolvable in some cases. diff --git a/_overviews/scala3-migration/compatibility-intro.md b/_overviews/scala3-migration/compatibility-intro.md new file mode 100644 index 0000000000..b511567a2b --- /dev/null +++ b/_overviews/scala3-migration/compatibility-intro.md @@ -0,0 +1,36 @@ +--- +title: Compatibility Reference +type: chapter +description: This chapter describes the compatibility between Scala 2.13 and Scala 3. +num: 1 +previous-page: +next-page: compatibility-source +--- + +Scala 3 is a game changer in terms of compatibility in the Scala ecosystem that will greatly improve the day-to-day experience of every Scala programmer. +This new compatibility era starts with the migration. + +Moving from Scala 2 to Scala 3 is a big leap forward. +Scala 3 is a shiny new compiler, built upon a complete redesign of the core foundations of the language. +Yet we claim the migration will not be harder than before, when we moved from Scala 2.12 to Scala 2.13. + +It will even be simpler in some respects, thanks to the interoperability between Scala 2.13 and Scala 3. + +This chapter details the level of compatibility between the two versions at the different stages of the program. +This is where you will find answers to the following questions: + +**[Source Level](compatibility-source.html)** +- Is Scala 3 a different language? +- How hard is it to translate a Scala 2.13 project into Scala 3? + +**[Classpath Level](compatibility-classpath.html)** +- Can we use a Scala 2.13 library in Scala 3? +- Inversely, can we use a Scala 3 library in Scala 2.13? + +**[Runtime](compatibility-runtime.html)** +- Is it safe to deploy a Scala 3 program in a production environment? +- How fast are Scala 3 programs compared to Scala 2.13? + +**[Metaprogramming](compatibility-metaprogramming.html)** +- Will my Scala 2.13 project be affected by the replacement of the Scala 2 macro feature? +- How can I port my Scala 2.13 macro library to Scala 3? diff --git a/_overviews/scala3-migration/compatibility-metaprogramming.md b/_overviews/scala3-migration/compatibility-metaprogramming.md new file mode 100644 index 0000000000..80edba1bef --- /dev/null +++ b/_overviews/scala3-migration/compatibility-metaprogramming.md @@ -0,0 +1,86 @@ +--- +title: Metaprogramming +type: section +description: This section discuss the metaprogramming transition +num: 5 +previous-page: compatibility-runtime +next-page: tooling-tour +--- + +A call to a macro method is executed during the compiler phase called macro expansion to generate a part of the program---an abstract syntax tree. + +The Scala 2.13 macro API is closely tied to the Scala 2.13 compiler internals. +Therefore it is not possible for the Scala 3 compiler to expand any Scala 2.13 macro. + +In contrast, Scala 3 introduces a new principled approach of metaprogramming that is designed for stability. +Scala 3 macros, and inline methods in general, will be compatible with future versions of the Scala 3 compiler. +While this is an uncontested improvement, it also means that all Scala 2.13 macros have to be rewritten from the ground up, by using the new metaprogramming features. + +## Macro Dependencies + +A Scala 3 module can depend on a Scala 2.13 artifact even if it contains a macro definition but the compiler will not be able to expand its macros. +When you try to, it simply returns an error. + +```text + -- Error: /src/main/scala/example/Example.scala:10:45 + 10 | val documentFormat = Json.format[Document] + | ^ + |Scala 2 macro cannot be used in Scala 3. See https://dotty.epfl.ch/docs/reference/dropped-features/macros.html + |To turn this error into a warning, pass -Xignore-scala2-macros to the compiler +``` + +Let's note that using `-Xignore-scala2-macros` is helpful to type check the code but it produces incomplete class files. + +When this error appears in your project, you have eventually no other choice than upgrading to a Scala 3-compiled version of the macro artifact. + +## Porting the Macro Ecosystem + +While being experimental, the Scala community has largely adopted the Scala 2 macro feature in multiple ways: code generation, optimizations, ergonomic DSLs... + +A large part of the ecosystem now depends on Scala 2.13 macros defined in external libraries. +Identifying and porting those libraries is key to move the ecosystem forward. + +A migration status of many open-source macro libraries is available in [this page](https://scalacenter.github.io/scala-3-migration-guide/docs/macros/macro-libraries.html). + +## Rewriting a Macro + +The new metaprogramming features are completely different from Scala 2. +They are comprised of: +- [Inline Methods][inline] +- [Compile-time operations][compiletime] +- [Macros][macros] +- [Quoted code][quotes] +- [Reflection over Abstract Syntax Trees (AST)][reflection] + +Before getting deep into reimplementing a macro you should ask yourself: +- Can I use `inline` and the `scala.compiletime` operations to reimplement my logic? +- Can I use the simpler and safer expression based macros? +- Do I really need to access the AST? +- Can I use a [match type](https://dotty.epfl.ch/docs/reference/new-types/match-types.html) as return type? + +You can learn all the new metaprogramming concepts by reading the [Macro Tutorial][scala3-macros]. + +## Cross-building a Macro Library + +You have written a wonderful macro library and you would like it to be available in Scala 2.13 and Scala 3. +There are two different approaches, the traditional cross-building technique and the more recent mixing macro technique. +You can learn about them by reading these tutorials: +- [Cross-Building a Macro Library](tutorial-macro-cross-building.html) +- [Mixing Scala 2.13 and Scala 3 Macros](tutorial-macro-mixing.html) + +## Additional Resources + +Blog posts and talks: +- [Macros: The Plan For Scala 3](https://www.scala-lang.org/blog/2018/04/30/in-a-nutshell.html) +- [Scala Days - Metaprogramming in Dotty](https://www.youtube.com/watch?v=ZfDS_gJyPTc) + +Early-adopter projects: +- [XML Interpolator](https://github.com/dotty-staging/xml-interpolator/tree/master) +- [Shapeless 3](https://github.com/dotty-staging/shapeless/tree/shapeless-3) + +[inline]: {% link _overviews/scala3-macros/tutorial/inline.md %} +[compiletime]: {% link _overviews/scala3-macros/tutorial/compiletime.md %} +[macros]: {% link _overviews/scala3-macros/tutorial/macros.md %} +[quotes]: {% link _overviews/scala3-macros/tutorial/quotes.md %} +[reflection]: {% link _overviews/scala3-macros/tutorial/reflection.md %} +[scala3-macros]: {% link _overviews/scala3-macros/index.md %} \ No newline at end of file diff --git a/_overviews/scala3-migration/compatibility-runtime.md b/_overviews/scala3-migration/compatibility-runtime.md new file mode 100644 index 0000000000..729faae7aa --- /dev/null +++ b/_overviews/scala3-migration/compatibility-runtime.md @@ -0,0 +1,28 @@ +--- +title: Runtime +type: section +description: This section describes the run-time characteristics of a Scala 3 program. +num: 4 +previous-page: compatibility-classpath +next-page: compatibility-metaprogramming +--- + +Scala 2.13 and Scala 3 share the same Application Binary Interface (ABI). + +> The ABI is the representation of Scala code in bytecode or Scala.js IR. +> It determines the run-time behavior of Scala programs. + +Compiling the same source code with Scala 2.13 and Scala 3 produces very similar bytecodes. +The difference being that some features have changed, for instance the initialization of lazy vals has been improved. + +Sharing the ABI also ensures that Scala 2.13 and Scala 3 class files can be loaded by the same JVM class loader. +Similarly, that Scala 2.13 and Scala 3 `sjsir` files can be linked together by the Scala.js linker. + +Furthermore it relieves us from surprising behaviors at runtime. +It makes the migration from Scala 2.13 to Scala 3 very safe in terms of run-time crashes and performance. + +At first sight the run-time characteristics of a Scala program is neither better nor worse in Scala 3 compare to Scala 2.13. +However some new features will help you optimize your program: +- [Opaque Type Aliases](http://dotty.epfl.ch/docs/reference/other-new-features/opaques.html) +- [Inline Methods](http://dotty.epfl.ch/docs/reference/metaprogramming/inline.html) +- [@threadUnsafe annotation](http://dotty.epfl.ch/docs/reference/other-new-features/threadUnsafe-annotation.html) diff --git a/_overviews/scala3-migration/compatibility-source.md b/_overviews/scala3-migration/compatibility-source.md new file mode 100644 index 0000000000..b3e4ad5c41 --- /dev/null +++ b/_overviews/scala3-migration/compatibility-source.md @@ -0,0 +1,28 @@ +--- +title: Source Level +type: section +description: This section describes the level of compatibility between Scala 2.13 and Scala 3 sources. +num: 2 +previous-page: compatibility-intro +next-page: compatibility-classpath +--- + +Scala 3 is an improved version of the Scala 2 language. + +Despite the new syntax, a very large subset of the Scala 2.13 language is still valid. +Not all of it though, some constructs have been simplified, restricted or dropped altogether. +However those decisions were made for good reasons and by taking care that a good workaround is possible. + +In general there is a straightforward cross-compiling solution to every incompatibility, so that the migration from Scala 2.13 to Scala 3 is easy and smooth. +You can find a corpus of incompatibilities in the [Incompatibility Table](incompatibility-table.html). + +There is an exception though, which is the new metaprogramming framework that replaces the Scala 2 experimental macros. +Further explanations are given at the end of this chapter in the [Metaprogramming](compatibility-metaprogramming.html) section. + +Metaprogramming aside, a Scala 2.13 source code can rather easily be ported to Scala 3. +Once done, you will be able to use the new powerful features of Scala 3, which have no equivalent in Scala 2. +The downside is those sources cannot be compiled with Scala 2.13 anymore. +But amazingly, this new Scala 3 artifact can be consumed as a dependency in Scala 2.13. + +As we will see in more detail, it permits backward and forward compatibility. +This is a breakthrough in the history of the Scala programming language. diff --git a/_overviews/scala3-migration/incompat-contextual-abstractions.md b/_overviews/scala3-migration/incompat-contextual-abstractions.md new file mode 100644 index 0000000000..c94202b740 --- /dev/null +++ b/_overviews/scala3-migration/incompat-contextual-abstractions.md @@ -0,0 +1,133 @@ +--- +title: Contextual Abstractions +type: section +description: This chapter details all incompatibilities caused by the redesign of contextual abstractions +num: 17 +previous-page: incompat-dropped-features +next-page: incompat-other-changes +--- + +The redesign of [contextual abstractions](https://dotty.epfl.ch/docs/reference/contextual/motivation.html) brings some incompatibilities. + +|Incompatibility|Scala 2.13|Scala 3 Migration Rewrite|Scalafix Rule|Runtime Incompatibiltiy| +|--- |--- |--- |--- |--- | +|[Type of implicit def](#type-of-implicit-definition)|||[✅](https://github.com/ohze/scala-rewrites#fixexplicittypesexplicitimplicittypes)|| +|[Implicit views](#implicit-views)||||**Possible**| +|[View bounds](#view-bounds)|Deprecation|||| +|[Ambiguous conversion on `A` and `=> A`](#ambiguous-conversion-on-a-and--a)||||| + +## Type Of Implicit Definition + +The type of implicit definitions (`val` or `def`) needs to be given explicitly in Scala 3. +They cannot be inferred anymore. + +The Scalafix rule named `ExplicitImplicitTypes` in [ohze/scala-rewrites](https://github.com/ohze/scala-rewrites#fixexplicittypesexplicitimplicittypes) repository can write the missing type annotations automatically. + +## Implicit Views + +Scala 3 does not support implicit conversion from an implicit function value, of the form `implicit val ev: A => B`. + +The following piece of code is now invalid: + +```scala +trait Pretty { + val print: String +} + +def pretty[A](a: A)(implicit ev: A => Pretty): String = + a.print // Error: value print is not a member of A +``` + +The [Scala 3 migration compilation](tooling-migration-mode.html) can warn you about those cases, but it does not try to fix it. + +Be aware that this incompatibility can produce a runtime incompatibility and break your program. +Indeed the compiler can find another implicit conversion from a broader scope, which would eventually cause an undesired behavior at runtime. + +This example illustrates the case: + +```scala +trait Pretty { + val print: String +} + +implicit def anyPretty(any: Any): Pretty = new Pretty { val print = "any" } + +def pretty[A](a: A)(implicit ev: A => Pretty): String = + a.print // always print "any" +``` + +The resolved conversion depends on the compiler mode: + - `-source:3.0-migration`: the compiler performs the `ev` conversion + - `-source:3.0`: the compiler cannot perform the `ev` conversion but it can perform the `anyPretty`, which is undesired + +One simple fix is to supply the right conversion explicitly: + +```diff +def pretty[A](a: A)(implicit ev: A => Pretty): String = +- a.print ++ ev(a).print +``` +## View Bounds + +View bounds have been deprecated for a long time but they are still supported in Scala 2.13. +They cannot be compiled with Scala 3 anymore. + +```scala +def foo[A <% Long](a: A): Long = a +``` + +In this example we get: + +```text +-- Error: src/main/scala/view-bound.scala:2:12 +2 | def foo[A <% Long](a: A): Long = a + | ^ + | view bounds `<%' are deprecated, use a context bound `:' instead +``` + +The message suggests to use a context bound instead of a view bound but it would change the signature of the method. +It is probably easier and safer to preserve the binary compatibility. +To do so the implicit conversion must be declared and called explicitly. + +Be careful not to fall in the runtime incompatibility described above, in [Implicit Views](#implicit-views). + +```diff +-def foo[A <% Long](a: A): Long = a ++def foo[A](a: A)(implicit ev: A => Long): Long = ev(a) +``` + +## Ambiguous Conversion On `A` And `=> A` + +In Scala 2.13 the implicit conversion on `A` wins over the implicit conversion on `=> A`. +It is not the case in Scala 3 anymore, and leads to an ambiguous conversion. + +For instance, in this example: + +```scala +implicit def boolFoo(bool: Boolean): Foo = ??? +implicit def lazyBoolFoo(lazyBool: => Boolean): Foo = ??? + +true.foo() +``` + +The Scala 2.13 compiler chooses the `boolFoo` conversion but the Scala 3 compiler fails to compile. + +```text +-- Error: src/main/scala/ambiguous-conversion.scala:4:19 +9 | true.foo() + | ^^^^ + |Found: (true : Boolean) + |Required: ?{ foo: ? } + |Note that implicit extension methods cannot be applied because they are ambiguous; + |both method boolFoo in object Foo and method lazyBoolFoo in object Foo provide an extension method `foo` on (true : Boolean) +``` + +A temporary solution is to write the conversion explicitly. + +```diff +implicit def boolFoo(bool: Boolean): Foo = ??? +implicit def lazyBoolFoo(lazyBool: => Boolean): Foo = ??? + +-true.foo() ++boolFoo(true).foo() +``` \ No newline at end of file diff --git a/_overviews/scala3-migration/incompat-dropped-features.md b/_overviews/scala3-migration/incompat-dropped-features.md new file mode 100644 index 0000000000..d4d8c1e610 --- /dev/null +++ b/_overviews/scala3-migration/incompat-dropped-features.md @@ -0,0 +1,221 @@ +--- +title: Dropped Features +type: section +description: This chapter details all the dropped features +num: 16 +previous-page: incompat-syntactic +next-page: incompat-contextual-abstractions +--- + +Some features are dropped to simplify the language. +Most of these changes can be handled automatically during the [Scala 3 migration compilation](tooling-migration-mode.html). + +|Incompatibility|Scala 2.13|Scala 3 Migration Rewrite|Scalafix Rule| +|--- |--- |--- |--- | +|[Symbol literals](#symbol-literals)|Deprecation|✅|| +|[`do`-`while` construct](#do-while-construct)||✅|| +|[Auto-application](#auto-application)|Deprecation|✅|[✅](https://github.com/scala/scala-rewrites/blob/main/rewrites/src/main/scala/fix/scala213/ExplicitNonNullaryApply.scala)| +|[Value eta-expansion](#value-eta-expansion)|Deprecation|✅|[✅](https://github.com/scala/scala-rewrites/blob/main/rewrites/src/main/scala/fix/scala213/ExplicitNullaryEtaExpansion.scala)| +|[`any2stringadd` conversion](#any2stringadd-conversion)|Deprecation||[✅](https://github.com/scala/scala-rewrites/blob/main/rewrites/src/main/scala/fix/scala213/Any2StringAdd.scala)| +|[Early initializer](#early-initializer)|Deprecation||| +|[Existential type](#existential-type)|Feature warning||| + +## Symbol literals + +The Symbol literal syntax is deprecated in Scala 2.13 and dropped in Scala 3. +But the `scala.Symbol` class still exists so that each string literal can be safely replaced by an application of `Symbol`. + +This piece of code cannot be compiled with Scala 3: + +```scala +val values: Map[Symbol, Int] = Map('abc -> 1) + +val abc = values('abc) // Migration Warning: symbol literal 'abc is no longer supported +``` + +The [Scala 3 migration compilation](tooling-migration-mode.html) rewrites the code into: + +```diff +val values: Map[Symbol, Int] = Map(Symbol("abc") -> 1) + +-val abc = values('abc) ++val abc = values(Symbol("abc")) +``` + +Although the `Symbol` class is useful during the transition, beware that it is deprecated and will be removed from the `scala-library` in a future version. +You are recommended, as a second step, to replace every use of `Symbol` with a plain string literals `"abc"` or a custom dedicated class. + +## `do`-`while` construct + +The `do` keyword has acquired a different meaning in the [New Control Syntax](https://dotty.epfl.ch/docs/reference/other-new-features/control-syntax). + +To avoid confusion, the traditional `do while ()` construct is dropped. +It is recommended to use the equivalent `while ({ ; }) ()` that can be cross-compiled, or the new Scala 3 syntax `while { ; } do ()`. + +The following piece of code cannot be compiled with Scala 3. + +```scala +do { // Migration Warning: `do while ` is no longer supported + i += 1 +} while (f(i) == 0) +``` + +The [Scala 3 migration compilation](tooling-migration-mode.html) rewrites it into. + +```scala +while ({ { + i += 1 +} ; f(i) == 0}) () +``` + +## Auto-application + +Auto-application is the syntax of calling an empty-paren method such as `def toInt(): Int` without passing an empty argument list. +It is deprecated in Scala 2.13 and dropped in Scala 3. + +The following code is invalid in Scala 3: + +```scala +object Hello { + def message(): String = "Hello" +} + +println(Hello.message) // Migration Warning: method message must be called with () argument +``` + +The [Scala 3 migration compilation](tooling-migration-mode.html) rewrites it into: + +```diff +object Hello { + def message(): String = "Hello" +} + +-println(Hello.message) ++println(Hello.message()) +``` + +Auto-application is covered in detail in [this page](https://dotty.epfl.ch/docs/reference/dropped-features/auto-apply.html) of the Scala 3 reference documentation. + +## Value eta-expansion + +Scala 3 introduces [Automatic Eta-Expansion](https://dotty.epfl.ch/docs/reference/changed-features/eta-expansion-spec.html) which will deprecate the method to value syntax `m _`. +Furthermore Scala 3 does not allow eta-expansion of values to nullary functions anymore. + +Thus, this piece of code is invalid in Scala 3: + +```scala +val x = 1 +val f: () => Int = x _ // Migration Warning: The syntax ` _` is no longer supported; +``` + +The [Scala 3 migration compilation](tooling-migration-mode.html) rewrites it into: + +```diff +val x = 1 +-val f: () => Int = x _ ++val f: () => Int = (() => x) +``` + +## `any2stringadd` conversion + +The implicit `Predef.any2stringadd` conversion is deprecated in Scala 2.13 and dropped in Scala 3. + +This piece of code does not compile anymore. + +```scala +val str = new AnyRef + "foo" // Error: value + is not a member of Object +``` + +The conversion to `String` must be applied explicitly, for instance with `String.valueOf`. + +```diff +-val str = new AnyRef + "foo" ++val str = String.valueOf(new AnyRef) + "foo" +``` + +This rewrite can be applied by the `fix.scala213.Any2StringAdd` Scalafix rule in [`scala/scala-rewrites`](https://index.scala-lang.org/scala/scala-rewrites/scala-rewrites/0.1.2?target=_2.13). + +## Early Initializer + +Early initializers are deprecated in Scala 2.13 and dropped in Scala 3. +They were rarely used, and mostly to compensate for the lack of [Trait parameters](https://dotty.epfl.ch/docs/reference/other-new-features/trait-parameters.html) which are now supported in Scala 3. + +That is why the following piece of code does not compile anymore. + +```scala +trait Bar { + val name: String + val size: Int = name.size +} + +object Foo extends { + val name = "Foo" +} with Bar +``` + +The Scala 3 compiler produces two error messages: + +```text +-- Error: src/main/scala/early-initializer.scala:6:19 +6 |object Foo extends { + | ^ + | `extends` must be followed by at least one parent +``` + +```text +-- [E009] Syntax Error: src/main/scala/early-initializer.scala:8:2 +8 |} with Bar + | ^^^^ + | Early definitions are not supported; use trait parameters instead +``` + +It suggests to use trait parameters which would give us: + +```scala +trait Bar(name: String) { + val size: Int = name.size +} + +object Foo extends Bar("Foo") +``` + +Since trait parameters are not available in Scala 2.13, it does not cross-compile. +If you need a cross-compiling solution you can use an intermediate class that carries the early initialized `val`s and `var`s as constructor parameters. + +```scala +abstract class BarEarlyInit(val name: String) extends Bar + +object Foo extends BarEarlyInit("Foo") +``` + +In the case of a class, it is also possible to use a secondary constructor with a fixed value, as shown by: + +```scala +class Fizz private (val name: String) extends Bar { + def this() = this("Fizz") +} +``` + +## Existential Type + +Existential type is a [dropped feature](https://dotty.epfl.ch/docs/reference/dropped-features/existential-types.html), which makes the following code invalid. + +```scala +def foo: List[Class[T]] forSome { type T } // Error: Existential types are no longer supported +``` + +> Existential type is an experimental feature in Scala 2.13 that must be enabled explicitly eather by importing `import scala.language.existentials` or by setting the `-language:existentials` compiler flag. + +The proposed solution is to introduce an enclosing type that carries the dependent type: + +```scala +trait Bar { + type T + val value: List[Class[T]] +} + +def foo: Bar +``` + +Note that using a wildcard argument, `_` or `?`, is often simpler but is not always possible. +For instance you could replace `List[T] forSome { type T }` by `List[?]`. diff --git a/_overviews/scala3-migration/incompat-other-changes.md b/_overviews/scala3-migration/incompat-other-changes.md new file mode 100644 index 0000000000..43eac04f5a --- /dev/null +++ b/_overviews/scala3-migration/incompat-other-changes.md @@ -0,0 +1,288 @@ +--- +title: Other Changed Features +type: section +description: This chapter details all incompatibilities caused by changed features +num: 18 +previous-page: incompat-contextual-abstractions +next-page: incompat-type-checker +--- + +Some other features are simplified or restricted to make the language easier, safer or more consistent. + +|Incompatibility|Scala 3 Migration Rewrite| +|--- |--- | +|[Inheritance shadowing](#inheritance-shadowing)|✅| +|[Non-private constructor in private class](#non-private-constructor-in-private-class)|Migration Warning| +|[Abstract override](#abstract-override)|| +|[Case class companion](#case-class-companion)|| +|[Explicit call to unapply](#explicit-call-to-unapply)|| +|[Invisible bean property](#invisible-bean-property)|| +|[`=>T` as type argument](#-t-as-type-argument)|| +|[Wildcard type argument](#wildcard-type-argument)|| + +## Inheritance Shadowing + +An inherited member, from a parent trait or class, can shadow an identifier defined in an outer scope. +That pattern is called inheritance shadowing. + +```scala +object B { + val x = 1 + class C extends A { + println(x) + } +} +``` + +For instance, in this preceding piece of code, the `x` term in C can refer to the `x` member defined in the outer class `B` or it can refer to a `x` member of the parent class `A`. +You cannot know until you go to the definition of `A`. + +This is known for being error prone. + +That's why, in Scala 3, the compiler requires disambiguation if the parent class `A` does actually have a member `x`. + +It prevents the following piece of code from compiling. + +```scala +class A { + val x = 2 +} + +object B { + val x = 1 + class C extends A { + println(x) + } +} +``` + +```text +-- [E049] Reference Error: src/main/scala/inheritance-shadowing.scala:9:14 +9 | println(x) + | ^ + | Reference to x is ambiguous, + | it is both defined in object B + | and inherited subsequently in class C +``` + +The [Scala 3 migration compilation](tooling-migration-mode.html) can automatically disambiguate the code by replacing `println(x)` with `println(this.x)`. + +## Non-private Constructor In Private Class + +The Scala 3 compiler requires the constructor of private classes to be private. + +For instance, in the example: + +```scala +package foo + +private class Bar private[foo] () {} +``` + +The error message is: +``` +-- Error: /home/piquerez/scalacenter/scala-3-migration-guide/incompat/access-modifier/src/main/scala-2.13/access-modifier.scala:4:19 +4 | private class Bar private[foo] () + | ^ + | non-private constructor Bar in class Bar refers to private class Bar + | in its type signature (): foo.Foo.Bar +``` + +The [Scala 3 migration compilation](tooling-migration-mode.html) warns about this but no automatic rewrite is provided. + +The solution is to make the constructor private, since the class is private. + +## Abstract Override + +In Scala 3, overriding a concrete def with an abstract def causes subclasses to consider the def abstract, whereas in Scala 2 it was considered as concrete. + +In the following piece of code, the `bar` method in `C` is considered concrete by the Scala 2.13 compiler but abstract by the Scala 3 compiler, causing the following error. + +```scala +trait A { + def bar(x: Int): Int = x + 3 +} + +trait B extends A { + def bar(x: Int): Int +} + +class C extends B // Error: class C needs to be abstract, since def bar(x: Int): Int is not defined +``` + +This behavior was decided in [Dotty issue #4770](https://github.com/lampepfl/dotty/issues/4770). + +An easy fix is simply to remove the abstract def, since in practice it had no effect in Scala 2. + +## Case Class Companion + +The companion object of a case class does not extend any of the `Function{0-23}` traits anymore. +In particular, it does not inherit their methods: `tupled`, `curried`, `andThen`, `compose`... + +For instance, this is not permitted anymore: + +```scala +case class Foo(x: Int, b: Boolean) + +Foo.curried(1)(true) +Foo.tupled((2, false)) +``` + +A cross-compiling solution is to explicitly eta-expand the method `Foo.apply`. + +```diff +-Foo.curried(1)(true) ++(Foo.apply _).curried(1)(true) + +-Foo.tupled((2, false)) ++(Foo.apply _).tupled((2, false)) +``` + +Or, for performance reasons, you can introduce an intermediate function value. + +```scala +val fooCtr: (Int, Boolean) => Foo = (x, b) => Foo(x, b) + +fooCtr.curried(1)(true) +fooCtr.tupled((2, false)) +``` +## Explicit Call to `unapply` + +In Scala, case classes have an auto-generated extractor method, called `unapply` in their companion object. +Its signature has changed between Scala 2.13 and Scala 3. + +The new signature is option-less (see the new [Pattern Matching](https://dotty.epfl.ch/docs/reference/changed-features/pattern-matching.html) reference), which causes an incompatibility when `unapply` is called explicitly. + +Note that this problem does not affect user-defined extractors, whose signature stays the same across Scala versions. + +Given the following case class definition: + +```scala +case class Location(lat: Double, long: Double) +``` + +The Scala 2.13 compiler generates the following `unapply` method: + +```scala +object Location { + def unapply(location: Location): Option[(Double, Double)] = Some((location.lat, location.long)) +} +``` + +Whereas the Scala 3 compiler generates: + +```scala +object Location { + def unapply(location: Location): Location = location +} +``` + +Consequently the following code does not compile anymore. + +```scala +def tuple(location: Location): (Int, Int) = { + Location.unapply(location).get // [E008] Not Found Error: value get is not a member of Location +} +``` + +A possible solution is to use pattern binding: + +```diff +def tuple(location: Location): (Int, Int) = { +- Location.unapply(location).get ++ val Location(lat, lon) = location ++ (lat, lon) +} +``` + +## Invisible Bean Property + +The getter and setter methods generated by the `BeanProperty` annotation are now invisible in Scala 3 because their primary use case is the interoperability with Java frameworks. + +For instance, in the below example: + +```scala +class Pojo() { + @BeanProperty var fooBar: String = "" +} + +val pojo = new Pojo() + +pojo.setFooBar("hello") // [E008] Not Found Error: value setFooBar is not a member of Pojo + +println(pojo.getFooBar()) // [E008] Not Found Error: value getFooBar is not a member of Pojo +``` + +The solution is to call the more idiomatic `pojo.fooBar` getter and setter. + +```diff +val pojo = new Pojo() + +-pojo.setFooBar("hello") ++pojo.fooBar = "hello" + +-println(pojo.getFooBar()) ++println(pojo.fooBar) +``` + +## `=> T` as Type Argument + +A type of the form `=> T` cannot be used as an argument to a type parameter anymore. + +This decision is explained in [this comment](https://github.com/lampepfl/dotty/blob/0f1a23e008148f76fd0a1c2991b991e1dad600e8/compiler/src/dotty/tools/dotc/core/ConstraintHandling.scala#L144-L152) of the Scala 3 source code. + +For instance, it is not allowed to pass a function of type `Int => (=> Int) => Int` to the `uncurried` method since it would assign `=> Int` to the type parameter `T2`. + +``` +-- [E134] Type Mismatch Error: src/main/scala/by-name-param-type-infer.scala:3:41 +3 | val g: (Int, => Int) => Int = Function.uncurried(f) + | ^^^^^^^^^^^^^^^^^^ + |None of the overloaded alternatives of method uncurried in object Function with types + | [T1, T2, T3, T4, T5, R] + | (f: T1 => T2 => T3 => T4 => T5 => R): (T1, T2, T3, T4, T5) => R + | [T1, T2, T3, T4, R](f: T1 => T2 => T3 => T4 => R): (T1, T2, T3, T4) => R + | [T1, T2, T3, R](f: T1 => T2 => T3 => R): (T1, T2, T3) => R + | [T1, T2, R](f: T1 => T2 => R): (T1, T2) => R + |match arguments ((Test.f : Int => (=> Int) => Int)) +``` + +The solution depends on the situation. In the given example, you can either: + - define your own `uncurried` method with the appropriate signature + - inline the implementation of `uncurried` locally + +## Wildcard Type Argument + +Scala 3 cannot reduce the application of a higher-kinded abstract type member to the wildcard argument. + +For instance, the following example does not compile. +For instance, the following example does not compile. + +```scala +trait Example { + type Foo[A] + + def f(foo: Foo[_]): Unit // [E043] Type Error: unreducible application of higher-kinded type Example.this.Foo to wildcard arguments +} +``` + +We can fix this by using a type parameter: + +```diff +-def f(foo: Foo[_]): Unit ++def f[A](foo: Foo[A]): Unit +``` + +But this simple solution does not work when `Foo` is itself used as a type argument. + +```scala +def g(foos: Seq[Foo[_]]): Unit` +``` + +In such case, we can use a wrapper class around `Foo`: + +```diff ++class FooWrapper[A](foo: Foo[A]) + +-def g(foos: Seq[Foo[_]]): Unit` ++def g(foos: Seq[FooWrapper[_]]): Unit +``` diff --git a/_overviews/scala3-migration/incompat-syntactic.md b/_overviews/scala3-migration/incompat-syntactic.md new file mode 100644 index 0000000000..f1999d5fef --- /dev/null +++ b/_overviews/scala3-migration/incompat-syntactic.md @@ -0,0 +1,221 @@ +--- +title: Syntactic Changes +type: section +description: This chapter details all the incompatibilities caused by syntactic changes +num: 15 +previous-page: incompatibility-table +next-page: incompat-dropped-features +--- + +Scala 3 introduces the optional-braces syntax and the new control structure syntax. +It comes at the cost of some minimal restrictions in the preexisting syntax. + +Other syntactic changes are intended to make the syntax less surprising and more consistent. + +It is worth noting that most of the changes can be automatically handled during the [Scala 3 migration compilation](tooling-migration-mode.html). + +|Incompatibility|Scala 2.13|Scala 3 Migration Rewrite|Scalafix Rule| +|--- |--- |--- |--- |--- | +|[Restricted keywords](#restricted-keywords)||✅|| +|[Procedure syntax](#procedure-syntax)|Deprecation|✅|[✅](https://scalacenter.github.io/scalafix/docs/rules/ProcedureSyntax.html)| +|[Parentheses around lambda parameter](#parentheses-around-lambda-parameter)||✅|[✅](https://github.com/ohze/scala-rewrites/tree/dotty/#fixscala213parensaroundlambda)| +|[Open brace indentation for passing an argument](#open-brace-indentation-for-passing-an-argument)||✅|| +|[Wrong indentation](#wrong-indentation)|||| +|[`_` as a type parameter](#_-as-a-type-parameter)|||| +|[`+` and `-` as type parameters](#-and---as-type-parameters)|||| + +## Restricted Keywords + +The list of Scala 3 keywords can be found [here](https://dotty.epfl.ch/docs/internals/syntax.html#keywords). +_Regular_ keywords cannot be used as identifiers, whereas _soft_ keywords are not restricted. + +For the matter of migrating from Scala 2.13 to Scala 3, only the subset of new _regular_ keywords are problematic. +It is composed of: +- `enum` +- `export` +- `given` +- `then` +- `=>>` +- `?=>` + +For instance, the following piece of code can be compiled with Scala 2.13 but not wtih Scala 3. + +```scala +object given { // Error: given is now a keyword, write `given` instead of given to keep it as an identifier + val enum = ??? // Error: enum is now a keyword, write `enum` instead of given to keep it as an identifier + + println(enum) // Error: enum is now a keyword, write `enum` instead of given to keep it as an identifier +} +``` + +The [Scala 3 migration compilation](tooling-migration-mode.html) rewrites the code into: + +```diff +-object given { +- val enum = ??? + +- println(enum) ++object `given` { ++ val `enum` = ??? + ++ println(`enum`) +} +``` + +## Procedure Syntax + +Procedure syntax has been deprecated for a while and it is dropped in Scala 3. +The following pieces of code are now illegal: + +```scala +object Bar { + def print() { // Error: Procedure syntax no longer supported; `: Unit =` should be inserted here + println("bar") + } +} +``` + +The [Scala 3 migration compilation](tooling-migration-mode.html) rewrites the code into. + +```diff +object Bar { +- def print() { ++ def print(): Unit = { + println("bar") + } +} +``` + +## Parentheses Around Lambda Parameter + +When followed by its type, the parameter of a lambda is now required to be enclosed in parentheses. +The following piece of code is invalid. + +```scala +val f = { x: Int => x * x } // Error: parentheses are required around the parameter of a lambda +``` + +The [Scala 3 migration compilation](tooling-migration-mode.html) rewrites the code into: + +```diff +-val f = { x: Int => x * x } ++val f = { (x: Int) => x * x } +``` + +## Open Brace Indentation For Passing An Argument + +In Scala 2 it is possible to pass an argument after a new line by enclosing it into braces. +Although valid, this style of coding is not encouraged by the [Scala style guide](https://docs.scala-lang.org/style) and is no longer supported in Scala 3. + +This syntax is now invalid: +```scala +test("my test") +{ // Error: This opening brace will start a new statement in Scala 3. + assert(1 == 1) +} +``` + +The [Scala 3 migration compiler](tooling-migration-mode.html) indents the first line of the block. + +```diff +test("my test") +-{ ++ { + assert(1 == 1) +} +``` + +This migration rule applies to other patterns as well, such as refining a type after a new line. + +```diff +type Bar = Foo +- { ++ { + def bar(): Int +} +``` + +A preferable solution is to write: + +``` diff +-test("my test") +-{ ++test("my test") { + assert(1 == 1) +} +``` + +## Wrong indentation + +The Scala 3 compiler now requires correct indentation. +The following piece of code, that was compiled in Scala 2.13, does not compile anymore because of the indentation. + +```scala +def bar: (Int, Int) = { + val foo = 1.0 + val bar = foo // [E050] Type Error: value foo does not take parameters + (1, 1) +} // [E007] Type Mismatch Error: Found Unit, Required (Int, Int) +``` + +The indentation must be fixed. + +```diff +def bar: (Int, Int) = { + val foo = 1.0 + val bar = foo +- (1, 1) ++ (1, 1) +} +``` + +These errors can be prevented by using a Scala formatting tool such as [scalafmt](https://scalameta.org/scalafmt/) or the [IntelliJ Scala formatter](https://www.jetbrains.com/help/idea/reformat-and-rearrange-code.html). +Beware that these tools may change the entire code style of your project. + +## `_` As A Type Parameter + +The usage of the `_` identifier as a type parameter is permitted in Scala 2.13, even if it has never been mentioned in the Scala 2 specification. +It is used in the API of [fastparse](https://index.scala-lang.org/lihaoyi/fastparse), in combination with a context bound, to declare an implicit parameter. + +```sala +def foo[_: Foo]: Unit = ??? +``` + +Here, the method `foo` takes a type parameter `_` and an implicit parameter of type `Foo[_]` where `_` refers to the type parameter, not the wildcard symbol. + +Martin Odersky described this pattern as a "clever exploit of a scalac compiler bug" ([source](https://www.reddit.com/r/scala/comments/fczcvo/mysterious_context_bounds_in_fastparse_2/fjecokn/)). + +The Scala 3 compiler does not permit this pattern anymore: + +```text +-- [E040] Syntax Error: src/main/scala/anonymous-type-param.scala:4:10 +4 | def foo[_: Foo]: Unit = () + | ^ + | an identifier expected, but '_' found +``` + +The solution is to give the parameter a valid identifier name, for instance `T`. +This will not break the binary compatibility. + +```diff +-def foo[_: Foo]: Unit = ??? ++def foo[T: Foo]: Unit = ??? +``` + +## `+` And `-` As Type Parameters + +`+` and `-` are not valid identifiers for type parameters in Scala 3, since they are reserved for variance annotation. + +You cannot write `def foo[+]` or `def foo[-]` anymore. + +``` +-- Error: src/main/scala/type-param-identifier.scala:2:10 +2 | def foo[+]: + + | ^ + | no `+/-` variance annotation allowed here +``` + +The solution is to choose another valid identifier, for instance `T`. + +However, `+` and `-` still are valid type identifiers in general. +You can write `type +`. diff --git a/_overviews/scala3-migration/incompat-type-checker.md b/_overviews/scala3-migration/incompat-type-checker.md new file mode 100644 index 0000000000..ca5295ddef --- /dev/null +++ b/_overviews/scala3-migration/incompat-type-checker.md @@ -0,0 +1,116 @@ +--- +title: Type Checker +type: section +description: This chapter details the unsoundness fixes in the type checker +num: 19 +previous-page: incompat-other-changes +next-page: incompat-type-inference +--- + +The Scala 2.13 type checker is unsound in some specific cases. +This can lead to surprising runtime errors in places we would not expect. +Scala 3 being based on stronger theoretical foundations, these unsoundness bugs in the type checker are now fixed. + +## Unsoundness Fixes in Variance checks + +In Scala 2, default parameters and inner-classes are not subject to variance checks. +It is unsound and might cause runtime failures, as demonstrated by this [test](https://github.com/lampepfl/dotty/blob/10526a7d0aa8910729b6036ee51942e05b71abf6/tests/neg/variances.scala) in the Scala 3 repository. + +The Scala 3 compiler does not permit this anymore. + +```scala +class Foo[-A](x: List[A]) { + def f[B](y: List[B] = x): Unit = ??? +} + +class Outer[+A](x: A) { + class Inner(y: A) +} +``` + +```text +-- Error: src/main/scala/variance.scala:2:8 +2 | def f[B](y: List[B] = x): Unit = y + | ^^^^^^^^^^^^^^^^^ + |contravariant type A occurs in covariant position in type [B] => List[A] of method f$default$1 +-- Error: src/main/scala/variance.scala:6:14 +6 | class Inner(y: A) + | ^^^^ + |covariant type A occurs in contravariant position in type A of parameter y +``` + +Each problem of this kind needs a specific care. +You can try the following options on a case-by-case basis: +- Make type `A` invariant +- Add a lower or an upper bound on a type parameter `B` +- Add a new method overload + +In our example, we can opt for these two solutions: + +```diff +class Foo[-A](x: List[A]) { +- def f[B](y: List[B] = x): Unit = ??? ++ def f[B](y: List[B]): Unit = ??? ++ def f(): Unit = f(x) +} + +class Outer[+A](x: A) { +- class Inner(y: A) ++ class Inner[B >: A](y: B) +} +``` + +Or, as a temporary solution, you can also use the `uncheckedVariance` annotation: + +```diff +class Outer[+A](x: A) { +- class Inner(y: A) ++ class Inner(y: A @uncheckedVariance) +} +``` + +## Unsoundness Fixes in Pattern Matching + +Scala 3 fixes some unsoundness bugs in pattern matching, preventing some semantically wrong match expressions to type check. + +For instance, the match expression in `combineReq` can be compiled with Scala 2.13 but not with Scala 3. + +```scala +trait Request +case class Fetch[A](ids: Set[A]) extends Request + +object Request { + def combineFetch[A](x: Fetch[A], y: Fetch[A]): Fetch[A] = Fetch(x.ids ++ y.ids) + + def combineReq(x: Request, y: Request): Request = { + (x, y) match { + case (x @ Fetch(_), y @ Fetch(_)) => combineFetch(x, y) + } + } +} +``` + +The error message is: + +```text +-- [E007] Type Mismatch Error: src/main/scala/pattern-match.scala:9:59 +9 | case (x @ Fetch(_), y @ Fetch(_)) => combineFetch(x, y) + | ^ + | Found: (y : Fetch[A$2]) + | Required: Fetch[A$1] +``` + +Which is right, there is no proof that `x` and `y` have the same type paramater `A`. + +Coming from Scala 2, this is clearly an improvement to help us locate mistakes in our code. +To solve this incompatibility it is better to find a solution that can be checked by the compiler. +It is not always easy and sometimes it is even not possible, in which case the code is likely to fail at runtime. + +In this example, we can relax the constraint on `x` and `y` by stating that `A` is a common ancestor of both type arguments. +This makes the compiler type-check the code successfully. + +```scala +def combineFetch[A](x: Fetch[_ <: A], y: Fetch[_ <: A]): Fetch[A] = Fetch(x.ids ++ y.ids) +``` + +Alternatively, a general but unsafe solution is to cast. diff --git a/_overviews/scala3-migration/incompat-type-inference.md b/_overviews/scala3-migration/incompat-type-inference.md new file mode 100644 index 0000000000..dc52ee0567 --- /dev/null +++ b/_overviews/scala3-migration/incompat-type-inference.md @@ -0,0 +1,93 @@ +--- +title: Type Inference +type: section +description: This chapter details the incompatibilities caused by the new type inference algorithm +num: 20 +previous-page: incompat-type-checker +next-page: options-intro +--- + +The two incompatibilities described in this page are intentional changes in the type inference rules. + +Other incompatibilities could be caused by the replacement of the type inference algorithm. +The new algorithm is better than the old one, but sometime it can fail where Scala 2.13 would succeed: + +> It is always good practice to write the result types of all public values and methods explicitly. +> It prevents the public API of your library from changing with the Scala version, because of different inferred types. +> +> This can be done prior to the Scala 3 migration by using the [ExplicitResultTypes](https://scalacenter.github.io/scalafix/docs/rules/ExplicitResultTypes.html) rule in Scalafix. + +## Return Type of an Override Method + +In Scala 3 the return type of an override method is inferred by inheritance from the base method, whereas in Scala 2.13 it is inferred from the left hand side of the override method. + +```scala +class Parent { + def foo: Foo = new Foo +} + +class Child extends Parent { + override def foo = new RichFoo(super.foo) +} +``` + +In this example, `Child#foo` returns a `RichFoo` in Scala 2.13 but a `Foo` in Scala 3. +It can lead to compiler errors as demonstrated below. + +```scala +class Foo + +class RichFoo(foo: Foo) extends Foo { + def show: String = "" +} + +class Parent { + def foo: Foo = new Foo +} + +class Child extends Parent { + override def foo = new RichFoo(super.foo) +} + +(new Child).foo.show // Scala 3 error: value show is not a member of Foo +``` + +In some rare cases involving implicit conversions and runtime casting it could even cause a runtime failure. + +The solution is to make the return type of the override method explicit: + +```diff +class Child extends Parent { +- override def foo = new RichFoo(super.foo) ++ override def foo: RichFoo = new RichFoo(super.foo) +} +``` +## Reflective Type + +Scala 2 reflective calls are dropped and replaced by the broader [Programmatic Structural Types](https://dotty.epfl.ch/docs/reference/changed-features/structural-types.html). + +Scala 3 can imitate Scala 2 reflective calls by making `scala.reflect.Selectable.reflectiveSelectable` available wherever `scala.language.reflectiveCalls` is imported. +However the Scala 3 compiler does not infer structural types by default, and thus fails at compiling: + +```scala +import scala.language.reflectiveCalls + +val foo = new { + def bar: Unit = ??? +} + +foo.bar // Error: value bar is not a member of Object +``` + +The straightforward solution is to write down the structural type. + +```diff +import scala.language.reflectiveCalls + +- val foo = new { ++ val foo: { def bar: Unit } = new { + def bar: Unit = ??? +} + +foo.bar +``` diff --git a/_overviews/scala3-migration/incompatibility-table.md b/_overviews/scala3-migration/incompatibility-table.md new file mode 100644 index 0000000000..2759bb4fe2 --- /dev/null +++ b/_overviews/scala3-migration/incompatibility-table.md @@ -0,0 +1,126 @@ +--- +title: Incompatibility Table +type: chapter +description: This chapter list all the known incompatibilities between Scala 2.13 and Scala 3 +num: 14 +previous-page: tooling-syntax-rewriting +next-page: incompat-syntactic +--- + +An incompatibility is a piece of code that can be compiled with Scala 2.13 but not with Scala 3. +Migrating a codebase involves finding and fixing all the incompatibilities of the source code. +On rare occasions we can also have a runtime incompatibility: a piece of code that behaves differently at runtime. + +In this page we propose a classification of the known incompatibilities. +Each incompatibility is described by: + - Its short name with a link towards the detailed description and proposed solutions + - Whether the Scala 2.13 compiler emits a deprecation or a feature warning + - The existence of a [Scala 3 migration](tooling-migration-mode.html) rule for it + - The existence of a Scalafix rule that can fix it + +> #### Scala 2.13 deprecations and feature warnings +> Run the 2.13 compilation with `-source:3` to locate those incompatibilities in the code. + +> #### Scala 3 migration versus Scalafix rewrites +> The Scala 3 migration mode comes out-of-the-box. +> On the contrary, Scalafix is a tool that must be installed and configured manually. +> However Scalafix has its own advantages: +> - It runs on Scala 2.13. +> - It is composed of individual rules that you can apply one at a time. +> - It is easily extensible by adding custom rules. + +### Syntactic Changes + +Some of the old syntax is not supported anymore. + +|Incompatibility|Scala 2.13|Scala 3 Migration Rewrite|Scalafix Rule| +|--- |--- |--- |--- |--- | +|[Restricted keywords](incompat-syntactic.html#restricted-keywords)||✅|| +|[Procedure syntax](incompat-syntactic.html#procedure-syntax)|Deprecation|✅|[✅](https://scalacenter.github.io/scalafix/docs/rules/ProcedureSyntax.html)| +|[Parentheses around lambda parameter](incompat-syntactic.html#parentheses-around-lambda-parameter)||✅|[✅](https://github.com/ohze/scala-rewrites/tree/dotty/#fixscala213parensaroundlambda)| +|[Open brace indentation for passing an argument](incompat-syntactic.html#open-brace-indentation-for-passing-an-argument)||✅|| +|[Wrong indentation](incompat-syntactic.html#wrong-indentation)|||| +|[`_` as a type parameter](incompat-syntactic.html#_-as-a-type-parameter)|||| +|[`+` and `-` as type parameters](incompat-syntactic.html#-and---as-type-parameters)|||| + +### Dropped Features + +Some features are dropped to simplify the language. + +|Incompatibility|Scala 2.13|Scala 3 Migration Rewrite|Scalafix Rule| +|--- |--- |--- |--- | +|[Symbol literals](incompat-dropped-features.html#symbol-literals)|Deprecation|✅|| +|[`do`-`while` construct](incompat-dropped-features.html#do-while-construct)||✅|| +|[Auto-application](incompat-dropped-features.html#auto-application)|Deprecation|✅|[✅](https://github.com/scala/scala-rewrites/blob/main/rewrites/src/main/scala/fix/scala213/ExplicitNonNullaryApply.scala)| +|[Value eta-expansion](incompat-dropped-features.html#value-eta-expansion)|Deprecation|✅|[✅](https://github.com/scala/scala-rewrites/blob/main/rewrites/src/main/scala/fix/scala213/ExplicitNullaryEtaExpansion.scala)| +|[`any2stringadd` conversion](incompat-dropped-features.html#any2stringadd-conversion)|Deprecation||[✅](https://github.com/scala/scala-rewrites/blob/main/rewrites/src/main/scala/fix/scala213/Any2StringAdd.scala)| +|[Early initializer](incompat-dropped-features.html#early-initializer)|Deprecation||| +|[Existential type](incompat-dropped-features.html#existential-type)|Feature warning||| + +### Contextual Abstractions + +The redesign of [contextual abstractions](https://dotty.epfl.ch/docs/reference/contextual/motivation.html) brings some well defined incompatibilities. + +|Incompatibility|Scala 2.13|Scala 3 Migration Rewrite|Scalafix Rule|Runtime Incompatibility| +|--- |--- |--- |--- |--- | +|[Type of implicit def](incompat-contextual-abstractions.html#type-of-implicit-definition)|||[✅](https://github.com/ohze/scala-rewrites#fixexplicittypesexplicitimplicittypes)|| +|[Implicit views](incompat-contextual-abstractions.html#implicit-views)||||**Possible**| +|[View bounds](incompat-contextual-abstractions.html#view-bounds)|Deprecation|||| +|[Ambiguous conversion on `A` and `=> A`](incompat-contextual-abstractions.html#ambiguous-conversion-on-a-and--a)||||| + +Furthermore we have changed the implicit resolution rules so that they are more useful and less surprising. +The new rules are described [here](https://dotty.epfl.ch/docs/reference/changed-features/implicit-resolution.html). + +Because of these changes, the Scala 3 compiler could possibly fail at resolving some implicit parameters of existing Scala 2.13 code. + +### Other Changed Features + +Some other features are simplified or restricted to make the language easier, safer or more consistent. + +|Incompatibility|Scala 3 Migration Rewrite| +|--- |--- | +|[Inheritance shadowing](incompat-other-changes.html#inheritance-shadowing)|✅| +|[Non-private constructor in private class](incompat-other-changes.html#non-private-constructor-in-private-class)|Migration Warning| +|[Abstract override](incompat-other-changes.html#abstract-override)|| +|[Case class companion](incompat-other-changes.html#case-class-companion)|| +|[Explicit call to unapply](incompat-other-changes.html#explicit-call-to-unapply)|| +|[Invisible bean property](incompat-other-changes.html#invisible-bean-property)|| +|[`=>T` as type argument](incompat-other-changes.html#-t-as-type-argument)|| +|[Wildcard type argument](incompat-other-changes.html#wildcard-type-argument)|| + +### Type Checker + +The Scala 2.13 type checker is unsound in some specific cases. +This can lead to surprising runtime errors in places we would not expect. +Scala 3 being based on stronger theoretical foundations, these unsoundness bugs in the type checker are now fixed. + +|Incompatibility| +|--- | +|[Variance checks](incompat-type-checker.html#unsoundness-fixes-in-variance-checks)| +|[Pattern matching](incompat-type-checker.html#unsoundness-fixes-in-pattern-matching)| + +### Type Inference + +Some specific type inference rules have changed between Scala 2.13 and Scala 3. + +|Incompatibility| +|--- | +|[Return type of override method](incompat-type-inference.html#return-type-of-an-override-method)| +|[Reflective type](incompat-type-inference.html#reflective-type)| + +Also we have improved the type inference algorithm by redesigning it entirely. +This fundamental change leads to a few incompatibilities: +- A different type can be inferred +- A new type-checking error can appear + +> It is always good practice to write the result types of all public values and methods explicitly. +> It prevents the public API of your library from changing with the Scala version, because of different inferred types. +> +> This can be done prior to the Scala 3 migration by using the [ExplicitResultTypes](https://scalacenter.github.io/scalafix/docs/rules/ExplicitResultTypes.html) rule in Scalafix. + +### Macros + +The Scala 3 compiler is not able to expand Scala 2.13 macros. +Under such circumstances it is necessary to re-implement the Scala 2.13 macros using the new Scala 3 metaprogramming features. + +You can go back to the [Metaprogramming](compatibility-metaprogramming.html) page to learn about the new metaprogramming features. diff --git a/_overviews/scala3-migration/options-intro.md b/_overviews/scala3-migration/options-intro.md new file mode 100644 index 0000000000..ad6b2dc29b --- /dev/null +++ b/_overviews/scala3-migration/options-intro.md @@ -0,0 +1,19 @@ +--- +title: Compiler Options +type: chapter +description: This chapter shows the difference between Scala 2.13 and Scala 3 compiler options +num: 21 +previous-page: incompat-type-inference +next-page: options-lookup +--- + +The Scala 3 compiler has been rewritten from the ground up and consequently it does not offer the same options as the Scala 2.13 compiler. +Some options are available under a different name, others have just not been implemented yet. + +When porting a Scala 2.13 project to Scala 3, you will need to adapt the list of compiler options. +To do so you can refer to the [Lookup Table](options-lookup.html). + +> Passing an unavailable option to the Scala 3 compiler does not make it fail. +> It just prints a warning and ignores the option. + +You can also discover the new Scala 3 compiler options, that have no equivalent in Scala 2.13, in the [New Compiler Options](options-new.html) page. diff --git a/_overviews/scala3-migration/options-lookup.md b/_overviews/scala3-migration/options-lookup.md new file mode 100644 index 0000000000..0e906adb21 --- /dev/null +++ b/_overviews/scala3-migration/options-lookup.md @@ -0,0 +1,270 @@ +--- +title: Compiler Options Lookup Table +type: section +description: This section contains the compiler options lookup tables +num: 22 +previous-page: options-intro +next-page: options-new +--- + +The compiler options are classified and ordered according to their Scala 2.13 name. +Each Scala 2.13 option is associated with its status in Scala 3. + +| Status | Meaning | +|-|-| +| | it is available in Scala 3 | +| `` | It has been renamed to `` | +| | It is not available in 3.0.0 but it could be added later | + +> The current comparison is based on Scala 2.13.4 and 3.0.0-M3. + +## Standard Settings + +| 2.13.x | 3.0.x | +|-|-| +| `-Dproperty=value` | | +| `-J` | | +| `-P::` || +| `-V` | | +| `-W` | | +| `-X` || +| `-Y` || +| `-bootclasspath` || +| `-classpath` || +| `-d` || +| `-dependencyfile` | | +| `-deprecation` || +| `-encoding` || +| `-explaintypes` | `-explain-types` | +| `-extdirs` || +| `-feature` || +| `-g` | | +| `-help` || +| `-javabootclasspath` || +| `-javaextdirs` || +| `-language` || +| `-no-specialization` | | +| `-nobootcp` | | +| `-nowarn` || +| `-opt` | | +| `-opt-inline-from` | | +| `-opt-warnings` | | +| `-optimize` | | +| `-print` || +| `-release` || +| `-rootdir` | | +| `-sourcepath` || +| `-target` | `-Xtarget` | +| `-toolcp` | | +| `-unchecked` || +| `-uniqid` || +| `-usejavacp` || +| `-usemanifestc` | | +| `-verbose` || +| `-version` || + +## Advanced Settings + +| 2.13.x | 3.0.x | +|-|-| +| `-X` || +| `-Xcheckinit` | `-Ycheck-init` | +| `-Xdev` | | +| `-Xdisable-assertions` | | +| `-Xelide-below` | | +| `-Xexperimental` | | +| `-Xfuture` | | +| `-Xgenerate-phase-graph` | | +| `-Xjline` | | +| `-Xlint:deprecation` | `-deprecation` | +| `-Xlint:` | | +| `-Xlog-implicit-conversion` | | +| `-Xlog-implicits` | | +| `-Xlog-reflective-calls` | | +| `-Xmacro-settings` | | +| `-Xmain-class` | | +| `-Xmaxerrs` | | +| `-Xmaxwarns` | | +| `-Xmigration` || +| `-Xmixin-force-forwarders` || +| `-Xno-forwarders` || +| `-Xno-patmat-analysis` | | +| `-Xnojline` | | +| `-Xplugin` || +| `-Xplugin-disable` || +| `-Xplugin-list` || +| `-Xplugin-require` || +| `-Xpluginsdir` || +| `-Xprint-args` | | +| `-Xprompt` || +| `-Xreporter` | | +| `-Xresident` | | +| `-Xscript` | | +| `-Xshow-class ` | | +| `-Xshow-object ` | | +| `-Xsource` | `-source` | +| `-Xsource-reader` | | +| `-Xverify` | `-Xverify-signatures` | +| `-Xxml` | | + +## Private settings + +| 2.13.x | 3.0.x | +|-|-| +| `-Ybackend-parallelism` | | +| `-Ybackend-worker-queue` | | +| `-Ybreak-cycles` | | +| `-Ycache-macro-class-loader` | | +| `-Ycache-plugin-class-loader` | | +| `-Ycheck` || +| `-Ycompact-trees` | | +| `-Ydelambdafy` | | +| `-Ydump-classes` || +| `-Ygen-asmp` | | +| `-Yhot-statistics` | | +| `-Yide-debug` | | +| `-Yimports` | | +| `-Yissue-debug` | | +| `-Yjar-compression-level` | | +| `-YjarFactory` | | +| `-Ymacro-debug-lite` | | +| `-Ymacro-debug-verbose` | | +| `-Ymacro-annotations` | | +| `-Ymacro-classpath` | | +| `-Ymacro-expand` | | +| `-Ymacro-global-fresh-names` | | +| `-Yno-completion` | | +| `-Yno-flat-classpath-cache` | | +| `-Yno-generic-signatures` || +| `-Yno-imports` || +| `-Yno-predef` || +| `-Yopt-inline-heuristics` | | +| `-Yopt-log-inline ` | | +| `-Yopt-trace ` | | +| `-Ypatmat-debug` | | +| `-Ypatmat-exhaust-depth` | | +| `-Ypos-debug` | | +| `-Ypresentation-any-thread` | | +| `-Ypresentation-debug` | | +| `-Ypresentation-delay` | | +| `-Ypresentation-locate-source-file` | | +| `-Ypresentation-log` | | +| `-Ypresentation-strict` | | +| `-Ypresentation-verbose` | | +| `-Yprint-trees` | | +| `-Yprofile-destination` || +| `-Yprofile-enabled` || +| `-Yprofile-trace` | | +| `-Yquasiquote-debug` | | +| `-Yrangepos` | | +| `-Yrecursion` | | +| `-Yreify-copypaste` | | +| `-Yreify-debug` | | +| `-Yrepl-class-based` | | +| `-Yrepl-outdir` | | +| `-Yrepl-use-magic-imports` | | +| `-Yresolve-term-conflict` || +| `-Yscriptrunner` | | +| `-Yskip` || +| `-Yshow:` | | +| `-Yshow-member-pos ` | | +| `-Yshow-symkinds` | | +| `-Yshow-symowners` | | +| `-Yshow-syms` | | +| `-Ystatistics ` | | +| `-Ystop-after` || +| `-Ystop-before` || +| `-Ytyper-debug` | | +| `-Yvalidate-pos` | | +| `-Ywarn-dead-code` | | +| `-Ywarn-numeric-widen` | | +| `-Ywarn-unused:` | | +| `-Ywarn-value-discard` | | + +## Verbose Settings + +Verbose settings were introduced in 2.13. +Most of them are not yet implemented in Scala 3. + +| 2.13.x | 3.0.x | +|-|-| +| `-Vbrowse:` | | +| `-Vdebug-tasty` | | +| `-Vdoc` | | +| `-Vfree-terms` | | +| `-Vfree-types` | | +| `-Vhot-statistics`| | +| `-Vide`| | +| `-Vimplicit-conversions`| | +| `-Vimplicits`| | +| `-Vinline ` | | +| `-Vissue`| | +| `-Vmacro` | | +| `-Vmacro-lite` | | +| `-Vopt ` | | +| `-Vpatmat` | | +| `-Vpos`| | +| `-Vprint:` | `-Xprint:` | +| `-Vphases` | `-Xshow-phases` | +| `-Vclasspath` | `-Ylog-classpath` | +| `-Vlog:` | `-Ylog:`| +| `-Vdebug` | `-Ydebug` | +| `-Vprint-args ` | | +| `-Vprint-pos` | `-Yprint-pos` | +| `-Vprint-types` | `-Xprint-types` | +| `-Vquasiquote` | | +| `-Vreflective-calls` | | +| `-Vreify` | | +| `-Vshow:` | | +| `-Vshow-class ` | | +| `-Vshow-member-pos ` | | +| `-Vshow-object ` | | +| `-Vshow-symkinds` | | +| `-Vshow-symowners` | | +| `-Vstatistics ` | | +| `-Vsymbols` | | +| `-Vtyper` | | + +## Warning Settings + +Warning settings were introduced in 2.13. +Most of them are not yet implemented in Scala 3. + +| 2.13.x | 3.0.x | +|-|-| +| `-Wconf` | | +| `-Wdead-code` | | +| `-Werror` | `-Xfatal-warnings` | +| `-Wextra-implicit` | | +| `-Wmacros:` | | +| `-Wnumeric-widen` | | +| `-Woctal-literal` | | +| `-Wunused:` | | +| `-Wvalue-discard`| | +| `-Wself-implicit` | | + +## Compiler Plugins + +Some useful Scala 2.13 compiler plugins are now shipped into the compiler. +You can enable and configure them with some new native options. + +### Scala.js + +| 2.13.x | 3.0.x | +|-|-| +| `-Xplugin:scalajs-compiler_.jar` | `-scalajs` | +| `-P:scalajs:genStaticForwardersForNonTopLevelObjects` | `-scalajs-genStaticForwardersForNonTopLevelObjects` | +| `-P:scalajs:mapSourceURI`| `-scalajs-mapSourceURI`| + +### SemanticDB + +| 2.13.x | 3.0.x | +|-|-| +| `-Xplugin:semanticdb-scalac_.jar`| `-Xsemanticdb` | +| `-P:semanticdb:targetroot:` | `-semanticdb-target:` | + +### Kind-Projector + +| 2.13.x | 3.0.x | +|-|-| +| `-Xplugin:kind-projector_.jar` | `-Ykind-projector` | diff --git a/_overviews/scala3-migration/options-new.md b/_overviews/scala3-migration/options-new.md new file mode 100644 index 0000000000..2d4297bd2d --- /dev/null +++ b/_overviews/scala3-migration/options-new.md @@ -0,0 +1,97 @@ +--- +title: New Compiler Options +type: section +description: This chapter lists all the new compiler options in Scala 3 +num: 23 +previous-page: options-lookup +next-page: +--- + +The current page only contains the options that were added in Scala 3.0.x. + +## Standard settings + +| 3.0.x | description | +|-|-| +| `-color` | Colored output Default: always. | +| `-doc-snapshot` | Generate a documentation snapshot for the current Dotty version | +| `-explain` | Explain errors in more detail. | +| `-from-tasty` | Compile classes from tasty files. The arguments are .tasty or .jar files. | +| `-indent` | Together with -rewrite, remove {...} syntax when possible due to significant indentation. | +| `-new-syntax` | Require `then` and `do` in control expressions. | +| `-noindent` | Require classical {...} syntax, indentation is not significant. | +| `-old-syntax` | Require `(...)` around conditions. | +| `-pagewidth` | Set page width Default: 80. | +| `-print-lines` | Show source code line numbers. | +| `-print-tasty` | Prints the raw tasty. | +| `-project` | The name of the project. | +| `-project-logo` | The file that contains the project's logo (in /images). | +| `-project-url` | The source repository of your project. | +| `-project-version` | The current version of your project. | +| `-rewrite` | When used in conjunction with a `...-migration` source version, rewrites sources to migrate to new version. | +| `-siteroot` | A directory containing static files from which to generate documentation. Default: ./docs. | +| `-sourceroot` | Specify workspace root directory. Default: .. | + +## Advanced settings + +| 3.0.x | description | +|-|-| +| `-Xignore-scala2-macros` | Ignore errors when compiling code that calls Scala2 macros, these will fail at runtime. | +| `-Ximport-suggestion-timeout` | Timeout (in ms) for searching for import suggestions when errors are reported. | +| `-Xmax-inlined-trees` | Maximal number of inlined trees. Default: 2000000 | +| `-Xmax-inlines` | Maximal number of successive inlines. Default: 32. | +| `-Xprint-diff` | Print changed parts of the tree since last print. | +| `-Xprint-diff-del` | Print changed parts of the tree since last print including deleted parts. | +| `-Xprint-inline` | Show where inlined code comes from. | +| `-Xprint-suspension` | Show when code is suspended until macros are compiled. | +| `-Xrepl-disable-display` | Do not display definitions in REPL. | +| `-Xwiki-syntax` | Retains the Scala2 behavior of using Wiki Syntax in Scaladoc. | + +## Private settings + +| 3.0.x | description | +|-|-| +| `-Ycheck-all-patmat` | Check exhaustivity and redundancy of all pattern matching (used for testing the algorithm). | +| `-Ycheck-mods` | Check that symbols and their defining trees have modifiers in sync. | +| `-Ycheck-reentrant` | Check that compiled program does not contain vars that can be accessed from a global root. | +| `-Ycook-comments` | Cook the comments (type check `@usecase`, etc.) | +| `-Ydebug-error` | Print the stack trace when any error is caught. | +| `-Ydebug-flags` | Print all flags of definitions. | +| `-Ydebug-missing-refs` | Print a stacktrace when a required symbol is missing. | +| `-Ydebug-names` | Show internal representation of names. | +| `-Ydebug-pos` | Show full source positions including spans. | +| `-Ydebug-trace` | Trace core operations. | +| `-Ydebug-tree-with-id` | Print the stack trace when the tree with the given id is created. Default: -2147483648. | +| `-Ydebug-type-error` | Print the stack trace when a TypeError is caught | +| `-Ydetailed-stats` | Show detailed internal compiler stats (needs Stats.enabled to be set to true). | +| `-YdisableFlatCpCaching` | Do not cache flat classpath representation of classpath elements from jars across compiler instances. | +| `-Ydrop-comments` | Drop comments when scanning source files. | +| `-Ydump-sbt-inc` | For every compiled foo.scala, output the API representation and dependencies used for sbt incremental compilation in foo.inc, implies -Yforce-sbt-phases. | +| `-Yerased-terms` | Allows the use of erased terms. | +| `-Yexplain-lowlevel` | When explaining type errors, show types at a lower level. | +| `-Yexplicit-nulls` | Make reference types non-nullable. Nullable types can be expressed with unions: e.g. String|Null. | +| `-Yforce-sbt-phases` | Run the phases used by sbt for incremental compilation (ExtractDependencies and ExtractAPI) even if the compiler is ran outside of sbt, for debugging. | +| `-Yfrom-tasty-ignore-list` | List of `tasty` files in jar files that will not be loaded when using -from-tasty | +| `-Yindent-colons` | Allow colons at ends-of-lines to start indentation blocks. | +| `-Yinstrument` | Add instrumentation code that counts allocations and closure creations. | +| `-Yinstrument-defs` | Add instrumentation code that counts method calls; needs -Yinstrument to be set, too. | +| `-Yno-decode-stacktraces` | how raw StackOverflow stacktraces, instead of decoding them into triggering operations. | +| `-Yno-deep-subtypes` | Throw an exception on deep subtyping call stacks. | +| `-Yno-double-bindings` | Assert no namedtype is bound twice (should be enabled only if program is error-free). | +| `-Yno-kind-polymorphism` | Disable kind polymorphism. | +| `-Yno-patmat-opt` | Disable all pattern matching optimizations. | +| `-Yplain-printer` | Pretty-print using a plain printer. | +| `-Yprint-debug` | When printing trees, print some extra information useful for debugging. | +| `-Yprint-debug-owners` | When printing trees, print owners of definitions. | +| `-Yprint-pos` | Show tree positions. | +| `-Yprint-pos-syms` | Show symbol definitions positions. | +| `-Yprint-syms` | When printing trees print info in symbols instead of corresponding info in trees. | +| `-Yrequire-targetName` | Warn if an operator is defined without a @targetName annotation | +| `-Yretain-trees` | Retain trees for top-level classes, accessible from ClassSymbol#tree | +| `-Yscala2-unpickler` | Control where we may get Scala 2 symbols from. This is either "always", "never", or a classpath. Default: always. | +| `-Yshow-print-errors` | Don't suppress exceptions thrown during tree printing. | +| `-Yshow-suppressed-errors` | Also show follow-on errors and warnings that are normally suppressed. | +| `-Yshow-tree-ids` | Uniquely tag all tree nodes in debugging output. | +| `-Yshow-var-bounds` | Print type variables with their bounds. | +| `-Ytest-pickler` | Self-test for pickling functionality; should be used with -Ystop-after:pickler. | +| `-Yunsound-match-types` | Use unsound match type reduction algorithm. | diff --git a/_overviews/scala3-migration/tooling-migration-mode.md b/_overviews/scala3-migration/tooling-migration-mode.md new file mode 100644 index 0000000000..9431e784f0 --- /dev/null +++ b/_overviews/scala3-migration/tooling-migration-mode.md @@ -0,0 +1,62 @@ +--- +title: Scala 3 Migration Mode +type: chapter +description: This section describes the migration mode of the Scala 3 compiler +num: 7 +previous-page: tooling-tour +next-page: tutorial-intro +--- + +The Scala 3 compiler provides some helpful utilities to ease the migration. + +Try running `scalac` to have a glimpse of those utilities: + +> `scalac` is the executable of the Scala compiler, it can be downloaded from [Github](https://github.com/lampepfl/dotty/releases/). +> +> It can also be installed using Coursier with `cs install scala3-compiler`, in which case `scalac` is aliased `scala3-compiler`. + +```text +$ scalac +Usage: scalac +where possible standard options include: + +... +-explain Explain errors in more detail. +-explain-types Explain type errors in more detail. +... +-rewrite When used in conjunction with a `...-migration` source version, rewrites sources to migrate to new version. +... +-source source version + Default: 3.0. + Choices: 3.0, future, 3.0-migration, future-migration. +... +``` + +## Migration mode + +The `-source:3.0-migration` option makes the compiler forgiving on most of the dropped features, printing warnings in place of errors. +Each warning is a strong indication that the compiler is even capable of safely rewriting the deprecated pieces of code into their cross-compiling counterparts. + +We call this the **Scala 3 migration compialtion**. + +## Automatic rewrites + +Once your code compiles in the migration mode, almost all warnings can be resolved automatically by the compiler itself. +To do so you just need to compile again, this time with the `-source:3.0-migration` and the `-rewrite` options. + +> Beware that the compiler will modify the code! It is intended to be safe. +> However you may like to commit the initial state so that you can print the diff applied by the compiler and revert it if necessary. + +> #### Good to know +> - The rewrites are not applied if the code compiles in error. +> - You cannot choose which rules are applied, the compiler runs all of them. + +You can refer to the [Incompatibility Table](incompatibility-table.html) to see the list of Scala 3 migration rewrites. + +## Error explanations + +The `-source:3.0-migration` mode handles many of the changed features but not all of them. +The compiler can give you more details about the remaining errors when invoked with the `-explain` and/or the `-explain-types` options. + +> The `-explain` and `-explain-types` options are not limited to the migration. +> They can, in general, assist you to learn and code in Scala 3. diff --git a/_overviews/scala3-migration/tooling-syntax-rewriting.md b/_overviews/scala3-migration/tooling-syntax-rewriting.md new file mode 100644 index 0000000000..81b7c7aab5 --- /dev/null +++ b/_overviews/scala3-migration/tooling-syntax-rewriting.md @@ -0,0 +1,259 @@ +--- +title: Scala 3 Syntax Rewriting +type: chapter +description: This section describes the syntax rewriting capability of the Scala 3 compiler +num: 13 +previous-page: tutorial-macro-mixing +next-page: incompatibility-table +--- + +Scala 3 gives Scala developers the option to adopt the new and optional significant indentation syntax. +The Scala 2 syntax which uses curly braces to group expressions remains fully supported, and we will refer to it as the classical braces syntax. + +Scala 3 also introduces a new syntax for control structures, which applies to `if`-expressions, `while`-loops, and `for`-expressions. + +Converting existing code to use the new syntax by hand would be tedious and error-prone. +The good news is the Scala 3 compiler can do the hard work for us! + +## Syntax Rewriting Options + +Let's start with showing the compiler options we have available to achieve our goal. +If we simply type `scalac` on the command line it prints all the options we have at our disposal. +For our purposes we will use the following five options: + +```text +$ scalac +Usage: scalac +where possible standard options include: +... +-indent Allow significant indentation +... +-new-syntax Require `then` and `do` in control expressions. +-noindent Require classical {...} syntax, indentation is not significant. +... +-old-syntax Require `(...)` around conditions. +... +-rewrite When used in conjunction with a `...-migration` source version, + rewrites sources to migrate to new version. +... + +``` + +Each of the first four options corresponds to a specific syntax: + +| Syntax | Compiler Option | +|-|-| +| Significant Indentation | `-indent` | +| Classical Braces | `-noindent` | + +| Syntax | Option | +| - | - | +| New Control Structure | `-new-syntax` | +| Old Control Structure | `-old-syntax` | + +As we will see in further detail these options can be used in combination with the `-rewrite` option to automate the conversion to a particular syntax. +Let's have a look at how this works in a small example. + +## Significant Indentation Syntax + +Given the following source code written in the Scala 2 style: + +```scala +object Counter { + enum Protocol { + case Reset + case MoveBy(step: Int) + } +} + +case class Animal(name: String) + +trait Incrementer { + def increment(n: Int): Int +} + +case class State(n: Int, minValue: Int, maxValue: Int) { + def inc: State = + if (n == maxValue) + this + else + this.copy(n = n + 1) + def printAll: Unit = { + println("Printing all") + for { + i <- minValue to maxValue + j <- 0 to n + } println(i + j) + } +} +``` + +Assume that we want to convert this piece of code to the significant indentation syntax. +We can use the `-indent -rewrite` options by adding them to the `scalacOptions` setting in our sbt build: + +```scala +// build.sbt +scalacOptions ++= Seq("-indent", "-rewrite") +``` + +After compiling the code, the result looks as follows: + +```scala +object Counter: + enum Protocol: + case Reset + case MoveBy(step: Int) + +case class Animal(name: String) + +trait Incrementer: + def increment(n: Int): Int + +case class State(n: Int, minValue: Int, maxValue: Int): + def inc: State = + if (n == maxValue) + this + else + this.copy(n = n + 1) + def printAll: Unit = + println("Printing all") + for { + i <- minValue to maxValue + j <- 0 to n + } println(i + j) +``` + +A few things to observe after the switch to the significant indentation syntax: +- The number of lines was reduced by 4 because of the elimination of a series of closing curly braces +- The control structures are unchanged + +## New Control Structure + +After this first rewrite, we can jump to the new control structure syntax by using `-new-syntax -rewrite`. +It leads us to the following version: + +```scala +object Counter: + enum Protocol: + case Reset + case MoveBy(step: Int) + +case class Animal(name: String) + +trait Incrementer: + def increment(n: Int): Int + +case class State(n: Int, minValue: Int, maxValue: Int): + def inc: State = + if n == maxValue then + this + else + this.copy(n = n + 1) + def printAll: Unit = + println("Printing all") + for + i <- minValue to maxValue + j <- 0 to n + do println(i + j) +``` + +We moved to the new syntaxes of Scala 3 in two steps: first we used `-indent -rewrite` then `-new-syntax -rewrite`. +We could also apply the new control structure syntax before the significant indentation syntax. +But the compiler is not able to apply both at the same time: `-indent -new-syntax -rewrite`. + +## Moving back to Classic syntax + +Starting from the latest state of our code sample, we can move backwards to its initial state. + +Let's rewrite to the braces syntax and retain the new control structures syntax. +After compiling with the `-no-indent -rewrite` options, we obtain the following result: + +```scala +object Counter { + enum Protocol { + case Reset + case MoveBy(step: Int) + } +} + +case class Animal(name: String) + +trait Incrementer { + def increment(n: Int): Int +} + +case class State(n: Int, minValue: Int, maxValue: Int) { + def inc: State = + if n == maxValue then + this + else + this.copy(n = n + 1) + def printAll: Unit = { + println("Printing all") + for { + i <- minValue to maxValue + j <- 0 to n + } + do println(i + j) + } +} +``` + +Applying one more rewrite, with `-old-syntax -rewrite`, takes us back to the original Scala 2-style code. + +```scala +object Counter { + enum Protocol { + case Reset + case MoveBy(step: Int) + } +} + +case class Animal(name: String) + +trait Incrementer { + def increment(n: Int): Int +} + +case class State(n: Int, minValue: Int, maxValue: Int) { + def inc: State = + if (n == maxValue) + this + else + this.copy(n = n + 1) + def printAll: Unit = { + println("Printing all") + for { + i <- minValue to maxValue + j <- 0 to n + } + println(i + j) + } +} +``` + +With this last rewrite, we have come full circle. + +> #### Loss of formatting when cycling through syntax versions +> +> When formatting tools such as [scalafmt](https://scalameta.org/scalafmt) are used to apply custom formatting to your code, cycling back and forth between different Scala 3 syntax variants may result in differences when going full circle. + +## Enforcing a Specific Syntax + +It is possible to mix the old and new syntax in a single code base. +Although we would advise against it, since it would reduce the readability and make the code harder to maintain. +A better approach is to choose one style and to consistently apply it to the entire code base. + +`-noindent`, `-new-syntax` and `-old-syntax` can be used as standalone options to enforce a consistent syntax. + +For instance, with the `-new-syntax` option, the compiler issues an error when it encounters enclosing parentheses around an `if`-condition. + +```text +-- Error: /home/piquerez/scalacenter/syntax/example.scala:6:7 ------------------ +6 | if (n == maxValue) + | ^^^^^^^^^^^^^^^ + |This construct is not allowed under -new-syntax. + |This construct can be rewritten automatically under -new-syntax -rewrite -source 3.0-migration. +``` + +> The `-indent` syntax is always optional, it cannot be enforced by the compiler. diff --git a/_overviews/scala3-migration/tooling-tour.md b/_overviews/scala3-migration/tooling-tour.md new file mode 100644 index 0000000000..2345239ff8 --- /dev/null +++ b/_overviews/scala3-migration/tooling-tour.md @@ -0,0 +1,138 @@ +--- +title: Tour of the Migration Tools +type: chapter +description: This chapter is a tour of the migration tooling ecosystem +num: 6 +previous-page: compatibility-metaprogramming +next-page: tooling-migration-mode +--- + +## The Scala Compilers + +The migration has been carefully prepared beforehand in each of the two compilers so that the transition is easy and smooth. + +### The Scala 2.13 Compiler + +The Scala 2.13 compiler supports `-Xsource:3`, an option that enables some Scala 3 syntax and behavior: +- Most deprecated syntax generates an error. +- Infix operators can start a line in the middle of a multiline expression. +- Implicit search and overload resolution follow Scala 3 handling of contravariance when checking specificity. + +The `-Xsource:3` option is intended to encourage early migration. + +### The Scala 3 Compiler + +#### Migration Mode + +Similarly the Scala 3 compiler comes with the `-source:3.0-migration` option. +From this mode, it accepts some of the old Scala 2.13 syntax and issues warnings to explain the changes. + +Even more than that, you can combine it with `-rewrite` to patch your code automatically. + +Learn more about it in the [Scala 3 Migration Mode](tooling-migration-mode.html) page. + +#### Syntax Rewriting + +Once your code is compiled in Scala 3 you can convert it to the new and optional Scala 3 syntax by using the [Syntax Rewriting](tooling-syntax-rewriting.html) options. + +## Build tools + +### sbt + +> The `sbt-dotty` plugin was needed in sbt 1.4 to get support for Scala 3. +> It is not useful anymore since sbt 1.5. + +sbt 1.5 supports Scala 3 out-of-the-box. +All common tasks and settings are intended to work the same. +Many plugins should also work exactly the same. + +To help with the migration, sbt 1.5 introduces new Scala 3 specific cross versions: + +```scala +// Use a Scala 2.13 library in Scala 3 +libraryDependency += ("org.foo" %% "foo" % "1.0.0").cross(CrossVersion.for3Use2_13) + +// Use a Scala 3 library in Scala 2.13 +libraryDependency += ("org.bar" %% "bar" % "1.0.0").cross(CrossVersion.for2_13Use3) +``` + +### Mill + +[Mill](https://github.com/com-lihaoyi/mill) 0.9.x supports Scala 3. + +### Maven + +Scala 3 support for Maven will soon land in the [scala-maven-plugin](https://github.com/davidB/scala-maven-plugin). + +## Code editors and IDEs + +### Metals + +[Metals](https://scalameta.org/metals/) is a Scala language server that works with VS Code, Vim, Emacs, Sublime Text and Eclipse. + +Scala 3 is already very well supported by Metals. +Some minor adjustments for the new syntax changes and new features are coming. + +### IntelliJ IDEA + +The Scala plugin for IntelliJ includes preliminary support for Scala 3. +Full-fledged support is being worked on by the team at JetBrains. + +## Formatting Tools + +### Scalafmt + +[Scalafmt](https://scalameta.org/scalafmt/) v3.0.0-RC1 supports both Scala 2.13 and Scala 3. + +To enable Scala 3 formatting you must set the `runner.dialect = scala3` in your `.scalafmt.conf` file. + +If you want to enable it selectively you can set a `fileOverride` configuration: + +```conf +//.scalafmt.conf +fileOverride { + "glob:**/scala-3*/**" { + runner.dialect = scala3 + } +} +``` + +## Migration Tools + +### Scalafix + +[Scalafix](https://scalacenter.github.io/scalafix/) is a refactoring tool for Scala. +At the time of writing, it only runs on Scala 2.13. +But it can be useful to prepare the code before jumping to Scala 3. + +The [Incompatibility Table](incompatibility-table.html) shows which incompatibility can be fixed by an existing Scalafix rule. +So far the relevant rules are: +- [Procedure Syntax](https://scalacenter.github.io/scalafix/docs/rules/ProcedureSyntax.html) +- [Explicit Result Types](https://scalacenter.github.io/scalafix/docs/rules/ExplicitResultTypes.html) +- Value Eta-Expansion: `fix.scala213.ExplicitNullaryEtaExpansion` in [scala/scala-rewrites](https://github.com/scala/scala-rewrites/blob/main/rewrites/src/main/scala/fix/scala213/ExplicitNullaryEtaExpansion.scala) +- Parentheses Around Lambda Parameter: `fix.scala213.ParensAroundLambda` in [ohze/scala-rewrites](https://github.com/ohze/scala-rewrites/blob/dotty/rewrites/src/main/scala/fix/scala213/ParensAroundLambda.scala) +- Auto Application: `fix.scala213.ExplicitNonNullaryApply` in [scala/scala-rewrites](https://github.com/scala/scala-rewrites/blob/main/rewrites/src/main/scala/fix/scala213/ExplicitNonNullaryApply.scala) +- `any2stringadd` Conversion: `fix.scala213.Any2StringAdd` in [scala/scala-rewrites](https://github.com/scala/scala-rewrites/blob/main/rewrites/src/main/scala/fix/scala213/Any2StringAdd.scala) + +You can apply these rules in sbt using the `sbt-scalafix` plugin. +They are also used internally in `sbt-scala3-migrate` described below. + +### The Scala 3 Migrate Plugin + +[Scala 3 Migrate](https://github.com/scalacenter/scala3-migrate) is an sbt plugin that can assist you during the migration to Scala 3. + +It proposes an incremental approach that can be described as follows: +- Migrate the library dependencies: + For every library dependency it checks, if there are available versions for Scala 3. +- Migrate the Scala compiler options (`scalacOptions`): + Some Scala 2 compiler options have been removed or renamed, others remain the same. + This step helps you adapt the compiler options of your project. +- Migrate the syntax: + This step relies on Scalafix and existing rules to fix the deprecated syntax. +- Migrate the code by expliciting the types: + Scala 3 has a new type inference algorithm that may infer slightly different types than the Scala 2 inference. + This last step explicits a minimum set of types so that the project can be compiled with Scala 3 without altering its runtime behavior. + +## Scaladex + +Check the list of Scala 3 open-source libraries in [Scaladex](https://index.scala-lang.org/). diff --git a/_overviews/scala3-migration/tutorial-intro.md b/_overviews/scala3-migration/tutorial-intro.md new file mode 100644 index 0000000000..3b8edbdd3a --- /dev/null +++ b/_overviews/scala3-migration/tutorial-intro.md @@ -0,0 +1,21 @@ +--- +title: Migration Tutorial +type: chapter +description: This chapter contains the tutorials for porting a Scala 2.13 project to Scala 3 +num: 8 +previous-page: tooling-migration-mode +next-page: tutorial-prerequisites +--- + +You are ready to port your project to Scala 3! + +The first step is to check that the [Prerequisites](tutorial-prerequisites.html) are met by your project. +Then you can go to the [Porting a sbt Project](tutorial-sbt.html) tutorial to learn about the migration workflow. + +> **You are not using sbt?** +> +> We still advise you to read the [Porting a sbt Project](tutorial-sbt.html) tutorial since the workflow should be very similar. +> Prior to that, make sure the version of your build tool is up-to-date to support Scala 3. + + +[Cross-Building a Macro Library](tutorial-macro-cross-building.html) and [Mixing Scala 2.13 and Scala 3 Macros](tutorial-macro-mixing.html) are specialized tutorials for porting Scala 2 macro libraries. diff --git a/_overviews/scala3-migration/tutorial-macro-cross-building.md b/_overviews/scala3-migration/tutorial-macro-cross-building.md new file mode 100644 index 0000000000..4004b70df6 --- /dev/null +++ b/_overviews/scala3-migration/tutorial-macro-cross-building.md @@ -0,0 +1,227 @@ +--- +title: Cross-Building a Macro Library +type: section +description: This section shows how to cross-build a macro library +num: 11 +previous-page: tutorial-sbt +next-page: tutorial-macro-mixing +--- + +Macro libraries must be re-implemented from the ground-up. + +Before starting you should be familiar with the Scala 3 migration as described in the [Porting an sbt Project](tutorial-sbt.html) tutorial. +The purpose of the current tutorial is to cross-build an existing Scala 2.13 macro library so that it becomes available in both Scala 3 and Scala 2.13. + +An alternative solution called *Mixing Macros* is explained in the [next tutorial](tutorial-macro-mixing.html). +You are encouraged to read both solutions to choose the technique that is best suited for your needs. + +## Introduction + +In order to exemplify this tutorial, we will consider the minimal macro library defined below. + +```scala +// build.sbt +lazy val example = project + .in(file("example")) + .settings( + scalaVersion := "2.13.5", + libraryDependencies ++= Seq( + "org.scala-lang" % "scala-reflect" % scalaVersion.value + ) + ) +``` + +```scala +// example/src/main/scala/location/Location.scala +package location + +import scala.reflect.macros.blackbox.Context +import scala.language.experimental.macros + +case class Location(path: String, line: Int) + +object Macros { + def location: Location = macro locationImpl + + private def locationImpl(c: Context): c.Tree = { + import c.universe._ + val location = typeOf[Location] + val line = Literal(Constant(c.enclosingPosition.line)) + val path = Literal(Constant(c.enclosingPosition.source.path)) + q"new $location($path, $line)" + } +} +``` + +You should recognize some similarities with your library: +one or more macro methods, in our case the `location` method, are implemented by consuming a macro `Context` and returning a `Tree` from this context. + +We can make this library available for Scala 3 users by using the [Cross Building](https://www.scala-sbt.org/1.x/docs/Cross-Build.html) technique provided by sbt. + +The main idea is to build the artifact twice and to publish two releases: +- `example_2.13` for Scala 2.13 users +- `example_3` for Scala 3 users + +![Cross-building Architecture](/resources/images/scala3-migration/tutorial-macro-cross-building.svg) + +## 1. Set cross-building up + +You can add Scala 3 to the list of `crossScalaVersions` of your project: + +```scala +crossScalaVersions := Seq("2.13.5", "3.0.0-RC3") +``` + +The `scala-reflect` dependency won't be useful in Scala 3. +Remove it conditionally with something like: + +```scala +// build.sbt +libraryDependencies ++= { + CrossVersion.partialVersion(scalaVersion.value) match { + case Some((2, 13)) => Seq( + "org.scala-lang" % "scala-reflect" % scalaVersion.value + ) + case _ => Seq.empty + } +} +``` + +After reloading sbt, you can switch to the Scala 3 context by running `++3.0.0-RC3`. +At any point you can go back to the Scala 2.13 context by running `++2.13.5`. + +## 2. Rearrange the code in version-specific source directories + +If you try to compile with Scala 3 you should see some errors of the same kind as: + +```text +sbt:example> ++3.0.0-RC3 +sbt:example> example / compile +[error] -- Error: /example/src/main/scala/location/Location.scala:15:35 +[error] 15 | val location = typeOf[Location] +[error] | ^ +[error] | No TypeTag available for location.Location +[error] -- Error: /example/src/main/scala/location/Location.scala:18:4 +[error] 18 | q"new $location($path, $line)" +[error] | ^ +[error] |Scala 2 macro cannot be used in Dotty. See https://dotty.epfl.ch/docs/reference/dropped-features/macros.html +[error] |To turn this error into a warning, pass -Xignore-scala2-macros to the compiler +``` + +To provide a Scala 3 alternative while preserving the Scala 2 implementation, we are going to rearrange the code in version-specific source directories. +All the code that cannot be compiled by the Scala 3 compiler goes to the `src/main/scala-2` folder. + +> Scala version-specific source directories is an sbt feature that is available by default. +> Learn more about it in the [sbt documentation](https://www.scala-sbt.org/1.x/docs/Cross-Build.html). + +In our example, the `Location` class stays in the `src/main/scala` folder but the `Macros` object is moved to the `src/main/scala-2` folder: + +```scala +// example/src/main/scala/location/Location.scala +package location + +case class Location(path: String, line: Int) +``` + +```scala +// example/src/main/scala-2/location/Macros.scala +package location + +import scala.reflect.macros.blackbox.Context +import scala.language.experimental.macros + +object Macros { + def location: Location = macro locationImpl + + private def locationImpl(c: Context): c.Tree = { + import c.universe._ + val location = typeOf[Location] + val line = Literal(Constant(c.enclosingPosition.line)) + val path = Literal(Constant(c.enclosingPosition.source.path)) + q"new $location($path, $line)" + } +} +``` + +Now we can initialize each of our Scala 3 macro definitions in the `src/main/scala-3` folder. +They must have the exact same signature than their Scala 2.13 counterparts. + +```scala +// example/src/main/scala-3/location/Macros.scala +package location + +object Macros: + def location: Location = ??? +``` + +## 3. Implement the Scala 3 macro + +There is no magic formula to port a Scala 2 macro into Scala 3. +One needs to learn about the new [Metaprogramming](compatibility-metaprogramming.html) features. + +We eventually come up with this implementation: + +```scala +// example/src/main/scala-3/location/Macros.scala +package location + +import scala.quoted.{Quotes, Expr} + +object Macros: + inline def location: Location = ${locationImpl} + + private def locationImpl(using quotes: Quotes): Expr[Location] = + import quotes.reflect.Position + val pos = Position.ofMacroExpansion + val file = Expr(pos.sourceFile.jpath.toString) + val line = Expr(pos.startLine + 1) + '{new Location($file, $line)} +``` + +## 4. Cross-validate the macro + +Adding some tests is important to check that the macro method works the same in both Scala versions. + +In our example, we add a single test. + +```scala +// example/src/test/scala/location/MacrosSpec.scala +package location + +class MacrosSpec extends munit.FunSuite { + test("location") { + assertEquals(Macros.location.line, 5) + } +} +``` + +You should now be able to run the tests in both versions. + +```text +sbt:example> ++2.13.5 +sbt:example> example / test +location.MacrosSpec: + + location +[info] Passed: Total 1, Failed 0, Errors 0, Passed 1 +[success] +sbt:example> ++3.0.0-RC3 +sbt:example> example / test +location.MacrosSpec: + + location +[info] Passed: Total 1, Failed 0, Errors 0, Passed 1 +[success] +``` + +## Final overview + +Your macro project should now contain the following source files: +- `src/main/scala/*.scala`: Cross-compatible classes +- `src/main/scala-2/*.scala`: The Scala 2 implementation of the macro methods +- `src/main/scala-3/*.scala`: The Scala 3 implementation of the macro methods +- `src/test/scala/*.scala`: Common tests + +![Cross-building Architecture](/resources/images/scala3-migration/tutorial-macro-cross-building.svg) + +You are now ready to publish your library by creating two releases: +- `example_2.13` for Scala 2.13 users +- `example_3` for Scala 3 users diff --git a/_overviews/scala3-migration/tutorial-macro-mixing.md b/_overviews/scala3-migration/tutorial-macro-mixing.md new file mode 100644 index 0000000000..0dc82c9e5f --- /dev/null +++ b/_overviews/scala3-migration/tutorial-macro-mixing.md @@ -0,0 +1,197 @@ +--- +title: Mixing Scala 2.13 and Scala 3 Macros +type: section +description: This section shows how to mix Scala 2.13 and Scala 3 macros in a single artifact +num: 12 +previous-page: tutorial-macro-mixing +next-page: tooling-syntax-rewriting +--- + +This tutorial shows how to mix Scala 2.13 and Scala 3 macros in a single artifact. + +It can be used to create a new Scala 3 macro library and make it available for Scala 2.13 users. +It can also be used to port an existing Scala 2.13 macro library to Scala 3, although it is probably easier to cross-build. + +## Introduction + +The Scala 2.13 compiler can only expand Scala 2.13 macros and, conversely, the Scala 3 compiler can only expand Scala 3 macros. +The idea of mixing macros is to package both macros in a single artifact, and let the compiler choose between the two during the macro expansion phase. + +This is only possible in Scala 3, since the Scala 3 compiler can read both the Scala 3 and the Scala 2 definitions. + +Let's start by considering the following code skeleton: + +```scala +// example/src/main/scala/location/Location.scala +package location + +case class Location(path: String, line: Int) + +object Macros: + def location: Location = macro ??? + inline def location: Location = ${ ??? } +``` + +As you can see the `location` macro is defined twice: +- `def location: Location = macro ???` is a Scala 2.13 macro definition +- `inline def location: Location = ${ ??? }` is a Scala 3 macro definition + +`location` is not an overloaded method, since both signatures are strictly identical. +This is quite surprising! +How does the compiler accept two methods with the same name and signature? + +The explanation is that it recognizes the first definition is for Scala 2.13 only and the second is for Scala 3 only. + +## 1. Implement the Scala 3 macro + +You can put the Scala 3 macro implementation alongside the definition. + +```scala +package location + +import scala.quoted.{Quotes, Expr} + +case class Location(path: String, line: Int) + +object Macros: + def location: Location = macro ??? + inline def location: Location = ${locationImpl} + + private def locationImpl(using quotes: Quotes): Expr[Location] = + import quotes.reflect.Position + val file = Expr(Position.ofMacroExpansion.sourceFile.jpath.toString) + val line = Expr(Position.ofMacroExpansion.startLine + 1) + '{new Location($file, $line)} +``` + +## 2. Implement the Scala 2 macro + +The Scala 3 compiler can compile a Scala 2 macro implementation if it contains no quasiquote or reification. + +For instance this piece of code does compile with Scala 3, and so you can put it alongside the Scala 3 implementation. +```scala +import scala.reflect.macros.blackbox.Context + +def locationImpl(c: Context): c.Tree = { + import c.universe._ + val line = Literal(Constant(c.enclosingPosition.line)) + val path = Literal(Constant(c.enclosingPosition.source.path)) + New(c.mirror.staticClass(classOf[Location].getName()), path, line) +} +``` + +However, in many cases you will have to move the Scala 2.13 macro implementation in a Scala 2.13 submodule. + +```scala +// build.sbt + +lazy val example = project.in(file("example")) + .settings( + scalaVersion := "3.0.0-RC1" + ) + .dependsOn(`example-compat`) + +lazy val `example-compat` = project.in(file("example-compat")) + .settings( + scalaVersion := "2.13.5", + libraryDependency += "org.scala-lang" % "scala-reflect" % scalaVersion.value + ) +``` + +Here `example`, our main library compiled in Scala 3, depends on `example-compat` which is compiled in Scala 2.13. + +In such a case we can put the Scala 2 macro implementation in `example-compat` and use quasiquotes. + +```scala +package location + +import scala.reflect.macros.blackbox.Context +import scala.language.experimental.macros + +case class Location(path: String, line: Int) + +object Scala2MacrosCompat { + private[location] def locationImpl(c: Context): c.Tree = { + import c.universe._ + val location = typeOf[Location] + val line = Literal(Constant(c.enclosingPosition.line)) + val path = Literal(Constant(c.enclosingPosition.source.path)) + q"new $location($path, $line)" + } +} +``` + +Note that we had to move the `Location` class downstream. + +## 3. Cross-validate the macro + +Adding some tests is important to check that the macro method works the same in both Scala versions. + +Since we want to execute the tests in Scala 2.13 and Scala 3, we create a cross-built module on the top: + +```scala +// build.sbt +lazy val `example-test` = project.in(file("example-test")) + .settings( + scalaVersion := "3.0.0-RC1", + crossScalaVersions := Seq("3.0.0-RC1", "2.13.5"), + scalacOptions ++= { + CrossVersion.partialVersion(scalaVersion.value) match { + case Some((2, 13)) => Seq("-Ytasty-reader") + case _ => Seq.empty + } + }, + libraryDependencies += "org.scalameta" %% "munit" % "0.7.23" % Test + ) + .dependsOn(example) +``` + +> `-Ytasty-reader` is needed in Scala 2.13 to consume Scala 3 artifacts + +For instance the test can be: +```scala +// example-test/src/test/scala/location/MacrosSpec.scala +package location + +class MacrosSpec extends munit.FunSuite { + test("location") { + assertEquals(Macros.location.line, 5) + } +} +``` + +You should now be able to run the tests in both versions. + +```text +sbt:example> ++2.13.5 +sbt:example> example-test / test +location.MacrosSpec: + + location +[info] Passed: Total 1, Failed 0, Errors 0, Passed 1 +[success] +sbt:example> ++3.0.0-RC1 +sbt:example> example-test / test +location.MacrosSpec: + + location +[info] Passed: Total 1, Failed 0, Errors 0, Passed 1 +[success] +``` + +## Final Overview + +You library is now composed of: +- The main Scala 3 module containing the mixed macro definitions and the Scala 3 macro implementation. +- The Scala 2.13 compatibility module containing the Scala 2.13 macro implementation. +It will only be consumed in Scala 2.13 during the macro expansion phase of the compiler. + +![Mixing-macros Architecture](/resources/images/scala3-migration/tutorial-macro-mixing.svg) + +You are now ready to publish your library. + +It can be used in Scala 3 projects, or in Scala 2.13 projects with these settings: + +```scala +scalaVersion := "2.13.5" +libraryDependencies += ("org" %% "example" % "x.y.z").cross(CrossVersion.for2_13Use3) +scalacOptions += "-Ytasty-reader" +``` diff --git a/_overviews/scala3-migration/tutorial-prerequisites.md b/_overviews/scala3-migration/tutorial-prerequisites.md new file mode 100644 index 0000000000..aada4c4127 --- /dev/null +++ b/_overviews/scala3-migration/tutorial-prerequisites.md @@ -0,0 +1,125 @@ +--- +title: Prerequisites +type: section +description: This section details the prerequisites of migration to Scala 3 +num: 9 +previous-page: tutorial-intro +next-page: tutorial-sbt +--- + +The migration to Scala 3 is made easier thanks to the interoperability between Scala 2.13 and Scala 3, as described in the [Compatibility Reference](../get-started.md) page. + +However, there are a few prerequisites that a Scala 2.13 project must meet before being ported to Scala 3: +- It must not depend on a macro library that has not yet been ported to Scala 3. +- It must not use a compiler plugin that has no equivalent in Scala 3. +- It must not depend on `scala-reflect`. + +The following paragraphs explain how to check those prerequisites and, in case they are unmet, what you can do about it. + +If you are ready to proceed with the migration you can jump straight to the [sbt Migration Tutorial](tutorial-sbt.html). + +## Macro dependencies + +A macro library is a Scala library that exposes a macro method. + +Those libraries tend to be more expressive and as such they are widely used in Scala 2. +We can mention as examples: +- [lightbend/scala-logging](https://index.scala-lang.org/lightbend/scala-logging) +- [milessabin/shapeless](https://index.scala-lang.org/milessabin/shapeless) +- [playframework/play-json](https://index.scala-lang.org/playframework/play-json) +- [scalatest/scalatest](https://index.scala-lang.org/scalatest/scalatest) + +But the Scala 3 compiler cannot expand Scala 2.13 macros. +So, before jumping to Scala 3, you should make sure that your project does not depend on a macro library that has not yet been ported. + +You can find the migration status of many macro libraries in the [Scala Macro Libraries](https://scalacenter.github.io/scala-3-migration-guide/docs/macros/macro-libraries.html) page. +Hopefully many will already be ported by the time you read these lines. + +For each of these macro dependencies in your project, you need to upgrade it to a cross-built version---a version available on both Scala 2.13 and Scala 3. + +Let's take a quick example. + +The dependency to `"scalatest" %% "scalatest" % "3.0.9"` must be upgraded because: +- The `scalatest` API is based on some macro definitions. +- The `3.0.9` version is not published for Scala 3. + +We can upgrade it to version `3.2.7`, which is cross-published in Scala 2.13 and Scala 3. + +```scala +libraryDependencies += "org.scalatest" %% "scalatest" % "3.2.7" +``` + +## Compiler plugins + +The Scala 2 compiler plugins are not compatible with Scala 3. + +Compiler plugins are generally configured in the `build.sbt` file by one of these settings: + +```scala +// build.sbt +libraryDependencies += + compilerPlugin("org.typelevel" %% "kind-projector" % "0.11.0" cross CrossVersion.full) + +addCompilerPlugin("org.typelevel" %% "kind-projector" % "0.11.0" cross CrossVersion.full) +``` + +Some compiler plugins may also be automatically added by an sbt plugin. + +You can find all configured compiler plugins by looking at the compiler options of your project. + +```text +sbt:example> show example / Compile / scalacOptions +[info] * -Xplugin:target/compiler_plugins/wartremover_2.13.5-2.4.12.jar +[info] * -Xplugin:target/compiler_plugins/semanticdb-scalac_2.13.5-4.3.20.jar +[info] * -Yrangepos +[info] * -P:semanticdb:targetroot:/example/target/scala-2.13/meta +``` + +In the above example we can see that two compiler plugins are used: wartremover and semanticdb. +For each of these plugins, we need to check that there is an alternative solution, or we need to disable it. + +Alternative solutions to the most used compiler plugins are given below. + +### SemanticDB + +The support of [SemanticDB](https://scalameta.org/docs/semanticdb/guide.html) is now shipped into the Scala 3 compiler: +- The `-Ysemanticdb` option activates the generation of semanticDB files. +- The `-semanticdb-target` option can be used to specify the output directory of semanticDB files. + +sbt is able to configure SemanticDB automatically with this single setting: `semanticdbEnabled := true`. + +### Scala.js + +The [Scala.js](https://www.scala-js.org/) compilation on Scala 3 does not rely on a compiler plugin anymore. + +To compile your Scala.js project you can use the `sbt-scalajs` plugin version `1.5.0` or higher. + +```scala +// project/plugins.sbt +addSbtPlugin("org.scala-js" % "sbt-scalajs" % "1.5.0") +``` + +### Scala Native + +Scala 3 does not yet support [Scala Native](https://scala-native.readthedocs.io/en/latest/). + +If you project is cross-built to Scala Native, you can port it to Scala 3. +But you will not be able to compile for the Native platform. + +### Kind Projector + +A subset of [the Kind Projector](https://github.com/typelevel/kind-projector) syntax is supported by Scala 3 under the `-Ykind-projector` option. + +AdditionalLy, we now have the following features that make `kind-projector` not needed in many cases: +- [Type Lambdas](http://dotty.epfl.ch/docs/reference/new-types/type-lambdas.html) +- [Polymorphic Functions](http://dotty.epfl.ch/docs/reference/new-types/polymorphic-function-types.html) +- [Kind Polymorphism](http://dotty.epfl.ch/docs/reference/other-new-features/kind-polymorphism.html) + +## Runtime reflection + +`scala-reflect` will not be ported to Scala 3 because it exposes Scala 2 compiler internals that do not exist in Scala 3. + +If your project depends on `scala-reflect`, or consumes instances of the `Manifest` class, it cannot be compiled by the Scala 3 compiler. +To remedy this situation, you can try to re-implement the corresponding parts of the code, using Java reflection or the [Scala 3 metaprogramming features](compatibility-metaprogramming.md). + +If `scala-reflect` is transitively added in your classpath, you probably need to upgrade the dependency that brings it. \ No newline at end of file diff --git a/_overviews/scala3-migration/tutorial-sbt.md b/_overviews/scala3-migration/tutorial-sbt.md new file mode 100644 index 0000000000..3ecb0efef2 --- /dev/null +++ b/_overviews/scala3-migration/tutorial-sbt.md @@ -0,0 +1,227 @@ +--- +title: Porting an sbt Project +type: section +description: This section shows how to port an sbt project +num: 10 +previous-page: tutorial-prerequisites +next-page: tutorial-macro-cross-building +--- + +> This tutorial is written for sbt. +> Yet the approach is very similar for any other build tool, as long as it supports Scala 3. + +Before jumping to Scala 3, make sure you are on the latest Scala 2.13.x and sbt 1.5.x versions. + +Let's now walk through the required steps to port an entire project to Scala 3. + +## 1. Check the project prerequisites + +Make sure your project is ready to be ported: +- It must not depend on a macro library that has not yet been ported to Scala 3. +- It must not use a compiler plugin that has no equivalent in Scala 3. +- It must not depend on `scala-reflect`. + +Those prerequisites are described in more details in the [preceding page](tutorial-prerequisites.html). + +## 2. Choose a module + +Thanks to the interoperability between Scala 2.13 and Scala 3 you can start with any module. +However it is probably simpler to start with the module that has the fewest dependencies. + +If you use macro definitions or macros annotations internally you will have to port them first. + +## 3. Set up cross-building + +The two main challenges of the codebase migration are: +- Make the code compile +- Make sure that the run-time behavior is unchanged + +We recommend the cross-building strategy, that is to compile the code with both Scala 3 and Scala 2.13. +The logic behind is to be able to run the tests with Scala 2.13 after each fix and thus make sure that the runtime behavior is unchanged. +This is crucial to avoid bugs that could happen when fixing the incompatibilities. + +Configuring cross-building ins sbt is as short as: + +```scala +scalaVersion := "3.0.0-RC3" +crossScalaVersions ++= Seq("2.13.5", "3.0.0-RC3") +``` + +This configuration means: +- The default version is `3.0.0-RC3`. +- 2.13.5 can be loaded by running the `++2.13.5` command. +- 3.0.0-RC3 can be loaded by running the `++3.0.0-RC3` command. + +Beware that the `reload` command will always load the default version---here it is 3.0.0-RC3. + +## 4. Prepare the dependencies + +At this stage, if you run `compile`, it is likely that sbt complains about some dependencies being not found. +That is because the declared version of the dependency is not published for Scala 3. + +You either need to upgrade the dependency to a newer version or to tell sbt to use the Scala 2.13 version of the library. + +> When you change a library dependency, make sure to apply the same change in all modules of your project. + +Check if there is an available Scala 3 version of the library. +To do so, you can use the version matrix in [Scaladex](https://index.scala-lang.org/). +Go to the project page of your library, click the version matrix button, filter on Scala 3 and Scala 2.13. + +#### 1. There is a Scala 3 version of the library + +We strongly suggest to use one of the available versions. +Make sure the one you choose does not bring any breaking change. + +#### 2. There is no Scala 3 version of the library + +You can use the Scala 2.13 version of the library. The syntax is: + +```scala +("com.lihaoyi" %% "os-lib" % "0.7.3").cross(CrossVersion.for3Use2_13) +``` + +Or for a Scala.js dependencies: + +```scala +("com.lihaoyi" %%% "os-lib" % "0.7.3").cross(CrossVersion.for3Use2_13) +``` + +Once you have fixed all the unresolved dependencies, you can check that the tests are still passing in Scala 2.13: +```text +sbt:example> ++2.13.5 +[info] Setting Scala version to 2.13.5 on 1 project. +... +sbt:example> example / test +... +[success] +``` + +## 5. Configure the Scala 3 Compiler + +The Scala 3 compiler options are different from the Scala 2.13 ones: some have been renamed, others are not yet supported. +You can refer to the [Compiler Options Lookup](options-lookup.html) page to adapt the list of `scalacOptions` to Scala 3. + +You should come up with a list of common options, a list of Scala 2.13-specific options and a list of Scala 3-specific options. + +A typical configuration looks like this: +```scala +scalacOptions ++= { + Seq( + "-encoding", + "UTF-8", + "-feature", + "-language:implicitConversions", + // disabled during the migration + // "-Xfatal-warnings" + ) ++ + (CrossVersion.partialVersion(scalaVersion.value) match { + case Some((3, _)) => Seq( + "-unchecked", + "-source:3.0-migration" + ) + case _ => Seq( + "-deprecation", + "-Xfatal-warnings", + "-Wunused:imports,privates,locals", + "-Wvalue-discard" + ) + }) +} +``` + +Add the `-source:3.0-migration` option to turn on the [Scala 3 Migration Mode](tooling-migration-mode.html). +Also you should disable `-Xfatal-warnings` to take full advantage of the migration mode and the automatic rewrites. + +## 6. Solve the Incompatibilities + +It is now time to try compiling in Scala 3: + +```text +sbt:example> ++3.0.0-RC3 +[info] Setting Scala version to 3.0.0-RC3 on 1 project. +... +sbt:example> example / compile +... +sbt:example> example / Test / compile +``` + +> `example / compile` compiles the `main` sources of the example project. +> It is strictly equivalent to `example / Compile / compile`. +> +> `example / Test / compile` compiles the `test` sources. + +The compiler produces diagnostics of two different levels: +- *Migration Warning*: These warnings can be automatically patched by the compiler with the `-rewrite` option. +- *Error*: A piece of code cannot be compiled anymore. + +You can ignore the migration warnings since the compiler will automatically fix them. +However the incompatibility errors must be taken care of manually. + +Many known incompatibilities are listed in the [Incompatibility Table](incompatibility-table.html). +That's where you can find a description and some proposed solutions of the errors. + +When possible you should try to find a fix that best preserves the binary compatibility of your code. +This is particularly crucial if your project is a published library. + +> The macro incompatibilities cannot be easily solved. +> A lot of code must be rewritten from the ground up. +> See [Metaprogramming](compatibility-metaprogramming.html). + +After fixing an incompatibility, you can validate the solution by running the tests in Scala 2.13. + +```text +sbt:example> ++2.13.5 +[info] Setting Scala version to 2.13.5 on 1 project. +... +sbt:example> example / test +... +[success] +``` + +Consider committing your changes regularly. + +Once you have fixed all the errors you should be able to compile successfully in Scala 3. +Only the migration warnings are remaining. +You can patch them automatically by compiling with the `-source:3.0-migration -rewrite` options. + +```text +sbt:example> ++3.0.0-RC3 +sbt:example> set example / scalacOptions += "-rewrite" +sbt:example> example / compile +... +[info] [patched file /example/src/main/scala/app/Main.scala] +[warn] two warnings found +[success] +``` + +You should now remove the `-source:3.0-migration` option, and you can also add the `-Xfatal-warnings` option again. +Do not forget to reload. + +## 7. Validate the migration + +On rare occasions, different implicit values could possibly be resolved and alter the runtime behavior of the program. +Good tests are the only guarantee to prevent such bugs from going unnoticed. + +Make sure that the tests are passing in both Scala 2.13 and Scala 3. + +```text +sbt:example> ++2.13.5 +sbt:example> example / test +... +[success] +sbt:example> ++3.0.0-RC3 +sbt:example> example / test +... +[success] +``` + +If you have a continuous integration pipeline, it is time to set it up for Scala 3. + +## 8. Finalize the migration + +Congratulations! You have successfully ported a module to Scala 3. +The same process can be repeated for each module, until the project is fully migrated to Scala 3. + +You can keep or drop the Scala 2.13 cross-building configuration depending on whether you want to cross-publish your program or not. + +Here ends our walk through the migration of an sbt project. diff --git a/resources/images/scala3-migration/compatibility-213-to-3.svg b/resources/images/scala3-migration/compatibility-213-to-3.svg new file mode 100644 index 0000000000..32d5687bce --- /dev/null +++ b/resources/images/scala3-migration/compatibility-213-to-3.svg @@ -0,0 +1,3 @@ + + +
bar_3
bar_3
foo_2.13
foo_2.13
Viewer does not support full SVG 1.1
\ No newline at end of file diff --git a/resources/images/scala3-migration/compatibility-3-to-213.svg b/resources/images/scala3-migration/compatibility-3-to-213.svg new file mode 100644 index 0000000000..88fdc8606e --- /dev/null +++ b/resources/images/scala3-migration/compatibility-3-to-213.svg @@ -0,0 +1,3 @@ + + +
bar_2.13
bar_2.13
foo_3
foo_3
Viewer does not support full SVG 1.1
\ No newline at end of file diff --git a/resources/images/scala3-migration/compatibility-sandwich.svg b/resources/images/scala3-migration/compatibility-sandwich.svg new file mode 100644 index 0000000000..32942b7d03 --- /dev/null +++ b/resources/images/scala3-migration/compatibility-sandwich.svg @@ -0,0 +1,3 @@ + + +
lib_2.13
lib_2.13
core_3
core_3
app_2.13
app_2.13
Viewer does not support full SVG 1.1
\ No newline at end of file diff --git a/resources/images/scala3-migration/tutorial-macro-cross-building.svg b/resources/images/scala3-migration/tutorial-macro-cross-building.svg new file mode 100644 index 0000000000..03b75bd497 --- /dev/null +++ b/resources/images/scala3-migration/tutorial-macro-cross-building.svg @@ -0,0 +1,3 @@ + + +
example_2.13
example_2.13
app_2.13
app_2.13
example_3
example_3
app_3
app_3
Viewer does not support full SVG 1.1
\ No newline at end of file diff --git a/resources/images/scala3-migration/tutorial-macro-mixing.svg b/resources/images/scala3-migration/tutorial-macro-mixing.svg new file mode 100644 index 0000000000..18023dffb9 --- /dev/null +++ b/resources/images/scala3-migration/tutorial-macro-mixing.svg @@ -0,0 +1,3 @@ + + +
example-compat_2.13
example-compat_2.13
example_3
example_3
app_2.13
app_2.13
app_3
app_3
Viewer does not support full SVG 1.1
\ No newline at end of file From 5a4c1cad51faf793f7ac7caa1a28aa25844f9d5b Mon Sep 17 00:00:00 2001 From: Adrien Piquerez Date: Thu, 22 Apr 2021 16:28:39 +0200 Subject: [PATCH 0188/1870] Change links to the migration guide --- _ja/index.md | 2 +- _ja/scala3/contribute-to-docs.md | 11 +---------- _ja/scala3/getting-started.md | 2 +- _ja/scala3/index.md | 2 +- _ja/scala3/new-in-scala3.md | 2 +- _overviews/scala3-book/scala-tools.md | 2 +- _overviews/scala3-macros/other-resources.md | 11 ++--------- _overviews/scala3-macros/tutorial/inline.md | 2 -- _overviews/scala3-macros/tutorial/macros.md | 1 - .../scala3-migration/tutorial-prerequisites.md | 4 ++-- index.md | 4 ++-- scala3/contribute-to-docs.md | 12 +----------- scala3/getting-started.md | 2 +- scala3/guides.md | 2 +- scala3/guides/tasty-overview.md | 3 ++- scala3/index.md | 4 ++-- scala3/new-in-scala3.md | 2 +- 17 files changed, 20 insertions(+), 48 deletions(-) diff --git a/_ja/index.md b/_ja/index.md index 8167613f05..3f9076439b 100644 --- a/_ja/index.md +++ b/_ja/index.md @@ -27,7 +27,7 @@ scala3-sections: - title: "Migration Guide" description: "Scala 2 から Scala 3 へ移行するためのガイド" icon: "fa fa-suitcase" - link: https://scalacenter.github.io/scala-3-migration-guide/ + link: /scala3/guides/migration/compatibility-intro.html - title: "Guides" description: "Scala 3 の言語仕様からピックアップして解説" icon: "fa fa-map" diff --git a/_ja/scala3/contribute-to-docs.md b/_ja/scala3/contribute-to-docs.md index 01ca57a37f..b29b62dd17 100644 --- a/_ja/scala3/contribute-to-docs.md +++ b/_ja/scala3/contribute-to-docs.md @@ -40,7 +40,7 @@ Scala 3 の高品質なドキュメンテーションを作るためのいくつ - [Issues](https://github.com/scala/docs.scala-lang/issues) ## Migration Guide -[Scala 3 Migration Guide](https://scalacenter.github.io/scala-3-migration-guide/) は Scala 2 と Scala 3 の互換性、移行に役立つツールの紹介、そして詳しい移行のガイドを含んだ包括的なドキュメントである。 +[Scala 3 Migration Guide](/scala3/guides/migration/compatibility-intro.html) は Scala 2 と Scala 3 の互換性、移行に役立つツールの紹介、そして詳しい移行のガイドを含んだ包括的なドキュメントである。 - [Contribution Overview](https://scalacenter.github.io/scala-3-migration-guide/docs/contributing.html) - [Source](https://github.com/scalacenter/scala-3-migration-guide) @@ -56,12 +56,3 @@ The [Dotty reference](https://dotty.epfl.ch/docs/reference/overview.html) は Sc [scala3-book]: {% link _overviews/scala3-book/introduction.md %} -[best-practices]: {% link _overviews/scala3-macros/best-practices.md %} -[compiletime]: {% link _overviews/scala3-macros/tutorial/compiletime.md %} -[cross-compilation]: https://scalacenter.github.io/scala-3-migration-guide/docs/macros/migration-tutorial.html#cross-building -[inline]: {% link _overviews/scala3-macros/tutorial/inline.md %} -[macros]: {% link _overviews/scala3-macros/tutorial/macros.md %} -[migration-status]: https://scalacenter.github.io/scala-3-migration-guide/docs/macros/macro-libraries.html#macro-libraries -[quotes]: {% link _overviews/scala3-macros/tutorial/quotes.md %} -[tasty]: {% link _overviews/scala3-macros/tutorial/reflection.md %} -[reflection-api]: https://dotty.epfl.ch/api/scala/quoted.html diff --git a/_ja/scala3/getting-started.md b/_ja/scala3/getting-started.md index 0182f156b7..c10adb3fb8 100644 --- a/_ja/scala3/getting-started.md +++ b/_ja/scala3/getting-started.md @@ -216,7 +216,7 @@ Scala 3 を使った 最初の “Hello world” プロジェクトを作れた 以下の記事をチェックしよう: - [The Scala 3 Book](/scala3/book/introduction.html), Scala の主要な機能の導入となる一連の短いレッスンが用意されている。 -- [The migration guide](https://scalacenter.github.io/scala-3-migration-guide/) 既にある Scala 2 で書かれたコードベースを Scala 3 に移行する際に役立つ情報がまとめてある。 +- [The migration guide](/scala3/guides/migration/compatibility-intro.html) 既にある Scala 2 で書かれたコードベースを Scala 3 に移行する際に役立つ情報がまとめてある。 他の Scala ユーザーと交流したいなら、いくつかのメーリングリストやリアルタイムチャットルームがある。 これらのリソースのリストや助けを求める場所を探すには、[Scala community page](https://scala-lang.org/community/) をチェックしよう。 diff --git a/_ja/scala3/index.md b/_ja/scala3/index.md index f44799ef9b..0a72967317 100644 --- a/_ja/scala3/index.md +++ b/_ja/scala3/index.md @@ -28,7 +28,7 @@ sections: - title: "Migration Guide" description: "Scala 2 から Scala 3 へ移行するためのガイド" icon: "fa fa-suitcase" - link: https://scalacenter.github.io/scala-3-migration-guide/ + link: /scala3/guides/migration/compatibility-intro.html - title: "Guides" description: "Scala 3 の言語仕様からピックアップして解説" icon: "fa fa-map" diff --git a/_ja/scala3/new-in-scala3.md b/_ja/scala3/new-in-scala3.md index bb33e3219e..9b45824291 100644 --- a/_ja/scala3/new-in-scala3.md +++ b/_ja/scala3/new-in-scala3.md @@ -98,7 +98,7 @@ Scala 3 のメタプログラミングについてもっと知りたいかたは [overload-resolution]: {{ site.scala3ref }}/changed-features/overload-resolution.html [reference]: {{ site.scala3ref }}/overview.html [creator]: {{ site.scala3ref }}/other-new-features/creator-applications.html -[migration]: https://scalacenter.github.io/scala-3-migration-guide +[migration]: {% link _overviews/scala3-migration/compatibility-intro.md %} [implicits]: {{ site.scala3ref }}/contextual/motivation.html [contextual-using]: {{ site.scala3ref }}/contextual/using-clauses.html diff --git a/_overviews/scala3-book/scala-tools.md b/_overviews/scala3-book/scala-tools.md index ec8454c3bc..fa5ff66760 100644 --- a/_overviews/scala3-book/scala-tools.md +++ b/_overviews/scala3-book/scala-tools.md @@ -15,7 +15,7 @@ In this chapter you’ll see two tools that are commonly used in Scala projects: We’ll start by showing how to use sbt to build your Scala projects, and then we’ll show how to use sbt and ScalaTest together to test your Scala projects. -> If you want to learn about tools to help you migrate your Scala 2 code to Scala 3, see our [Scala 3 Migration Guide](https://scalacenter.github.io/scala-3-migration-guide/). +> If you want to learn about tools to help you migrate your Scala 2 code to Scala 3, see our [Scala 3 Migration Guide](/scala3/guides/migration/compatibility-intro.html). diff --git a/_overviews/scala3-macros/other-resources.md b/_overviews/scala3-macros/other-resources.md index 571cc89c5a..cdeeac10a1 100644 --- a/_overviews/scala3-macros/other-resources.md +++ b/_overviews/scala3-macros/other-resources.md @@ -22,13 +22,6 @@ num: 9 * [Shapeless 3](https://github.com/dotty-staging/shapeless/tree/shapeless-3) * *More Coming soon* -[contributing]: {% link scala3/contribute-to-docs.md %} -[best-practices]: {% link _overviews/scala3-macros/best-practices.md %} -[compiletime]: {% link _overviews/scala3-macros/tutorial/compiletime.md %} -[migration]: https://scalacenter.github.io/scala-3-migration-guide/docs/macros/macro-libraries.html -[faq]: {% link _overviews/scala3-macros/faq.md %} -[inline]: {% link _overviews/scala3-macros/tutorial/inline.md %} -[macros]: {% link _overviews/scala3-macros/tutorial/macros.md %} + +[migration]: {% link _overviews/scala3-migration/tutorial-macro-cross-building.md %} [migration-status]: https://scalacenter.github.io/scala-3-migration-guide/docs/macros/macro-libraries.html#macro-libraries -[quotes]: {% link _overviews/scala3-macros/tutorial/quotes.md %} -[tasty]: {% link _overviews/scala3-macros/tutorial/reflection.md %} diff --git a/_overviews/scala3-macros/tutorial/inline.md b/_overviews/scala3-macros/tutorial/inline.md index 788a07e24e..4221eb3e87 100644 --- a/_overviews/scala3-macros/tutorial/inline.md +++ b/_overviews/scala3-macros/tutorial/inline.md @@ -496,10 +496,8 @@ def powerCode(x: Expr[Double], n: Expr[Int])(using Quotes): Expr[Double] = ... [contributing]: {% link scala3/contribute-to-docs.md %} [best-practices]: {% link _overviews/scala3-macros/best-practices.md %} [compiletime]: {% link _overviews/scala3-macros/tutorial/compiletime.md %} -[migration]: https://scalacenter.github.io/scala-3-migration-guide/docs/macros/macro-libraries.html [faq]: {% link _overviews/scala3-macros/faq.md %} [inline]: {% link _overviews/scala3-macros/tutorial/inline.md %} [macros]: {% link _overviews/scala3-macros/tutorial/macros.md %} -[migration-status]: https://scalacenter.github.io/scala-3-migration-guide/docs/macros/migration-status.html [quotes]: {% link _overviews/scala3-macros/tutorial/quotes.md %} [tasty]: {% link _overviews/scala3-macros/tutorial/reflection.md %} diff --git a/_overviews/scala3-macros/tutorial/macros.md b/_overviews/scala3-macros/tutorial/macros.md index c421e31159..0af6bc9699 100644 --- a/_overviews/scala3-macros/tutorial/macros.md +++ b/_overviews/scala3-macros/tutorial/macros.md @@ -277,6 +277,5 @@ The subsequent section on [Quoted Code][quotes] presents quotes in more detail. [faq]: {% link _overviews/scala3-macros/faq.md %} [inline]: {% link _overviews/scala3-macros/tutorial/inline.md %} [macros]: {% link _overviews/scala3-macros/tutorial/macros.md %} -[migration-status]: https://scalacenter.github.io/scala-3-migration-guide/docs/macros/migration-status.html [quotes]: {% link _overviews/scala3-macros/tutorial/quotes.md %} [tasty]: {% link _overviews/scala3-macros/tutorial/reflection.md %} diff --git a/_overviews/scala3-migration/tutorial-prerequisites.md b/_overviews/scala3-migration/tutorial-prerequisites.md index aada4c4127..37b3aa9555 100644 --- a/_overviews/scala3-migration/tutorial-prerequisites.md +++ b/_overviews/scala3-migration/tutorial-prerequisites.md @@ -7,7 +7,7 @@ previous-page: tutorial-intro next-page: tutorial-sbt --- -The migration to Scala 3 is made easier thanks to the interoperability between Scala 2.13 and Scala 3, as described in the [Compatibility Reference](../get-started.md) page. +The migration to Scala 3 is made easier thanks to the interoperability between Scala 2.13 and Scala 3, as described in the [Compatibility Reference](compatibility-intro.html) page. However, there are a few prerequisites that a Scala 2.13 project must meet before being ported to Scala 3: - It must not depend on a macro library that has not yet been ported to Scala 3. @@ -120,6 +120,6 @@ AdditionalLy, we now have the following features that make `kind-projector` not `scala-reflect` will not be ported to Scala 3 because it exposes Scala 2 compiler internals that do not exist in Scala 3. If your project depends on `scala-reflect`, or consumes instances of the `Manifest` class, it cannot be compiled by the Scala 3 compiler. -To remedy this situation, you can try to re-implement the corresponding parts of the code, using Java reflection or the [Scala 3 metaprogramming features](compatibility-metaprogramming.md). +To remedy this situation, you can try to re-implement the corresponding parts of the code, using Java reflection or the [Scala 3 metaprogramming features](compatibility-metaprogramming.html). If `scala-reflect` is transitively added in your classpath, you probably need to upgrade the dependency that brings it. \ No newline at end of file diff --git a/index.md b/index.md index d244e435e7..0aa20d401f 100644 --- a/index.md +++ b/index.md @@ -25,9 +25,9 @@ scala3-sections: - title: "More detailed information" links: - title: "Migration Guide" - description: "A guide to help you migrate from Scala 2 to Scala 3." + description: "A guide to help you move from Scala 2 to Scala 3." icon: "fa fa-suitcase" - link: https://scalacenter.github.io/scala-3-migration-guide/ + link: /scala3/guides/migration/compatibility-intro.html - title: "Guides" description: "Detailed guides about particular aspects of the language." icon: "fa fa-map" diff --git a/scala3/contribute-to-docs.md b/scala3/contribute-to-docs.md index 110a6da806..5f3cd5af83 100644 --- a/scala3/contribute-to-docs.md +++ b/scala3/contribute-to-docs.md @@ -38,7 +38,7 @@ The [Macros Tutorial](/scala3/guides/macros) is being written by Nicolas Stucki - [Issues](https://github.com/scala/docs.scala-lang/issues) ## Migration Guide -The [Scala 3 Migration Guide](https://scalacenter.github.io/scala-3-migration-guide/) +The [Scala 3 Migration Guide](/scala3/guides/migration/compatibility-intro.html) contains an comprehensive overview over compatibility between Scala 2 and Scala 3, a tour presenting the migration tools, and detailed migration guides. @@ -55,13 +55,3 @@ The [Dotty reference](https://dotty.epfl.ch/docs/reference/overview.html) will e [scala3-book]: {% link _overviews/scala3-book/introduction.md %} - -[best-practices]: {% link _overviews/scala3-macros/best-practices.md %} -[compiletime]: {% link _overviews/scala3-macros/tutorial/compiletime.md %} -[cross-compilation]: https://scalacenter.github.io/scala-3-migration-guide/docs/macros/migration-tutorial.html#cross-building -[inline]: {% link _overviews/scala3-macros/tutorial/inline.md %} -[macros]: {% link _overviews/scala3-macros/tutorial/macros.md %} -[migration-status]: https://scalacenter.github.io/scala-3-migration-guide/docs/macros/macro-libraries.html#macro-libraries -[quotes]: {% link _overviews/scala3-macros/tutorial/quotes.md %} -[tasty]: {% link _overviews/scala3-macros/tutorial/reflection.md %} -[reflection-api]: https://dotty.epfl.ch/api/scala/quoted.html diff --git a/scala3/getting-started.md b/scala3/getting-started.md index dfe6c4853a..b24836f764 100644 --- a/scala3/getting-started.md +++ b/scala3/getting-started.md @@ -156,7 +156,7 @@ Now that you’ve created a first “Hello, world” example with Scala 3, you Consider checking out: - [The Scala 3 Book](/scala3/book/introduction.html), which provides a set of short lessons introducing Scala’s main features -- [The migration guide](https://scalacenter.github.io/scala-3-migration-guide/) helps you to migrate your existing Scala 2 code base to Scala 3. +- [The migration guide](/scala3/guides/migration/compatibility-intro.html) helps you to migrate your existing Scala 2 code base to Scala 3. When you want to connect with other Scala users, there are several mailing lists and real-time chat rooms available. Check out our [Scala community page](https://scala-lang.org/community/) for a list of these resources, and for where to reach out for help. diff --git a/scala3/guides.md b/scala3/guides.md index 36d631131f..45587d280f 100644 --- a/scala3/guides.md +++ b/scala3/guides.md @@ -5,7 +5,7 @@ title: Guides on Scala 3 guides: - title: "Migration from Scala 2 to Scala 3" icon: suitcase - url: "https://scalacenter.github.io/scala-3-migration-guide" + url: "/scala3/guides/migration/compatibility-intro.html" description: "Everything you need to know about compatibility and migration to Scala 3." - title: Macros by: Nicolas Stucki diff --git a/scala3/guides/tasty-overview.md b/scala3/guides/tasty-overview.md index ff0c21a21c..27ba163d64 100644 --- a/scala3/guides/tasty-overview.md +++ b/scala3/guides/tasty-overview.md @@ -117,7 +117,7 @@ As you can imagine, having a complete representation of your code has [many bene - Tasty makes an excellent foundation for a new generation of [reflection-based macros][macros]. - Optimizers and analyzers can use it for deep code analysis and advanced code generation. -In a related note, Scala 2.13.5 has a TASTy reader, and the Scala 3 compiler can also read the 2.13 “Pickle” format. The [Compatibility Reference](https://scalacenter.github.io/scala-3-migration-guide/docs/compatibility/classpath.html) in the Scala 3 Migration Guide summarizes the benefits of this cross-compiling capability: +In a related note, Scala 2.13.5 has a TASTy reader, and the Scala 3 compiler can also read the 2.13 “Pickle” format. The [Compatibility Reference][compatibility-ref] in the Scala 3 Migration Guide summarizes the benefits of this cross-compiling capability: > “You can have a Scala `2.13` module that depends on a Scala `3.0.0-RC1` module, and the latter can even depend on another Scala `2.13` module. >Cross-compatibility will not restrain you from using the exciting new features of Scala 3.0. > In short, we have backward and forward compatibility and so migration can happen gradually and in any order.” @@ -144,5 +144,6 @@ These articles provide more information about Scala 3 macros: [benefits]: https://www.scala-lang.org/blog/2018/04/30/in-a-nutshell.html [erasure]: https://www.scala-lang.org/files/archive/spec/2.13/03-types.html#type-erasure [binary]: {% link _overviews/tutorials/binary-compatibility-for-library-authors.md %} +[compatibility-ref]: {% link _overviews/scala3-migration/compatibility-intro.md %} [quotes-reflect]: {{ site.scala3ref }}/metaprogramming/reflection.html [macros]: {{ site.scala3ref }}/metaprogramming/macros.html diff --git a/scala3/index.md b/scala3/index.md index c6e7eafbdb..49e7397f71 100644 --- a/scala3/index.md +++ b/scala3/index.md @@ -25,9 +25,9 @@ sections: - title: "More Detailed Information" links: - title: "Migration Guide" - description: "A guide to help you migrate from Scala 2 to Scala 3." + description: "A guide to help you move from Scala 2.13 to Scala 3." icon: "fa fa-suitcase" - link: https://scalacenter.github.io/scala-3-migration-guide/ + link: /scala3/guides/migration/compatibility-intro.html - title: "Guides" description: "Detailed guides about particular aspects of the language." icon: "fa fa-map" diff --git a/scala3/new-in-scala3.md b/scala3/new-in-scala3.md index ccc9abe1f1..a0b3230bc2 100644 --- a/scala3/new-in-scala3.md +++ b/scala3/new-in-scala3.md @@ -109,7 +109,7 @@ If you want to learn more about metaprogramming in Scala 3, we invite you to tak [overload-resolution]: {{ site.scala3ref }}/changed-features/overload-resolution.html [reference]: {{ site.scala3ref }}/overview.html [creator]: {{ site.scala3ref }}/other-new-features/creator-applications.html -[migration]: https://scalacenter.github.io/scala-3-migration-guide +[migration]: {% link _overviews/scala3-migration/compatibility-intro.md %} [implicits]: {{ site.scala3ref }}/contextual/motivation.html [contextual-using]: {{ site.scala3ref }}/contextual/using-clauses.html From 155ee15598bb88d50e73d643713a374e70dbe8cb Mon Sep 17 00:00:00 2001 From: Adrien Piquerez Date: Thu, 22 Apr 2021 16:29:09 +0200 Subject: [PATCH 0189/1870] Fix duplicated index.md in macro-tutorial --- _ja/scala3/new-in-scala3.md | 4 ++-- _overviews/scala3-macros/index.md | 16 ---------------- _overviews/scala3-macros/tutorial/index.md | 2 -- .../compatibility-metaprogramming.md | 2 +- scala3/new-in-scala3.md | 4 ++-- 5 files changed, 5 insertions(+), 23 deletions(-) delete mode 100644 _overviews/scala3-macros/index.md diff --git a/_ja/scala3/new-in-scala3.md b/_ja/scala3/new-in-scala3.md index 9b45824291..f1408468e3 100644 --- a/_ja/scala3/new-in-scala3.md +++ b/_ja/scala3/new-in-scala3.md @@ -72,7 +72,7 @@ Scala は常に関数型プログラミングとオブジェクト指向プロ ### Batteries Included: メタプログラミング Scala 2 のマクロはあくまで実験的な機能という位置づけだが、Scala 3 ではメタプログラミングに役立つ強力なツールが標準ライブラリに入っている。 - [macro tutorial]({% link _overviews/scala3-macros/index.md %}) のページに異なった機能についての詳しい情報がある。特に Scala 3 は次のようなメタプログラミングのための機能を提供している。 + [macro tutorial]({% link _overviews/scala3-macros/tutorial/index.md %}) のページに異なった機能についての詳しい情報がある。特に Scala 3 は次のようなメタプログラミングのための機能を提供している。 - **Inline**. [inline][meta-inline] を使うことで値やメソッドをコンパイル時に評価できる。 このシンプルな機能はさまざまなユースケースに対応している。また同時に`inline`はより高度な機能のエントリーポイントとしても使える。 - **Compile-time operations**. [`scala.compiletime`][meta-compiletime] パッケージには inline method を実装するのに役立つ追加的な機能が含まれている。 @@ -112,7 +112,7 @@ Scala 3 のメタプログラミングについてもっと知りたいかたは [syntax-indentation]: {{ site.scala3ref }}/other-new-features/indentation.html [syntax-wildcard]: {{ site.scala3ref }}/changed-features/wildcards.html -[meta-tutorial]: {% link _overviews/scala3-macros/index.md %} +[meta-tutorial]: {% link _overviews/scala3-macros/tutorial/index.md %} [meta-inline]: {% link _overviews/scala3-macros/tutorial/inline.md %} [meta-compiletime]: {% link _overviews/scala3-macros/tutorial/compiletime.md %} [meta-quotes]: {% link _overviews/scala3-macros/tutorial/quotes.md %} diff --git a/_overviews/scala3-macros/index.md b/_overviews/scala3-macros/index.md deleted file mode 100644 index 0b5a62b4a6..0000000000 --- a/_overviews/scala3-macros/index.md +++ /dev/null @@ -1,16 +0,0 @@ ---- -type: book -title: Introduction -description: A tutorial to cover all the features involved in writing macros in Scala 3. -num: 0 ---- - -## Scala 3 Macro Tutorial -A [tutorial][tutorial] to cover all the features involved in writing macros in Scala 3. - -## Migrating Macros -Scala 3 provides a toolbox full of metaprogramming features, which are safer, more robust, and much more stable than their counterparts in Scala 2. Implementing macro libraries in Scala 3 is simpler and the resulting libraries are easier to maintain across future versions of Scala. The improvements come at a price: the metaprogramming facilities have been re-designed from the ground up. In consequence, existing macro libraries need to be ported to the new interfaces. - -In the [Migrating Macros](https://scalacenter.github.io/scala-3-migration-guide/docs/macros/macro-libraries.html) section, you will find helpful content to port your macros code to Scala 3. - -[tutorial]: {% link _overviews/scala3-macros/tutorial/index.md %} diff --git a/_overviews/scala3-macros/tutorial/index.md b/_overviews/scala3-macros/tutorial/index.md index c386a1c41c..e70c39ef45 100644 --- a/_overviews/scala3-macros/tutorial/index.md +++ b/_overviews/scala3-macros/tutorial/index.md @@ -7,8 +7,6 @@ num: 1 next-page: inline --- -## Introduction - This tutorial covers all the features involved in writing macros in Scala 3. The metaprogramming API of Scala 3 is designed in layers to gradually diff --git a/_overviews/scala3-migration/compatibility-metaprogramming.md b/_overviews/scala3-migration/compatibility-metaprogramming.md index 80edba1bef..f140b0cb42 100644 --- a/_overviews/scala3-migration/compatibility-metaprogramming.md +++ b/_overviews/scala3-migration/compatibility-metaprogramming.md @@ -83,4 +83,4 @@ Early-adopter projects: [macros]: {% link _overviews/scala3-macros/tutorial/macros.md %} [quotes]: {% link _overviews/scala3-macros/tutorial/quotes.md %} [reflection]: {% link _overviews/scala3-macros/tutorial/reflection.md %} -[scala3-macros]: {% link _overviews/scala3-macros/index.md %} \ No newline at end of file +[scala3-macros]: {% link _overviews/scala3-macros/tutorial/index.md %} \ No newline at end of file diff --git a/scala3/new-in-scala3.md b/scala3/new-in-scala3.md index a0b3230bc2..ecbc2c20f1 100644 --- a/scala3/new-in-scala3.md +++ b/scala3/new-in-scala3.md @@ -84,7 +84,7 @@ At the same time, the following novel features enable well-structured _object-or ### Batteries Included: Metaprogramming While macros in Scala 2 were an experimental feature only, Scala 3 comes with a powerful arsenal of tools for metaprogramming. -The [macro tutorial]({% link _overviews/scala3-macros/index.md %}) contains detailed information on the different facilities. In particular, Scala 3 offers the following features for metaprogramming: +The [macro tutorial]({% link _overviews/scala3-macros/tutorial/index.md %}) contains detailed information on the different facilities. In particular, Scala 3 offers the following features for metaprogramming: - **Inline**. As the basic starting point, the [inline feature][meta-inline] allows values and methods to be reduced at compile time. This simple feature already covers many use-cases and at the same time provides the entry point for more advanced features. - **Compile-time operations**. The package [`scala.compiletime`][meta-compiletime] contains additional functionality that can be used to implement inline methods. @@ -123,7 +123,7 @@ If you want to learn more about metaprogramming in Scala 3, we invite you to tak [syntax-indentation]: {{ site.scala3ref }}/other-new-features/indentation.html [syntax-wildcard]: {{ site.scala3ref }}/changed-features/wildcards.html -[meta-tutorial]: {% link _overviews/scala3-macros/index.md %} +[meta-tutorial]: {% link _overviews/scala3-macros/tutorial/index.md %} [meta-inline]: {% link _overviews/scala3-macros/tutorial/inline.md %} [meta-compiletime]: {% link _overviews/scala3-macros/tutorial/compiletime.md %} [meta-quotes]: {% link _overviews/scala3-macros/tutorial/quotes.md %} From 376672d98ca59a090680b0aa8cc7617a160ed16e Mon Sep 17 00:00:00 2001 From: Adrien Piquerez Date: Thu, 22 Apr 2021 18:42:07 +0200 Subject: [PATCH 0190/1870] Fix syntax highlighting in migration guide --- _includes/footer.html | 6 +-- .../compatibility-metaprogramming.md | 6 +-- .../incompat-contextual-abstractions.md | 21 ++++---- .../incompat-dropped-features.md | 24 ++++----- .../incompat-other-changes.md | 24 ++++----- .../scala3-migration/incompat-syntactic.md | 54 +++++++++---------- .../scala3-migration/incompat-type-checker.md | 16 +++--- .../incompat-type-inference.md | 9 ++-- .../tooling-migration-mode.md | 4 +- .../tooling-syntax-rewriting.md | 8 +-- .../tutorial-macro-cross-building.md | 8 +-- .../scala3-migration/tutorial-macro-mixing.md | 4 +- .../tutorial-prerequisites.md | 6 +-- _overviews/scala3-migration/tutorial-sbt.md | 21 ++++---- 14 files changed, 107 insertions(+), 104 deletions(-) diff --git a/_includes/footer.html b/_includes/footer.html index 158b8b52bd..a9e18083ff 100644 --- a/_includes/footer.html +++ b/_includes/footer.html @@ -39,9 +39,9 @@ - - - + + + diff --git a/_overviews/scala3-migration/compatibility-metaprogramming.md b/_overviews/scala3-migration/compatibility-metaprogramming.md index f140b0cb42..f0deb53e35 100644 --- a/_overviews/scala3-migration/compatibility-metaprogramming.md +++ b/_overviews/scala3-migration/compatibility-metaprogramming.md @@ -21,13 +21,13 @@ While this is an uncontested improvement, it also means that all Scala 2.13 macr A Scala 3 module can depend on a Scala 2.13 artifact even if it contains a macro definition but the compiler will not be able to expand its macros. When you try to, it simply returns an error. -```text +{% highlight text %} -- Error: /src/main/scala/example/Example.scala:10:45 10 | val documentFormat = Json.format[Document] | ^ |Scala 2 macro cannot be used in Scala 3. See https://dotty.epfl.ch/docs/reference/dropped-features/macros.html |To turn this error into a warning, pass -Xignore-scala2-macros to the compiler -``` +{% endhighlight %} Let's note that using `-Xignore-scala2-macros` is helpful to type check the code but it produces incomplete class files. @@ -83,4 +83,4 @@ Early-adopter projects: [macros]: {% link _overviews/scala3-macros/tutorial/macros.md %} [quotes]: {% link _overviews/scala3-macros/tutorial/quotes.md %} [reflection]: {% link _overviews/scala3-macros/tutorial/reflection.md %} -[scala3-macros]: {% link _overviews/scala3-macros/tutorial/index.md %} \ No newline at end of file +[scala3-macros]: {% link _overviews/scala3-macros/tutorial/index.md %} diff --git a/_overviews/scala3-migration/incompat-contextual-abstractions.md b/_overviews/scala3-migration/incompat-contextual-abstractions.md index c94202b740..64386ba156 100644 --- a/_overviews/scala3-migration/incompat-contextual-abstractions.md +++ b/_overviews/scala3-migration/incompat-contextual-abstractions.md @@ -62,11 +62,12 @@ The resolved conversion depends on the compiler mode: One simple fix is to supply the right conversion explicitly: -```diff +{% highlight diff %} def pretty[A](a: A)(implicit ev: A => Pretty): String = - a.print + ev(a).print -``` +{% endhighlight %} + ## View Bounds View bounds have been deprecated for a long time but they are still supported in Scala 2.13. @@ -78,12 +79,12 @@ def foo[A <% Long](a: A): Long = a In this example we get: -```text +{% highlight text %} -- Error: src/main/scala/view-bound.scala:2:12 2 | def foo[A <% Long](a: A): Long = a | ^ | view bounds `<%' are deprecated, use a context bound `:' instead -``` +{% endhighlight %} The message suggests to use a context bound instead of a view bound but it would change the signature of the method. It is probably easier and safer to preserve the binary compatibility. @@ -91,10 +92,10 @@ To do so the implicit conversion must be declared and called explicitly. Be careful not to fall in the runtime incompatibility described above, in [Implicit Views](#implicit-views). -```diff +{% highlight diff %} -def foo[A <% Long](a: A): Long = a +def foo[A](a: A)(implicit ev: A => Long): Long = ev(a) -``` +{% endhighlight %} ## Ambiguous Conversion On `A` And `=> A` @@ -112,7 +113,7 @@ true.foo() The Scala 2.13 compiler chooses the `boolFoo` conversion but the Scala 3 compiler fails to compile. -```text +{% highlight text %} -- Error: src/main/scala/ambiguous-conversion.scala:4:19 9 | true.foo() | ^^^^ @@ -120,14 +121,14 @@ The Scala 2.13 compiler chooses the `boolFoo` conversion but the Scala 3 compile |Required: ?{ foo: ? } |Note that implicit extension methods cannot be applied because they are ambiguous; |both method boolFoo in object Foo and method lazyBoolFoo in object Foo provide an extension method `foo` on (true : Boolean) -``` +{% endhighlight %} A temporary solution is to write the conversion explicitly. -```diff +{% highlight diff %} implicit def boolFoo(bool: Boolean): Foo = ??? implicit def lazyBoolFoo(lazyBool: => Boolean): Foo = ??? -true.foo() +boolFoo(true).foo() -``` \ No newline at end of file +{% endhighlight %} diff --git a/_overviews/scala3-migration/incompat-dropped-features.md b/_overviews/scala3-migration/incompat-dropped-features.md index d4d8c1e610..2ba51e4a86 100644 --- a/_overviews/scala3-migration/incompat-dropped-features.md +++ b/_overviews/scala3-migration/incompat-dropped-features.md @@ -35,12 +35,12 @@ val abc = values('abc) // Migration Warning: symbol literal 'abc is no longer su The [Scala 3 migration compilation](tooling-migration-mode.html) rewrites the code into: -```diff +{% highlight diff %} val values: Map[Symbol, Int] = Map(Symbol("abc") -> 1) -val abc = values('abc) +val abc = values(Symbol("abc")) -``` +{% endhighlight %} Although the `Symbol` class is useful during the transition, beware that it is deprecated and will be removed from the `scala-library` in a future version. You are recommended, as a second step, to replace every use of `Symbol` with a plain string literals `"abc"` or a custom dedicated class. @@ -85,14 +85,14 @@ println(Hello.message) // Migration Warning: method message must be called with The [Scala 3 migration compilation](tooling-migration-mode.html) rewrites it into: -```diff +{% highlight diff %} object Hello { def message(): String = "Hello" } -println(Hello.message) +println(Hello.message()) -``` +{% endhighlight %} Auto-application is covered in detail in [this page](https://dotty.epfl.ch/docs/reference/dropped-features/auto-apply.html) of the Scala 3 reference documentation. @@ -110,11 +110,11 @@ val f: () => Int = x _ // Migration Warning: The syntax ` _` is no lon The [Scala 3 migration compilation](tooling-migration-mode.html) rewrites it into: -```diff +{% highlight diff %} val x = 1 -val f: () => Int = x _ +val f: () => Int = (() => x) -``` +{% endhighlight %} ## `any2stringadd` conversion @@ -128,10 +128,10 @@ val str = new AnyRef + "foo" // Error: value + is not a member of Object The conversion to `String` must be applied explicitly, for instance with `String.valueOf`. -```diff +{% highlight diff %} -val str = new AnyRef + "foo" +val str = String.valueOf(new AnyRef) + "foo" -``` +{% endhighlight %} This rewrite can be applied by the `fix.scala213.Any2StringAdd` Scalafix rule in [`scala/scala-rewrites`](https://index.scala-lang.org/scala/scala-rewrites/scala-rewrites/0.1.2?target=_2.13). @@ -155,19 +155,19 @@ object Foo extends { The Scala 3 compiler produces two error messages: -```text +{% highlight text %} -- Error: src/main/scala/early-initializer.scala:6:19 6 |object Foo extends { | ^ | `extends` must be followed by at least one parent -``` +{% endhighlight %} -```text +{% highlight text %} -- [E009] Syntax Error: src/main/scala/early-initializer.scala:8:2 8 |} with Bar | ^^^^ | Early definitions are not supported; use trait parameters instead -``` +{% endhighlight %} It suggests to use trait parameters which would give us: diff --git a/_overviews/scala3-migration/incompat-other-changes.md b/_overviews/scala3-migration/incompat-other-changes.md index 43eac04f5a..cb8ffc1607 100644 --- a/_overviews/scala3-migration/incompat-other-changes.md +++ b/_overviews/scala3-migration/incompat-other-changes.md @@ -56,14 +56,14 @@ object B { } ``` -```text +{% highlight text %} -- [E049] Reference Error: src/main/scala/inheritance-shadowing.scala:9:14 9 | println(x) | ^ | Reference to x is ambiguous, | it is both defined in object B | and inherited subsequently in class C -``` +{% endhighlight %} The [Scala 3 migration compilation](tooling-migration-mode.html) can automatically disambiguate the code by replacing `println(x)` with `println(this.x)`. @@ -130,13 +130,13 @@ Foo.tupled((2, false)) A cross-compiling solution is to explicitly eta-expand the method `Foo.apply`. -```diff +{% highlight diff %} -Foo.curried(1)(true) +(Foo.apply _).curried(1)(true) -Foo.tupled((2, false)) +(Foo.apply _).tupled((2, false)) -``` +{% endhighlight %} Or, for performance reasons, you can introduce an intermediate function value. @@ -187,13 +187,13 @@ def tuple(location: Location): (Int, Int) = { A possible solution is to use pattern binding: -```diff +{% highlight diff %} def tuple(location: Location): (Int, Int) = { - Location.unapply(location).get + val Location(lat, lon) = location + (lat, lon) } -``` +{% endhighlight %} ## Invisible Bean Property @@ -215,7 +215,7 @@ println(pojo.getFooBar()) // [E008] Not Found Error: value getFooBar is not a me The solution is to call the more idiomatic `pojo.fooBar` getter and setter. -```diff +{% highlight diff %} val pojo = new Pojo() -pojo.setFooBar("hello") @@ -223,7 +223,7 @@ val pojo = new Pojo() -println(pojo.getFooBar()) +println(pojo.fooBar) -``` +{% endhighlight %} ## `=> T` as Type Argument @@ -267,10 +267,10 @@ trait Example { We can fix this by using a type parameter: -```diff +{% highlight diff %} -def f(foo: Foo[_]): Unit +def f[A](foo: Foo[A]): Unit -``` +{% endhighlight %} But this simple solution does not work when `Foo` is itself used as a type argument. @@ -280,9 +280,9 @@ def g(foos: Seq[Foo[_]]): Unit` In such case, we can use a wrapper class around `Foo`: -```diff +{% highlight diff %} +class FooWrapper[A](foo: Foo[A]) -def g(foos: Seq[Foo[_]]): Unit` +def g(foos: Seq[FooWrapper[_]]): Unit -``` +{% endhighlight %} diff --git a/_overviews/scala3-migration/incompat-syntactic.md b/_overviews/scala3-migration/incompat-syntactic.md index f1999d5fef..aa64f7b1ed 100644 --- a/_overviews/scala3-migration/incompat-syntactic.md +++ b/_overviews/scala3-migration/incompat-syntactic.md @@ -41,26 +41,25 @@ It is composed of: For instance, the following piece of code can be compiled with Scala 2.13 but not wtih Scala 3. ```scala -object given { // Error: given is now a keyword, write `given` instead of given to keep it as an identifier - val enum = ??? // Error: enum is now a keyword, write `enum` instead of given to keep it as an identifier +object given { // Error: given is now a keyword + val enum = ??? // Error: enum is now a keyword - println(enum) // Error: enum is now a keyword, write `enum` instead of given to keep it as an identifier + println(enum) // Error: enum is now a keyword } ``` The [Scala 3 migration compilation](tooling-migration-mode.html) rewrites the code into: -```diff +{% highlight diff %} -object given { -- val enum = ??? - -- println(enum) +object `given` { +- val enum = ??? + val `enum` = ??? +- println(enum) + println(`enum`) } -``` +{% endhighlight %} ## Procedure Syntax @@ -77,14 +76,14 @@ object Bar { The [Scala 3 migration compilation](tooling-migration-mode.html) rewrites the code into. -```diff +{% highlight diff %} object Bar { - def print() { + def print(): Unit = { println("bar") } } -``` +{% endhighlight %} ## Parentheses Around Lambda Parameter @@ -97,10 +96,10 @@ val f = { x: Int => x * x } // Error: parentheses are required around the parame The [Scala 3 migration compilation](tooling-migration-mode.html) rewrites the code into: -```diff +{% highlight diff %} -val f = { x: Int => x * x } +val f = { (x: Int) => x * x } -``` +{% endhighlight %} ## Open Brace Indentation For Passing An Argument @@ -117,33 +116,33 @@ test("my test") The [Scala 3 migration compiler](tooling-migration-mode.html) indents the first line of the block. -```diff +{% highlight diff %} test("my test") -{ + { assert(1 == 1) } -``` +{% endhighlight %} This migration rule applies to other patterns as well, such as refining a type after a new line. -```diff +{% highlight diff %} type Bar = Foo - { + { def bar(): Int } -``` +{% endhighlight %} A preferable solution is to write: -``` diff +{% highlight diff %} -test("my test") -{ +test("my test") { assert(1 == 1) } -``` +{% endhighlight %} ## Wrong indentation @@ -160,14 +159,14 @@ def bar: (Int, Int) = { The indentation must be fixed. -```diff +{% highlight diff %} def bar: (Int, Int) = { val foo = 1.0 val bar = foo - (1, 1) + (1, 1) } -``` +{% endhighlight %} These errors can be prevented by using a Scala formatting tool such as [scalafmt](https://scalameta.org/scalafmt/) or the [IntelliJ Scala formatter](https://www.jetbrains.com/help/idea/reformat-and-rearrange-code.html). Beware that these tools may change the entire code style of your project. @@ -177,7 +176,8 @@ Beware that these tools may change the entire code style of your project. The usage of the `_` identifier as a type parameter is permitted in Scala 2.13, even if it has never been mentioned in the Scala 2 specification. It is used in the API of [fastparse](https://index.scala-lang.org/lihaoyi/fastparse), in combination with a context bound, to declare an implicit parameter. -```sala + +```scala def foo[_: Foo]: Unit = ??? ``` @@ -187,20 +187,20 @@ Martin Odersky described this pattern as a "clever exploit of a scalac compiler The Scala 3 compiler does not permit this pattern anymore: -```text +{% highlight text %} -- [E040] Syntax Error: src/main/scala/anonymous-type-param.scala:4:10 4 | def foo[_: Foo]: Unit = () | ^ | an identifier expected, but '_' found -``` +{% endhighlight %} The solution is to give the parameter a valid identifier name, for instance `T`. This will not break the binary compatibility. -```diff +{% highlight diff %} -def foo[_: Foo]: Unit = ??? +def foo[T: Foo]: Unit = ??? -``` +{% endhighlight %} ## `+` And `-` As Type Parameters @@ -208,12 +208,12 @@ This will not break the binary compatibility. You cannot write `def foo[+]` or `def foo[-]` anymore. -``` +{% highlight text %} -- Error: src/main/scala/type-param-identifier.scala:2:10 2 | def foo[+]: + | ^ | no `+/-` variance annotation allowed here -``` +{% endhighlight %} The solution is to choose another valid identifier, for instance `T`. diff --git a/_overviews/scala3-migration/incompat-type-checker.md b/_overviews/scala3-migration/incompat-type-checker.md index ca5295ddef..cabcfa6860 100644 --- a/_overviews/scala3-migration/incompat-type-checker.md +++ b/_overviews/scala3-migration/incompat-type-checker.md @@ -28,7 +28,7 @@ class Outer[+A](x: A) { } ``` -```text +{% highlight text %} -- Error: src/main/scala/variance.scala:2:8 2 | def f[B](y: List[B] = x): Unit = y | ^^^^^^^^^^^^^^^^^ @@ -37,7 +37,7 @@ class Outer[+A](x: A) { 6 | class Inner(y: A) | ^^^^ |covariant type A occurs in contravariant position in type A of parameter y -``` +{% endhighlight %} Each problem of this kind needs a specific care. You can try the following options on a case-by-case basis: @@ -47,7 +47,7 @@ You can try the following options on a case-by-case basis: In our example, we can opt for these two solutions: -```diff +{% highlight diff %} class Foo[-A](x: List[A]) { - def f[B](y: List[B] = x): Unit = ??? + def f[B](y: List[B]): Unit = ??? @@ -58,16 +58,16 @@ class Outer[+A](x: A) { - class Inner(y: A) + class Inner[B >: A](y: B) } -``` +{% endhighlight %} Or, as a temporary solution, you can also use the `uncheckedVariance` annotation: -```diff +{% highlight diff %} class Outer[+A](x: A) { - class Inner(y: A) + class Inner(y: A @uncheckedVariance) } -``` +{% endhighlight %} ## Unsoundness Fixes in Pattern Matching @@ -92,13 +92,13 @@ object Request { The error message is: -```text +{% highlight text %} -- [E007] Type Mismatch Error: src/main/scala/pattern-match.scala:9:59 9 | case (x @ Fetch(_), y @ Fetch(_)) => combineFetch(x, y) | ^ | Found: (y : Fetch[A$2]) | Required: Fetch[A$1] -``` +{% endhighlight %} Which is right, there is no proof that `x` and `y` have the same type paramater `A`. diff --git a/_overviews/scala3-migration/incompat-type-inference.md b/_overviews/scala3-migration/incompat-type-inference.md index dc52ee0567..c770639475 100644 --- a/_overviews/scala3-migration/incompat-type-inference.md +++ b/_overviews/scala3-migration/incompat-type-inference.md @@ -56,12 +56,13 @@ In some rare cases involving implicit conversions and runtime casting it could e The solution is to make the return type of the override method explicit: -```diff +{% highlight diff %} class Child extends Parent { - override def foo = new RichFoo(super.foo) + override def foo: RichFoo = new RichFoo(super.foo) } -``` +{% endhighlight %} + ## Reflective Type Scala 2 reflective calls are dropped and replaced by the broader [Programmatic Structural Types](https://dotty.epfl.ch/docs/reference/changed-features/structural-types.html). @@ -81,7 +82,7 @@ foo.bar // Error: value bar is not a member of Object The straightforward solution is to write down the structural type. -```diff +{% highlight diff %} import scala.language.reflectiveCalls - val foo = new { @@ -90,4 +91,4 @@ import scala.language.reflectiveCalls } foo.bar -``` +{% endhighlight %} diff --git a/_overviews/scala3-migration/tooling-migration-mode.md b/_overviews/scala3-migration/tooling-migration-mode.md index 9431e784f0..045ede947b 100644 --- a/_overviews/scala3-migration/tooling-migration-mode.md +++ b/_overviews/scala3-migration/tooling-migration-mode.md @@ -15,7 +15,7 @@ Try running `scalac` to have a glimpse of those utilities: > > It can also be installed using Coursier with `cs install scala3-compiler`, in which case `scalac` is aliased `scala3-compiler`. -```text +{% highlight text %} $ scalac Usage: scalac where possible standard options include: @@ -30,7 +30,7 @@ where possible standard options include: Default: 3.0. Choices: 3.0, future, 3.0-migration, future-migration. ... -``` +{% endhighlight %} ## Migration mode diff --git a/_overviews/scala3-migration/tooling-syntax-rewriting.md b/_overviews/scala3-migration/tooling-syntax-rewriting.md index 81b7c7aab5..149bb658eb 100644 --- a/_overviews/scala3-migration/tooling-syntax-rewriting.md +++ b/_overviews/scala3-migration/tooling-syntax-rewriting.md @@ -21,7 +21,7 @@ Let's start with showing the compiler options we have available to achieve our g If we simply type `scalac` on the command line it prints all the options we have at our disposal. For our purposes we will use the following five options: -```text +{% highlight text %} $ scalac Usage: scalac where possible standard options include: @@ -37,7 +37,7 @@ where possible standard options include: rewrites sources to migrate to new version. ... -``` +{% endhighlight %} Each of the first four options corresponds to a specific syntax: @@ -248,12 +248,12 @@ A better approach is to choose one style and to consistently apply it to the ent For instance, with the `-new-syntax` option, the compiler issues an error when it encounters enclosing parentheses around an `if`-condition. -```text +{% highlight text %} -- Error: /home/piquerez/scalacenter/syntax/example.scala:6:7 ------------------ 6 | if (n == maxValue) | ^^^^^^^^^^^^^^^ |This construct is not allowed under -new-syntax. |This construct can be rewritten automatically under -new-syntax -rewrite -source 3.0-migration. -``` +{% endhighlight %} > The `-indent` syntax is always optional, it cannot be enforced by the compiler. diff --git a/_overviews/scala3-migration/tutorial-macro-cross-building.md b/_overviews/scala3-migration/tutorial-macro-cross-building.md index 4004b70df6..506ffa5d62 100644 --- a/_overviews/scala3-migration/tutorial-macro-cross-building.md +++ b/_overviews/scala3-migration/tutorial-macro-cross-building.md @@ -94,7 +94,7 @@ At any point you can go back to the Scala 2.13 context by running `++2.13.5`. If you try to compile with Scala 3 you should see some errors of the same kind as: -```text +{% highlight text %} sbt:example> ++3.0.0-RC3 sbt:example> example / compile [error] -- Error: /example/src/main/scala/location/Location.scala:15:35 @@ -106,7 +106,7 @@ sbt:example> example / compile [error] | ^ [error] |Scala 2 macro cannot be used in Dotty. See https://dotty.epfl.ch/docs/reference/dropped-features/macros.html [error] |To turn this error into a warning, pass -Xignore-scala2-macros to the compiler -``` +{% endhighlight %} To provide a Scala 3 alternative while preserving the Scala 2 implementation, we are going to rearrange the code in version-specific source directories. All the code that cannot be compiled by the Scala 3 compiler goes to the `src/main/scala-2` folder. @@ -197,7 +197,7 @@ class MacrosSpec extends munit.FunSuite { You should now be able to run the tests in both versions. -```text +{% highlight text %} sbt:example> ++2.13.5 sbt:example> example / test location.MacrosSpec: @@ -210,7 +210,7 @@ location.MacrosSpec: + location [info] Passed: Total 1, Failed 0, Errors 0, Passed 1 [success] -``` +{% endhighlight %} ## Final overview diff --git a/_overviews/scala3-migration/tutorial-macro-mixing.md b/_overviews/scala3-migration/tutorial-macro-mixing.md index 0dc82c9e5f..01f2727a8e 100644 --- a/_overviews/scala3-migration/tutorial-macro-mixing.md +++ b/_overviews/scala3-migration/tutorial-macro-mixing.md @@ -162,7 +162,7 @@ class MacrosSpec extends munit.FunSuite { You should now be able to run the tests in both versions. -```text +{% highlight text %} sbt:example> ++2.13.5 sbt:example> example-test / test location.MacrosSpec: @@ -175,7 +175,7 @@ location.MacrosSpec: + location [info] Passed: Total 1, Failed 0, Errors 0, Passed 1 [success] -``` +{% endhighlight %} ## Final Overview diff --git a/_overviews/scala3-migration/tutorial-prerequisites.md b/_overviews/scala3-migration/tutorial-prerequisites.md index 37b3aa9555..45a0ea4360 100644 --- a/_overviews/scala3-migration/tutorial-prerequisites.md +++ b/_overviews/scala3-migration/tutorial-prerequisites.md @@ -67,13 +67,13 @@ Some compiler plugins may also be automatically added by an sbt plugin. You can find all configured compiler plugins by looking at the compiler options of your project. -```text +{% highlight text %} sbt:example> show example / Compile / scalacOptions [info] * -Xplugin:target/compiler_plugins/wartremover_2.13.5-2.4.12.jar [info] * -Xplugin:target/compiler_plugins/semanticdb-scalac_2.13.5-4.3.20.jar [info] * -Yrangepos [info] * -P:semanticdb:targetroot:/example/target/scala-2.13/meta -``` +{% endhighlight %} In the above example we can see that two compiler plugins are used: wartremover and semanticdb. For each of these plugins, we need to check that there is an alternative solution, or we need to disable it. @@ -122,4 +122,4 @@ AdditionalLy, we now have the following features that make `kind-projector` not If your project depends on `scala-reflect`, or consumes instances of the `Manifest` class, it cannot be compiled by the Scala 3 compiler. To remedy this situation, you can try to re-implement the corresponding parts of the code, using Java reflection or the [Scala 3 metaprogramming features](compatibility-metaprogramming.html). -If `scala-reflect` is transitively added in your classpath, you probably need to upgrade the dependency that brings it. \ No newline at end of file +If `scala-reflect` is transitively added in your classpath, you probably need to upgrade the dependency that brings it. diff --git a/_overviews/scala3-migration/tutorial-sbt.md b/_overviews/scala3-migration/tutorial-sbt.md index 3ecb0efef2..faf386e879 100644 --- a/_overviews/scala3-migration/tutorial-sbt.md +++ b/_overviews/scala3-migration/tutorial-sbt.md @@ -87,14 +87,15 @@ Or for a Scala.js dependencies: ``` Once you have fixed all the unresolved dependencies, you can check that the tests are still passing in Scala 2.13: -```text + +{% highlight text %} sbt:example> ++2.13.5 [info] Setting Scala version to 2.13.5 on 1 project. ... sbt:example> example / test ... [success] -``` +{% endhighlight %} ## 5. Configure the Scala 3 Compiler @@ -136,14 +137,14 @@ Also you should disable `-Xfatal-warnings` to take full advantage of the migrati It is now time to try compiling in Scala 3: -```text +{% highlight text %} sbt:example> ++3.0.0-RC3 [info] Setting Scala version to 3.0.0-RC3 on 1 project. ... sbt:example> example / compile ... sbt:example> example / Test / compile -``` +{% endhighlight %} > `example / compile` compiles the `main` sources of the example project. > It is strictly equivalent to `example / Compile / compile`. @@ -169,14 +170,14 @@ This is particularly crucial if your project is a published library. After fixing an incompatibility, you can validate the solution by running the tests in Scala 2.13. -```text +{% highlight text %} sbt:example> ++2.13.5 [info] Setting Scala version to 2.13.5 on 1 project. ... sbt:example> example / test ... [success] -``` +{% endhighlight %} Consider committing your changes regularly. @@ -184,7 +185,7 @@ Once you have fixed all the errors you should be able to compile successfully in Only the migration warnings are remaining. You can patch them automatically by compiling with the `-source:3.0-migration -rewrite` options. -```text +{% highlight text %} sbt:example> ++3.0.0-RC3 sbt:example> set example / scalacOptions += "-rewrite" sbt:example> example / compile @@ -192,7 +193,7 @@ sbt:example> example / compile [info] [patched file /example/src/main/scala/app/Main.scala] [warn] two warnings found [success] -``` +{% endhighlight %} You should now remove the `-source:3.0-migration` option, and you can also add the `-Xfatal-warnings` option again. Do not forget to reload. @@ -204,7 +205,7 @@ Good tests are the only guarantee to prevent such bugs from going unnoticed. Make sure that the tests are passing in both Scala 2.13 and Scala 3. -```text +{% highlight text %} sbt:example> ++2.13.5 sbt:example> example / test ... @@ -213,7 +214,7 @@ sbt:example> ++3.0.0-RC3 sbt:example> example / test ... [success] -``` +{% endhighlight %} If you have a continuous integration pipeline, it is time to set it up for Scala 3. From 339eccd599eebd8b0937e8f67df7cce35a4b7754 Mon Sep 17 00:00:00 2001 From: Nicolas Stucki Date: Wed, 5 May 2021 13:08:25 +0200 Subject: [PATCH 0191/1870] Change documentation paragraph line height Improve the readability of paragraphs in the documentation by adding some extra space between the lines. --- _sass/layout/documentation.scss | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/_sass/layout/documentation.scss b/_sass/layout/documentation.scss index 6954645f23..4c10d7de02 100644 --- a/_sass/layout/documentation.scss +++ b/_sass/layout/documentation.scss @@ -44,6 +44,10 @@ .content-primary.documentation { line-height: 1.3; + p { + line-height: 1.5; + } + ol { margin-bottom: 18px; } From ffcdc42e3e199aab216edbf3c889d76843537f59 Mon Sep 17 00:00:00 2001 From: Nicolas Stucki Date: Wed, 5 May 2021 16:57:42 +0200 Subject: [PATCH 0192/1870] Fix haskell wiki link --- _overviews/quasiquotes/terminology.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/_overviews/quasiquotes/terminology.md b/_overviews/quasiquotes/terminology.md index c68d1828ad..2c6e1f8ee9 100644 --- a/_overviews/quasiquotes/terminology.md +++ b/_overviews/quasiquotes/terminology.md @@ -10,7 +10,7 @@ permalink: /overviews/quasiquotes/:title.html --- EXPERIMENTAL -* **Quasiquote** (not quasi-quote) can refer to either the quasiquote library or any usage of one its [interpolators](intro.html#interpolators). The name is not hyphenated for the sake of consistency with implementations of the same concept in other languages (e.g. [Scheme and Racket](https://docs.racket-lang.org/reference/quasiquote.html), [Haskell](https://www.haskell.org/haskellwiki/Quasiquotation)) +* **Quasiquote** (not quasi-quote) can refer to either the quasiquote library or any usage of one its [interpolators](intro.html#interpolators). The name is not hyphenated for the sake of consistency with implementations of the same concept in other languages (e.g. [Scheme and Racket](https://docs.racket-lang.org/reference/quasiquote.html), [Haskell](https://wiki.haskell.org/Quasiquotation)) * **Tree** or **AST** (Abstract Syntax Tree) is a representation of a Scala program or a part of it through means of the Scala reflection API's Tree type. * **Tree construction** refers to usages of quasiquotes as expressions to represent creation of new tree values. * **Tree deconstruction** refers to usages of quasiquotes as patterns to structurally tear apart trees. From bedf039c1f8160e69a1027be908935a7353193c9 Mon Sep 17 00:00:00 2001 From: Nicolas Stucki Date: Wed, 5 May 2021 20:41:39 +0200 Subject: [PATCH 0193/1870] Update _overviews/quasiquotes/terminology.md Co-authored-by: Philippus Baalman --- _overviews/quasiquotes/terminology.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/_overviews/quasiquotes/terminology.md b/_overviews/quasiquotes/terminology.md index 2c6e1f8ee9..ce5cf7eded 100644 --- a/_overviews/quasiquotes/terminology.md +++ b/_overviews/quasiquotes/terminology.md @@ -10,7 +10,7 @@ permalink: /overviews/quasiquotes/:title.html --- EXPERIMENTAL -* **Quasiquote** (not quasi-quote) can refer to either the quasiquote library or any usage of one its [interpolators](intro.html#interpolators). The name is not hyphenated for the sake of consistency with implementations of the same concept in other languages (e.g. [Scheme and Racket](https://docs.racket-lang.org/reference/quasiquote.html), [Haskell](https://wiki.haskell.org/Quasiquotation)) +* **Quasiquote** (not quasi-quote) can refer to either the quasiquote library or any usage of one of its [interpolators](intro.html#interpolators). The name is not hyphenated for the sake of consistency with implementations of the same concept in other languages (e.g. [Scheme and Racket](https://docs.racket-lang.org/reference/quasiquote.html), [Haskell](https://wiki.haskell.org/Quasiquotation)) * **Tree** or **AST** (Abstract Syntax Tree) is a representation of a Scala program or a part of it through means of the Scala reflection API's Tree type. * **Tree construction** refers to usages of quasiquotes as expressions to represent creation of new tree values. * **Tree deconstruction** refers to usages of quasiquotes as patterns to structurally tear apart trees. From 4f8058af78d51c6f3459de9ede1e89c8975b6fd7 Mon Sep 17 00:00:00 2001 From: "dependabot-preview[bot]" <27856297+dependabot-preview[bot]@users.noreply.github.com> Date: Sun, 9 May 2021 08:56:42 -0700 Subject: [PATCH 0194/1870] Upgrade to GitHub-native Dependabot (#1997) Co-authored-by: dependabot-preview[bot] <27856297+dependabot-preview[bot]@users.noreply.github.com> --- .github/dependabot.yml | 11 +++++++++++ 1 file changed, 11 insertions(+) create mode 100644 .github/dependabot.yml diff --git a/.github/dependabot.yml b/.github/dependabot.yml new file mode 100644 index 0000000000..f48b4ada51 --- /dev/null +++ b/.github/dependabot.yml @@ -0,0 +1,11 @@ +version: 2 +updates: +- package-ecosystem: bundler + directory: "/" + schedule: + interval: daily + open-pull-requests-limit: 10 + ignore: + - dependency-name: html-proofer + versions: + - "> 3.15.3" From f120a14ad03114a214ba7499cbf82a9600082568 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 9 May 2021 15:58:08 +0000 Subject: [PATCH 0195/1870] Bump jekyll-redirect-from from 0.15.0 to 0.16.0 Bumps [jekyll-redirect-from](https://github.com/jekyll/jekyll-redirect-from) from 0.15.0 to 0.16.0. - [Release notes](https://github.com/jekyll/jekyll-redirect-from/releases) - [Changelog](https://github.com/jekyll/jekyll-redirect-from/blob/master/History.markdown) - [Commits](https://github.com/jekyll/jekyll-redirect-from/compare/v0.15.0...v0.16.0) Signed-off-by: dependabot[bot] --- Gemfile.lock | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/Gemfile.lock b/Gemfile.lock index 34d6059917..17ed7297c3 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -4,14 +4,14 @@ GEM addressable (2.7.0) public_suffix (>= 2.0.2, < 5.0) colorator (1.1.0) - concurrent-ruby (1.1.7) - em-websocket (0.5.1) + concurrent-ruby (1.1.8) + em-websocket (0.5.2) eventmachine (>= 0.12.9) http_parser.rb (~> 0.6.0) ethon (0.12.0) ffi (>= 1.3.0) eventmachine (1.2.7) - ffi (1.13.1) + ffi (1.15.0) forwardable-extended (2.6.0) html-proofer (3.15.3) addressable (~> 2.3) @@ -24,7 +24,7 @@ GEM http_parser.rb (0.6.0) i18n (0.9.5) concurrent-ruby (~> 1.0) - jekyll (3.9.0) + jekyll (3.9.1) addressable (~> 2.4) colorator (~> 1.0) em-websocket (~> 0.5) @@ -37,7 +37,7 @@ GEM pathutil (~> 0.9) rouge (>= 1.7, < 4) safe_yaml (~> 1.0) - jekyll-redirect-from (0.15.0) + jekyll-redirect-from (0.16.0) jekyll (>= 3.3, < 5.0) jekyll-sass-converter (1.5.2) sass (~> 3.4) @@ -50,7 +50,7 @@ GEM kramdown-parser-gfm (1.1.0) kramdown (~> 2.0) liquid (4.0.3) - listen (3.2.1) + listen (3.5.1) rb-fsevent (~> 0.10, >= 0.10.3) rb-inotify (~> 0.9, >= 0.9.10) mercenary (0.3.6) @@ -63,14 +63,14 @@ GEM parallel (1.19.2) pathutil (0.16.2) forwardable-extended (~> 2.6) - public_suffix (4.0.5) + public_suffix (4.0.6) racc (1.5.2) rainbow (3.0.0) - rb-fsevent (0.10.4) + rb-fsevent (0.11.0) rb-inotify (0.10.1) ffi (~> 1.0) - rexml (3.2.4) - rouge (3.22.0) + rexml (3.2.5) + rouge (3.26.0) safe_yaml (1.0.5) sass (3.7.4) sass-listen (~> 4.0.0) From 91451fbd160682562cbb18f459dc169c1ffb3255 Mon Sep 17 00:00:00 2001 From: KisaragiEffective <48310258+KisaragiEffective@users.noreply.github.com> Date: Thu, 6 May 2021 16:33:52 +0900 Subject: [PATCH 0196/1870] Update new-in-scala3.md MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 言語使用 --> 言語仕様 --- _ja/scala3/new-in-scala3.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/_ja/scala3/new-in-scala3.md b/_ja/scala3/new-in-scala3.md index f1408468e3..d4194e0856 100644 --- a/_ja/scala3/new-in-scala3.md +++ b/_ja/scala3/new-in-scala3.md @@ -36,7 +36,7 @@ Scala 3 ではひとつの強力な機能として`implicit`を提供するの - **Abtracting over contextual information**. [Using clauses][contextual-using]を使って呼び出し時に利用可能で、暗黙に引き渡されるべき情報を抽象化することができる。Scala 2 からの改善としては、`using` 節が型だけで指定できるようになったことが挙げられる。 これによって明示的に参照されることのない関数の引数に命名する必要がなくなった。 - **Providing Type-class instances**. [Given instances][contextual-givens] を使ってある型に対応する _canonical value_ を定義することができる。実装を公開することなく、型クラスを使ったプログラミングをよりわかりやすく書ける。 -- **Retroactively extending classes**. Scala 2 では拡張メソッドは暗黙の変換か implicit classを使って書くことができた. 一方 Scala 3 では [extension methods][contextual-extension] が直接的に言語使用に含まれているのでよりわかりやすいエラーメッセージを表示できる。型推論も改善された。 +- **Retroactively extending classes**. Scala 2 では拡張メソッドは暗黙の変換か implicit classを使って書くことができた. 一方 Scala 3 では [extension methods][contextual-extension] が直接的に言語仕様に含まれているのでよりわかりやすいエラーメッセージを表示できる。型推論も改善された。 - **Viewing one type as another**. 暗黙の変換は型クラス`Conversion`のインスタンスとしてゼロから [再設計][contextual-conversions]された。 - **Higher-order contextual abstractions**. 全く新しい機能である [context functions][contextual-functions] は暗黙の引数をとる関数型を第一級オブジェクトとして扱う。この機能はライブラリ作者にとって重要である。また、簡潔なドメイン特化言語(DSL)を記述するのにも役立つ。 From 5268aa606c41c55512843ddaadee42adfb1ccb85 Mon Sep 17 00:00:00 2001 From: Robert Stoll Date: Fri, 9 Apr 2021 07:16:00 +0200 Subject: [PATCH 0197/1870] [doc] improve strong typing sentence --- _overviews/scala3-book/scala-features.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/_overviews/scala3-book/scala-features.md b/_overviews/scala3-book/scala-features.md index 377498f951..56755942ff 100644 --- a/_overviews/scala3-book/scala-features.md +++ b/_overviews/scala3-book/scala-features.md @@ -136,7 +136,7 @@ Because Scala is considered to be a [strong, statically-typed language](https:// - Method type declarations tell readers what the method does, and help serve as documentation - Types make your code easier to maintain - Scalability: types help ensure correctness across arbitrarily large applications and development teams -- Strong types enable Scala features like implicits (TODO: I need help on this wording and description) +- Strong typing enables features like [contextual abstraction](https://dotty.epfl.ch/docs/reference/contextual/motivation.html) where the compiler kind of writes code for you based on type definitions and a given context. {% comment %} In that list: From e815cc19b5db4394350ff1209be336065fd86fde Mon Sep 17 00:00:00 2001 From: Robert Stoll Date: Fri, 9 Apr 2021 07:29:55 +0200 Subject: [PATCH 0198/1870] [doc] use site.scala3ref for the link --- _overviews/scala3-book/scala-features.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/_overviews/scala3-book/scala-features.md b/_overviews/scala3-book/scala-features.md index 56755942ff..a599955b17 100644 --- a/_overviews/scala3-book/scala-features.md +++ b/_overviews/scala3-book/scala-features.md @@ -136,7 +136,7 @@ Because Scala is considered to be a [strong, statically-typed language](https:// - Method type declarations tell readers what the method does, and help serve as documentation - Types make your code easier to maintain - Scalability: types help ensure correctness across arbitrarily large applications and development teams -- Strong typing enables features like [contextual abstraction](https://dotty.epfl.ch/docs/reference/contextual/motivation.html) where the compiler kind of writes code for you based on type definitions and a given context. +- Strong typing enables features like [contextual abstraction]({{ site.scala3ref }}/contextual/motivation.html) where the compiler kind of writes code for you based on type definitions and a given context. {% comment %} In that list: From 4b063a372ef302806932e462104c0bafbdd60635 Mon Sep 17 00:00:00 2001 From: Robert Stoll Date: Fri, 9 Apr 2021 07:31:24 +0200 Subject: [PATCH 0199/1870] [doc] fix typo collections classes --- _overviews/scala3-book/scala-features.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/_overviews/scala3-book/scala-features.md b/_overviews/scala3-book/scala-features.md index a599955b17..82e9d9a47a 100644 --- a/_overviews/scala3-book/scala-features.md +++ b/_overviews/scala3-book/scala-features.md @@ -202,8 +202,8 @@ Scala is a functional programming (FP) language, meaning: - Lambdas are built in - Everything in Scala is an expression that returns a value - Syntactically it’s easy to use immutable variables, and their use is encouraged -- It has a wealth of immutable collections classes in the standard library -- Those collections classes come with dozens of functional methods: they don’t mutate the collection, but instead return an updated copy of the data +- It has a wealth of immutable collection classes in the standard library +- Those collection classes come with dozens of functional methods: they don’t mutate the collection, but instead return an updated copy of the data ### A pure OOP language From c1200e7ff45fcef28f6a7c0d13a66b4ba6d1d1f3 Mon Sep 17 00:00:00 2001 From: Robert Stoll Date: Fri, 9 Apr 2021 07:38:16 +0200 Subject: [PATCH 0200/1870] [doc] typo and comments --- _overviews/scala3-book/scala-features.md | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/_overviews/scala3-book/scala-features.md b/_overviews/scala3-book/scala-features.md index 82e9d9a47a..3a77f0d8b2 100644 --- a/_overviews/scala3-book/scala-features.md +++ b/_overviews/scala3-book/scala-features.md @@ -209,14 +209,16 @@ Scala is a functional programming (FP) language, meaning: ### A pure OOP language Scala is a _pure_ object-oriented programming (OOP) language. -Every variable is an object, and every “operator” is a method. +Every variable is an object and every “operator” is a method. In Scala, all types inherit from a top-level class `Any`, whose immediate children are `AnyVal` (_value types_, such as `Int` and `Boolean`) and `AnyRef` (_reference types_, as in Java). This means that the Java distinction between primitive types and boxed types (e.g. `int` vs. `Integer`) isn’t present in Scala. Boxing and unboxing is completely transparent to the user. {% comment %} -Add the “types hierarchy” image here? +- AnyRef above is wrong in case of strict null checking, no? On the other hand, maybe too much information to state this here +- probably not worth to mention (too advanced at this point) there is AnyKind +- Add the “types hierarchy” image here? {% endcomment %} @@ -226,7 +228,7 @@ Add the “types hierarchy” image here? NOTE: This text in the first line comes from this slide: https://twitter.com/alexelcu/status/996408359514525696 {% endcomment %} -The essence of Scala is the fusion of functional programming and object-oriented programming in a typed settings: +The essence of Scala is the fusion of functional programming and object-oriented programming in a typed setting: - Functions for the logic - Objects for the modularity From e1364368256477de284b65378b98f85b2b3f7b24 Mon Sep 17 00:00:00 2001 From: Robert Stoll Date: Fri, 9 Apr 2021 07:47:59 +0200 Subject: [PATCH 0201/1870] [doc] @alpha is now called @targetName --- _overviews/scala3-book/scala-features.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/_overviews/scala3-book/scala-features.md b/_overviews/scala3-book/scala-features.md index 3a77f0d8b2..565749696a 100644 --- a/_overviews/scala3-book/scala-features.md +++ b/_overviews/scala3-book/scala-features.md @@ -332,7 +332,7 @@ At a “sea level” view of the details---i.e., the language features programme - Export clauses provide a simple and general way to express aggregation, which can replace the previous facade pattern of package objects inheriting from classes - The procedure syntax has been dropped, and the varargs syntax has been changed, both to make the language more consistent - The `@infix` annotation makes it obvious how you want a method to be applied - - The `@alpha` method annotation defines an alternate name for the method, improving Java interoperability, and letting you provide aliases for symbolic operators + - The `@targetName` method annotation defines an alternate name for the method, improving Java interoperability, and letting you provide aliases for symbolic operators It would take too much space to demonstrate all of those features here, but follow the links in the items above to see those features in action. All of these features are discussed in detail in the *New*, *Changed*, and *Dropped* features pages in the [Overview documentation][reference]. From b54d1aac0637cbe1ba18758cfc3f75b007edd9da Mon Sep 17 00:00:00 2001 From: Robert Stoll Date: Fri, 9 Apr 2021 07:50:26 +0200 Subject: [PATCH 0202/1870] [doc] link @targetName --- _overviews/scala3-book/scala-features.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/_overviews/scala3-book/scala-features.md b/_overviews/scala3-book/scala-features.md index 565749696a..5cdb5f5597 100644 --- a/_overviews/scala3-book/scala-features.md +++ b/_overviews/scala3-book/scala-features.md @@ -332,7 +332,7 @@ At a “sea level” view of the details---i.e., the language features programme - Export clauses provide a simple and general way to express aggregation, which can replace the previous facade pattern of package objects inheriting from classes - The procedure syntax has been dropped, and the varargs syntax has been changed, both to make the language more consistent - The `@infix` annotation makes it obvious how you want a method to be applied - - The `@targetName` method annotation defines an alternate name for the method, improving Java interoperability, and letting you provide aliases for symbolic operators + - The [`@targetName`]({{ site.scala3ref }}/other-new-features/targetName.html) method annotation defines an alternate name for the method, improving Java interoperability, and letting you provide aliases for symbolic operators It would take too much space to demonstrate all of those features here, but follow the links in the items above to see those features in action. All of these features are discussed in detail in the *New*, *Changed*, and *Dropped* features pages in the [Overview documentation][reference]. From d84a0edfd344aaeced62357d5d658152a24e73bb Mon Sep 17 00:00:00 2001 From: Robert Stoll Date: Sun, 11 Apr 2021 20:38:42 +0200 Subject: [PATCH 0203/1870] [doc] put more focus on what a user does not have to do due to strong typing ...in combination with type inference --- _overviews/scala3-book/scala-features.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/_overviews/scala3-book/scala-features.md b/_overviews/scala3-book/scala-features.md index 5cdb5f5597..8425dcb0b2 100644 --- a/_overviews/scala3-book/scala-features.md +++ b/_overviews/scala3-book/scala-features.md @@ -136,7 +136,7 @@ Because Scala is considered to be a [strong, statically-typed language](https:// - Method type declarations tell readers what the method does, and help serve as documentation - Types make your code easier to maintain - Scalability: types help ensure correctness across arbitrarily large applications and development teams -- Strong typing enables features like [contextual abstraction]({{ site.scala3ref }}/contextual/motivation.html) where the compiler kind of writes code for you based on type definitions and a given context. +- Strong typing in combination with excellent inference enables mechanisms like [contextual abstraction]({{ site.scala3ref }}/contextual/motivation.html) that allows you to omit boilerplate code which can be inferred by the compiler based on type definitions and a given context (e.g. method arguments for implicit parameters). {% comment %} In that list: From b90e9601fe82f53b6710011bb45a24fd398de164 Mon Sep 17 00:00:00 2001 From: Robert Stoll Date: Mon, 12 Apr 2021 10:21:32 +0200 Subject: [PATCH 0204/1870] Update _overviews/scala3-book/scala-features.md Co-authored-by: Jonathan --- _overviews/scala3-book/scala-features.md | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/_overviews/scala3-book/scala-features.md b/_overviews/scala3-book/scala-features.md index 8425dcb0b2..1df980d863 100644 --- a/_overviews/scala3-book/scala-features.md +++ b/_overviews/scala3-book/scala-features.md @@ -136,7 +136,7 @@ Because Scala is considered to be a [strong, statically-typed language](https:// - Method type declarations tell readers what the method does, and help serve as documentation - Types make your code easier to maintain - Scalability: types help ensure correctness across arbitrarily large applications and development teams -- Strong typing in combination with excellent inference enables mechanisms like [contextual abstraction]({{ site.scala3ref }}/contextual/motivation.html) that allows you to omit boilerplate code which can be inferred by the compiler based on type definitions and a given context (e.g. method arguments for implicit parameters). +- Strong typing in combination with excellent inference enables mechanisms like [contextual abstraction]({{ site.scala3ref }}/contextual/motivation.html) that allows you to omit boilerplate code. Often, this boilerplate code can be inferred by the compiler, based on type definitions and a given context (e.g. method arguments for implicit parameters). {% comment %} In that list: @@ -502,4 +502,3 @@ As this page shows, Scala has many terrific programming language features at a h - From 5d4b8babf2a157571304e31b426c07876c4f7042 Mon Sep 17 00:00:00 2001 From: Jonathan Date: Mon, 10 May 2021 12:55:27 +0200 Subject: [PATCH 0205/1870] Rephrase Array paragraph --- _overviews/scala3-book/scala-for-java-devs.md | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/_overviews/scala3-book/scala-for-java-devs.md b/_overviews/scala3-book/scala-for-java-devs.md index 481e20e865..50d1777677 100644 --- a/_overviews/scala3-book/scala-for-java-devs.md +++ b/_overviews/scala3-book/scala-for-java-devs.md @@ -989,8 +989,8 @@ val filteredNums = nums.filter(_ > 2) Because the Scala `Array` is represented in the same way as the Java `array`, you can easily use Java methods that return arrays in your Scala code. -> Despite that discussion of `Array`, bear in mind that normal Scala code doesn’t use `Array`. -> It’s primarily useful for interoperating with other languages (Java, JavaScript), and it may also be useful when writing low-level code that needs to squeeze maximum performance out of the underlying platform. But in general, when you need to use a sequence, the Scala idiom is to prefer immutable sequences like `Vector` and `List`, and then use `ArrayBuffer` if and when when you really need a mutable sequence. +> Despite that discussion of `Array`, bear in mind that often in Scala there are alternatives to `Array` that might be better suited. +> Arrays are useful for interoperating with other languages (Java, JavaScript) and they may also be useful when writing low-level code that needs to squeeze maximum performance out of the underlying platform. But in general, when you need to use a sequence, the Scala idiom is to prefer immutable sequences like `Vector` and `List`, and then use `ArrayBuffer` if and when when you really need a mutable sequence. You can also convert between Java and Scala collections classes with the Scala `CollectionConverters` objects. There are two objects in different packages, one for converting from Java to Scala, and another for converting from Scala to Java. @@ -1327,4 +1327,3 @@ This includes: [union-types]: {% link _overviews/scala3-book/types-union.md %} - From 3d34ae738f48edd3c0e85093269867296a0f4c89 Mon Sep 17 00:00:00 2001 From: Jonathan Date: Mon, 10 May 2021 13:40:22 +0200 Subject: [PATCH 0206/1870] Update fp-pure-functions.md The discussion of impurity was technically not correct. `foreach` alone is not impure. Also `const Unit` is a perfectly pure function. So we need to be a bit more precise here in order to not confuse beginners. --- _overviews/scala3-book/fp-pure-functions.md | 22 +++++++++------------ 1 file changed, 9 insertions(+), 13 deletions(-) diff --git a/_overviews/scala3-book/fp-pure-functions.md b/_overviews/scala3-book/fp-pure-functions.md index e9aff86437..8c540bad33 100644 --- a/_overviews/scala3-book/fp-pure-functions.md +++ b/_overviews/scala3-book/fp-pure-functions.md @@ -50,24 +50,20 @@ Most methods on the Scala collections classes also work as pure functions, inclu Conversely, the following functions are _impure_ because they violate the definition. -The `foreach` method on collections classes is impure because it’s only used for its side effects, such as printing to STDOUT. +- `println` -- methods that interact with the console, files, databases, web services, sensors, etc., are all impure. +- `getHour` -- date and time related methods are all impure because their output depends on something other than their input parameters +- `sys.error` -- exception throwing methods are impure because they do not simply return a result -> A great hint that `foreach` is impure is that it’s method signature declares that it returns the type `Unit`. -> Because it doesn’t return anything, logically the only reason you ever call it is to achieve some side effect. -> Similarly, _any_ method that returns `Unit` is going to be an impure function. +Impure functions often do one or more of these things: -Date and time related methods like `getDayOfWeek`, `getHour`, and `getMinute` are all impure because their output depends on something other than their input parameters. -Their results rely on some form of hidden I/O; _hidden inputs,_ in these examples. - -Additionally, methods that interact with the console, files, databases, web services, sensors, etc., are all impure. - -In general, impure functions do one or more of these things: - -- Read hidden inputs, i.e., they access variables and data not explicitly passed into the function as input parameters -- Write hidden outputs +- Read from hidden state, i.e., they access variables and data not explicitly passed into the function as input parameters +- Write to hidden state - Mutate the parameters they’re given, or mutate hidden variables, such as fields in their containing class - Perform some sort of I/O with the outside world +> In general, you should watch out for functions with a return type of `Unit`. +> Because those functions do not return anything, logically the only reason you ever call it is to achieve some side effect. +> In consequence, often the usage of those functions is impure. ## But impure functions are needed ... From 17e9c0ebe41f9e20c3614ed3c732fcd42ea35602 Mon Sep 17 00:00:00 2001 From: vincenzobaz Date: Mon, 10 May 2021 13:51:01 +0200 Subject: [PATCH 0207/1870] Adopt custom Dockerfile and incremental build --- Dockerfile | 11 +++++++++++ docker-compose.yml | 14 +++++++------- 2 files changed, 18 insertions(+), 7 deletions(-) create mode 100644 Dockerfile diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000000..b972fe1c24 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,11 @@ +FROM ruby:2.5 + +RUN gem install bundler jekyll + +WORKDIR /srv/jekyll + +COPY Gemfile . +COPY Gemfile.lock . + +RUN bundle install + diff --git a/docker-compose.yml b/docker-compose.yml index 26f6d5b398..bfc376a362 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -1,9 +1,9 @@ -version: '2' - +version: "2" services: - jekyll: - image: bretfisher/jekyll-serve - volumes: - - .:/site + scala-lang: + build: . + command: bundle exec jekyll serve --incremental --host=0.0.0.0 ports: - - '8080:4000' + - 4000:4000 + volumes: + - .:/srv/jekyll From 7ed0a1cd78aa66295da8bcd6da382bde2c6f187b Mon Sep 17 00:00:00 2001 From: Jonathan Date: Mon, 10 May 2021 17:27:14 +0200 Subject: [PATCH 0208/1870] Update _overviews/scala3-book/fp-pure-functions.md --- _overviews/scala3-book/fp-pure-functions.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/_overviews/scala3-book/fp-pure-functions.md b/_overviews/scala3-book/fp-pure-functions.md index 8c540bad33..82199b14e0 100644 --- a/_overviews/scala3-book/fp-pure-functions.md +++ b/_overviews/scala3-book/fp-pure-functions.md @@ -51,7 +51,7 @@ Most methods on the Scala collections classes also work as pure functions, inclu Conversely, the following functions are _impure_ because they violate the definition. - `println` -- methods that interact with the console, files, databases, web services, sensors, etc., are all impure. -- `getHour` -- date and time related methods are all impure because their output depends on something other than their input parameters +- `currentTimeMillis ` -- date and time related methods are all impure because their output depends on something other than their input parameters - `sys.error` -- exception throwing methods are impure because they do not simply return a result Impure functions often do one or more of these things: From b0bd5203555812fa624af6fe6f23b6e237140900 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jakub=20Koz=C5=82owski?= Date: Tue, 11 May 2021 14:08:56 +0200 Subject: [PATCH 0209/1870] Advertise some more compiler plugins --- _overviews/plugins/index.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/_overviews/plugins/index.md b/_overviews/plugins/index.md index 91978ab80b..f24d7a2ef3 100644 --- a/_overviews/plugins/index.md +++ b/_overviews/plugins/index.md @@ -42,6 +42,7 @@ include: - Alternate compiler back ends such as [Scala.js](https://www.scala-js.org), [Scala Native](http://scala-native.org), and [Fortify SCA for Scala](https://developer.lightbend.com/docs/fortify/current/). - Linters such as [Wartremover](https://www.wartremover.org) and [Scapegoat](https://github.com/sksamuel/scapegoat). + - Plugins that support reformatting and other changes to source code, such as [scalafix](https://scalacenter.github.io/scalafix/) and [scalafmt](https://scalameta.org/scalafmt/) (which are built on the [semanticdb](https://scalameta.org/docs/semanticdb/guide.html) and [scalahost](https://github.com/Duhemm/scalahost) compiler plugins). @@ -54,6 +55,8 @@ include: such as the code coverage tool [scoverage](https://github.com/scoverage/scalac-scoverage-plugin). - Plugins that add metaprogramming facilities to Scala, such as [Macro Paradise](https://github.com/scalamacros/paradise). +- Plugins that modify existing Scala constructs in user code, +- such as [better-monadic-for](https://github.com/oleg-py/better-monadic-for) and [better-tostring](https://github.com/kubukoz/better-tostring). - Plugins that add entirely new constructs to Scala by restructuring user code, such as [scala-continuations](https://github.com/scala/scala-continuations). From 9aaff97197d191266ceb479c4273ca6b06b86492 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jakub=20Koz=C5=82owski?= Date: Tue, 11 May 2021 18:54:24 +0200 Subject: [PATCH 0210/1870] Remove some non-plugins and outdated plugins scalafix/scalafmt aren't compiler plugins, scalahost isn't maintained. --- _overviews/plugins/index.md | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/_overviews/plugins/index.md b/_overviews/plugins/index.md index f24d7a2ef3..bbe52303a9 100644 --- a/_overviews/plugins/index.md +++ b/_overviews/plugins/index.md @@ -42,10 +42,6 @@ include: - Alternate compiler back ends such as [Scala.js](https://www.scala-js.org), [Scala Native](http://scala-native.org), and [Fortify SCA for Scala](https://developer.lightbend.com/docs/fortify/current/). - Linters such as [Wartremover](https://www.wartremover.org) and [Scapegoat](https://github.com/sksamuel/scapegoat). - -- Plugins that support reformatting and other changes - to source code, such as [scalafix](https://scalacenter.github.io/scalafix/) and [scalafmt](https://scalameta.org/scalafmt/) (which are - built on the [semanticdb](https://scalameta.org/docs/semanticdb/guide.html) and [scalahost](https://github.com/Duhemm/scalahost) compiler plugins). - Plugins that alter Scala's syntax, such as [kind-projector](https://github.com/typelevel/kind-projector). - Plugins that alter Scala's behavior around errors and warnings, such as [silencer](https://github.com/ghik/silencer). @@ -54,9 +50,9 @@ include: - Plugins that instrument user code to collect information, such as the code coverage tool [scoverage](https://github.com/scoverage/scalac-scoverage-plugin). - Plugins that add metaprogramming facilities to Scala, - such as [Macro Paradise](https://github.com/scalamacros/paradise). + such as [Macro Paradise](https://github.com/scalamacros/paradise), [semanticdb](https://scalameta.org/docs/semanticdb/guide.html). - Plugins that modify existing Scala constructs in user code, -- such as [better-monadic-for](https://github.com/oleg-py/better-monadic-for) and [better-tostring](https://github.com/kubukoz/better-tostring). + such as [better-monadic-for](https://github.com/oleg-py/better-monadic-for) and [better-tostring](https://github.com/kubukoz/better-tostring). - Plugins that add entirely new constructs to Scala by restructuring user code, such as [scala-continuations](https://github.com/scala/scala-continuations). From 44a51b2a142921c76f15e37ddb3a7278febab984 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jakub=20Koz=C5=82owski?= Date: Tue, 11 May 2021 18:55:21 +0200 Subject: [PATCH 0211/1870] Add splain, clippy --- _overviews/plugins/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/_overviews/plugins/index.md b/_overviews/plugins/index.md index bbe52303a9..5716ae07df 100644 --- a/_overviews/plugins/index.md +++ b/_overviews/plugins/index.md @@ -44,7 +44,7 @@ include: - Linters such as [Wartremover](https://www.wartremover.org) and [Scapegoat](https://github.com/sksamuel/scapegoat). - Plugins that alter Scala's syntax, such as [kind-projector](https://github.com/typelevel/kind-projector). - Plugins that alter Scala's behavior around errors and warnings, - such as [silencer](https://github.com/ghik/silencer). + such as [silencer](https://github.com/ghik/silencer), [splain](https://github.com/tek/splain) and [clippy](https://scala-clippy.org/). - Plugins that analyze the structure of source code, such as [Sculpt](https://github.com/lightbend/scala-sculpt) and [acyclic](https://github.com/lihaoyi/acyclic). - Plugins that instrument user code to collect information, From cc199c36672ad5abae1726a4ee5262cffaad3a18 Mon Sep 17 00:00:00 2001 From: "dependabot-preview[bot]" <27856297+dependabot-preview[bot]@users.noreply.github.com> Date: Tue, 11 May 2021 11:05:22 -0700 Subject: [PATCH 0212/1870] [Security] Bump rexml from 3.2.4 to 3.2.5 (#1998) Bumps [rexml](https://github.com/ruby/rexml) from 3.2.4 to 3.2.5. **This update includes a security fix.** - [Release notes](https://github.com/ruby/rexml/releases) - [Changelog](https://github.com/ruby/rexml/blob/master/NEWS.md) - [Commits](https://github.com/ruby/rexml/compare/v3.2.4...v3.2.5) Signed-off-by: dependabot-preview[bot] Co-authored-by: dependabot-preview[bot] <27856297+dependabot-preview[bot]@users.noreply.github.com> --- Gemfile.lock | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Gemfile.lock b/Gemfile.lock index 34d6059917..b6670e0fac 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -69,7 +69,7 @@ GEM rb-fsevent (0.10.4) rb-inotify (0.10.1) ffi (~> 1.0) - rexml (3.2.4) + rexml (3.2.5) rouge (3.22.0) safe_yaml (1.0.5) sass (3.7.4) From 846186647c415b8db2ebc704e02c13eb9f35b250 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jonathan=20Brachth=C3=A4user?= Date: Tue, 11 May 2021 16:27:55 +0200 Subject: [PATCH 0213/1870] Drop preview and prerelease notes --- _layouts/documentation.html | 4 ++-- _layouts/inner-page-parent-dropdown.html | 1 - 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/_layouts/documentation.html b/_layouts/documentation.html index 08aecc4a0d..f578b644d1 100644 --- a/_layouts/documentation.html +++ b/_layouts/documentation.html @@ -64,11 +64,11 @@

Scala 2

-

Scala 3 (Preview)

+

Scala 3

- Scala 3 has not been released, yet. We are still in the process of writing the documentation for Scala 3.
+ We are still in the process of writing the documentation for Scala 3. You can help us to improve the documentation.
{% include documentation-sections.html sections=page.scala3-sections %} diff --git a/_layouts/inner-page-parent-dropdown.html b/_layouts/inner-page-parent-dropdown.html index 9b07f3abfa..e17ed69425 100644 --- a/_layouts/inner-page-parent-dropdown.html +++ b/_layouts/inner-page-parent-dropdown.html @@ -17,7 +17,6 @@

Work in Progress

- Scala 3 has not been released, yet. We are still in the process of writing the documentation for Scala 3. You can help us to improve the documentation.

From cb8eff8c9d0c252c34c2aa5ec7aa8fb97695f2e9 Mon Sep 17 00:00:00 2001 From: Takaaki Hirano Date: Thu, 13 May 2021 20:04:49 +0900 Subject: [PATCH 0214/1870] Remove duplications in naming-conventions. --- _style/naming-conventions.md | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/_style/naming-conventions.md b/_style/naming-conventions.md index 03e6ccd117..0141e53fd6 100644 --- a/_style/naming-conventions.md +++ b/_style/naming-conventions.md @@ -266,7 +266,7 @@ advanced feature in Scala, to be used only by those most well-versed in its pitfalls. Without care, excessive use of symbolic method names can easily transform even the simplest code into symbolic soup. -## Constants, Values, Variable and Methods +## Constants, Values and Variable Constant names should be in upper camel case. Similar to Java's `static final` members, if the member is final, immutable and it belongs to a package @@ -278,10 +278,9 @@ object or an object, it may be considered a constant: The value: `Pi` in `scala.math` package is another example of such a constant. -Method, Value and variable names should be in lower camel case: +Value and variable names should be in lower camel case: val myValue = ... - def myMethod = ... var myVariable ## Type Parameters (generics) From 60971fe2bb1ce86f33c33c60578666c1963b07b2 Mon Sep 17 00:00:00 2001 From: tdudzik Date: Fri, 14 May 2021 13:33:31 +0200 Subject: [PATCH 0215/1870] Fix if condition in Scala3 book --- _overviews/scala3-book/taste-control-structures.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/_overviews/scala3-book/taste-control-structures.md b/_overviews/scala3-book/taste-control-structures.md index a523662988..d0f854ec85 100644 --- a/_overviews/scala3-book/taste-control-structures.md +++ b/_overviews/scala3-book/taste-control-structures.md @@ -27,7 +27,7 @@ Scala’s `if`/`else` control structure looks similar to other languages: ```scala if x < 0 then println("negative") -else if x == 0 +else if x == 0 then println("zero") else println("positive") From 456de555fa644eb170575ca9a9fbb8a9bbe34f0e Mon Sep 17 00:00:00 2001 From: Siddhant Sanyam Date: Fri, 14 May 2021 11:19:22 -0700 Subject: [PATCH 0216/1870] Log.log -> Logger.log The text doesn't matches the example code. I believe this should be Logger.log. I also clarified what will happen on the runtime. --- _overviews/scala3-macros/tutorial/inline.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/_overviews/scala3-macros/tutorial/inline.md b/_overviews/scala3-macros/tutorial/inline.md index 4221eb3e87..631059b6f6 100644 --- a/_overviews/scala3-macros/tutorial/inline.md +++ b/_overviews/scala3-macros/tutorial/inline.md @@ -125,7 +125,7 @@ inline def logged[T](logger: Logger, x: T): Unit = logger.log(x) ``` -The separate type checking of `logger.log(x)` will resolve the call to the method `Log.log` which takes an argument of the type `Any`. +The separate type checking of `logger.log(x)` will resolve the call to the method `Logger.log` which takes an argument of the type `Any`. Now, given the following code: ```scala @@ -139,7 +139,7 @@ val logger = new RefinedLogger val x = "✔️" logger.log(x) ``` -Even though now we know that `x` is a `String`, the call `logger.log(x)` still resolves to the method `Log.log` which takes an argument of the type `Any`. +Even though now we know that `x` is a `String`, the call `logger.log(x)` still resolves to the method `Logger.log` which takes an argument of the type `Any`. Note that because of late-binding, the actual method called at runtime will be the overridden method `RefinedLogger.log`. > ##### Inlining preserves semantics > Regardless of whether `logged` is defined as a `def` or `inline def`, it performs the same operations with only some differences in performance. From bae77e2ab3f88237ceee10423177562393c95bdd Mon Sep 17 00:00:00 2001 From: Siddhant Sanyam Date: Fri, 14 May 2021 11:36:27 -0700 Subject: [PATCH 0217/1870] Added missing `inline` I believe that the author intended to have inline here since they talk about its expansion. --- _overviews/scala3-macros/tutorial/inline.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/_overviews/scala3-macros/tutorial/inline.md b/_overviews/scala3-macros/tutorial/inline.md index 4221eb3e87..a632c514f7 100644 --- a/_overviews/scala3-macros/tutorial/inline.md +++ b/_overviews/scala3-macros/tutorial/inline.md @@ -204,7 +204,7 @@ Finally, it is constant folded to A useful application of inline parameters is to avoid the creation of _closures_, incurred by the use of by-name parameters. ```scala -def assert1(cond: Boolean, msg: => String) = +inline def assert1(cond: Boolean, msg: => String) = if !cond then throw new Exception(msg) From ecd45158161d338b373f6c450b09cf9af7ad709f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jakub=20Koz=C5=82owski?= Date: Mon, 17 May 2021 00:12:56 +0200 Subject: [PATCH 0218/1870] Rename better-tostring org --- _overviews/plugins/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/_overviews/plugins/index.md b/_overviews/plugins/index.md index 5716ae07df..9e1b2015b7 100644 --- a/_overviews/plugins/index.md +++ b/_overviews/plugins/index.md @@ -52,7 +52,7 @@ include: - Plugins that add metaprogramming facilities to Scala, such as [Macro Paradise](https://github.com/scalamacros/paradise), [semanticdb](https://scalameta.org/docs/semanticdb/guide.html). - Plugins that modify existing Scala constructs in user code, - such as [better-monadic-for](https://github.com/oleg-py/better-monadic-for) and [better-tostring](https://github.com/kubukoz/better-tostring). + such as [better-monadic-for](https://github.com/oleg-py/better-monadic-for) and [better-tostring](https://github.com/polyvariant/better-tostring). - Plugins that add entirely new constructs to Scala by restructuring user code, such as [scala-continuations](https://github.com/scala/scala-continuations). From 021b447ed94850b8b3ba5905f929fad383184221 Mon Sep 17 00:00:00 2001 From: Lukas Rytz Date: Mon, 17 May 2021 13:13:48 +0200 Subject: [PATCH 0219/1870] Scala 2.13.6 --- _config.yml | 4 ++-- _overviews/jdk-compatibility/overview.md | 12 ++++++------ api/all.md | 12 ++++++++---- scala3/guides/tasty-overview.md | 7 ++----- 4 files changed, 18 insertions(+), 17 deletions(-) diff --git a/_config.yml b/_config.yml index 7d1e5026d0..9cfd7aa6ea 100644 --- a/_config.yml +++ b/_config.yml @@ -15,9 +15,9 @@ keywords: - Document - Guide -scala-version: 2.13.5 +scala-version: 2.13.6 scala-212-version: 2.12.13 -scala-3-version: 3.0.0-RC1 +scala-3-version: 3.0.0 scala-3-plugin-version: 0.5.1 collections: diff --git a/_overviews/jdk-compatibility/overview.md b/_overviews/jdk-compatibility/overview.md index 3c2bc2376e..06d8040c7f 100644 --- a/_overviews/jdk-compatibility/overview.md +++ b/_overviews/jdk-compatibility/overview.md @@ -13,11 +13,11 @@ Sometimes new JVM and JDK (Java Development Kit) versions require us to update S | JDK version | Minimum Scala versions | Recommended Scala versions | |:-----------:|:---------------------------------|:-----------------------------------------------------------| | 17 | see below | see below -| 16 | 2.13.5, 2.12.14 (forthcoming) | 2.13.5, 2.12.14 (forthcoming) -| 13, 14, 15 | 2.13.2, 2.12.11 | 2.13.5, 2.12.13 | -| 12 | 2.13.1, 2.12.9 | 2.13.5, 2.12.13 | -| 11 | 2.13.0, 2.12.4, 2.11.12 | 2.13.5, 2.12.13, 2.11.12 | -| 8 | 2.13.0, 2.12.0, 2.11.0, 2.10.2 | 2.13.5, 2.12.13, 2.11.12, 2.10.7 | +| 16 | 2.13.5, 2.12.14 (forthcoming) | 2.13.6, 2.12.14 (forthcoming) +| 13, 14, 15 | 2.13.2, 2.12.11 | 2.13.6, 2.12.13 | +| 12 | 2.13.1, 2.12.9 | 2.13.6, 2.12.13 | +| 11 | 2.13.0, 2.12.4, 2.11.12 | 2.13.6, 2.12.13, 2.11.12 | +| 8 | 2.13.0, 2.12.0, 2.11.0, 2.10.2 | 2.13.6, 2.12.13, 2.11.12, 2.10.7 | | 6, 7 | 2.11.0, 2.10.0 | 2.11.12, 2.10.7 | Even when a version combination isn't listed as supported, most features may still work. (But Scala 2.12+ definitely doesn't work at all on JDK 6 or 7.) @@ -81,7 +81,7 @@ As far as we know, 12, 13, 14, and 15 are similar to 11 with respect to Scala co JDK 16 was released in March 2021. It is not an LTS release, so the remarks above about non-LTS releases apply. The next LTS release will be JDK 17. -The Scala community build now runs on JDK 16. We shipped improved JDK 16 support in [Scala 2.13.5](https://github.com/scala/scala/releases/tag/v2.13.5) and intend to ship the same improvements soon in Scala 2.12.14 ([release timing thread](https://contributors.scala-lang.org/t/scala-2-12-14-planning/4852/2)). +The Scala community build and the Scala build and test suite run on JDK 16. We shipped improved JDK 16 support in [Scala 2.13.5](https://github.com/scala/scala/releases/tag/v2.13.5) and intend to ship the same improvements soon in Scala 2.12.14 ([release timing thread](https://contributors.scala-lang.org/t/scala-2-12-14-planning/4852/2)). ## JDK 17 compatibility notes diff --git a/api/all.md b/api/all.md index bed90bad2e..6d47741a2a 100644 --- a/api/all.md +++ b/api/all.md @@ -6,10 +6,10 @@ includeTOC: true ## Latest releases -* Scala 2.13.5 - * [Library API](https://www.scala-lang.org/api/2.13.5/) - * [Compiler API](https://www.scala-lang.org/api/2.13.5/scala-compiler/scala/) - * [Reflection API](https://www.scala-lang.org/api/2.13.5/scala-reflect/scala/reflect/) +* Scala 2.13.6 + * [Library API](https://www.scala-lang.org/api/2.13.6/) + * [Compiler API](https://www.scala-lang.org/api/2.13.6/scala-compiler/scala/) + * [Reflection API](https://www.scala-lang.org/api/2.13.6/scala-reflect/scala/reflect/) * Scala 2.12.13 * [Library API](https://www.scala-lang.org/api/2.12.13/) * [Compiler API](https://www.scala-lang.org/api/2.12.13/scala-compiler/scala/) @@ -58,6 +58,10 @@ https://scala-ci.typesafe.com/artifactory/scala-integration/org/scala-lang/ ## Previous releases +* Scala 2.13.5 + * [Library API](https://www.scala-lang.org/api/2.13.5/) + * [Compiler API](https://www.scala-lang.org/api/2.13.5/scala-compiler/scala/) + * [Reflection API](https://www.scala-lang.org/api/2.13.5/scala-reflect/scala/reflect/) * Scala 2.13.4 * [Library API](https://www.scala-lang.org/api/2.13.4/) * [Compiler API](https://www.scala-lang.org/api/2.13.4/scala-compiler/scala/) diff --git a/scala3/guides/tasty-overview.md b/scala3/guides/tasty-overview.md index 27ba163d64..11d0fa3608 100644 --- a/scala3/guides/tasty-overview.md +++ b/scala3/guides/tasty-overview.md @@ -117,10 +117,7 @@ As you can imagine, having a complete representation of your code has [many bene - Tasty makes an excellent foundation for a new generation of [reflection-based macros][macros]. - Optimizers and analyzers can use it for deep code analysis and advanced code generation. -In a related note, Scala 2.13.5 has a TASTy reader, and the Scala 3 compiler can also read the 2.13 “Pickle” format. The [Compatibility Reference][compatibility-ref] in the Scala 3 Migration Guide summarizes the benefits of this cross-compiling capability: - -> “You can have a Scala `2.13` module that depends on a Scala `3.0.0-RC1` module, and the latter can even depend on another Scala `2.13` module. >Cross-compatibility will not restrain you from using the exciting new features of Scala 3.0. -> In short, we have backward and forward compatibility and so migration can happen gradually and in any order.” +In a related note, Scala 2.13.6 has a TASTy reader, and the Scala 3 compiler can also read the 2.13 “Pickle” format. The [Classpath Compatibility Page][compatibility-ref] in the Scala 3 Migration Guide explains the benefits of this cross-compiling capability. @@ -144,6 +141,6 @@ These articles provide more information about Scala 3 macros: [benefits]: https://www.scala-lang.org/blog/2018/04/30/in-a-nutshell.html [erasure]: https://www.scala-lang.org/files/archive/spec/2.13/03-types.html#type-erasure [binary]: {% link _overviews/tutorials/binary-compatibility-for-library-authors.md %} -[compatibility-ref]: {% link _overviews/scala3-migration/compatibility-intro.md %} +[compatibility-ref]: {% link _overviews/scala3-migration/compatibility-classpath.md %} [quotes-reflect]: {{ site.scala3ref }}/metaprogramming/reflection.html [macros]: {{ site.scala3ref }}/metaprogramming/macros.html From 905dbca95bbf849a313cde4654690f5b31fde11f Mon Sep 17 00:00:00 2001 From: Seth Tisue Date: Mon, 17 May 2021 14:41:55 -0700 Subject: [PATCH 0220/1870] fix bad link --- _data/overviews.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/_data/overviews.yml b/_data/overviews.yml index 54bb90a02b..1764f6bc5e 100644 --- a/_data/overviews.yml +++ b/_data/overviews.yml @@ -257,7 +257,7 @@ - title: Error Formatting by: Torsten Schmits icon: cog - url: "compiler-options/errors.html" + url: "compiler-options/index.html" description: "A new engine for more user-friendly error messages, printing chains of dependent implicits and colored found/required type diffs." From 85b0cb2d2b7c88e19976121c8159bcfc913d89bd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fatih=20Ergu=CC=88ven?= Date: Sat, 15 May 2021 01:23:08 +0200 Subject: [PATCH 0221/1870] Fix wrong list name --- _overviews/scala3-book/taste-control-structures.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/_overviews/scala3-book/taste-control-structures.md b/_overviews/scala3-book/taste-control-structures.md index d0f854ec85..a527f603d2 100644 --- a/_overviews/scala3-book/taste-control-structures.md +++ b/_overviews/scala3-book/taste-control-structures.md @@ -103,17 +103,17 @@ A few examples demonstrate this. Using the same `ints` list as the previous example, this code creates a new list, where the value of each element in the new list is twice the value of the elements in the original list: ```` -scala> val doubles = for i <- nums yield i * 2 +scala> val doubles = for i <- ints yield i * 2 val doubles: List[Int] = List(2, 4, 6, 8, 10) ```` Scala’s control structure syntax is flexible, and that `for` expression can be written in several other ways, depending on your preference: ```scala -val doubles = for i <- nums yield i * 2 // style shown above -val doubles = for (i <- nums) yield i * 2 -val doubles = for (i <- nums) yield (i * 2) -val doubles = for { i <- nums } yield (i * 2) +val doubles = for i <- ints yield i * 2 // style shown above +val doubles = for (i <- ints) yield i * 2 +val doubles = for (i <- ints) yield (i * 2) +val doubles = for { i <- ints } yield (i * 2) ``` This example shows how to capitalize the first character in each string in the list: From 27be654e5ccb8c057d5f7bef770fcdb57bc72486 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bar=C4=B1=C5=9F=20Y=C3=BCksel?= Date: Tue, 18 May 2021 13:27:12 +0300 Subject: [PATCH 0222/1870] Fixes a typo for Scala 2 extending code example --- _overviews/scala3-book/methods-main-methods.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/_overviews/scala3-book/methods-main-methods.md b/_overviews/scala3-book/methods-main-methods.md index fe031b9d21..1077e238a2 100644 --- a/_overviews/scala3-book/methods-main-methods.md +++ b/_overviews/scala3-book/methods-main-methods.md @@ -114,7 +114,7 @@ They replace the previous approach in Scala 2, which was to create an `object` t ```scala // scala 2 -object happyBirthday extends App: { +object happyBirthday extends App { // needs by-hand parsing of the command line arguments ... } ``` From 9db91a1d117348e0233c58645a812b56b02f6957 Mon Sep 17 00:00:00 2001 From: Adrien Piquerez Date: Wed, 12 May 2021 17:30:26 +0200 Subject: [PATCH 0223/1870] Fix more links --- _data/scala3-doc-nav-header.yml | 2 +- _ja/scala3/contribute-to-docs.md | 5 ++--- _ja/scala3/guides.md | 2 +- scala3/contribute-to-docs.md | 6 ++---- 4 files changed, 6 insertions(+), 9 deletions(-) diff --git a/_data/scala3-doc-nav-header.yml b/_data/scala3-doc-nav-header.yml index 823c440e3a..c390278c6d 100644 --- a/_data/scala3-doc-nav-header.yml +++ b/_data/scala3-doc-nav-header.yml @@ -10,7 +10,7 @@ - title: Macro Tutorial url: "/scala3/guides/macros/index.html" - title: Migrate - url: "https://scalacenter.github.io/scala-3-migration-guide" + url: "/scala3/guides/migration/compatibility-intro.html" - title: Reference url: "https://dotty.epfl.ch/docs/reference/overview.html" - title: API diff --git a/_ja/scala3/contribute-to-docs.md b/_ja/scala3/contribute-to-docs.md index b29b62dd17..dda4e2433e 100644 --- a/_ja/scala3/contribute-to-docs.md +++ b/_ja/scala3/contribute-to-docs.md @@ -42,9 +42,8 @@ Scala 3 の高品質なドキュメンテーションを作るためのいくつ ## Migration Guide [Scala 3 Migration Guide](/scala3/guides/migration/compatibility-intro.html) は Scala 2 と Scala 3 の互換性、移行に役立つツールの紹介、そして詳しい移行のガイドを含んだ包括的なドキュメントである。 -- [Contribution Overview](https://scalacenter.github.io/scala-3-migration-guide/docs/contributing.html) -- [Source](https://github.com/scalacenter/scala-3-migration-guide) -- [Issues](https://github.com/scalacenter/scala-3-migration-guide/issues) +- [Source](https://github.com/scala/docs.scala-lang/tree/master/_overviews/scala3-migration) +- [Issues](https://github.com/scalacenter/docs.scala-lang/issues) ## Scala 3 Language Reference diff --git a/_ja/scala3/guides.md b/_ja/scala3/guides.md index df6a0cf240..abb5f10772 100644 --- a/_ja/scala3/guides.md +++ b/_ja/scala3/guides.md @@ -8,7 +8,7 @@ scala3: true guides: - title: "Scala 2 から Scala 3 への移行" icon: suitcase - url: "https://scalacenter.github.io/scala-3-migration-guide" + url: "/scala3/guides/migration/compatibility-intro.html" description: "Scala 3 との互換性と移行について知っておくべきことすべて" - title: マクロ by: Nicolas Stucki diff --git a/scala3/contribute-to-docs.md b/scala3/contribute-to-docs.md index 5f3cd5af83..25d719a764 100644 --- a/scala3/contribute-to-docs.md +++ b/scala3/contribute-to-docs.md @@ -42,10 +42,8 @@ The [Scala 3 Migration Guide](/scala3/guides/migration/compatibility-intro.html) contains an comprehensive overview over compatibility between Scala 2 and Scala 3, a tour presenting the migration tools, and detailed migration guides. -- [Contribution Overview](https://scalacenter.github.io/scala-3-migration-guide/docs/contributing.html) -- [Source](https://github.com/scalacenter/scala-3-migration-guide) -- [Issues](https://github.com/scalacenter/scala-3-migration-guide/issues) - +- [Source](https://github.com/scala/docs.scala-lang/tree/master/_overviews/scala3-migration) +- [Issues](https://github.com/scalacenter/docs.scala-lang/issues) ## Scala 3 Language Reference The [Dotty reference](https://dotty.epfl.ch/docs/reference/overview.html) will evolve into the Scala 3 language, containing a formal presentation and detailed technical information about the various features of the language. From 0405885eb5f367472349bf289a0401dc91fe8ca4 Mon Sep 17 00:00:00 2001 From: Adrien Piquerez Date: Wed, 12 May 2021 17:33:05 +0200 Subject: [PATCH 0224/1870] Rename -no-indent Scala 3 option --- _overviews/scala3-migration/options-new.md | 2 +- _overviews/scala3-migration/tooling-syntax-rewriting.md | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/_overviews/scala3-migration/options-new.md b/_overviews/scala3-migration/options-new.md index 2d4297bd2d..b5e030639b 100644 --- a/_overviews/scala3-migration/options-new.md +++ b/_overviews/scala3-migration/options-new.md @@ -19,7 +19,7 @@ The current page only contains the options that were added in Scala 3.0.x. | `-from-tasty` | Compile classes from tasty files. The arguments are .tasty or .jar files. | | `-indent` | Together with -rewrite, remove {...} syntax when possible due to significant indentation. | | `-new-syntax` | Require `then` and `do` in control expressions. | -| `-noindent` | Require classical {...} syntax, indentation is not significant. | +| `-no-indent` | Require classical {...} syntax, indentation is not significant. | | `-old-syntax` | Require `(...)` around conditions. | | `-pagewidth` | Set page width Default: 80. | | `-print-lines` | Show source code line numbers. | diff --git a/_overviews/scala3-migration/tooling-syntax-rewriting.md b/_overviews/scala3-migration/tooling-syntax-rewriting.md index 149bb658eb..c7c77a68b8 100644 --- a/_overviews/scala3-migration/tooling-syntax-rewriting.md +++ b/_overviews/scala3-migration/tooling-syntax-rewriting.md @@ -29,7 +29,7 @@ where possible standard options include: -indent Allow significant indentation ... -new-syntax Require `then` and `do` in control expressions. --noindent Require classical {...} syntax, indentation is not significant. +-no-indent Require classical {...} syntax, indentation is not significant. ... -old-syntax Require `(...)` around conditions. ... @@ -244,7 +244,7 @@ It is possible to mix the old and new syntax in a single code base. Although we would advise against it, since it would reduce the readability and make the code harder to maintain. A better approach is to choose one style and to consistently apply it to the entire code base. -`-noindent`, `-new-syntax` and `-old-syntax` can be used as standalone options to enforce a consistent syntax. +`-no-indent`, `-new-syntax` and `-old-syntax` can be used as standalone options to enforce a consistent syntax. For instance, with the `-new-syntax` option, the compiler issues an error when it encounters enclosing parentheses around an `if`-condition. From d1f3f4b7108be29ecf6cd3c2ce5eb31ae5017b31 Mon Sep 17 00:00:00 2001 From: Adrien Piquerez Date: Wed, 12 May 2021 17:56:14 +0200 Subject: [PATCH 0225/1870] Add kind-projector migration page --- _overviews/scala3-migration/options-new.md | 2 +- _overviews/scala3-migration/plugin-intro.md | 11 ++ .../scala3-migration/plugin-kind-projector.md | 127 ++++++++++++++++++ .../tutorial-prerequisites.md | 2 + 4 files changed, 141 insertions(+), 1 deletion(-) create mode 100644 _overviews/scala3-migration/plugin-intro.md create mode 100644 _overviews/scala3-migration/plugin-kind-projector.md diff --git a/_overviews/scala3-migration/options-new.md b/_overviews/scala3-migration/options-new.md index b5e030639b..980f4c2712 100644 --- a/_overviews/scala3-migration/options-new.md +++ b/_overviews/scala3-migration/options-new.md @@ -4,7 +4,7 @@ type: section description: This chapter lists all the new compiler options in Scala 3 num: 23 previous-page: options-lookup -next-page: +next-page: plugin-intro --- The current page only contains the options that were added in Scala 3.0.x. diff --git a/_overviews/scala3-migration/plugin-intro.md b/_overviews/scala3-migration/plugin-intro.md new file mode 100644 index 0000000000..8662c8da93 --- /dev/null +++ b/_overviews/scala3-migration/plugin-intro.md @@ -0,0 +1,11 @@ +--- +title: Compiler Plugins +type: chapter +description: This section shows how to migrate from using Scala 2 compiler plugins +num: 24 +previous-page: options-new +next-page: plugin-kind-projector +--- + +Scala 3 includes some features that were previously provided by a compiler plugin. +This chapter gives more detail on how to migrate from using a specific compiler plugin to Scala 3. diff --git a/_overviews/scala3-migration/plugin-kind-projector.md b/_overviews/scala3-migration/plugin-kind-projector.md new file mode 100644 index 0000000000..c60b33b7b0 --- /dev/null +++ b/_overviews/scala3-migration/plugin-kind-projector.md @@ -0,0 +1,127 @@ +--- +title: Kind Projector Migration +type: section +description: This section shows how to migrate from the kind-projector plugin to Scala 3 kind-projector syntax +num: 25 +previous-page: plugin-intro +next-page: +--- + +In the future, Scala 3 will use the `_` underscore symbol for placeholders in type lambdas---just as the underscore is currently used for placeholders in (ordinary) term-level lambdas. + +The new type lambda syntax is not enabled by default, to enable it, use a compiler flag `-Ykind-projector:underscores`. Note that enabling underscore type lambdas will disable usage of `_` as a wildcard, you will only be able to write wildcards using the `?` symbol. + +If you wish to cross-compile a project for Scala 2 & Scala 3 while using underscore type lambdas for both, you may do so starting with [kind-projector](https://github.com/typelevel/kind-projector) version `0.13.0` and up and Scala 2 versions `2.13.6` and `2.12.14`. +To enable it, add the compiler flags `-Xsource:3 -P:kind-projector:underscore-placeholders` to your build. +As in Scala 3, this will disable usage of `_` as a wildcard, however, the flag `-Xsource:3` will allow you to replace it with the `?` symbol. + +The following `sbt` configuration will set up the correct flags to cross-compile with new syntax: + +```scala +ThisBuild / scalacOptions ++= { + CrossVersion.partialVersion(scalaVersion.value) match { + case Some((3, _)) => Seq("-Ykind-projector:underscores") + case Some((2, 13)) | Some((2, 12)) => Seq("-Xsource:3", "-P:kind-projector:underscore-placeholders")) + } +} +``` + +## Migrating to New Syntax + +To use underscores for type-lambdas in existing kind-projector enabled code, replace `*` or `?` type lambda placeholders with `_`. + +In turn, you will also have to rewrite all usages of `_` as the wildcard to use `?` symbol. + +For example the following usage of the wildcard: + +```scala +def getWidget(widgets: Set[_ <: Widget], name: String): Option[Widget] = widgets.find(_.name == name) +``` + +Must be rewritten to: + +```scala +def getWidget(widgets: Set[? <: Widget], name: String): Option[Widget] = widgets.find(_.name == name) +``` + +And the following usages of kind-projector's `*` placeholder: + +```scala +Tuple2[*, Double] // equivalent to: type R[A] = Tuple2[A, Double] +Either[Int, +*] // equivalent to: type R[+A] = Either[Int, A] +Function2[-*, Long, +*] // equivalent to: type R[-A, +B] = Function2[A, Long, B] +``` + +Must be rewritten to: + +```scala +Tuple2[_, Double] // equivalent to: type R[A] = Tuple2[A, Double] +Either[Int, +_] // equivalent to: type R[+A] = Either[Int, A] +Function2[-_, Long, +_] // equivalent to: type R[-A, +B] = Function2[A, Long, B] +``` + +## Compiling Existing Code + +Even without migrating to underscore type lambdas, you will likely be able to compile most of it with Scala 3 without changes. + +Use the flag `-Ykind-projector` to enable support for `*`-based type lambdas (without enabling underscore type lambdas), the following forms will now compile: + +```scala +Tuple2[*, Double] // equivalent to: type R[A] = Tuple2[A, Double] +Either[Int, +*] // equivalent to: type R[+A] = Either[Int, A] +Function2[-*, Long, +*] // equivalent to: type R[-A, +B] = Function2[A, Long, B] +``` + +## Rewriting Incompatible Constructs + +Scala 3's `-Ykind-projector` & `-Ykind-projector:underscores` implement only a subset of `kind-projector` syntax, in particular they do not implement: + +* higher-kinded type lambda placeholders +* higher-kinded named type lambda parameters +* The `Lambda` keyword (`λ` is still supported) + +You must rewrite ALL of the following forms: + +```scala +// classic +EitherT[*[_], Int, *] // equivalent to: type R[F[_], B] = EitherT[F, Int, B] +// underscores +EitherT[_[_], Int, _] // equivalent to: type R[F[_], B] = EitherT[F, Int, B] +// named λ +λ[(F[_], A) => EitherT[F, Int, A]] +// named Lambda +Lambda[(F[_], A) => EitherT[F, Int, A]] +``` + +Into the following long-form to cross-compile with Scala 3: + +```scala +type MyLambda[F[_], A] = EitherT[F, Int, A] +MyLambda +``` + +Alternatively you may use Scala 3's [Native Type Lambdas](https://dotty.epfl.ch/docs/reference/new-types/type-lambdas.html) if you do not need to cross-compile: + +```scala +[F[_], A] =>> EitherT[F, Int, A] +``` + +For `Lambda` you must rewrite the following form: + +```scala +Lambda[(`+E`, `+A`) => Either[E, A]] +``` + +To the following to cross-compile: + +```scala +λ[(`+E`, `+A`) => Either[E, A]] +``` + +Or alternatively to Scala 3 type lambdas: + +```scala +[E, A] =>> Either[E, A] +``` + +Note: Scala 3 type lambdas no longer need `-` or `+` variance markers on parameters, these are now inferred. diff --git a/_overviews/scala3-migration/tutorial-prerequisites.md b/_overviews/scala3-migration/tutorial-prerequisites.md index 45a0ea4360..b3b3571520 100644 --- a/_overviews/scala3-migration/tutorial-prerequisites.md +++ b/_overviews/scala3-migration/tutorial-prerequisites.md @@ -115,6 +115,8 @@ AdditionalLy, we now have the following features that make `kind-projector` not - [Polymorphic Functions](http://dotty.epfl.ch/docs/reference/new-types/polymorphic-function-types.html) - [Kind Polymorphism](http://dotty.epfl.ch/docs/reference/other-new-features/kind-polymorphism.html) +You can learn more about the Kind Projector migration in its [dedicated page](plugin-kind-projector.html). + ## Runtime reflection `scala-reflect` will not be ported to Scala 3 because it exposes Scala 2 compiler internals that do not exist in Scala 3. From 27c69f95c8d75d85560b0e8ed97d087dbd6af87a Mon Sep 17 00:00:00 2001 From: Adrien Piquerez Date: Wed, 12 May 2021 17:58:00 +0200 Subject: [PATCH 0226/1870] Fix typos --- _overviews/scala3-migration/incompat-other-changes.md | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/_overviews/scala3-migration/incompat-other-changes.md b/_overviews/scala3-migration/incompat-other-changes.md index cb8ffc1607..8fae52925d 100644 --- a/_overviews/scala3-migration/incompat-other-changes.md +++ b/_overviews/scala3-migration/incompat-other-changes.md @@ -254,7 +254,6 @@ The solution depends on the situation. In the given example, you can either: Scala 3 cannot reduce the application of a higher-kinded abstract type member to the wildcard argument. -For instance, the following example does not compile. For instance, the following example does not compile. ```scala @@ -275,7 +274,7 @@ We can fix this by using a type parameter: But this simple solution does not work when `Foo` is itself used as a type argument. ```scala -def g(foos: Seq[Foo[_]]): Unit` +def g(foos: Seq[Foo[_]]): Unit ``` In such case, we can use a wrapper class around `Foo`: @@ -283,6 +282,6 @@ In such case, we can use a wrapper class around `Foo`: {% highlight diff %} +class FooWrapper[A](foo: Foo[A]) --def g(foos: Seq[Foo[_]]): Unit` +-def g(foos: Seq[Foo[_]]): Unit +def g(foos: Seq[FooWrapper[_]]): Unit {% endhighlight %} From 820ee3be265a8f2d46b888374f59652f8be054d4 Mon Sep 17 00:00:00 2001 From: David Luo Date: Fri, 14 May 2021 22:04:21 -0400 Subject: [PATCH 0227/1870] Fix python syntax in one-line method example. --- _overviews/scala3-book/scala-for-python-devs.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/_overviews/scala3-book/scala-for-python-devs.md b/_overviews/scala3-book/scala-for-python-devs.md index 958fa50033..2af46e4d63 100644 --- a/_overviews/scala3-book/scala-for-python-devs.md +++ b/_overviews/scala3-book/scala-for-python-devs.md @@ -299,7 +299,7 @@ This section provides comparisons of features related to OOP-style classes and m - def add(a,b) = a + b + def add(a, b): return a + b From 4f29ff71fd0c722a815bf844b28c4587044cafc6 Mon Sep 17 00:00:00 2001 From: Dale Wijnand Date: Tue, 18 May 2021 12:23:00 +0100 Subject: [PATCH 0228/1870] SIP - Sealed Types --- _sips/sips/2020-05-18-sealed-types.md | 278 ++++++++++++++++++++++++++ 1 file changed, 278 insertions(+) create mode 100644 _sips/sips/2020-05-18-sealed-types.md diff --git a/_sips/sips/2020-05-18-sealed-types.md b/_sips/sips/2020-05-18-sealed-types.md new file mode 100644 index 0000000000..fcad7c472f --- /dev/null +++ b/_sips/sips/2020-05-18-sealed-types.md @@ -0,0 +1,278 @@ +--- +layout: sip +title: Sealed Types +vote-status: pending +permalink: /sips/:title.html +redirect_from: /sips/pending/sealed-types.html +--- + +**By: Dale Wijnand and Fengyun Liu** + +## History + +| Date | Version | +|---------------|-----------| +| May 18th 2021 | Submitted | + +## Introduction + +Exhaustivity checking is one of the safety belts for using pattern matching in functional +programming. However, if one wants to partition values of an existing type to reason about them in +separate cases of a match or as separate types this requires wrapping the values in new classes, +which incurs a boxing cost. + +As an alternative, one may define custom extractors and use them as the case patterns. However, there is no +way in Scala to declare that these extractors are complementary, i.e. the match is exhaustive when +the complete set of extractors are used together. + +Similarly, one can define `TypeTest`s for matching abstract types, but there is no way to determine +if a match on an abstract type exhausts all its subtypes. + +This SIP solves these three problems by introducing *sealed types*. + +## Motivating Examples + +We've identified several real world use cases that calls for enhancing exhaustivity checking, and +used them to stress the design proposed here. You can find them [here][problems], but we'll present +an example below. + +Using the opaque types and custom extractors we can work safely with positive integers and negative +integers: + +```scala +opaque type Pos <: Int = Int +opaque type Neg <: Int = Int + +object Pos { def unapply(x: Int): Option[Pos] = if (x > 0) Some(x) else None } +object Neg { def unapply(x: Int): Option[Neg] = if (x < 0) Some(x) else None } + +(n: Int) match + case 0 => + case Pos(x) => + case Neg(x) => +``` + +With the above, when we get a `Pos` value, it's guaranteed to be a positive number. The same goes +for `Neg`. Sadly the match is reported as not exhaustive because the two extractors and the value +`0` aren't known to be complementary. + +## Design + +We identify two root causes: + +1. You can't define a type, that isn't a class, as `sealed` +2. You can't define a mapping from values to types + +The *sealed type*, proposed by this SIP, allow partitioning of value of a given type into a sealed +type hierarchy. [Here][solutions] you can find how sealed types address the issues faced by all the +motivating examples, but we'll present here how it fixes the number example above. + +In order to partition int into positive, zero, and negative numbers we'll define a new `sealed` type +`Num` and how to distinguish its subtypes with match syntax: + +```scala +sealed type Num = Int { + case 0 => val Zero + case n if n > 0 => type Pos + case _ => type Neg +} +``` + +This sealed type definition desugars into the following type and value definitions: + +```scala +type Num = Int +val Zero: Num = 0 +opaque type Pos <: Num = Num +opaque type Neg <: Num = Num +``` + +The match desugars into an ordinal method, that reuses the logic to associate an ordinal for each +case: + +```scala +extension (n: Num): + def ordinal: Int = (n: Int) match { + case 0 => 0 + case n if n > 0 => 1 + case _ => 2 + } +``` + +Finally a series of `TypeTest`s are defined, allowing for values of both the underlying type `Int` +and the sealed type `Num` to be tested against the subtypes and singleton subtypes `Pos`, +`Zero.type`, and `Neg`, using the `ordinal` method: + +```scala +given TypeTest[Int, Zero.type] = (n: Int) => if ((n: Num).ordinal == 0) Some(n) else None +given TypeTest[Int, Pos] = (n: Int) => if ((n: Num).ordinal == 1) Some(n) else None +given TypeTest[Int, Neg] = (n: Int) => if ((n: Num).ordinal == 2) Some(n) else None +given TypeTest[Int, Num] = (n: Int) => if ((n: Num).ordinal == -1) None else Some(n) +given [T <: Num](using t: TypeTest[Int, T]): TypeTest[Num, T] = (n: Num) => t.unapply(n) +``` + +Given the above, one can either change the usage from extractors to types: + +```scala +(n: Int) match + case 0 => + case x: Pos => + case x: Neg => +``` + +Or we can keep the usage the same by redefining the extractors (using a value class name-based +extractors `PosExtractor` and `NegExtractor` to avoid allocating): + +```scala +object Pos { def unapply(x: Pos): PosExtractor = new PosExtractor(x) } +object Neg { def unapply(x: Neg): NegExtractor = new NegExtractor(x) } + +class PosExtractor(private val x: Pos) extends AnyVal { def isEmpty: false = false ; def get = x } +class NegExtractor(private val x: Neg) extends AnyVal { def isEmpty: false = false ; def get = x } + +(n: Int) match + case 0 => + case Pos(x) => + case Neg(x) => +``` + +## Syntax + +The existing syntax is enhanced as follows: + +``` +TypeDcl ::= `sealed` [`opaque`] `type` id [TypeParamClause] +TypeDef ::= `sealed` [`opaque`] `type` id [TypeParamClause] [`>:` Type] [`<:` Type] `=` Type `{` + `case` Pattern [Guard] `=>` (`type` id [TypeParamClause] | `val` id [`:` Type]) + `}` +``` + +Specifically: + +* the `sealed` modifier becomes available for type definitions and declarations +* on the right-hand side of definitions is the underlying type of the sealed type +* following the underlying type is a match that operates on a value of the + underlying type and defines the type or singleton type associated to that case. +* the type is defined using the `type` keyword and singleton types are defined using `val` + +## Desugaring + +Using the example + +``` +sealed [opaque] type T[X..] [bounds] = U { + case p1 => type C[X..] + case p2 => val S +} +``` + +That desugars into: +* a type alias `type T[X..] [bounds] = U`, `opaque` if the sealed type is `opaque` (see Restrictions) +* opaque type definitions, `opaque type C[X..] <: T[Y..] = T[Y..]`, for each non-singleton type case + - any type argument `Y` that isn't defined from `X..` will be: + + its lower bound, if the type parameter is covariant + + its upper bound, if the type parameter is contravariant + + a wildcard type, with the type parameter's bounds, if the type parameter is invariant +* val definitions, `val S: T[Y..] = p`, for singleton type cases, using the same type argument rules +* an ordinal method, `extension (t: T): def ordinal: Int = (t: U) match { case p1 => 0 p2 => 1 .. }` + - each of the sealed type's cases is associated with a unique ordinal + - ordinals starts from 0 and increase for each case, in the order of their definition + - the ordinal method adds a `case _ => -1` default case, if the sealed type's match is inexhaustive + - such an ordinal method may only be defined by the compiler, to preserve exhaustivity guarantees +* a series a `TypeTest`s, defined in terms of the ordinal method + - a `TypeTest` between `U` and each case `A`, having ordinal `ordA`: + + `given TypeTest[U, C] = (u: U) => if ((u: T).ordinal == $ordA) Some(u) else None` + + `given TypeTest[U, S.type] = (u: U) => if ((u: T).ordinal == $ordA) Some(u) else None` + - a type test between the underlying type and the sealed type: + + `given TypeTest[U, T] = (u: U) => if ((u: T).ordinal == -1) None else Some(u)` + - a generic type test between `T` and each case `A`, defined in terms of the above type tests: + + `given [A <: T](using t: TypeTest[U, A]): TypeTest[T, A] = (x: T) => t.unapply(x)` + +## Restrictions + +1. If the match on the value of the underlying type is not exhaustive, then the sealed type must be + declared `opaque`, in order to preserve the fact that the sealed type represents only a subset of + the values of the underlying type (e.g. positive integers) +2. No other type may be declared to subtype the opaque type `T` +3. For singleton types, the pattern `p` must be a stable value, e.g. a `val`, a `case object`, or a literal +4. Each case must define a new type or singleton type + +## Alternative Design + +An alternative design is to introduce an annotation `@complete` to specify that +a type can be partitioned into a list of subtypes. + +For example, given the following definition: + +```scala + opaque type Nat <: Int = Int + opaque type Neg <: Int = Int + + @complete[(Nat, Neg)] // Num decomposes to `Nat` and `Neg` + type Num = Int + + given TypeTest[Int, Neg] = (n: Int) => if (x < 0) Some(n) else None + given TypeTest[Int, Nat] = (n: Int) => if (x >= 0) Some(n) else None +``` + +The user now can write code as follows: + +``` Scala + def foo(n: Num) = + n match + case x: Neg => + case x: Nat => +``` + +Knowing that the type `Num` can be decomposed to `Neg` and `Nat`, the compiler +can verify that the pattern match above is exhaustive. + +This approach, however, is relatively low-level and the compiler does not +provide any guarantee that the annotation is actually correct. + +You can find more examples [here][complete-gist] + +## Related Work + +Haskell has a `COMPLETE` pragma which allows patterns and type constructors to be +defined to be a complete set, relying on the programmer getting it right. + +```haskell +data Choice a = Choice Bool a + +pattern LeftChoice :: a -> Choice a +pattern LeftChoice a = Choice False a + +pattern RightChoice :: a -> Choice a +pattern RightChoice a = Choice True a + +{-# COMPLETE LeftChoice, RightChoice #-} + +foo :: Choice Int -> Int +foo (LeftChoice n) = n * 2 +foo (RightChoice n) = n - 2 +``` + +## References + +1. [Opaque types][1] +2. [Forum discussion about Opt[T]][2] +3. [Github discussion about enhancing exhaustivity check][3] +4. [_Lightweight static capabilities_][4], Oleg Kiselyov, Chung-chieh Shan, 2007 +5. [TypeTest documentation][5] + +[1]: https://docs.scala-lang.org/sips/opaque-types.html +[2]: https://contributors.scala-lang.org/t/trouble-with-2-13-4-exhaustivity-checking-being-too-strict/4817 +[3]: https://github.com/lampepfl/dotty/issues/10961 +[4]: http://okmij.org/ftp/Computation/lightweight-guarantees/lightweight-static-capabilities.pdf +[5]: http://dotty.epfl.ch/docs/reference/other-new-features/type-test.html +[6]: https://github.com/lampepfl/dotty/pull/11186 +[problems]: https://gist.github.com/dwijnand/d33436cf197daa15216b3cd35d03ba1c#file-sealedtypeproblems-scala +[solutions]: https://gist.github.com/dwijnand/d33436cf197daa15216b3cd35d03ba1c#file-sealedtypesolutions-scala +[complete-gist]: https://gist.github.com/dwijnand/d33436cf197daa15216b3cd35d03ba1c#file-z-complete-scala + +* https://github.com/lampepfl/dotty/issues/10961 False “match may not be exhaustive warning” +* https://github.com/lampepfl/dotty/pull/11186 Implement @covers annotation for partial irrefutable specification +* https://downloads.haskell.org/~ghc/9.0.1/docs/html/users_guide/exts/pragmas.html#complete-pragma +* https://downloads.haskell.org/~ghc/9.0.1/docs/html/users_guide/exts/pattern_synonyms.html +* https://dotty.epfl.ch/docs/reference/other-new-features/opaques.html From 7b14ec5146f66e9f6eb482651dde8c75753a295a Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 18 May 2021 17:26:17 +0000 Subject: [PATCH 0229/1870] Bump nokogiri from 1.11.1 to 1.11.4 Bumps [nokogiri](https://github.com/sparklemotion/nokogiri) from 1.11.1 to 1.11.4. - [Release notes](https://github.com/sparklemotion/nokogiri/releases) - [Changelog](https://github.com/sparklemotion/nokogiri/blob/main/CHANGELOG.md) - [Commits](https://github.com/sparklemotion/nokogiri/compare/v1.11.1...v1.11.4) Signed-off-by: dependabot[bot] --- Gemfile.lock | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Gemfile.lock b/Gemfile.lock index b6670e0fac..84f1cf9f24 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -54,8 +54,8 @@ GEM rb-fsevent (~> 0.10, >= 0.10.3) rb-inotify (~> 0.9, >= 0.9.10) mercenary (0.3.6) - mini_portile2 (2.5.0) - nokogiri (1.11.1) + mini_portile2 (2.5.1) + nokogiri (1.11.4) mini_portile2 (~> 2.5.0) racc (~> 1.4) nokogumbo (2.0.2) From 1423dcf7d9c2d5a996780d9557b2388b2222be0f Mon Sep 17 00:00:00 2001 From: fernandoracca Date: Tue, 18 May 2021 18:39:13 +0100 Subject: [PATCH 0230/1870] style: Improve UX for users with large screens #2028 --- _sass/vendors/neat/settings/_grid.scss | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/_sass/vendors/neat/settings/_grid.scss b/_sass/vendors/neat/settings/_grid.scss index fad1e9a445..5f4088637b 100755 --- a/_sass/vendors/neat/settings/_grid.scss +++ b/_sass/vendors/neat/settings/_grid.scss @@ -22,7 +22,7 @@ $grid-columns: 12 !default; /// /// @type Number (Unit) /// -$max-width: 1000px !default; +$max-width: 2048px!default; /// When set to true, it sets the box-sizing property of all elements to `border-box`. Set with a `!global` flag. /// From 62e6666956511c54dc74563b1a822f43e1a26262 Mon Sep 17 00:00:00 2001 From: casperlehmann Date: Sun, 16 May 2021 22:10:36 +0200 Subject: [PATCH 0231/1870] Settle on variable name fnf for switch statement --- _overviews/scala3-book/scala-for-python-devs.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/_overviews/scala3-book/scala-for-python-devs.md b/_overviews/scala3-book/scala-for-python-devs.md index 2af46e4d63..c975a440d9 100644 --- a/_overviews/scala3-book/scala-for-python-devs.md +++ b/_overviews/scala3-book/scala-for-python-devs.md @@ -719,7 +719,7 @@ Scala also has `match` expressions.
catch
  case ioe: IOException =>
    println(ioe.getMessage) -
  case nfe: FileNotFoundException => +
  case fnf: FileNotFoundException =>
    println(fnf.getMessage)
finally
  println("Finally") From b449bdbd5d4447c78c5ecf09dd8eaa332940eeab Mon Sep 17 00:00:00 2001 From: casperlehmann Date: Sun, 16 May 2021 22:33:36 +0200 Subject: [PATCH 0232/1870] Use f-strings in Python to match Scala examples --- _overviews/scala3-book/scala-for-python-devs.md | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/_overviews/scala3-book/scala-for-python-devs.md b/_overviews/scala3-book/scala-for-python-devs.md index c975a440d9..82aa0de5af 100644 --- a/_overviews/scala3-book/scala-for-python-devs.md +++ b/_overviews/scala3-book/scala-for-python-devs.md @@ -256,7 +256,7 @@ This section provides comparisons of features related to OOP-style classes and m
    self.name = name

  def speak(self): -
    print('Hello, my name is %s' % self.name) +
    print(f'Hello, my name is {self.name}') @@ -543,8 +543,7 @@ Scala also has `match` expressions. for i in ints:
  x = i * 2 -
  s = "i = {}, x = {}" -
  print(s.format(i,x))
+
  print(f"i = {i}, x = {x}") @@ -568,8 +567,7 @@ Scala also has `match` expressions. for i in range(1,3):
  for j in range(4,6):
    for k in range(1,10,3): -
      s= "i = {}, j = {}, k = {}" -
      print(s.format(i,j,k))
+
      print(f"i = {i}, j = {j}, k = {k}") From 63aebde972fc2cc7ad448610f18e056586afdb25 Mon Sep 17 00:00:00 2001 From: casperlehmann Date: Sun, 16 May 2021 22:37:10 +0200 Subject: [PATCH 0233/1870] Cleanup whitespace --- .../scala3-book/scala-for-python-devs.md | 42 ++++--------------- 1 file changed, 9 insertions(+), 33 deletions(-) diff --git a/_overviews/scala3-book/scala-for-python-devs.md b/_overviews/scala3-book/scala-for-python-devs.md index 82aa0de5af..4ea3e5723c 100644 --- a/_overviews/scala3-book/scala-for-python-devs.md +++ b/_overviews/scala3-book/scala-for-python-devs.md @@ -8,10 +8,12 @@ next-page: --- {% include_relative scala4x.css %} +
{% comment %} -NOTE: Hopefully someone with more Python experience can give this a thorough review + +NOTE: Hopefully someone with more Python experience can give this a thorough review NOTE: On this page (https://contributors.scala-lang.org/t/feedback-sought-optional-braces/4702/10), Li Haoyi comments: “Python’s success also speaks for itself; beginners certainly don’t pick Python because of performance, ease of installation, packaging, IDE support, or simplicity of the language’s runtime semantics!” I’m not a Python expert, so these points are good to know, though I don’t want to go negative in any comparisons. It’s more like thinking, “Python developers will appreciate Scala’s performance, ease of installation, packaging, IDE support, etc.” @@ -21,18 +23,15 @@ It’s more like thinking, “Python developers will appreciate Scala’s perfor TODO: We should probably go through this document and add links to our other detail pages, when time permits. {% endcomment %} - This section provides a comparison between the Python and Scala programming languages. It’s intended for programmers who know Python and want to learn about Scala, specifically by seeing examples of how Python language features compare to Scala. - - -## Introduction +## Introduction Before getting into the examples, this first section provides a relatively brief introduction and summary of the sections that follow. The two languages are first compared at a high level, and then at an everyday programming level. -### High level similarities +### High level similarities At a high level, Scala shares these *similarities* with Python: @@ -45,7 +44,7 @@ At a high level, Scala shares these *similarities* with Python: - Both can be used with [Apache Spark](https://spark.apache.org) for big data processing - Both have a wealth of terrific libraries -### High level differences +### High level differences Also at a high level, the _differences_ between Python and Scala are: @@ -97,7 +96,6 @@ Also at a programming level, these are some of the differences you’ll see ever - Scala code can run in the JVM and even be compiled to native images (using [Scala Native](https://github.com/scala-native/scala-native) and [GraalVM](https://www.graalvm.org)) for high performance - Many other goodies: case classes, companion classes and objects, macros, [union][union-types] and [intersection][intersection-types] types, [toplevel definitions][toplevel], numeric literals, multiple parameter lists, and more - ### Features compared with examples Given that introduction, the following sections provide side-by-side comparisons of Python and Scala programming language features. @@ -106,8 +104,6 @@ Given that introduction, the following sections provide side-by-side comparisons TODO: Update the Python examples to use four spaces. I started to do this, but then thought it would be better to do that in a separate PR. {% endcomment %} - - ## Comments Python uses `#` for comments, while the Scala comment syntax is the same as languages like C, C++, and Java: @@ -129,8 +125,6 @@ Python uses `#` for comments, while the Scala comment syntax is the same as lang - - ## Variable assignment These examples demonstrate how to create variables in Python and Scala. @@ -239,8 +233,6 @@ x += 1 However, the rule of thumb in Scala is to always use `val` unless the variable specifically needs to be mutated. - - ## OOP style classes and methods This section provides comparisons of features related to OOP-style classes and methods. @@ -331,8 +323,6 @@ This section provides comparisons of features related to OOP-style classes and m - - ## Interfaces, traits, and inheritance If you’re familiar with Java 8 and newer, Scala traits are similar to those Java interfaces. @@ -355,8 +345,6 @@ sm.multiply(2,2) // 4 There are [many other ways to use traits with classes and objects][modeling-intro], but this gives you a little idea of how they can be used to organize concepts into logical groups of behavior, and then merge them as needed to create a complete solution. - - ## Control structures This section compares [control structures][control-structures] in Python and Scala. @@ -717,7 +705,7 @@ Scala also has `match` expressions.
catch
  case ioe: IOException =>
    println(ioe.getMessage) -
  case fnf: FileNotFoundException => +
  case fnf: FileNotFoundException =>
    println(fnf.getMessage)
finally
  println("Finally") @@ -728,13 +716,11 @@ Scala also has `match` expressions. Match expressions and pattern matching are a big part of the Scala programming experience, but only a few `match` expression features are shown here. See the [Control Structures][control-structures] page for many more examples. - - ## Collections classes This section compares the [collections classes][collections-classes] that are available in Python and Scala, including lists, dictionaries/maps, sets, and tuples. -### Lists +### Lists Where Python has its list, Scala has several different specialized mutable and immutable sequence classes, depending on your needs. Because the Python list is mutable, it most directly compares to Scala’s `ArrayBuffer`. @@ -956,7 +942,7 @@ The Python set is similar to the _mutable_ Scala `Set` class. Scala has other specialized `Set` classes for different needs. -### Tuples +### Tuples Python and Scala tuples are also similar. @@ -996,8 +982,6 @@ Python and Scala tuples are also similar. - - ## Methods on collections classes Python and Scala have several of the same common functional methods available to them: @@ -1190,8 +1174,6 @@ None of these methods mutate the initial list `a`; instead, they all return the There are many more methods available, but hopefully these descriptions and examples give you a taste of the power that’s available in the pre-built collections methods. - - ## Enums This section compares enums (enumerations) in Python and Scala 3. @@ -1289,8 +1271,6 @@ This section compares enums (enumerations) in Python and Scala 3. - - ## Concepts that are unique to Scala There are other concepts in Scala which currently don’t have equivalent functionality in Python. @@ -1305,7 +1285,6 @@ Follow the links below for more details: - Infix methods - Macros and metaprogramming - [collections-classes]: {% link _overviews/scala3-book/collections-classes.md %} [concurrency]: {% link _overviews/scala3-book/concurrency.md %} [contextual]: {% link _overviews/scala3-book/ca-contextual-abstractions-intro.md %} @@ -1320,7 +1299,4 @@ Follow the links below for more details: [toplevel]: {% link _overviews/scala3-book/taste-toplevel-definitions.md %} [type-classes]: {% link _overviews/scala3-book/types-type-classes.md %} [union-types]: {% link _overviews/scala3-book/types-union.md %} - -
- From 1bb6e20b672cb10b524c83466dd11de9998d777e Mon Sep 17 00:00:00 2001 From: casperlehmann Date: Sun, 16 May 2021 22:39:25 +0200 Subject: [PATCH 0234/1870] Missed a period --- _overviews/scala3-book/scala-for-python-devs.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/_overviews/scala3-book/scala-for-python-devs.md b/_overviews/scala3-book/scala-for-python-devs.md index 4ea3e5723c..5386dbb8d3 100644 --- a/_overviews/scala3-book/scala-for-python-devs.md +++ b/_overviews/scala3-book/scala-for-python-devs.md @@ -13,7 +13,7 @@ next-page: {% comment %} -NOTE: Hopefully someone with more Python experience can give this a thorough review +NOTE: Hopefully someone with more Python experience can give this a thorough review. NOTE: On this page (https://contributors.scala-lang.org/t/feedback-sought-optional-braces/4702/10), Li Haoyi comments: “Python’s success also speaks for itself; beginners certainly don’t pick Python because of performance, ease of installation, packaging, IDE support, or simplicity of the language’s runtime semantics!” I’m not a Python expert, so these points are good to know, though I don’t want to go negative in any comparisons. It’s more like thinking, “Python developers will appreciate Scala’s performance, ease of installation, packaging, IDE support, etc.” From c711c4261b2e08033367f75f03ef5bd74798a485 Mon Sep 17 00:00:00 2001 From: casperlehmann Date: Sun, 16 May 2021 22:51:15 +0200 Subject: [PATCH 0235/1870] Further cleanup whitespace --- .../scala3-book/scala-for-python-devs.md | 24 +++++++++---------- 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/_overviews/scala3-book/scala-for-python-devs.md b/_overviews/scala3-book/scala-for-python-devs.md index 5386dbb8d3..b045e67ac6 100644 --- a/_overviews/scala3-book/scala-for-python-devs.md +++ b/_overviews/scala3-book/scala-for-python-devs.md @@ -4,7 +4,7 @@ type: chapter description: This page is for Python developers who are interested in learning about Scala 3. num: 73 previous-page: scala-for-javascript-devs -next-page: +next-page: --- {% include_relative scala4x.css %} @@ -33,7 +33,7 @@ The two languages are first compared at a high level, and then at an everyday pr ### High level similarities -At a high level, Scala shares these *similarities* with Python: +At a high level, Scala shares these *similarities* with Python: - Both are high-level programming languages, where you don’t have to concern yourself with low-level concepts like pointers and manual memory management - Both have a relatively simple, concise syntax @@ -47,8 +47,8 @@ At a high level, Scala shares these *similarities* with Python: ### High level differences Also at a high level, the _differences_ between Python and Scala are: - -- Python is dynamically typed, and Scala is statically typed + +- Python is dynamically typed, and Scala is statically typed - Though it’s statically typed, Scala features like type inference make it feel like a dynamic language - Python is interpreted, and Scala code is compiled to _.class_ files, and runs on the Java Virtual Machine (JVM) - In addition to running on the JVM, the [Scala.js](https://www.scala-js.org) project lets you use Scala as a JavaScript replacement @@ -59,7 +59,7 @@ Also at a high level, the _differences_ between Python and Scala are: ### Programming level similarities -This section looks at the similarities you’ll see between Python and Scala when you write code on an everyday basis: +This section looks at the similarities you’ll see between Python and Scala when you write code on an everyday basis: - Scala’s type inference often makes it feel like a dynamically typed language - Neither language uses semicolons to end expressions @@ -72,7 +72,7 @@ This section looks at the similarities you’ll see between Python and Scala whe ### Programming level differences -Also at a programming level, these are some of the differences you’ll see every day when writing code: +Also at a programming level, these are some of the differences you’ll see every day when writing code: - Programming in Scala feels very consistent: - `val` and `var` fields are used consistently to define fields and parameters @@ -83,7 +83,7 @@ Also at a programming level, these are some of the differences you’ll see ever - Scala variables and parameters are defined with the `val` (immutable) or `var` (mutable) keywords - Scala idioms prefer immutable data structures - Scala has terrific IDE support with IntelliJ IDEA and Microsoft VS Code -- Comments: Python uses `#` for comments; Scala uses the C, C++, and Java style: `//`, `/*...*/`, and `/**...*/` +- Comments: Python uses `#` for comments; Scala uses the C, C++, and Java style: `//`, `/*...*/`, and `/**...*/` - Naming conventions: The Python standard is to use underscores like `my_list`; Scala uses `myList` - Scala is statically typed, so you declare types for method parameters, method return values, and in other places - Pattern matching and `match` expressions are used extensively in Scala (and will change the way you write code) @@ -631,7 +631,7 @@ Scala also has `match` expressions. - val x = + val x =
  for
    i <- 1 to 3
  yield @@ -988,10 +988,10 @@ Python and Scala have several of the same common functional methods available to - `map` - `filter` -- `reduce` +- `reduce` If you’re used to using these methods with lambda expressions in Python, you’ll see that Scala has a similar approach with methods on its collections classes. -To demonstrate this functionality, here are two sample lists: +To demonstrate this functionality, here are two sample lists: ```scala numbers = (1,2,3) // python @@ -1131,7 +1131,7 @@ Some common grouping methods: | `c.span(p)` | Returns a collection of two collections, the first created by `c.takeWhile(p)`, and the second created by `c.dropWhile(p)`. | | `c.splitAt(n)` | Returns a collection of two collections by splitting the collection `c` at element `n`. | -Some informational and mathematical methods: +Some informational and mathematical methods: | Method | Description | | -------------- | ------------- | @@ -1274,7 +1274,7 @@ This section compares enums (enumerations) in Python and Scala 3. ## Concepts that are unique to Scala There are other concepts in Scala which currently don’t have equivalent functionality in Python. -Follow the links below for more details: +Follow the links below for more details: - Most concepts related to [contextual abstractions][contextual], such as [extension methods][extension-methods], [type classes][type-classes], implicit values - Scala allows multiple parameter lists, which enables features like partially-applied functions, and the ability to create your own DSLs From 288b03bd4609aa24cc85263ff8fbfd1cbc15fc64 Mon Sep 17 00:00:00 2001 From: Hanns Holger Rutz Date: Tue, 18 May 2021 23:48:52 +0200 Subject: [PATCH 0236/1870] Update control-structures.md if / else if example misses a `then` --- _overviews/scala3-book/control-structures.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/_overviews/scala3-book/control-structures.md b/_overviews/scala3-book/control-structures.md index 9f830aa433..7fd0ce3147 100644 --- a/_overviews/scala3-book/control-structures.md +++ b/_overviews/scala3-book/control-structures.md @@ -55,7 +55,7 @@ And this is the `if`/`else if`/`else` syntax: ```scala if x < 0 then println("negative") -else if x == 0 +else if x == 0 then println("zero") else println("positive") From 6787416975b6802063854789be1a85e7652aea91 Mon Sep 17 00:00:00 2001 From: Dale Wijnand Date: Wed, 19 May 2021 08:11:05 +0100 Subject: [PATCH 0237/1870] SIP-sealed-types: simplify TypeTest[Int, Num] --- _sips/sips/2020-05-18-sealed-types.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/_sips/sips/2020-05-18-sealed-types.md b/_sips/sips/2020-05-18-sealed-types.md index fcad7c472f..369c705079 100644 --- a/_sips/sips/2020-05-18-sealed-types.md +++ b/_sips/sips/2020-05-18-sealed-types.md @@ -107,7 +107,7 @@ and the sealed type `Num` to be tested against the subtypes and singleton subtyp given TypeTest[Int, Zero.type] = (n: Int) => if ((n: Num).ordinal == 0) Some(n) else None given TypeTest[Int, Pos] = (n: Int) => if ((n: Num).ordinal == 1) Some(n) else None given TypeTest[Int, Neg] = (n: Int) => if ((n: Num).ordinal == 2) Some(n) else None -given TypeTest[Int, Num] = (n: Int) => if ((n: Num).ordinal == -1) None else Some(n) +given TypeTest[Int, Num] = (n: Int) => Some(n) given [T <: Num](using t: TypeTest[Int, T]): TypeTest[Num, T] = (n: Num) => t.unapply(n) ``` From 24853855477ed25371f7b927b4ae96a8718da33a Mon Sep 17 00:00:00 2001 From: Chaitanya Waikar <33855574+chaitanyawaikar@users.noreply.github.com> Date: Wed, 19 May 2021 11:53:07 +0200 Subject: [PATCH 0238/1870] Remove the line related to GraalVM Remove the line related to GraalVM which causes ambiguity "Developers can use sbt-native-image which uses GraalVM under the hood." --- _overviews/jdk-compatibility/overview.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/_overviews/jdk-compatibility/overview.md b/_overviews/jdk-compatibility/overview.md index 64556958b8..69a8c49e98 100644 --- a/_overviews/jdk-compatibility/overview.md +++ b/_overviews/jdk-compatibility/overview.md @@ -50,7 +50,7 @@ In almost every case, you're free to use the JDK and JVM of your choice. JDK 8 users typically use the Oracle JDK or some flavor of OpenJDK. -Most JDK 11+ users are using either OpenJDK or [GraalVM](https://www.graalvm.org/docs/reference-manual/scala/) which runs in the context of OpenJDK. Developers can use [sbt-native-image](https://github.com/scalameta/sbt-native-image) which uses GraalVM under the hood. +Most JDK 11+ users are using either OpenJDK or [GraalVM](https://www.graalvm.org/docs/reference-manual/scala/) which runs in the context of OpenJDK. OpenJDK comes in various flavors, offered by different providers. We build and test Scala using [AdoptOpenJDK](https://adoptopenjdk.net) in particular, but the differences are unlikely to matter to most users. From 2a954ae85816addf1b5d7073b9e9dd8342cf2ecb Mon Sep 17 00:00:00 2001 From: Hanns Holger Rutz Date: Wed, 19 May 2021 01:17:04 +0200 Subject: [PATCH 0239/1870] Update types-dependent-function.md --- _overviews/scala3-book/types-dependent-function.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/_overviews/scala3-book/types-dependent-function.md b/_overviews/scala3-book/types-dependent-function.md index 833b298619..6c3c4d94f8 100644 --- a/_overviews/scala3-book/types-dependent-function.md +++ b/_overviews/scala3-book/types-dependent-function.md @@ -136,8 +136,8 @@ type Prog = (n: NumsDSL) ?=> n.Num => n.Num def derivative(input: Prog): Double = ... // notice how we do not need to mention Nums in the examples below? -derive { x => const(1.0) + x } -derive { x => x * x + const(2.0) } +derivative { x => const(1.0) + x } +derivative { x => x * x + const(2.0) } // ... ``` From 0d7e1eaa0c8c175ce2d99ea4b015017f817d0ebd Mon Sep 17 00:00:00 2001 From: Hanns Holger Rutz Date: Wed, 19 May 2021 00:14:47 +0200 Subject: [PATCH 0240/1870] Update domain-modeling-fp.md --- _overviews/scala3-book/domain-modeling-fp.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/_overviews/scala3-book/domain-modeling-fp.md b/_overviews/scala3-book/domain-modeling-fp.md index 461932f7e2..4d42dc6abb 100644 --- a/_overviews/scala3-book/domain-modeling-fp.md +++ b/_overviews/scala3-book/domain-modeling-fp.md @@ -27,7 +27,7 @@ The concept is similar to numerical algebra. When you think about whole numbers whose values are greater than or equal to zero, you have a *set* of possible values that looks like this: ```` -0, 1, 2 ... Int.MaxInt +0, 1, 2 ... Int.MaxValue ```` Ignoring the division of whole numbers, the possible *operations* on those values are: From d173e5ae3bf6c57c7d5043fa6a0e92ffbeddcf00 Mon Sep 17 00:00:00 2001 From: Hanns Holger Rutz Date: Tue, 18 May 2021 23:53:44 +0200 Subject: [PATCH 0241/1870] Update control-structures.md --- _overviews/scala3-book/control-structures.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/_overviews/scala3-book/control-structures.md b/_overviews/scala3-book/control-structures.md index 7fd0ce3147..a1fd727a3d 100644 --- a/_overviews/scala3-book/control-structures.md +++ b/_overviews/scala3-book/control-structures.md @@ -144,7 +144,7 @@ scala> for i <- ints do println(i) 3 ```` -When you need a multiline block of code following the `if` condition, use either of these approaches: +When you need a multiline block of code following the `for` generator, use either of these approaches: ```scala // option 1 From f009580961b0b617f609741b57fd7cfc7874cf6a Mon Sep 17 00:00:00 2001 From: Fernando Racca Date: Thu, 20 May 2021 14:56:30 +0100 Subject: [PATCH 0242/1870] Update _sass/vendors/neat/settings/_grid.scss tested on 2 monitor resolutions. it does make better use of the screen, although still leaves some substantial amount of empty space on the main doc pages. perhaps this could be refined further in a subsequent pr Co-authored-by: Jonathan --- _sass/vendors/neat/settings/_grid.scss | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/_sass/vendors/neat/settings/_grid.scss b/_sass/vendors/neat/settings/_grid.scss index 5f4088637b..d2c3639ff8 100755 --- a/_sass/vendors/neat/settings/_grid.scss +++ b/_sass/vendors/neat/settings/_grid.scss @@ -22,7 +22,7 @@ $grid-columns: 12 !default; /// /// @type Number (Unit) /// -$max-width: 2048px!default; +$max-width: 1280px!default; /// When set to true, it sets the box-sizing property of all elements to `border-box`. Set with a `!global` flag. /// From 4a69035b42a1db53ee789f7727e942967b4d87b2 Mon Sep 17 00:00:00 2001 From: Daryl Odnert Date: Thu, 20 May 2021 21:07:39 -0700 Subject: [PATCH 0243/1870] Correct spelling: Abstraction --- scala3/new-in-scala3.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scala3/new-in-scala3.md b/scala3/new-in-scala3.md index ecbc2c20f1..2cb21e21ed 100644 --- a/scala3/new-in-scala3.md +++ b/scala3/new-in-scala3.md @@ -40,7 +40,7 @@ and focuses on **intent** rather than **mechanism**. Instead of offering one very powerful feature, Scala 3 offers multiple tailored language features, allowing programmers to directly express their intent: -- **Abtracting over contextual information**. [Using clauses][contextual-using] allow programmers to abstract over information that is available in the calling context and should be passed implicitly. As an improvement over Scala 2 implicits, using clauses can be specified by type, freeing function signatures from term variable names that are never explicitly referred to. +- **Abstracting over contextual information**. [Using clauses][contextual-using] allow programmers to abstract over information that is available in the calling context and should be passed implicitly. As an improvement over Scala 2 implicits, using clauses can be specified by type, freeing function signatures from term variable names that are never explicitly referred to. - **Providing Type-class instances**. [Given instances][contextual-givens] allow programmers to define the _canonical value_ of a certain type. This makes programming with type-classes more straightforward without leaking implementation details. From 94c7b667070a01d50da54443175ddaf5f06113d7 Mon Sep 17 00:00:00 2001 From: Will Sargent Date: Thu, 20 May 2021 20:36:56 -0700 Subject: [PATCH 0244/1870] emmit --- _overviews/scala3-macros/tutorial/compiletime.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/_overviews/scala3-macros/tutorial/compiletime.md b/_overviews/scala3-macros/tutorial/compiletime.md index ad7ba26176..7914230ddb 100644 --- a/_overviews/scala3-macros/tutorial/compiletime.md +++ b/_overviews/scala3-macros/tutorial/compiletime.md @@ -12,7 +12,7 @@ These operation do cover some common use cases of macros without you needing to ## Reporting -It is possible to emmit error messages when inlining code. +It is possible to emit error messages when inlining code. ```scala inline def doSomething(inline mode: Boolean): Unit = From 76a83ba4a58fe742af58dafee05cf95efadaf299 Mon Sep 17 00:00:00 2001 From: Jamie Thompson Date: Fri, 21 May 2021 11:17:25 +0200 Subject: [PATCH 0245/1870] Update compatibility-classpath.md update for Scala 3.0.0 and 2.13.6 releases --- .../scala3-migration/compatibility-classpath.md | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/_overviews/scala3-migration/compatibility-classpath.md b/_overviews/scala3-migration/compatibility-classpath.md index 35448fd9e2..734a18d8a7 100644 --- a/_overviews/scala3-migration/compatibility-classpath.md +++ b/_overviews/scala3-migration/compatibility-classpath.md @@ -28,11 +28,11 @@ As an sbt build it can be illustrated by (sbt 1.5.0 or higher is required): ```scala lazy val foo = project.in(file("foo")) - .settings(scalaVersion := "3.0.0-RC3") + .settings(scalaVersion := "3.0.0") .dependsOn(bar) lazy val bar = project.in(file("bar")) - .settings(scalaVersion := "2.13.5) + .settings(scalaVersion := "2.13.6) ``` Or, in case bar is a published Scala 2.13 library, we can have: @@ -40,7 +40,7 @@ Or, in case bar is a published Scala 2.13 library, we can have: ```scala lazy val foo = project.in(file("foo")) .settings( - scalaVersion := "3.0.0-RC3", + scalaVersion := "3.0.0", libraryDependencies += ("org.bar" %% "bar" % "1.0.0").cross(CrossVersion.for3Use2_13) ) ``` @@ -56,7 +56,7 @@ Let's note that the standard library is automatically provided by the build tool ## The Scala 2.13 TASTy Reader -The second piece of good news is that the Scala 2.13 TASTy reader, which enables consuming Scala 3 libraries has been shipped into Scala 2.13.5. +The second piece of good news is that the Scala 2.13 TASTy reader, which enables consuming Scala 3 libraries has been shipped since Scala 2.13.4. > The TASTy reader is very new. That's why it is only available under the `-Ytasty-reader` flag. @@ -99,13 +99,13 @@ As an sbt build it can be illustrated by: ```scala lazy val foo = project.in.file("foo") .settings( - scalaVersion := "2.13.5", + scalaVersion := "2.13.6", scalacOptions += "-Ytasty-reader" ) .dependsOn(bar) lazy val bar = project.in(file("bar")) - .settings(scalaVersion := "3.0.0-RC3") + .settings(scalaVersion := "3.0.0") ``` Or, in case `bar` is a published Scala 3 library: @@ -113,7 +113,7 @@ Or, in case `bar` is a published Scala 3 library: ```scala lazy val foo = project.in.file("foo") .settings( - scalaVersion := "3.0.0-RC3", + scalaVersion := "3.0.0", scalacOptions += "-Ytasty-reader", libraryDependencies += ("org.bar" %% "bar" % "1.0.0").cross(CrossVersion.for2_13Use3) ) From f53883035f9ea850dd2475213277e5d71de30d71 Mon Sep 17 00:00:00 2001 From: Will Sargent Date: Fri, 21 May 2021 09:46:29 -0700 Subject: [PATCH 0246/1870] Snippet won't compile without import --- _overviews/scala3-macros/tutorial/macros.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/_overviews/scala3-macros/tutorial/macros.md b/_overviews/scala3-macros/tutorial/macros.md index 0af6bc9699..be0f40d473 100644 --- a/_overviews/scala3-macros/tutorial/macros.md +++ b/_overviews/scala3-macros/tutorial/macros.md @@ -188,6 +188,8 @@ Varargs in Scala are represented with `Seq`, hence when we write a macro with a It is possible to recover each individual argument (of type `Expr[T]`) using the `scala.quoted.Varargs` extractor. ```scala +import scala.quoted.Varargs + inline def sumNow(inline nums: Int*): Int = ${ sumCode('nums) } From 07cd620a592056c9584c09bf920fd7e5f7db19a8 Mon Sep 17 00:00:00 2001 From: Jeremy Smith Date: Fri, 21 May 2021 13:15:22 -0700 Subject: [PATCH 0247/1870] Mention symbols `$` and `_` in operators.md --- _ba/tour/operators.md | 2 +- _ja/tour/operators.md | 2 +- _ru/tour/operators.md | 2 +- _tour/operators.md | 2 +- _zh-cn/tour/operators.md | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/_ba/tour/operators.md b/_ba/tour/operators.md index e16e338132..f1e8f3da07 100644 --- a/_ba/tour/operators.md +++ b/_ba/tour/operators.md @@ -71,7 +71,7 @@ Kada izraz koristi više operatora, operatori se primjenjuju bazirano na priorit & ^ | -(sva slova) +(sva slova, $, _) ``` Ovo se odnosi na metode koje definišete. Npr, sljedeći izraz: ``` diff --git a/_ja/tour/operators.md b/_ja/tour/operators.md index 0b13e639bd..7df5800aa1 100644 --- a/_ja/tour/operators.md +++ b/_ja/tour/operators.md @@ -73,7 +73,7 @@ def xor(x: MyBool, y: MyBool) = (x or y) and not(x and y) & ^ | -(全ての文字) +(全ての文字, $, _) ``` これはあなたが定義した関数にも適用できます。 たとえば、以下の式 diff --git a/_ru/tour/operators.md b/_ru/tour/operators.md index b80bb5b616..09ea35ea76 100644 --- a/_ru/tour/operators.md +++ b/_ru/tour/operators.md @@ -68,7 +68,7 @@ def xor(x: MyBool, y: MyBool) = (x or y) and not(x and y) & ^ | -(буквы) +(буквы, $, _) ``` Такой приоритет распространяется на любые функции, которые вы задаете. Например, следующее выражение: ``` diff --git a/_tour/operators.md b/_tour/operators.md index 38fd1a426c..651c34ea4d 100644 --- a/_tour/operators.md +++ b/_tour/operators.md @@ -65,7 +65,7 @@ When an expression uses multiple operators, the operators are evaluated based on & ^ | -(all letters) +(all letters, $, _) ``` This applies to functions you define. For example, the following expression: ``` diff --git a/_zh-cn/tour/operators.md b/_zh-cn/tour/operators.md index 5c415752fa..9bca79a928 100644 --- a/_zh-cn/tour/operators.md +++ b/_zh-cn/tour/operators.md @@ -65,7 +65,7 @@ def xor(x: MyBool, y: MyBool) = (x or y) and not(x and y) & ^ | -(all letters) +(all letters, $, _) ``` 这也适用于你自定义的方法。 例如,以下表达式: ``` From 8f45e431922f18d0ff5ce7eeba54356877374458 Mon Sep 17 00:00:00 2001 From: Dawid Kubicki Date: Fri, 21 May 2021 22:36:02 +0200 Subject: [PATCH 0248/1870] Add missing double quotes --- _overviews/scala3-migration/compatibility-classpath.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/_overviews/scala3-migration/compatibility-classpath.md b/_overviews/scala3-migration/compatibility-classpath.md index 734a18d8a7..e9d71d65ab 100644 --- a/_overviews/scala3-migration/compatibility-classpath.md +++ b/_overviews/scala3-migration/compatibility-classpath.md @@ -32,7 +32,7 @@ lazy val foo = project.in(file("foo")) .dependsOn(bar) lazy val bar = project.in(file("bar")) - .settings(scalaVersion := "2.13.6) + .settings(scalaVersion := "2.13.6") ``` Or, in case bar is a published Scala 2.13 library, we can have: From b97e0eced01ae0380f45787e509b64b69ddc6b66 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rapha=C3=ABl=20Fromentin?= <42907886+Iltotore@users.noreply.github.com> Date: Sat, 22 May 2021 14:08:16 +0200 Subject: [PATCH 0249/1870] typo: Fix "unkown" to "unknown" --- _overviews/scala3-macros/tutorial/inline.md | 26 ++++++++++----------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/_overviews/scala3-macros/tutorial/inline.md b/_overviews/scala3-macros/tutorial/inline.md index 3b28f97414..e28ba66a64 100644 --- a/_overviews/scala3-macros/tutorial/inline.md +++ b/_overviews/scala3-macros/tutorial/inline.md @@ -286,7 +286,7 @@ x2 * 1.0 In contrast, let us imagine we do not know the value of `n`: ```scala -power(2, unkownNumber) +power(2, unknownNumber) ``` Driven by the inline annotation on the parameter, the compiler will try to unroll the recursion. But without any success, since the parameter is not statically known. @@ -297,22 +297,22 @@ But without any success, since the parameter is not statically known. ```scala // first inlines as val x = 2 -if (unkownNumber == 0) 1.0 -else if (unkownNumber % 2 == 1) x * power(x, unkownNumber - 1) -else power(x * x, unkownNumber / 2) +if (unknownNumber == 0) 1.0 +else if (unknownNumber % 2 == 1) x * power(x, unknownNumber - 1) +else power(x * x, unknownNumber / 2) // then inlined as val x = 2 -if (unkownNumber == 0) 1.0 -else if (unkownNumber % 2 == 1) x * { - if (unkownNumber - 1 == 0) 1.0 - else if ((unkownNumber - 1) % 2 == 1) x2 * power(x2, unkownNumber - 1 - 1) - else power(x2 * x2, (unkownNumber - 1) / 2) +if (unknownNumber == 0) 1.0 +else if (unknownNumber % 2 == 1) x * { + if (unknownNumber - 1 == 0) 1.0 + else if ((unknownNumber - 1) % 2 == 1) x2 * power(x2, unknownNumber - 1 - 1) + else power(x2 * x2, (unknownNumber - 1) / 2) } else { val x2 = x * x - if (unkownNumber / 2 == 0) 1.0 - else if ((unkownNumber / 2) % 2 == 1) x2 * power(x2, unkownNumber / 2 - 1) - else power(x2 * x2, unkownNumber / 2 / 2) + if (unknownNumber / 2 == 0) 1.0 + else if ((unknownNumber / 2) % 2 == 1) x2 * power(x2, unknownNumber / 2 - 1) + else power(x2 * x2, unknownNumber / 2 / 2) } // Oops this will never finish compiling ... @@ -331,7 +331,7 @@ inline def power(x: Double, inline n: Int): Double = ```scala power(2, 2) // Ok -power(2, unkownNumber) // error +power(2, unknownNumber) // error ``` We will come back to this example later and see how we can get more control on how code is generated. From 0599ab00c293b692ef7868cfd5e3e430b32146e3 Mon Sep 17 00:00:00 2001 From: Will Sargent Date: Sun, 23 May 2021 10:11:15 -0700 Subject: [PATCH 0250/1870] One does not simply walk into Mordor --- _overviews/scala3-macros/tutorial/quotes.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/_overviews/scala3-macros/tutorial/quotes.md b/_overviews/scala3-macros/tutorial/quotes.md index da92bcec54..fe99cb4260 100644 --- a/_overviews/scala3-macros/tutorial/quotes.md +++ b/_overviews/scala3-macros/tutorial/quotes.md @@ -25,7 +25,7 @@ Due to some technical considerations we only allow it directly within `inline` d It is possible to write a quote within a quote, but usually when we write macros we do not encounter such code. ## Level consistency -One cannot simple write any arbitrary code within quotes and within splices. +One cannot simply write any arbitrary code within quotes and within splices. A part of the program will live at compile-time and the other will live at runtime. Consider the following ill-constructed code. @@ -45,7 +45,7 @@ def myBadCounter2(using Quotes): Expr[Int] = '{ ${ x += 1; 'x } } ``` -Clearly, this should work as the variable does not exist yet. +Clearly, this should not work as the variable does not exist yet. To make sure you can only write programs that do not contain these kinds of problems we restrict the set of references to variable and other definitions. We introduce _levels_ as a count of the number of quotes minus the number of splices surrounding an expression or definition. From 9f3869dcba26faf125cc6358946678c904e6f168 Mon Sep 17 00:00:00 2001 From: Dongxu Wang Date: Sat, 6 Feb 2021 06:53:59 +0800 Subject: [PATCH 0251/1870] Make the reorganized contents available for zh-cn index. --- _zh-cn/index.md | 39 +++++++++++++++++++++++++++++++++++++-- 1 file changed, 37 insertions(+), 2 deletions(-) diff --git a/_zh-cn/index.md b/_zh-cn/index.md index e6658a19af..41cd9a84a5 100644 --- a/_zh-cn/index.md +++ b/_zh-cn/index.md @@ -1,5 +1,5 @@ --- -layout: inner-page-documentation +layout: documentation title: 文档 language: zh-cn partof: documentation @@ -7,7 +7,42 @@ discourse: true # Content masthead links more-resources-label: 更多资源 -sections: + +scala3-sections: +- title: "第一步" + links: + - title: "Scala 3 中的新东西" + description: "Scala 3 现存新特性概览" + icon: "fa fa-star" + link: /scala3/new-in-scala3.html + - title: "快速开始" + description: "安装 Scala 3 并开始写些 Scala 代码" + icon: "fa fa-rocket" + link: /scala3/getting-started.html + - title: "Scala 3 书籍" + description: "一部介绍主要语言特性的线上书" + icon: "fa fa-book" + link: /scala3/book/introduction.html +- title: "更多细节" + links: + - title: "迁移指引" + description: "一份帮你从 Scala 2 迁移到 Scala 3 的指引" + icon: "fa fa-suitcase" + link: https://scalacenter.github.io/scala-3-migration-guide/ + - title: "导览" + description: "关于语言特别之处的详细导览" + icon: "fa fa-map" + link: /scala3/guides.html + - title: "API" + description: "Scala 3 各个版本的API" + icon: "fa fa-file-text" + link: https://dotty.epfl.ch/api/index.html + - title: "语言参考手册" + description: "Scala 3 语言参考手册" + icon: "fa fa-book" + link: https://dotty.epfl.ch/docs/reference/overview.html + +scala2-sections: - title: "第一步..." links: From 5f39d9063f5723c39cefd05708360e255c8d444c Mon Sep 17 00:00:00 2001 From: Dongxu Wang Date: Tue, 25 May 2021 09:04:55 +0800 Subject: [PATCH 0252/1870] Update _zh-cn/index.md Co-authored-by: Jonathan --- _zh-cn/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/_zh-cn/index.md b/_zh-cn/index.md index 41cd9a84a5..eb5e03e875 100644 --- a/_zh-cn/index.md +++ b/_zh-cn/index.md @@ -28,7 +28,7 @@ scala3-sections: - title: "迁移指引" description: "一份帮你从 Scala 2 迁移到 Scala 3 的指引" icon: "fa fa-suitcase" - link: https://scalacenter.github.io/scala-3-migration-guide/ + link: /scala3/guides/migration/compatibility-intro.html - title: "导览" description: "关于语言特别之处的详细导览" icon: "fa fa-map" From fcbadd91b49971ae06537bec640ff94c094d772a Mon Sep 17 00:00:00 2001 From: Julien Richard-Foy Date: Tue, 11 May 2021 15:16:35 +0200 Subject: [PATCH 0253/1870] Update content about MOOCs --- learn.md | 72 +++++++++++++++++++++++++++++++++++++++++++------------- 1 file changed, 56 insertions(+), 16 deletions(-) diff --git a/learn.md b/learn.md index 036bd2ddd2..44ab7305d8 100644 --- a/learn.md +++ b/learn.md @@ -11,25 +11,65 @@ There are a handful of websites where you can interactively run Scala code in yo ## Online courses from the Scala Center -The following courses are available for free. They teach you the main features of the Scala language and introduce you -to functional programming. They are published either on [Coursera](https://www.coursera.org) or [edX](https://www.edx.org). - - * [Functional Programming in Scala Specialization](https://www.coursera.org/specializations/scala). - The Specialization provides a hands-on introduction to functional programming using Scala. You can access the courses - material and exercises by either signing up for the specialization or auditing the courses individually. The - specialization has the following courses. - * [Functional Programming Principles in Scala](https://www.coursera.org/learn/progfun1), - * [Functional Program Design in Scala](https://www.coursera.org/learn/progfun2), - * [Parallel programming](https://www.coursera.org/learn/parprog1), - * [Big Data Analysis with Scala and Spark](https://www.coursera.org/learn/scala-spark-big-data), - * [Functional Programming in Scala Capstone](https://www.coursera.org/learn/scala-capstone), - * [Programming Reactive Systems](https://www.coursera.org/learn/scala-reactive) (also available on [edX](https://www.edx.org/course/programming-reactive-systems)). - -Note : On Coursera and edX, there is a paid version available. The only difference with the free version is that -the paid version delivers a certificate of completion. Learn more about +The following online courses provide two main paths to learn Scala. The +fast path consists of taking the course [Effective Programming in Scala], +otherwise you can take the full [Scala Specialization], which is made of +four courses and a capstone project. + +All the courses are available for free. Optionally, a subscription gives +you access to a certificate of completion that attests your accomplishments. +Learn more about [Coursera certificates](https://learner.coursera.help/hc/en-us/articles/209819053-Get-a-Course-Certificate) or [edX certificates](https://support.edx.org/hc/en-us/categories/115002269627-Certificates). +### Effective Programming in Scala + +[Effective Programming in Scala] teaches non-Scala programmers everything +they need to be ready to work in Scala. At the end of this hands-on course, +you will know how to achieve common programming tasks in Scala (e.g., +modeling business domains, implementing business logic, designing large +systems made of components, handling errors, manipulating data, running +concurrent tasks in parallel, testing your code). You can learn more about +this course in the following video: + +
+ +
+ +After taking this course, you might be interested in growing further your +skills in specific areas by taking the courses [Parallel Programming], +[Big Data Analysis with Scala and Spark], or [Programming Reactive Systems]. + +### Scala Specialization + +The [Scala Specialization] provides a hands-on introduction to functional programming using Scala. You can access the courses +material and exercises by either signing up for the specialization or auditing the courses individually. The + specialization has the following courses. +* [Functional Programming Principles in Scala], +* [Functional Program Design in Scala], +* [Parallel programming], +* [Big Data Analysis with Scala and Spark], +* [Functional Programming in Scala Capstone]. + +These courses provide a deep understanding of the Scala language itself, +and they also dive into more specific topics such as parallel programming, +and Spark. + +### Programming Reactive Systems + +[Programming Reactive Systems] (also available on [edX](https://www.edx.org/course/scala-akka-reactive)) +teaches how to write responsive, scalable, and resilient systems with the +library Akka. + +[Scala Specialization]: https://www.coursera.org/specializations/scala +[Effective Programming in Scala]: https://www.coursera.org/learn/effective-scala +[Functional Programming Principles in Scala]: https://www.coursera.org/learn/progfun1 +[Functional Program Design in Scala]: https://www.coursera.org/learn/progfun2 +[Parallel programming]: https://www.coursera.org/learn/parprog1 +[Big Data Analysis with Scala and Spark]: https://www.coursera.org/learn/scala-spark-big-data +[Functional Programming in Scala Capstone]: https://www.coursera.org/learn/scala-capstone +[Programming Reactive Systems]: https://www.coursera.org/learn/scala-akka-reactive + ## Scala Exercises [Scala Exercises](https://www.scala-exercises.org/) is a series of lessons and exercises created by [47 Degrees](https://www.47deg.com/). It's a great way to get a brief introduction to Scala while testing your knowledge along the way. From 56b7061c5a33e714783d0bb25eae4dc888285656 Mon Sep 17 00:00:00 2001 From: Julien Richard-Foy Date: Tue, 11 May 2021 15:38:06 +0200 Subject: [PATCH 0254/1870] Mention the Scala 2 versions of the courses --- learn.md | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/learn.md b/learn.md index 44ab7305d8..edff7d303f 100644 --- a/learn.md +++ b/learn.md @@ -61,6 +61,16 @@ and Spark. teaches how to write responsive, scalable, and resilient systems with the library Akka. +### Scala 2 Courses + +The above courses use Scala 3 (except the Spark courses). If needed, you can find +the (legacy) Scala 2 version of our courses here: + +- [Functional Programming Principles in Scala (Scala 2 version)](https://www.coursera.org/learn/scala2-functional-programming) +- [Functional Program Design (Scala 2 version)](https://www.coursera.org/learn/scala2-functional-program-design) +- [Parallel Programming (Scala 2 version)](https://www.coursera.org/learn/scala2-parallel-programming) +- [Programming Reactive Systems (Scala 2 version)](https://www.coursera.org/learn/scala2-akka-reactive) + [Scala Specialization]: https://www.coursera.org/specializations/scala [Effective Programming in Scala]: https://www.coursera.org/learn/effective-scala [Functional Programming Principles in Scala]: https://www.coursera.org/learn/progfun1 From 69143166f1e26522f8965ec461d225f7fed517e8 Mon Sep 17 00:00:00 2001 From: Andrzej Ratajczak Date: Tue, 11 May 2021 14:49:27 +0200 Subject: [PATCH 0255/1870] Add scaladoc docs --- index.md | 4 + .../images/scala3/scaladoc/blog-post.png | Bin 0 -> 218246 bytes resources/images/scala3/scaladoc/inkuire.gif | Bin 0 -> 994604 bytes .../scala3/scaladoc/snippet-compiler1.gif | Bin 0 -> 22596 bytes .../scala3/scaladoc/snippet-compiler2.gif | Bin 0 -> 23187 bytes .../images/scala3/scaladoc/social-links.png | Bin 0 -> 3352 bytes .../images/scala3/scaladoc/static-site.png | Bin 0 -> 164524 bytes scala3/index.md | 4 + scala3/scaladoc.md | 71 ++++++++++++++++++ 9 files changed, 79 insertions(+) create mode 100644 resources/images/scala3/scaladoc/blog-post.png create mode 100644 resources/images/scala3/scaladoc/inkuire.gif create mode 100644 resources/images/scala3/scaladoc/snippet-compiler1.gif create mode 100644 resources/images/scala3/scaladoc/snippet-compiler2.gif create mode 100644 resources/images/scala3/scaladoc/social-links.png create mode 100644 resources/images/scala3/scaladoc/static-site.png create mode 100644 scala3/scaladoc.md diff --git a/index.md b/index.md index 0aa20d401f..3764d39dea 100644 --- a/index.md +++ b/index.md @@ -40,6 +40,10 @@ scala3-sections: description: "The Scala 3 language reference." icon: "fa fa-book" link: https://dotty.epfl.ch/docs/reference/overview.html + - title: "All new Scaladoc for Scala 3" + description: "Highlights of new features for Scaladoc" + icon: "fa fa-star" + link: /scala3/scaladoc.html scala2-sections: - title: "First Steps..." diff --git a/resources/images/scala3/scaladoc/blog-post.png b/resources/images/scala3/scaladoc/blog-post.png new file mode 100644 index 0000000000000000000000000000000000000000..f8db0483d2561b06328ba3a81f903828d9572768 GIT binary patch literal 218246 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 *UU=kp1Mx+;O2YTP^u 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 literal 0 HcmV?d00001 diff --git a/resources/images/scala3/scaladoc/inkuire.gif b/resources/images/scala3/scaladoc/inkuire.gif new file mode 100644 index 0000000000000000000000000000000000000000..3cd999b375164aafb543d9ce37e1f265865eb01f GIT binary patch literal 994604 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

siP&Yb3RrUR$KVN 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 ^%+9&qYaLXE}*Dwuu#$kP`b4J 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

{;ez6z-23C^+9<_eYt>!01wG8 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 ar*bG!L@On+>Q$@UG6`{+MXA2 zVs`>hC(gfH`kp1nioFz(^R_vw0+D$~&khv4Eb!sy(7iN8_Z~CKk=VcklK7W<-#N`i zp2)nZ>Hhlk#kKt~{I9X&F5tND&i<_rM_U%Bf5*PapwLhM{hWIJXd}`h5_4T(3;>g; zJbnG&j}OPkkwRe(-QS{;|ALudJQL!4Y|N+25=MlD5xb#EJgmF|Y%NT7O`{6=Tv`nc z?NE&wh7>=!S$2+Lp;nwWoPu5!&ZvP(lhQ8fGMtFii^hyg461bzgGYol2n`}mFg(a0 zIpeB|WfSpExaP1-TBC``7(8-9*Txubg9g)zXc`U-sc8ld3!wq%CwMwV3>0kH!

i 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 literal 0 HcmV?d00001 diff --git a/resources/images/scala3/scaladoc/snippet-compiler1.gif b/resources/images/scala3/scaladoc/snippet-compiler1.gif new file mode 100644 index 0000000000000000000000000000000000000000..d3573e395fd92f13e5f3c7b58f249b6c5d969cbf GIT binary patch literal 22596 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 CgKH1~ literal 0 HcmV?d00001 diff --git a/resources/images/scala3/scaladoc/snippet-compiler2.gif b/resources/images/scala3/scaladoc/snippet-compiler2.gif new file mode 100644 index 0000000000000000000000000000000000000000..2074c74ebbdeaf23ad64464750f259813441347c GIT binary patch literal 23187 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 OS~N?!G;n~Ew>1D_GUuiM literal 0 HcmV?d00001 diff --git a/resources/images/scala3/scaladoc/social-links.png b/resources/images/scala3/scaladoc/social-links.png new file mode 100644 index 0000000000000000000000000000000000000000..4c20568c7c39238384227a2e3667401ca1acaba2 GIT binary patch literal 3352 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 PX`?}a&b8z7Dnp8p7S!=cH4> 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 m0XQZDm2yx>0gcd5oA>j-cM-!eYnCAJO Date: Thu, 20 May 2021 13:01:07 +0200 Subject: [PATCH 0256/1870] Add Scala3 scaladoc migration page for settings compatibility --- _overviews/scala3-migration/options-intro.md | 2 + _overviews/scala3-migration/options-new.md | 2 +- _overviews/scala3-migration/plugin-intro.md | 2 +- .../scala3-migration/plugin-kind-projector.md | 2 +- .../scaladoc-settings-compatibility.md | 55 +++++++++++++++++++ 5 files changed, 60 insertions(+), 3 deletions(-) create mode 100644 _overviews/scala3-migration/scaladoc-settings-compatibility.md diff --git a/_overviews/scala3-migration/options-intro.md b/_overviews/scala3-migration/options-intro.md index ad6b2dc29b..5dd85a3e16 100644 --- a/_overviews/scala3-migration/options-intro.md +++ b/_overviews/scala3-migration/options-intro.md @@ -17,3 +17,5 @@ To do so you can refer to the [Lookup Table](options-lookup.html). > It just prints a warning and ignores the option. You can also discover the new Scala 3 compiler options, that have no equivalent in Scala 2.13, in the [New Compiler Options](options-new.html) page. + +For scaladoc settings reference and their compatibility with Scala2 scaladoc, read [Scaladoc settings compatibility between Scala2 and Scala3](scaladoc-settings-compatibility.html) page. diff --git a/_overviews/scala3-migration/options-new.md b/_overviews/scala3-migration/options-new.md index 980f4c2712..63ee5e15ff 100644 --- a/_overviews/scala3-migration/options-new.md +++ b/_overviews/scala3-migration/options-new.md @@ -4,7 +4,7 @@ type: section description: This chapter lists all the new compiler options in Scala 3 num: 23 previous-page: options-lookup -next-page: plugin-intro +next-page: scaladoc-settings-compatibility --- The current page only contains the options that were added in Scala 3.0.x. diff --git a/_overviews/scala3-migration/plugin-intro.md b/_overviews/scala3-migration/plugin-intro.md index 8662c8da93..ea172d69cc 100644 --- a/_overviews/scala3-migration/plugin-intro.md +++ b/_overviews/scala3-migration/plugin-intro.md @@ -2,7 +2,7 @@ title: Compiler Plugins type: chapter description: This section shows how to migrate from using Scala 2 compiler plugins -num: 24 +num: 25 previous-page: options-new next-page: plugin-kind-projector --- diff --git a/_overviews/scala3-migration/plugin-kind-projector.md b/_overviews/scala3-migration/plugin-kind-projector.md index c60b33b7b0..28493a8d01 100644 --- a/_overviews/scala3-migration/plugin-kind-projector.md +++ b/_overviews/scala3-migration/plugin-kind-projector.md @@ -2,7 +2,7 @@ title: Kind Projector Migration type: section description: This section shows how to migrate from the kind-projector plugin to Scala 3 kind-projector syntax -num: 25 +num: 26 previous-page: plugin-intro next-page: --- diff --git a/_overviews/scala3-migration/scaladoc-settings-compatibility.md b/_overviews/scala3-migration/scaladoc-settings-compatibility.md new file mode 100644 index 0000000000..368673029e --- /dev/null +++ b/_overviews/scala3-migration/scaladoc-settings-compatibility.md @@ -0,0 +1,55 @@ +--- +title: Scaladoc settings compatibility between Scala2 and Scala3 +type: section +description: This chapter lists all options from Scala2 and Scala3 scaladocs and explain relations between them. +num: 24 +previous-page: options-new +next-page: plugin-intro +--- + +The current page is stating status of scaladoc settings. The related Github issue can be found here for [discussion](https://github.com/lampepfl/dotty/issues/11907) + + +| Scala2 | Scala3 | Description | Comment | Is implemented? +| ------------- | ------------- | --- | --- | --- | +| -doc-format | _ | Selects in which format documentation is rendered. | Actually old scaladoc supports only html, so it is in some way coherent with new scaladoc, which provides only html | | +| -doc-title | -project | The overall name of the Scaladoc site | Aliased in [#11965](https://github.com/lampepfl/dotty/issues/11965) | | +| -doc-version | -project-version | | Aliased in [#11965](https://github.com/lampepfl/dotty/issues/11965) | | +| -doc-footer | _ | A footer on every Scaladoc page, by default the EPFL/Lightbend copyright notice. Can be overridden with a custom footer. | Fixed by [#11965](https://github.com/lampepfl/dotty/issues/11965) | | +| -doc-no-compile | _ | A directory containing sources which should be parsed for docstrings without compiling (e.g. AnyRef.scala) | We don't need this as we have completely different approach to that issue using -Ydocument-synthetic-types flag for synthetic types | | +| -doc-source-url | -source-links | A URL pattern used to link to the source file, with some variables supported... | Scala3 implementation provides richer syntax. | | +| -doc-external-doc | -external-mappings | Comma-separated list of classpath_entry_path#doc_URL pairs describing external dependencies. | Scala3 implementation provides richer syntax. | | +| -jdk-api-doc-base | -external-mappings | URL used to link Java API references. | You can specify jdk via -external-mappings since they are generalized setting. | | +| -doc-generator | _ | The fully qualified name of a doclet class, which will be used to generate the documentation | We don't need this in Scala3 | | +| -doc-root-content | -doc-root-content | The file from which the root package documentation should be imported. | | | +| -implicits | _ | | We don't need this in Scala3 | | +| -implicits-debug | _ | | We don't need this in Scala3 | | +| -implicits-show-all | _ | | We don't need this in Scala3 | | +| -implicits-sound-shadowing | _ | | We don't need this in Scala3 | | +| -implicits-hide | _ | | We don't need this in Scala3 | | +| -diagrams | _ | | We don't need this in Scala3? | | +| -diagrams-debug | _ | | We don't need this in Scala3? | | +| -diagrams-dot-path | _ | | We don't need this in Scala3? | | +| -diagrams-max-classes | _ | | We don't need this in Scala3? | | +| -diagrams-max-implicits | _ | | We don't need this in Scala3? | | +| -diagrams-dot-timeout | _ | | We don't need this in Scala3? | | +| -diagrams-dot-restart | _ | | We don't need this in Scala3? | | +| -author | _ | | Fixed by [#11965](https://github.com/lampepfl/dotty/issues/11965) | | +| -raw-output | _ | | We don't need this in Scala3 | | +| -no-prefixes | _ | | We don't need this in Scala3 | | +| -skip-packages | -skip-packages | | | | +| -no-link-warnings | _ | | | | +| -expand-all-types | _ | | Setting should be removed from Scala2 scaladoc | | +| -groups | _ | | ~~Implement grouping as it is in Scala3. #11909~~ Actually we support grouping, e. g. [Future](https://scala3doc.virtuslab.com/pr-master/scala3/api/scala/concurrent/Future.html). Since one is using `@group` to actually group his methods, we should consider whether this flag is necessary. Fixed by [#11965](https://github.com/lampepfl/dotty/issues/11965) | | +| -no-java-comments | _ | | We don't need this in Scala3 | | +| -doc-canonical-base-url | _ | A base URL to use as prefix and add `canonical` URLs to all pages. The canonical URL may be used by search engines to choose the URL that you want people to see in search results. If unset no canonical URLs are generated. | Fixed by [#11965](https://github.com/lampepfl/dotty/issues/11965) | | +| -private | _ | Show all types and members. Unless specified, show only public and protected types and members. | Fixed by [#11965](https://github.com/lampepfl/dotty/issues/11965) | | +| _ | -siteroot | | We don't migrate it | | +| _ | -project-logo | | Should we migrate it? | | +| _ | -comment-syntax | | We don't migrate it | | +| _ | -revision | | Should we migrate it? | | +| _ | -social-links | | Should we migrate it? | | +| _ | -skip-by-id | | We don't migrate it | | +| _ | -skip-by-regex | | We don't migrate it | | +| _ | -snippet-compiler-args | | We don't migrate it | | +| _ | -Ydocument-synthetic-types | Documents intrinsic types e. g. Any, Nothing. Setting is useful only for stdlib | | | From caa385de3f3557067c413701dbd0a2981c9a4db8 Mon Sep 17 00:00:00 2001 From: Jason Yeo Date: Tue, 25 May 2021 11:31:08 +0800 Subject: [PATCH 0257/1870] Should say "to the end" instead of "and the end" Just fixing a minor error in the collections doc. --- _overviews/collections-2.13/performance-characteristics.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/_overviews/collections-2.13/performance-characteristics.md b/_overviews/collections-2.13/performance-characteristics.md index 7b1a9fa949..9d408add88 100644 --- a/_overviews/collections-2.13/performance-characteristics.md +++ b/_overviews/collections-2.13/performance-characteristics.md @@ -74,7 +74,7 @@ The first table treats sequence types--both immutable and mutable--with the foll | **apply** | Indexing. | | **update** | Functional update (with `updated`) for immutable sequences, side-effecting update (with `update` for mutable sequences). | | **prepend**| Adding an element to the front of the sequence. For immutable sequences, this produces a new sequence. For mutable sequences it modifies the existing sequence. | -| **append** | Adding an element and the end of the sequence. For immutable sequences, this produces a new sequence. For mutable sequences it modifies the existing sequence. | +| **append** | Adding an element to the end of the sequence. For immutable sequences, this produces a new sequence. For mutable sequences it modifies the existing sequence. | | **insert** | Inserting an element at an arbitrary position in the sequence. This is only supported directly for mutable sequences. | The second table treats mutable and immutable sets and maps with the following operations: From 279d03a98b3faa8c0c0f432dd9ab32a33cfe1790 Mon Sep 17 00:00:00 2001 From: vincenzobaz Date: Fri, 7 May 2021 11:47:51 +0200 Subject: [PATCH 0258/1870] Add more information to reflection guide --- .../scala3-macros/tutorial/reflection.md | 77 +++++++++++++++++-- 1 file changed, 72 insertions(+), 5 deletions(-) diff --git a/_overviews/scala3-macros/tutorial/reflection.md b/_overviews/scala3-macros/tutorial/reflection.md index f5d9132dc3..d8fff5534b 100644 --- a/_overviews/scala3-macros/tutorial/reflection.md +++ b/_overviews/scala3-macros/tutorial/reflection.md @@ -9,6 +9,8 @@ previous-page: quotes The reflection API provides a more complex and comprehensive view on the structure of the code. It provides a view on the *Typed Abstract Syntax Trees* and their properties such as types, symbols, positions and comments. +The API can be used in macros as well as for [inspecting TASTy files][tasty inspection]. + ## How to use the API The reflection API is defined in the type `Quotes` as `reflect`. @@ -36,16 +38,35 @@ def f(x: Expr[Int])(using Quotes): Expr[Int] = This will import all the types and modules (with extension methods) of the API. -The full imported API can be found here: [Reflection](https://dotty.epfl.ch/api/scala/quoted/Quotes$reflectModule.html?query=trait%20reflectModule) +## How to navigate the API + +The full imported API can be found here: [Reflection][reflection doc]. +Unfortunately, at this stage, this automatically generated documentation is not very easy to navigate. + +The most important element on the page is the hierarchy tree which provides a syntethic overview of the subtyping relationships of +the types in the API. For each type `Type` in the tree: + + - the object `TypeMethods` contains the methods available for `Type` + - the object `TypeModule` contains some _static-ish_ methods, most notably eventual constructors (`apply/copy`) and the `unapply` method which provides the extractor(s) required for pattern matching. + - For all types `Upper` such that `Type <: Upper`, the methods defined in `UpperMethods` are available on `Type` as well. + +For example `TypeBounds`, a subtype of `TypeRepr`, represents a type tree of the form `T >: L <: U`: a type `T` which is a super type of `L` +and a subtype of `U`. In `TypeBoundsMethods` you will find the methods `low` and `hi` which allow you to access the +representations of `L` and `U`. In `TypeBoundsModule` you will find the `unapply` method which enables you to write: -For example to find what is a `Term`, we can see in the hierarchy that it is a subtype of `Statement` which is a subtype of `Tree`. -If we look into `TermMethods` we will find all the extension methods that are defined for `Term` such as `Term.tpe` which returns a `Type`. -As it is a subtype of `Tree` we can also look into the `TreeMethods` to find more methods such as `Tree.pos`. -Each type is also a module with some _static-ish_ methods, for example in the [`TypeReprModule`](https://dotty.epfl.ch/api/scala/quoted/Quotes$reflectModule$TypeReprModule.html) we can find the method `TypeRepr.of[T]` which will create an instance of `Type` containing `T`. +```scala +def f(tb: TypeBounds) = + tb match + case TypeBounds(l, u) => +``` +Remember also that `TypeBounds <: TypeRepr`, therefore all the methods defined in `TypeReprMethods` are +avaialble on `TypeBounds` values. ## Relation with Expr/Type +### Expr and Term + Expressions `Expr[T]` can be seen as wrappers around a `Term`, where `T` is the statically known type of the term. Below we use the extension method `asTerm` to transform the expression into a term. This extension method is only available after importing `quotes.reflect.asTerm`. @@ -61,6 +82,8 @@ def f(x: Expr[Int])(using Quotes): Expr[Int] = expr ``` +### Type and TypeRepr + Similarly, we can also see `Type[T]` as a wrapper over `TypeRepr`, with `T` being the statically known type. To get a `TypeRepr` we use `TypeRepr.of[X]` which expects a given `Type[X]` in scope (similar to `Type.of[X]`). We can also transform it back into a `Type[?]` using the `asType` method. @@ -75,6 +98,47 @@ def g[T: Type](using Quotes) = ... ``` +## Symbols + +The APIs of `Term` and `TypeTree` are relatively *closed* in the sense that methods produce and accept values +whose types are defined in the API. You might notice however the presence of `Symbol`s which identify definitions. + +Each `Term` or `TypeRepr` (therefore `Expr` and `Type`) have an associated symbol. +`Symbol` exposes and is used by many useful methods for example: + + - `declaredFields` and `declaredMethods` allow you to iterate on the fields and members defined inside a symbol + - `flags` allow you to check multiple properties of a symbol + - `companionObject` and `companionModule` provide a way to jump to and from the companion object/class. + - `TypeRepr.baseClasses` returns the list of symbols of classes extended by a type. + - `Symbol.pos` gives you access to the position where the symbol is defined, the source code of the definition + and even the filename where the symbol is defined. + - and many useful others that you can find in `SymbolMethods` + +### To Symbol and back + + - `TypeRepr.typeSymbol` returns the symbol of the type + - `TypeRepr.termSymbol` returns the symbol of the term associated to the type. + - `TypeRepr.memberType(symbol)` returns the `TypeRepr` of the provided symbol + - `TypeRepr.of[T].typeSymbol` is the recommended way to obtain a `Symbol` given a `Type[T]` + - `Tree.symbol` returns the symbol associated to a tree. Given that `Term <: Tree`, + `Expr.asTerm.symbol` is the best way to obtain the symbol associated to an `Expr[T]` + + - `Symbol.tree` returns the `Tree` associated to the symbol. Be extremely careful when using this + method as the tree for a symbol might not be defined. When the code associated to the symbol + is defined in a different moment than this access, if the `Yretain-trees` compilation option + is not used, then the `tree` of the symbol will not be available. Symbols originated from + Java code do not have an associated `tree`. + +## Suggestion and anti-patterns + + - Avoid using `TypeTree`s (therefore `TypeTree.of`) when you could use `TypeRepr` + - Avoid using `Symbol.tree` for the reasons mentioned [here](#symbols) and because of + the performance penalty that retrieving an entire tree could cause. + - Pattern matching is a very ergonomic approach to the API. Always have a look at + the `unapply` defined in `*Module` objects. + - `Symbol` and `Flags` offer handy predicates to know more about a definition + - `Expr.summon` is a convenient wrapper around `Implicits.search` + ## Macro API design It will be often useful to create helper methods or extractors that perform some common logic of your macros. @@ -168,3 +232,6 @@ We can make this printer the default if needed ## More *Coming soon* + +[tasty inspection]: {{ site.scala3ref }}/metaprogramming/tasty-inspect.html +[reflection doc]: https://dotty.epfl.ch/api/scala/quoted/Quotes$reflectModule.html?query=trait%20reflectModule \ No newline at end of file From 7d03ee41136079b169482266da8bfe7814db3bf2 Mon Sep 17 00:00:00 2001 From: vincenzobaz Date: Mon, 10 May 2021 09:11:46 +0200 Subject: [PATCH 0259/1870] Correct typos --- _overviews/scala3-macros/tutorial/reflection.md | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/_overviews/scala3-macros/tutorial/reflection.md b/_overviews/scala3-macros/tutorial/reflection.md index d8fff5534b..6ed59fe94c 100644 --- a/_overviews/scala3-macros/tutorial/reflection.md +++ b/_overviews/scala3-macros/tutorial/reflection.md @@ -43,16 +43,16 @@ This will import all the types and modules (with extension methods) of the API. The full imported API can be found here: [Reflection][reflection doc]. Unfortunately, at this stage, this automatically generated documentation is not very easy to navigate. -The most important element on the page is the hierarchy tree which provides a syntethic overview of the subtyping relationships of +The most important element on the page is the hierarchy tree which provides a synthetic overview of the subtyping relationships of the types in the API. For each type `Type` in the tree: - the object `TypeMethods` contains the methods available for `Type` - - the object `TypeModule` contains some _static-ish_ methods, most notably eventual constructors (`apply/copy`) and the `unapply` method which provides the extractor(s) required for pattern matching. + - the object `TypeModule` contains some _static-ish_ methods, most notably constructors (`apply/copy`) and the `unapply` method which provides the extractor(s) required for pattern matching. - For all types `Upper` such that `Type <: Upper`, the methods defined in `UpperMethods` are available on `Type` as well. For example `TypeBounds`, a subtype of `TypeRepr`, represents a type tree of the form `T >: L <: U`: a type `T` which is a super type of `L` -and a subtype of `U`. In `TypeBoundsMethods` you will find the methods `low` and `hi` which allow you to access the -representations of `L` and `U`. In `TypeBoundsModule` you will find the `unapply` method which enables you to write: +and a subtype of `U`. In `TypeBoundsMethods`, you will find the methods `low` and `hi`, which allow you to access the +representations of `L` and `U`. In `TypeBoundsModule`, you will find the `unapply` method, which allows you to write: ```scala def f(tb: TypeBounds) = @@ -104,10 +104,10 @@ The APIs of `Term` and `TypeTree` are relatively *closed* in the sense that meth whose types are defined in the API. You might notice however the presence of `Symbol`s which identify definitions. Each `Term` or `TypeRepr` (therefore `Expr` and `Type`) have an associated symbol. -`Symbol` exposes and is used by many useful methods for example: +`Symbol` exposes and is used by many useful methods. For example: - `declaredFields` and `declaredMethods` allow you to iterate on the fields and members defined inside a symbol - - `flags` allow you to check multiple properties of a symbol + - `flags` allows you to check multiple properties of a symbol - `companionObject` and `companionModule` provide a way to jump to and from the companion object/class. - `TypeRepr.baseClasses` returns the list of symbols of classes extended by a type. - `Symbol.pos` gives you access to the position where the symbol is defined, the source code of the definition @@ -123,7 +123,7 @@ Each `Term` or `TypeRepr` (therefore `Expr` and `Type`) have an associated symbo - `Tree.symbol` returns the symbol associated to a tree. Given that `Term <: Tree`, `Expr.asTerm.symbol` is the best way to obtain the symbol associated to an `Expr[T]` - - `Symbol.tree` returns the `Tree` associated to the symbol. Be extremely careful when using this + - `Symbol.tree` returns the `Tree` associated to the symbol. Be careful when using this method as the tree for a symbol might not be defined. When the code associated to the symbol is defined in a different moment than this access, if the `Yretain-trees` compilation option is not used, then the `tree` of the symbol will not be available. Symbols originated from From a20a012e59180fa7ce6dab037f7991f97c6ed635 Mon Sep 17 00:00:00 2001 From: vincenzobaz Date: Mon, 10 May 2021 11:18:27 +0200 Subject: [PATCH 0260/1870] Address review comment --- _overviews/scala3-macros/tutorial/reflection.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/_overviews/scala3-macros/tutorial/reflection.md b/_overviews/scala3-macros/tutorial/reflection.md index 6ed59fe94c..0528331843 100644 --- a/_overviews/scala3-macros/tutorial/reflection.md +++ b/_overviews/scala3-macros/tutorial/reflection.md @@ -117,7 +117,7 @@ Each `Term` or `TypeRepr` (therefore `Expr` and `Type`) have an associated symbo ### To Symbol and back - `TypeRepr.typeSymbol` returns the symbol of the type - - `TypeRepr.termSymbol` returns the symbol of the term associated to the type. + - For a singleton type, `TypeRepr.termSymbol` returns the symbol of the underlying object or value. - `TypeRepr.memberType(symbol)` returns the `TypeRepr` of the provided symbol - `TypeRepr.of[T].typeSymbol` is the recommended way to obtain a `Symbol` given a `Type[T]` - `Tree.symbol` returns the symbol associated to a tree. Given that `Term <: Tree`, From a30e9a1c6672d9d90571425cf34dd9441fba45a4 Mon Sep 17 00:00:00 2001 From: Vinz Date: Tue, 11 May 2021 17:05:52 +0200 Subject: [PATCH 0261/1870] Update _overviews/scala3-macros/tutorial/reflection.md Co-authored-by: Maxime Kjaer --- _overviews/scala3-macros/tutorial/reflection.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/_overviews/scala3-macros/tutorial/reflection.md b/_overviews/scala3-macros/tutorial/reflection.md index 0528331843..996ba1ed2c 100644 --- a/_overviews/scala3-macros/tutorial/reflection.md +++ b/_overviews/scala3-macros/tutorial/reflection.md @@ -103,7 +103,7 @@ def g[T: Type](using Quotes) = The APIs of `Term` and `TypeTree` are relatively *closed* in the sense that methods produce and accept values whose types are defined in the API. You might notice however the presence of `Symbol`s which identify definitions. -Each `Term` or `TypeRepr` (therefore `Expr` and `Type`) have an associated symbol. +Both `Term` or `TypeRepr` (therefore `Expr` and `Type`) have an associated symbol. `Symbol` exposes and is used by many useful methods. For example: - `declaredFields` and `declaredMethods` allow you to iterate on the fields and members defined inside a symbol @@ -234,4 +234,4 @@ We can make this printer the default if needed *Coming soon* [tasty inspection]: {{ site.scala3ref }}/metaprogramming/tasty-inspect.html -[reflection doc]: https://dotty.epfl.ch/api/scala/quoted/Quotes$reflectModule.html?query=trait%20reflectModule \ No newline at end of file +[reflection doc]: https://dotty.epfl.ch/api/scala/quoted/Quotes$reflectModule.html?query=trait%20reflectModule From 01a9a2b0ce4bb94302c2e653ca7488ed90b20c66 Mon Sep 17 00:00:00 2001 From: Vinz Date: Tue, 11 May 2021 17:10:23 +0200 Subject: [PATCH 0262/1870] Update _overviews/scala3-macros/tutorial/reflection.md Co-authored-by: Maxime Kjaer --- _overviews/scala3-macros/tutorial/reflection.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/_overviews/scala3-macros/tutorial/reflection.md b/_overviews/scala3-macros/tutorial/reflection.md index 996ba1ed2c..e760695134 100644 --- a/_overviews/scala3-macros/tutorial/reflection.md +++ b/_overviews/scala3-macros/tutorial/reflection.md @@ -40,7 +40,7 @@ This will import all the types and modules (with extension methods) of the API. ## How to navigate the API -The full imported API can be found here: [Reflection][reflection doc]. +The full imported API can be found in the [API documentation for `scala.quoted.Quotes.reflectModule`][reflection doc]. Unfortunately, at this stage, this automatically generated documentation is not very easy to navigate. The most important element on the page is the hierarchy tree which provides a synthetic overview of the subtyping relationships of From 6b280bd29aa23b2239c7da591d27a874c935a220 Mon Sep 17 00:00:00 2001 From: vincenzobaz Date: Tue, 11 May 2021 17:25:47 +0200 Subject: [PATCH 0263/1870] Adopt suggestions from @maximekjaer --- .../scala3-macros/tutorial/reflection.md | 23 +++++++++---------- 1 file changed, 11 insertions(+), 12 deletions(-) diff --git a/_overviews/scala3-macros/tutorial/reflection.md b/_overviews/scala3-macros/tutorial/reflection.md index e760695134..e7f3284548 100644 --- a/_overviews/scala3-macros/tutorial/reflection.md +++ b/_overviews/scala3-macros/tutorial/reflection.md @@ -44,15 +44,15 @@ The full imported API can be found in the [API documentation for `scala.quoted.Q Unfortunately, at this stage, this automatically generated documentation is not very easy to navigate. The most important element on the page is the hierarchy tree which provides a synthetic overview of the subtyping relationships of -the types in the API. For each type `Type` in the tree: +the types in the API. For each type `Foo` in the tree: - - the object `TypeMethods` contains the methods available for `Type` - - the object `TypeModule` contains some _static-ish_ methods, most notably constructors (`apply/copy`) and the `unapply` method which provides the extractor(s) required for pattern matching. - - For all types `Upper` such that `Type <: Upper`, the methods defined in `UpperMethods` are available on `Type` as well. + - the object `FooMethods` contains the methods available for `Foo` + - the object `FooModule` contains some _static-ish_ methods, most notably constructors (`apply/copy`) and the `unapply` method which provides the extractor(s) required for pattern matching. + - For all types `Upper` such that `Foo <: Upper`, the methods defined in `UpperMethods` are available on `Foo` as well. -For example `TypeBounds`, a subtype of `TypeRepr`, represents a type tree of the form `T >: L <: U`: a type `T` which is a super type of `L` -and a subtype of `U`. In `TypeBoundsMethods`, you will find the methods `low` and `hi`, which allow you to access the -representations of `L` and `U`. In `TypeBoundsModule`, you will find the `unapply` method, which allows you to write: +For example [`TypeBounds`](https://dotty.epfl.ch/api/scala/quoted/Quotes$reflectModule.html#TypeBounds-0), a subtype of `TypeRepr`, represents a type tree of the form `T >: L <: U`: a type `T` which is a super type of `L` +and a subtype of `U`. In [`TypeBoundsMethods`](https://dotty.epfl.ch/api/scala/quoted/Quotes$reflectModule$TypeBoundsMethods.html), you will find the methods `low` and `hi`, which allow you to access the +representations of `L` and `U`. In [`TypeBoundsModule`](https://dotty.epfl.ch/api/scala/quoted/Quotes$reflectModule$TypeBoundsModule.html), you will find the `unapply` method, which allows you to write: ```scala def f(tb: TypeBounds) = @@ -104,7 +104,8 @@ The APIs of `Term` and `TypeTree` are relatively *closed* in the sense that meth whose types are defined in the API. You might notice however the presence of `Symbol`s which identify definitions. Both `Term` or `TypeRepr` (therefore `Expr` and `Type`) have an associated symbol. -`Symbol` exposes and is used by many useful methods. For example: +`Symbol`s make it possible to compare two definitions using `==` to know if they are the same. +In addition `Symbol` exposes and is used by many useful methods. For example: - `declaredFields` and `declaredMethods` allow you to iterate on the fields and members defined inside a symbol - `flags` allows you to check multiple properties of a symbol @@ -112,17 +113,15 @@ Both `Term` or `TypeRepr` (therefore `Expr` and `Type`) have an associated symbo - `TypeRepr.baseClasses` returns the list of symbols of classes extended by a type. - `Symbol.pos` gives you access to the position where the symbol is defined, the source code of the definition and even the filename where the symbol is defined. - - and many useful others that you can find in `SymbolMethods` + - and many useful others that you can find in [`SymbolMethods`](https://dotty.epfl.ch/api/scala/quoted/Quotes$reflectModule$SymbolMethods.html) ### To Symbol and back - - `TypeRepr.typeSymbol` returns the symbol of the type + - `TypeRepr.typeSymbol` returns the symbol of the type represented by `TypeRepr`. The recommended way to obtain a `Symbol` given a `Type[T]` is `TypeRepr.of[T].typeSymbol` - For a singleton type, `TypeRepr.termSymbol` returns the symbol of the underlying object or value. - `TypeRepr.memberType(symbol)` returns the `TypeRepr` of the provided symbol - - `TypeRepr.of[T].typeSymbol` is the recommended way to obtain a `Symbol` given a `Type[T]` - `Tree.symbol` returns the symbol associated to a tree. Given that `Term <: Tree`, `Expr.asTerm.symbol` is the best way to obtain the symbol associated to an `Expr[T]` - - `Symbol.tree` returns the `Tree` associated to the symbol. Be careful when using this method as the tree for a symbol might not be defined. When the code associated to the symbol is defined in a different moment than this access, if the `Yretain-trees` compilation option From 37b4d27dd3a9d1677de026df59005f6bba2b64ba Mon Sep 17 00:00:00 2001 From: Vinz Date: Wed, 12 May 2021 11:43:15 +0200 Subject: [PATCH 0264/1870] Update _overviews/scala3-macros/tutorial/reflection.md Co-authored-by: Nicolas Stucki --- _overviews/scala3-macros/tutorial/reflection.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/_overviews/scala3-macros/tutorial/reflection.md b/_overviews/scala3-macros/tutorial/reflection.md index e7f3284548..704399706f 100644 --- a/_overviews/scala3-macros/tutorial/reflection.md +++ b/_overviews/scala3-macros/tutorial/reflection.md @@ -55,7 +55,7 @@ and a subtype of `U`. In [`TypeBoundsMethods`](https://dotty.epfl.ch/api/scala/q representations of `L` and `U`. In [`TypeBoundsModule`](https://dotty.epfl.ch/api/scala/quoted/Quotes$reflectModule$TypeBoundsModule.html), you will find the `unapply` method, which allows you to write: ```scala -def f(tb: TypeBounds) = +def f(tpe: TypeRepr) = tb match case TypeBounds(l, u) => ``` From 03ddf354d168f2b6cae9e406540d72524636aa7d Mon Sep 17 00:00:00 2001 From: Vinz Date: Wed, 12 May 2021 11:43:53 +0200 Subject: [PATCH 0265/1870] Update _overviews/scala3-macros/tutorial/reflection.md Co-authored-by: Nicolas Stucki --- _overviews/scala3-macros/tutorial/reflection.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/_overviews/scala3-macros/tutorial/reflection.md b/_overviews/scala3-macros/tutorial/reflection.md index 704399706f..bebb22016a 100644 --- a/_overviews/scala3-macros/tutorial/reflection.md +++ b/_overviews/scala3-macros/tutorial/reflection.md @@ -56,7 +56,7 @@ representations of `L` and `U`. In [`TypeBoundsModule`](https://dotty.epfl.ch/ap ```scala def f(tpe: TypeRepr) = - tb match + tpe match case TypeBounds(l, u) => ``` From 57149a4965efd92750380e0544a5a84e9924b4eb Mon Sep 17 00:00:00 2001 From: Vinz Date: Wed, 12 May 2021 11:44:06 +0200 Subject: [PATCH 0266/1870] Update _overviews/scala3-macros/tutorial/reflection.md Co-authored-by: Nicolas Stucki --- _overviews/scala3-macros/tutorial/reflection.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/_overviews/scala3-macros/tutorial/reflection.md b/_overviews/scala3-macros/tutorial/reflection.md index bebb22016a..66c3c02055 100644 --- a/_overviews/scala3-macros/tutorial/reflection.md +++ b/_overviews/scala3-macros/tutorial/reflection.md @@ -100,7 +100,7 @@ def g[T: Type](using Quotes) = ## Symbols -The APIs of `Term` and `TypeTree` are relatively *closed* in the sense that methods produce and accept values +The APIs of `Term` and `TypeRepr` are relatively *closed* in the sense that methods produce and accept values whose types are defined in the API. You might notice however the presence of `Symbol`s which identify definitions. Both `Term` or `TypeRepr` (therefore `Expr` and `Type`) have an associated symbol. From 32f74a9247c89a0b00d077622baea36ea4964554 Mon Sep 17 00:00:00 2001 From: Vinz Date: Wed, 12 May 2021 11:44:23 +0200 Subject: [PATCH 0267/1870] Update _overviews/scala3-macros/tutorial/reflection.md Co-authored-by: Nicolas Stucki --- _overviews/scala3-macros/tutorial/reflection.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/_overviews/scala3-macros/tutorial/reflection.md b/_overviews/scala3-macros/tutorial/reflection.md index 66c3c02055..720b53a0b8 100644 --- a/_overviews/scala3-macros/tutorial/reflection.md +++ b/_overviews/scala3-macros/tutorial/reflection.md @@ -124,7 +124,7 @@ In addition `Symbol` exposes and is used by many useful methods. For example: `Expr.asTerm.symbol` is the best way to obtain the symbol associated to an `Expr[T]` - `Symbol.tree` returns the `Tree` associated to the symbol. Be careful when using this method as the tree for a symbol might not be defined. When the code associated to the symbol - is defined in a different moment than this access, if the `Yretain-trees` compilation option + is defined in a different moment than this access, if the `-Yretain-trees` compilation option is not used, then the `tree` of the symbol will not be available. Symbols originated from Java code do not have an associated `tree`. From 3d2d0866246152307b6f0a1f7bcdff978d8e9063 Mon Sep 17 00:00:00 2001 From: vincenzobaz Date: Wed, 12 May 2021 11:50:09 +0200 Subject: [PATCH 0268/1870] Address review --- _overviews/scala3-macros/tutorial/reflection.md | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/_overviews/scala3-macros/tutorial/reflection.md b/_overviews/scala3-macros/tutorial/reflection.md index 720b53a0b8..bdae347ca3 100644 --- a/_overviews/scala3-macros/tutorial/reflection.md +++ b/_overviews/scala3-macros/tutorial/reflection.md @@ -61,7 +61,15 @@ def f(tpe: TypeRepr) = ``` Remember also that `TypeBounds <: TypeRepr`, therefore all the methods defined in `TypeReprMethods` are -avaialble on `TypeBounds` values. +available on `TypeBounds` values as in: + +```scala +def f(tpe: TypeRepr) = + tpe match + case tpe: TypeBounds => + val low = tpe.low + val hi = tpe.hi +``` ## Relation with Expr/Type From ab04fbff5549815687639201091e03a70b47c923 Mon Sep 17 00:00:00 2001 From: vincenzobaz Date: Wed, 12 May 2021 15:44:30 +0200 Subject: [PATCH 0269/1870] Develop a few points in best practices page --- _overviews/scala3-macros/best-practices.md | 96 ++++++++++++++++++- .../scala3-macros/tutorial/reflection.md | 17 +--- 2 files changed, 98 insertions(+), 15 deletions(-) diff --git a/_overviews/scala3-macros/best-practices.md b/_overviews/scala3-macros/best-practices.md index 06bb160689..8c81d95fc6 100644 --- a/_overviews/scala3-macros/best-practices.md +++ b/_overviews/scala3-macros/best-practices.md @@ -55,7 +55,101 @@ val y: Expr[Int] = ... '{ (x: Int) => ${ body('x, y) } } ``` +## Quotes Reflect + +For this section, consider the following setup: + +```scala +object Box: + sealed trait Base + case class Leaf(x: Int) extends Base + +// Quotes in contextual scope +val boxTpe = TypeRepr.of[Box.type] +val baseTpe = TypeRepr.of[Box.Base] +val baseSym = baseTpe.typeSymbol +val leafTpe = TypeRepr.of[Box.Leaf] +val leafSym = leafTpe.typeSymbol +``` + +### Avoid `Symbol.tree` + +`Symbol.tree` returns the `Tree` associated to the symbol. Be careful when using this +method as the tree for a symbol might not be defined. When the code associated to the symbol +is defined in a different moment than this access, if the `-Yretain-trees` compilation option +is not used, then the `tree` of the symbol will not be available. Symbols originated from +Java code do not have an associated `tree`. + +### Obtaining a `TypeRepr` from a `Symbol` + +In the previous paragraph we saw that `Symbol.tree` should be avoided and therefore +you should not use `Symbol.tree.tpe`. +Thus to obtain the `TypeRepr` corresponding to a `Symbol`, it is recommended +to use `TypeRepr.memberType` + +We can obtain the `TypeRepr` of `Leaf` in two ways: + 1. `TypeRepr.of[Box.Leaf]` + 2 `boxTpe.memberType(leafSym)`, in other words we request + the `TypeRepr` of the member of `Box` whose symbol is equal to the symbol of sym + +### Use `Symbol`s to compare definitions + +Read more about Symbols [here][symbol]. + +Symbols allow comparing definitions using `==`: +```scala +leafSym == baseSym.children.head // Is true +``` + +However, `==` on `TypeRepr`s does not produce the same result: +```scala +boxTpe.memberType(baseSym.children.head) == leafTpe // Is false +``` + +### Obtaining a Symbol for a type + +Because `Symbol.tree` should be avoided (read more above), +you should not use `TypeTree.of[T].tpe.typeSymbol` to get the symbol of +the definition of `T`. + +Instead use + +```scala +TypeRepr.of[T].typeSymbol +``` + +### Use pattern match your way into the API + +Pattern matching is a very ergonomic approach to the API. Always have a look at +the `unapply` defined in `*Module` objects. + +### Search the contextual scope in your macros + +You can search for implicits instances using `Implicits.search`. + +For example: + +```scala +val leafMirrorTpe = TypeRepr.of[Mirror.ProductOf[Box.Leaf]] + +Implicits.search(leafMirrorTpe) match + case success: ImplicitSearchSuccess => + val implicitTerm = success.tree + // ... + case faliure: ImplicitSearchFailure => +``` + +If you are writing and prefer to handle `Expr`, `Expr.summon` is a +convient wrapper around `Implicits.search`: + +```scala +val exprImpl: Expr[Mirror.ProductOf[Box.Leaf]] = + Expr.summon[Mirror.ProductOf[Box.Leaf]] match + case Some(imp) => imp + case None => throw Exception("Could not find implicit") +``` -## Quotes Reflect **Coming soon** + +[symbol]: {% link _overviews/scala-macros/tutorial/reflection.md %} diff --git a/_overviews/scala3-macros/tutorial/reflection.md b/_overviews/scala3-macros/tutorial/reflection.md index bdae347ca3..f66cb0b8df 100644 --- a/_overviews/scala3-macros/tutorial/reflection.md +++ b/_overviews/scala3-macros/tutorial/reflection.md @@ -131,20 +131,7 @@ In addition `Symbol` exposes and is used by many useful methods. For example: - `Tree.symbol` returns the symbol associated to a tree. Given that `Term <: Tree`, `Expr.asTerm.symbol` is the best way to obtain the symbol associated to an `Expr[T]` - `Symbol.tree` returns the `Tree` associated to the symbol. Be careful when using this - method as the tree for a symbol might not be defined. When the code associated to the symbol - is defined in a different moment than this access, if the `-Yretain-trees` compilation option - is not used, then the `tree` of the symbol will not be available. Symbols originated from - Java code do not have an associated `tree`. - -## Suggestion and anti-patterns - - - Avoid using `TypeTree`s (therefore `TypeTree.of`) when you could use `TypeRepr` - - Avoid using `Symbol.tree` for the reasons mentioned [here](#symbols) and because of - the performance penalty that retrieving an entire tree could cause. - - Pattern matching is a very ergonomic approach to the API. Always have a look at - the `unapply` defined in `*Module` objects. - - `Symbol` and `Flags` offer handy predicates to know more about a definition - - `Expr.summon` is a convenient wrapper around `Implicits.search` + method as the tree for a symbol might not be defined. Read more on the [best practices page][best practices] ## Macro API design @@ -242,3 +229,5 @@ We can make this printer the default if needed [tasty inspection]: {{ site.scala3ref }}/metaprogramming/tasty-inspect.html [reflection doc]: https://dotty.epfl.ch/api/scala/quoted/Quotes$reflectModule.html?query=trait%20reflectModule + +[best practices]: {% link _overviews/scala-macros/best-practices.md %} From 68f2a33883bcefb3e3f7009e6b173a8a742f88db Mon Sep 17 00:00:00 2001 From: Vinz Date: Fri, 14 May 2021 08:19:30 +0200 Subject: [PATCH 0270/1870] Update _overviews/scala3-macros/best-practices.md Co-authored-by: Nicolas Stucki --- _overviews/scala3-macros/best-practices.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/_overviews/scala3-macros/best-practices.md b/_overviews/scala3-macros/best-practices.md index 8c81d95fc6..e2955495a3 100644 --- a/_overviews/scala3-macros/best-practices.md +++ b/_overviews/scala3-macros/best-practices.md @@ -89,7 +89,7 @@ to use `TypeRepr.memberType` We can obtain the `TypeRepr` of `Leaf` in two ways: 1. `TypeRepr.of[Box.Leaf]` - 2 `boxTpe.memberType(leafSym)`, in other words we request + 2. `boxTpe.memberType(leafSym)`, in other words we request the `TypeRepr` of the member of `Box` whose symbol is equal to the symbol of sym ### Use `Symbol`s to compare definitions From 2704eda6eb26aeac400ba64377e018ba74cfc388 Mon Sep 17 00:00:00 2001 From: vincenzobaz Date: Fri, 14 May 2021 08:36:37 +0200 Subject: [PATCH 0271/1870] Update best practices --- _overviews/scala3-macros/best-practices.md | 19 +++++++++---------- 1 file changed, 9 insertions(+), 10 deletions(-) diff --git a/_overviews/scala3-macros/best-practices.md b/_overviews/scala3-macros/best-practices.md index e2955495a3..b48f056de5 100644 --- a/_overviews/scala3-macros/best-practices.md +++ b/_overviews/scala3-macros/best-practices.md @@ -108,11 +108,13 @@ boxTpe.memberType(baseSym.children.head) == leafTpe // Is false ### Obtaining a Symbol for a type -Because `Symbol.tree` should be avoided (read more above), -you should not use `TypeTree.of[T].tpe.typeSymbol` to get the symbol of -the definition of `T`. +There is a handy shortcut to get the symbol of the definition of `T`. +Instead of -Instead use +```scala +TypeTree.of[T].tpe.typeSymbol +``` +you can use ```scala TypeRepr.of[T].typeSymbol @@ -143,13 +145,10 @@ If you are writing and prefer to handle `Expr`, `Expr.summon` is a convient wrapper around `Implicits.search`: ```scala -val exprImpl: Expr[Mirror.ProductOf[Box.Leaf]] = - Expr.summon[Mirror.ProductOf[Box.Leaf]] match +def summoned[T: Type]: Expr[T] = + Expr.summon[T] match case Some(imp) => imp - case None => throw Exception("Could not find implicit") + case None => reflect.report.throwError("Could not find an implicit for " + Type.show[T]) ``` - -**Coming soon** - [symbol]: {% link _overviews/scala-macros/tutorial/reflection.md %} From 4b37c51dbe409c4213f1e4c17d8b19f4275a2634 Mon Sep 17 00:00:00 2001 From: vincenzobaz Date: Mon, 17 May 2021 09:17:21 +0200 Subject: [PATCH 0272/1870] Address review comments --- _overviews/scala3-macros/best-practices.md | 2 +- _overviews/scala3-macros/tutorial/reflection.md | 14 ++++++++------ 2 files changed, 9 insertions(+), 7 deletions(-) diff --git a/_overviews/scala3-macros/best-practices.md b/_overviews/scala3-macros/best-practices.md index b48f056de5..80f5d8184b 100644 --- a/_overviews/scala3-macros/best-practices.md +++ b/_overviews/scala3-macros/best-practices.md @@ -151,4 +151,4 @@ def summoned[T: Type]: Expr[T] = case None => reflect.report.throwError("Could not find an implicit for " + Type.show[T]) ``` -[symbol]: {% link _overviews/scala-macros/tutorial/reflection.md %} +[symbol]: {% link _overviews/scala3-macros/tutorial/reflection.md %} diff --git a/_overviews/scala3-macros/tutorial/reflection.md b/_overviews/scala3-macros/tutorial/reflection.md index f66cb0b8df..2c34a0e329 100644 --- a/_overviews/scala3-macros/tutorial/reflection.md +++ b/_overviews/scala3-macros/tutorial/reflection.md @@ -125,12 +125,14 @@ In addition `Symbol` exposes and is used by many useful methods. For example: ### To Symbol and back - - `TypeRepr.typeSymbol` returns the symbol of the type represented by `TypeRepr`. The recommended way to obtain a `Symbol` given a `Type[T]` is `TypeRepr.of[T].typeSymbol` - - For a singleton type, `TypeRepr.termSymbol` returns the symbol of the underlying object or value. - - `TypeRepr.memberType(symbol)` returns the `TypeRepr` of the provided symbol - - `Tree.symbol` returns the symbol associated to a tree. Given that `Term <: Tree`, +Consider an instance of the type `TypeRepr` named `val tpe: TypeRepr = ...`. Then: + + - `tpe.typeSymbol` returns the symbol of the type represented by `TypeRepr`. The recommended way to obtain a `Symbol` given a `Type[T]` is `TypeRepr.of[T].typeSymbol` + - For a singleton type, `tpe.termSymbol` returns the symbol of the underlying object or value. + - `tpe.memberType(symbol)` returns the `TypeRepr` of the provided symbol + - On objects `t: Tree`, `t.symbol` returns the symbol associated to a tree. Given that `Term <: Tree`, `Expr.asTerm.symbol` is the best way to obtain the symbol associated to an `Expr[T]` - - `Symbol.tree` returns the `Tree` associated to the symbol. Be careful when using this + - On objects `sym : Symbol`, `sym.tree` returns the `Tree` associated to the symbol. Be careful when using this method as the tree for a symbol might not be defined. Read more on the [best practices page][best practices] ## Macro API design @@ -230,4 +232,4 @@ We can make this printer the default if needed [tasty inspection]: {{ site.scala3ref }}/metaprogramming/tasty-inspect.html [reflection doc]: https://dotty.epfl.ch/api/scala/quoted/Quotes$reflectModule.html?query=trait%20reflectModule -[best practices]: {% link _overviews/scala-macros/best-practices.md %} +[best practices]: {% link _overviews/scala3-macros/best-practices.md %} From d63e8ed73a711a8114f2c7168bc9aad55acaad44 Mon Sep 17 00:00:00 2001 From: vincenzobaz Date: Mon, 17 May 2021 14:03:28 +0200 Subject: [PATCH 0273/1870] Address review comments --- _overviews/scala3-macros/best-practices.md | 50 ++++++++++--------- .../scala3-macros/tutorial/reflection.md | 6 +-- 2 files changed, 29 insertions(+), 27 deletions(-) diff --git a/_overviews/scala3-macros/best-practices.md b/_overviews/scala3-macros/best-practices.md index 80f5d8184b..f152bea79b 100644 --- a/_overviews/scala3-macros/best-practices.md +++ b/_overviews/scala3-macros/best-practices.md @@ -65,27 +65,28 @@ object Box: case class Leaf(x: Int) extends Base // Quotes in contextual scope -val boxTpe = TypeRepr.of[Box.type] -val baseTpe = TypeRepr.of[Box.Base] -val baseSym = baseTpe.typeSymbol -val leafTpe = TypeRepr.of[Box.Leaf] -val leafSym = leafTpe.typeSymbol +val boxTpe : TypeRepr = TypeRepr.of[Box.type] +val baseTpe: TypeRepr = TypeRepr.of[Box.Base] +val baseSym: Symbol = baseTpe.typeSymbol +val leafTpe: TypeRepr = TypeRepr.of[Box.Leaf] +val leafSym: Symbol = leafTpe.typeSymbol ``` ### Avoid `Symbol.tree` -`Symbol.tree` returns the `Tree` associated to the symbol. Be careful when using this -method as the tree for a symbol might not be defined. When the code associated to the symbol -is defined in a different moment than this access, if the `-Yretain-trees` compilation option -is not used, then the `tree` of the symbol will not be available. Symbols originated from -Java code do not have an associated `tree`. +On an object `sym: Symbol`, `sym.tree` returns the `Tree` associated to the +symbol. Be careful when using this method as the tree for a symbol might not be +defined. When the code associated to the symbol is defined in a different +moment than this access, if the `-Yretain-trees` compilation option is not +used, then the `tree` of the symbol will not be available. Symbols originated +from Java code do not have an associated `tree`. ### Obtaining a `TypeRepr` from a `Symbol` In the previous paragraph we saw that `Symbol.tree` should be avoided and therefore -you should not use `Symbol.tree.tpe`. +you should not use `sym.tree.tpe` on `sym: Symbol`. Thus to obtain the `TypeRepr` corresponding to a `Symbol`, it is recommended -to use `TypeRepr.memberType` +to use `tpe.memberType` on objects `tpe: TypeRepr`. We can obtain the `TypeRepr` of `Leaf` in two ways: 1. `TypeRepr.of[Box.Leaf]` @@ -109,7 +110,7 @@ boxTpe.memberType(baseSym.children.head) == leafTpe // Is false ### Obtaining a Symbol for a type There is a handy shortcut to get the symbol of the definition of `T`. -Instead of +Instead of ```scala TypeTree.of[T].tpe.typeSymbol @@ -120,32 +121,33 @@ you can use TypeRepr.of[T].typeSymbol ``` -### Use pattern match your way into the API +### Pattern match your way into the API Pattern matching is a very ergonomic approach to the API. Always have a look at -the `unapply` defined in `*Module` objects. +the `unapply` method defined in `*Module` objects. ### Search the contextual scope in your macros -You can search for implicits instances using `Implicits.search`. +You can search for given instances using `Implicits.search`. For example: ```scala -val leafMirrorTpe = TypeRepr.of[Mirror.ProductOf[Box.Leaf]] - -Implicits.search(leafMirrorTpe) match - case success: ImplicitSearchSuccess => - val implicitTerm = success.tree - // ... - case faliure: ImplicitSearchFailure => +def summonOrFail[T: Type]: Expr[T] = + val tpe = TypeRepr.of[T] + Implicits.search(tpe) match + case success: ImplicitSearchSuccess => + val implicitTerm = success.tree + implicitTerm.asExprOf[T] + case failure: ImplicitSearchFailure => + reflect.report.throwError("Could not find an implicit for " + Type.show[T]) ``` If you are writing and prefer to handle `Expr`, `Expr.summon` is a convient wrapper around `Implicits.search`: ```scala -def summoned[T: Type]: Expr[T] = +def summonOrFail[T: Type]: Expr[T] = Expr.summon[T] match case Some(imp) => imp case None => reflect.report.throwError("Could not find an implicit for " + Type.show[T]) diff --git a/_overviews/scala3-macros/tutorial/reflection.md b/_overviews/scala3-macros/tutorial/reflection.md index 2c34a0e329..5418240ec7 100644 --- a/_overviews/scala3-macros/tutorial/reflection.md +++ b/_overviews/scala3-macros/tutorial/reflection.md @@ -40,14 +40,14 @@ This will import all the types and modules (with extension methods) of the API. ## How to navigate the API -The full imported API can be found in the [API documentation for `scala.quoted.Quotes.reflectModule`][reflection doc]. +The full API can be found in the [API documentation for `scala.quoted.Quotes.reflectModule`][reflection doc]. Unfortunately, at this stage, this automatically generated documentation is not very easy to navigate. The most important element on the page is the hierarchy tree which provides a synthetic overview of the subtyping relationships of the types in the API. For each type `Foo` in the tree: - - the object `FooMethods` contains the methods available for `Foo` - - the object `FooModule` contains some _static-ish_ methods, most notably constructors (`apply/copy`) and the `unapply` method which provides the extractor(s) required for pattern matching. + - the trait `FooMethods` contains the methods available on the type `Foo` + - the trait `FooModule` contains the static methods available on the object `Foo`. Most notably, constructors (`apply/copy`) and the `unapply` method which provides the extractor(s) required for pattern matching. - For all types `Upper` such that `Foo <: Upper`, the methods defined in `UpperMethods` are available on `Foo` as well. For example [`TypeBounds`](https://dotty.epfl.ch/api/scala/quoted/Quotes$reflectModule.html#TypeBounds-0), a subtype of `TypeRepr`, represents a type tree of the form `T >: L <: U`: a type `T` which is a super type of `L` From ac7796b31f44ce35e9bf4cd7f096d5664c5b1a8f Mon Sep 17 00:00:00 2001 From: vincenzobaz Date: Mon, 17 May 2021 14:16:29 +0200 Subject: [PATCH 0274/1870] Address review comments --- _overviews/scala3-macros/best-practices.md | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/_overviews/scala3-macros/best-practices.md b/_overviews/scala3-macros/best-practices.md index f152bea79b..a35401ef31 100644 --- a/_overviews/scala3-macros/best-practices.md +++ b/_overviews/scala3-macros/best-practices.md @@ -83,15 +83,19 @@ from Java code do not have an associated `tree`. ### Obtaining a `TypeRepr` from a `Symbol` -In the previous paragraph we saw that `Symbol.tree` should be avoided and therefore -you should not use `sym.tree.tpe` on `sym: Symbol`. -Thus to obtain the `TypeRepr` corresponding to a `Symbol`, it is recommended -to use `tpe.memberType` on objects `tpe: TypeRepr`. +In the previous paragraph we saw that `Symbol.tree` should be avoided and +therefore you should not use `sym.tree.tpe` on `sym: Symbol`. Thus to obtain +the `TypeRepr` corresponding to a `Symbol`, it is recommended to use +`tpe.memberType` on objects `tpe: TypeRepr`. We can obtain the `TypeRepr` of `Leaf` in two ways: 1. `TypeRepr.of[Box.Leaf]` - 2. `boxTpe.memberType(leafSym)`, in other words we request - the `TypeRepr` of the member of `Box` whose symbol is equal to the symbol of sym + 2. `boxTpe.memberType(leafSym)`, in other words we request the `TypeRepr` of + the member of `Box` whose symbol is equal to the symbol of sym + +while the two approaches are equivalent, the first is possible only if you +already know that you are looking for `Box.Leaf`. The second approach allows +you to explore an uknown API. ### Use `Symbol`s to compare definitions @@ -143,7 +147,7 @@ def summonOrFail[T: Type]: Expr[T] = reflect.report.throwError("Could not find an implicit for " + Type.show[T]) ``` -If you are writing and prefer to handle `Expr`, `Expr.summon` is a +If you are writing a macro and prefer to handle `Expr`s, `Expr.summon` is a convient wrapper around `Implicits.search`: ```scala From b50d21ad3bca0a94558a4b7059f7e041676c0b45 Mon Sep 17 00:00:00 2001 From: Adrien Piquerez Date: Thu, 27 May 2021 14:57:08 +0200 Subject: [PATCH 0275/1870] Add external resources about migration --- .../scala3-migration/external-resources.md | 34 +++++++++++++++++++ .../scala3-migration/plugin-kind-projector.md | 2 +- 2 files changed, 35 insertions(+), 1 deletion(-) create mode 100644 _overviews/scala3-migration/external-resources.md diff --git a/_overviews/scala3-migration/external-resources.md b/_overviews/scala3-migration/external-resources.md new file mode 100644 index 0000000000..77a65829b2 --- /dev/null +++ b/_overviews/scala3-migration/external-resources.md @@ -0,0 +1,34 @@ +--- +title: External Resources +type: section +description: This section lists external resources about the migration to Scala 3. +num: 26 +previous-page: plugin-kind-projector +next-page: +--- + +## Courses + +### Lunatech's [_Moving from Scala 2 to Scala 3_](https://github.com/lunatech-labs/lunatech-scala-2-to-scala3-course) + +If you're a Scala 2 application developer who's looking at getting up-to-speed on Scala 3 or who's considering a migration of an existing Scala 2 application to Scala 3, Lunatech's [_"Moving from Scala 2 to Scala 3"_](https://github.com/lunatech-labs/lunatech-scala-2-to-scala3-course) course is a good way to get started. + +This course guides you through a migration of a single-module Akka Typed Sudoku solver in a series of about 10 steps. It covers the practical application of the following Scala 3 features: + +- New Control Structure syntax +- Indentation Based syntax +- Syntax rewriting by the Scala 3 compiler +- Top Level definitions +- Parameter untupling +- Contextual Abstractions: + - Extension methods new syntax + - Given instances and Using clauses +- Enumerations and Export clauses +- Intersection and Union Types +- Opaque Type Aliases +- Multiversal Equality + +## Talks + +- [Scala 3: Python 3 or Easiest Upgrade Ever?](https://www.youtube.com/watch?v=jWJ5A1irH_E) by Daniel Spiewak (Weehawken-Lang) +- [Taste the difference with Scala 3: Migrating the ecosystem and more](https://www.youtube.com/watch?v=YQmVrUdx8TU) by Jamie Thompson (f(by) 2020) diff --git a/_overviews/scala3-migration/plugin-kind-projector.md b/_overviews/scala3-migration/plugin-kind-projector.md index c60b33b7b0..d3c6682a7e 100644 --- a/_overviews/scala3-migration/plugin-kind-projector.md +++ b/_overviews/scala3-migration/plugin-kind-projector.md @@ -4,7 +4,7 @@ type: section description: This section shows how to migrate from the kind-projector plugin to Scala 3 kind-projector syntax num: 25 previous-page: plugin-intro -next-page: +next-page: external-resources --- In the future, Scala 3 will use the `_` underscore symbol for placeholders in type lambdas---just as the underscore is currently used for placeholders in (ordinary) term-level lambdas. From d14db4ee0ffdab4cb2eba0fe05ed9317b66c0468 Mon Sep 17 00:00:00 2001 From: Andrzej Ratajczak Date: Wed, 26 May 2021 15:31:53 +0200 Subject: [PATCH 0276/1870] Update docs for scaladoc settings migration guide --- .../scaladoc-settings-compatibility.md | 97 ++++++++++++------- scala3/scaladoc.md | 16 +-- 2 files changed, 71 insertions(+), 42 deletions(-) diff --git a/_overviews/scala3-migration/scaladoc-settings-compatibility.md b/_overviews/scala3-migration/scaladoc-settings-compatibility.md index 368673029e..4f111eb51a 100644 --- a/_overviews/scala3-migration/scaladoc-settings-compatibility.md +++ b/_overviews/scala3-migration/scaladoc-settings-compatibility.md @@ -1,55 +1,84 @@ --- title: Scaladoc settings compatibility between Scala2 and Scala3 type: section -description: This chapter lists all options from Scala2 and Scala3 scaladocs and explain relations between them. +description: This chapter lists all the scaladoc options for Scala 2 and Scala 3, and explains the relations between them. num: 24 previous-page: options-new next-page: plugin-intro --- -The current page is stating status of scaladoc settings. The related Github issue can be found here for [discussion](https://github.com/lampepfl/dotty/issues/11907) +The current page is stating the status of scaladoc settings. The related Github issue can be found here for [discussion](https://github.com/lampepfl/dotty/issues/11907) | Scala2 | Scala3 | Description | Comment | Is implemented? | ------------- | ------------- | --- | --- | --- | -| -doc-format | _ | Selects in which format documentation is rendered. | Actually old scaladoc supports only html, so it is in some way coherent with new scaladoc, which provides only html | | +| -doc-format | _ | Selects in which format documentation is rendered. | Actually, old scaladoc supports only html, so it is in some way consistent with new scaladoc, which provides only html | | | -doc-title | -project | The overall name of the Scaladoc site | Aliased in [#11965](https://github.com/lampepfl/dotty/issues/11965) | | | -doc-version | -project-version | | Aliased in [#11965](https://github.com/lampepfl/dotty/issues/11965) | | -| -doc-footer | _ | A footer on every Scaladoc page, by default the EPFL/Lightbend copyright notice. Can be overridden with a custom footer. | Fixed by [#11965](https://github.com/lampepfl/dotty/issues/11965) | | +| -doc-footer | -project-footer | A footer on every Scaladoc page, by default the EPFL/Lightbend copyright notice. Can be overridden with a custom footer. | Fixed by [#11965](https://github.com/lampepfl/dotty/issues/11965) | | | -doc-no-compile | _ | A directory containing sources which should be parsed for docstrings without compiling (e.g. AnyRef.scala) | We don't need this as we have completely different approach to that issue using -Ydocument-synthetic-types flag for synthetic types | | -| -doc-source-url | -source-links | A URL pattern used to link to the source file, with some variables supported... | Scala3 implementation provides richer syntax. | | -| -doc-external-doc | -external-mappings | Comma-separated list of classpath_entry_path#doc_URL pairs describing external dependencies. | Scala3 implementation provides richer syntax. | | -| -jdk-api-doc-base | -external-mappings | URL used to link Java API references. | You can specify jdk via -external-mappings since they are generalized setting. | | -| -doc-generator | _ | The fully qualified name of a doclet class, which will be used to generate the documentation | We don't need this in Scala3 | | +| -doc-source-url | -source-links | A URL pattern used to link to the source file, with some variables supported... | Scala3 implementation provides richer syntax. You can find migration steps below this [table](#source-links). | | +| -doc-external-doc | -external-mappings | Links describing locations of external dependencies' documentations. | Scala3 implementation provides richer syntax. You can find migration steps below this [table](#external-mappings). | | +| -jdk-api-doc-base | -external-mappings | URL used to link Java API references. | You can specify jdk via -external-mappings since they are generalized setting. You can find migration steps below this [table](#external-mappings) | | +| -doc-generator | _ | The fully qualified name of a doclet class, which will be used to generate the documentation. | We don't need this in Scala3 | | | -doc-root-content | -doc-root-content | The file from which the root package documentation should be imported. | | | -| -implicits | _ | | We don't need this in Scala3 | | -| -implicits-debug | _ | | We don't need this in Scala3 | | -| -implicits-show-all | _ | | We don't need this in Scala3 | | -| -implicits-sound-shadowing | _ | | We don't need this in Scala3 | | -| -implicits-hide | _ | | We don't need this in Scala3 | | -| -diagrams | _ | | We don't need this in Scala3? | | -| -diagrams-debug | _ | | We don't need this in Scala3? | | -| -diagrams-dot-path | _ | | We don't need this in Scala3? | | -| -diagrams-max-classes | _ | | We don't need this in Scala3? | | -| -diagrams-max-implicits | _ | | We don't need this in Scala3? | | -| -diagrams-dot-timeout | _ | | We don't need this in Scala3? | | -| -diagrams-dot-restart | _ | | We don't need this in Scala3? | | -| -author | _ | | Fixed by [#11965](https://github.com/lampepfl/dotty/issues/11965) | | +| -implicits | _ | | We don't need this in Scala3 - Contextual extension methods are always documented in Scala 3 | | +| -implicits-debug | _ | | We don't need this in Scala3 | | +| -implicits-show-all | _ | | We don't need this in Scala3 | | +| -implicits-sound-shadowing | _ | | We don't need this in Scala3 | | +| -implicits-hide | _ | | We don't need this in Scala3 | | +| -diagrams | _ | | We don't need this in Scala3 | | +| -diagrams-debug | _ | | We don't need this in Scala3 | | +| -diagrams-dot-path | _ | | We don't need this in Scala3 | | +| -diagrams-max-classes | _ | | We don't need this in Scala3 | | +| -diagrams-max-implicits | _ | | We don't need this in Scala3 | | +| -diagrams-dot-timeout | _ | | We don't need this in Scala3 | | +| -diagrams-dot-restart | _ | | We don't need this in Scala3 | | +| -author | -author | | Fixed by [#11965](https://github.com/lampepfl/dotty/issues/11965) | | | -raw-output | _ | | We don't need this in Scala3 | | | -no-prefixes | _ | | We don't need this in Scala3 | | | -skip-packages | -skip-packages | | | | -| -no-link-warnings | _ | | | | -| -expand-all-types | _ | | Setting should be removed from Scala2 scaladoc | | -| -groups | _ | | ~~Implement grouping as it is in Scala3. #11909~~ Actually we support grouping, e. g. [Future](https://scala3doc.virtuslab.com/pr-master/scala3/api/scala/concurrent/Future.html). Since one is using `@group` to actually group his methods, we should consider whether this flag is necessary. Fixed by [#11965](https://github.com/lampepfl/dotty/issues/11965) | | +| -no-link-warnings | _ | | Not implemented yet | | +| -expand-all-types | _ | | Setting has been removed | | +| -groups | -groups | | | | | -no-java-comments | _ | | We don't need this in Scala3 | | -| -doc-canonical-base-url | _ | A base URL to use as prefix and add `canonical` URLs to all pages. The canonical URL may be used by search engines to choose the URL that you want people to see in search results. If unset no canonical URLs are generated. | Fixed by [#11965](https://github.com/lampepfl/dotty/issues/11965) | | -| -private | _ | Show all types and members. Unless specified, show only public and protected types and members. | Fixed by [#11965](https://github.com/lampepfl/dotty/issues/11965) | | -| _ | -siteroot | | We don't migrate it | | -| _ | -project-logo | | Should we migrate it? | | -| _ | -comment-syntax | | We don't migrate it | | -| _ | -revision | | Should we migrate it? | | -| _ | -social-links | | Should we migrate it? | | -| _ | -skip-by-id | | We don't migrate it | | -| _ | -skip-by-regex | | We don't migrate it | | -| _ | -snippet-compiler-args | | We don't migrate it | | +| -doc-canonical-base-url | -doc-canonical-base-url | A base URL to use as prefix and add `canonical` URLs to all pages. The canonical URL may be used by search engines to choose the URL that you want people to see in search results. If unset no canonical URLs are generated. | Fixed by [#11965](https://github.com/lampepfl/dotty/issues/11965) | | +| -private | -private | Show all types and members. Unless specified, show only public and protected types and members. | Fixed by [#11965](https://github.com/lampepfl/dotty/issues/11965) | | +| _ | -siteroot | | We don't backport it to old scaladoc | N/A | +| _ | -project-logo | | Should we backport it to the old scaladoc? | N/A | +| _ | -comment-syntax | | We don't backport it to the old scaladoc | N/A | +| _ | -revision | | Should we backport it to the old scaladoc? | N/A | +| _ | -social-links | | Should we backport it to the old scaladoc? | N/A | +| _ | -skip-by-id | | We don't backport it to the old scaladoc | N/A | +| _ | -skip-by-regex | | We don't backport it to the old scaladoc | N/A | +| _ | -snippet-compiler-args | | We don't backport it to the old scaladoc | N/A | | _ | -Ydocument-synthetic-types | Documents intrinsic types e. g. Any, Nothing. Setting is useful only for stdlib | | | + +## Source links + +Source links are used to point to source code at some remote repository like github or bitbucket. +Hopefully, the new syntax is almost superset of the old syntax. +To migrate to the new scaladoc syntax, make sure that you don't use any of these variables: +`€{TPL_OWNER}` or `€{FILE_PATH_EXT}`. Otherwise you have to rewrite your source link, using either other `variables` or you can use new +syntax, about which you can read more at [dotty docs](https://dotty.epfl.ch/docs/usage/scaladoc/settings.html) +Note that new syntax let you specify prefixes of your files paths to match specific url in case your sources are scattered in different +directories or even different repositories. + + +## External mappings + +This setting is a generalized form of the old settings for javadoc/scaladoc. + +Example external mapping is: +``` +-external-mappings:.*scala.*::scaladoc3::http://dotty.epfl.ch/api/,.*java.*::javadoc::https://docs.oracle.com/javase/8/docs/api/ +``` + +A mapping is of the form '\::\[scaladoc3|scaladoc|javadoc]::\'. You can supply several mappings, separated by commas, as shown in the example. + +Given that the old syntaxes were: +- for scaladoc - `prefix#url` +- for javadoc - just URL + +one must take the regex that will match fq name (for javadoc, it can be wildcard like `java.*`), then concatenate it using double colons `::` +with one of the 3 available documentation formats, then again append `::` and then provide url for where the extednal documentation is hosted. diff --git a/scala3/scaladoc.md b/scala3/scaladoc.md index 3b45c3fcc4..75a02292c1 100644 --- a/scala3/scaladoc.md +++ b/scala3/scaladoc.md @@ -7,9 +7,9 @@ The new Scala version 3 comes with a completely new implementation of the docume In this article you can find highlights of new features that are or will be introduced to Scaladoc. For general reference, visit [Scaladoc manual](https://dotty.epfl.ch/docs/usage/scaladoc/) -# New features +## New features -## Markdown syntax +### Markdown syntax The biggest change introduced in the new version of Scaladoc is the change of the default language for docstrings. So far Scaladoc only supported Wikidoc syntax. The new Scaladoc can still parse legacy `Wikidoc` syntax, however Markdown has been chosen as a primary language for formatting comments. @@ -18,7 +18,7 @@ To switch back to `Wikidoc` one can pass a global flag before running the `doc` For more information on how to use the full power of docstings, check out [Scaladoc docstrings][scaladoc-docstrings] -## Static site +### Static site Scaladoc also provides an easy way for creating **static sites** for both documentation and blog posts in the similar way as Jekyll does. Thanks to this feature, you can store your documentation along-side with the generated Scaladoc API in a very convenient way. @@ -27,23 +27,23 @@ For more information on how to configure the generation of static sites check ou ![](../resources/images/scala3/scaladoc/static-site.png) -## Blog posts +### Blog posts Blog posts are a specific type of static sites. In the Scaladoc manual you can find additional information about how to work with [blog posts][built-in-blog]. ![](../resources/images/scala3/scaladoc/blog-post.png) -## Social links +### Social links Furthermore, Scaladoc provides an easy way to configure your [social media links][social-links] e.g. Twitter or Gitter. ![](../resources/images/scala3/scaladoc/social-links.png){: style="width: 180px"} -# Experimental features +## Experimental features The following features are currently (May 2021) not stable to be released with scaladoc, however we are happy to hear your feedback. Each feature has its own thread at scala-lang contributors site, where you can share your opinions. -## Snippets compiler +### Snippets compiler One of the experimental features of Scaladoc will be a snippets compiler. This tool will allow you to compile snippets that you attach to your docstring to check that they actually behave as intended, e. g. compile or throw some exception. The feature is very similar to `tut` or `mdoc` tools, @@ -54,7 +54,7 @@ For more information you can follow this [thread](https://contributors.scala-lan ![](../resources/images/scala3/scaladoc/snippet-compiler2.gif) ![](../resources/images/scala3/scaladoc/snippet-compiler1.gif) -## Type-signature browsing +### Type-signature browsing Haskell programmers are probably familiar with Hoogle - a documentation search engine that allows you browse the docs by signatures rather than symbolic names. Since many Scala developers are also functional programming fans, we decided to add a similar functionality to Scaladoc. The whole tool is based on [Inkuire](https://github.com/VirtusLab/Inkuire), which works with Kotlin and is being currently adapted to Scala 3. From d2954f73ceb2fcdb1fefff92c59f8a2bc2076f17 Mon Sep 17 00:00:00 2001 From: Jason Zaugg Date: Fri, 28 May 2021 12:50:49 +1000 Subject: [PATCH 0277/1870] Release 2.12.14 --- _config.yml | 2 +- _overviews/jdk-compatibility/overview.md | 12 ++++++------ api/all.md | 14 +++++++------- 3 files changed, 14 insertions(+), 14 deletions(-) diff --git a/_config.yml b/_config.yml index 9cfd7aa6ea..ea13ad3eae 100644 --- a/_config.yml +++ b/_config.yml @@ -16,7 +16,7 @@ keywords: - Guide scala-version: 2.13.6 -scala-212-version: 2.12.13 +scala-212-version: 2.12.14 scala-3-version: 3.0.0 scala-3-plugin-version: 0.5.1 diff --git a/_overviews/jdk-compatibility/overview.md b/_overviews/jdk-compatibility/overview.md index 06d8040c7f..880c4a4614 100644 --- a/_overviews/jdk-compatibility/overview.md +++ b/_overviews/jdk-compatibility/overview.md @@ -12,12 +12,12 @@ Sometimes new JVM and JDK (Java Development Kit) versions require us to update S | JDK version | Minimum Scala versions | Recommended Scala versions | |:-----------:|:---------------------------------|:-----------------------------------------------------------| -| 17 | see below | see below -| 16 | 2.13.5, 2.12.14 (forthcoming) | 2.13.6, 2.12.14 (forthcoming) -| 13, 14, 15 | 2.13.2, 2.12.11 | 2.13.6, 2.12.13 | -| 12 | 2.13.1, 2.12.9 | 2.13.6, 2.12.13 | -| 11 | 2.13.0, 2.12.4, 2.11.12 | 2.13.6, 2.12.13, 2.11.12 | -| 8 | 2.13.0, 2.12.0, 2.11.0, 2.10.2 | 2.13.6, 2.12.13, 2.11.12, 2.10.7 | +| 17 | 2.13.6, 2.12.14 (see below) | 2.13.6, 2.12.14 (see below) +| 16 | 2.13.5, 2.12.14 | 2.13.6, 2.12.14 +| 13, 14, 15 | 2.13.2, 2.12.11 | 2.13.6, 2.12.14 | +| 12 | 2.13.1, 2.12.9 | 2.13.6, 2.12.14 | +| 11 | 2.13.0, 2.12.4, 2.11.12 | 2.13.6, 2.12.14, 2.11.12 | +| 8 | 2.13.0, 2.12.0, 2.11.0, 2.10.2 | 2.13.6, 2.12.14, 2.11.12, 2.10.7 | | 6, 7 | 2.11.0, 2.10.0 | 2.11.12, 2.10.7 | Even when a version combination isn't listed as supported, most features may still work. (But Scala 2.12+ definitely doesn't work at all on JDK 6 or 7.) diff --git a/api/all.md b/api/all.md index 6d47741a2a..29b3d9dd99 100644 --- a/api/all.md +++ b/api/all.md @@ -10,14 +10,14 @@ includeTOC: true * [Library API](https://www.scala-lang.org/api/2.13.6/) * [Compiler API](https://www.scala-lang.org/api/2.13.6/scala-compiler/scala/) * [Reflection API](https://www.scala-lang.org/api/2.13.6/scala-reflect/scala/reflect/) -* Scala 2.12.13 - * [Library API](https://www.scala-lang.org/api/2.12.13/) - * [Compiler API](https://www.scala-lang.org/api/2.12.13/scala-compiler/scala/) - * [Reflection API](https://www.scala-lang.org/api/2.12.13/scala-reflect/scala/reflect/) +* Scala 2.12.14 + * [Library API](https://www.scala-lang.org/api/2.12.14/) + * [Compiler API](https://www.scala-lang.org/api/2.12.14/scala-compiler/scala/) + * [Reflection API](https://www.scala-lang.org/api/2.12.14/scala-reflect/scala/reflect/) * Scala Modules - * [XML API](https://www.scala-lang.org/api/2.12.13/scala-xml/scala/xml/) - * [Parser Combinators API](https://www.scala-lang.org/api/2.12.13/scala-parser-combinators/scala/util/parsing/) - * [Swing API](https://www.scala-lang.org/api/2.12.13/scala-swing/scala/swing/) + * [XML API](https://www.scala-lang.org/api/2.12.14/scala-xml/scala/xml/) + * [Parser Combinators API](https://www.scala-lang.org/api/2.12.14/scala-parser-combinators/scala/util/parsing/) + * [Swing API](https://www.scala-lang.org/api/2.12.14/scala-swing/scala/swing/) * Scala 2.11.12 * [Library API](https://www.scala-lang.org/api/2.11.12/) * [Compiler API](https://www.scala-lang.org/api/2.11.12/scala-compiler/) From 0ecf54c69d817ae2f7137ed219e0f270e96cc793 Mon Sep 17 00:00:00 2001 From: Jason Zaugg Date: Fri, 28 May 2021 17:49:57 +1000 Subject: [PATCH 0278/1870] Restore 2.12.13 links in previous releases section --- api/all.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/api/all.md b/api/all.md index 29b3d9dd99..a1f8ed297b 100644 --- a/api/all.md +++ b/api/all.md @@ -82,6 +82,10 @@ https://scala-ci.typesafe.com/artifactory/scala-integration/org/scala-lang/ * [Library API](https://www.scala-lang.org/api/2.13.0/) * [Compiler API](https://www.scala-lang.org/api/2.13.0/scala-compiler/scala/) * [Reflection API](https://www.scala-lang.org/api/2.13.0/scala-reflect/scala/reflect/) +* Scala 2.12.13 + * [Library API](https://www.scala-lang.org/api/2.12.13/) + * [Compiler API](https://www.scala-lang.org/api/2.12.13/scala-compiler/scala/) + * [Reflection API](https://www.scala-lang.org/api/2.12.13/scala-reflect/scala/reflect/) * Scala 2.12.12 * [Library API](https://www.scala-lang.org/api/2.12.12/) * [Compiler API](https://www.scala-lang.org/api/2.12.12/scala-compiler/scala/) From 895748b3b06e39809669fb4a990019524720dd4d Mon Sep 17 00:00:00 2001 From: Adrien Piquerez Date: Thu, 27 May 2021 14:01:41 +0200 Subject: [PATCH 0279/1870] Upgrade migration guide to Scala 3.0.0 and 2.13.6 --- _overviews/scala3-migration/tooling-tour.md | 2 +- .../tutorial-macro-cross-building.md | 14 ++++---- .../scala3-migration/tutorial-macro-mixing.md | 16 ++++----- .../tutorial-prerequisites.md | 4 +-- _overviews/scala3-migration/tutorial-sbt.md | 34 +++++++++---------- 5 files changed, 35 insertions(+), 35 deletions(-) diff --git a/_overviews/scala3-migration/tooling-tour.md b/_overviews/scala3-migration/tooling-tour.md index 2345239ff8..2dc7c153fc 100644 --- a/_overviews/scala3-migration/tooling-tour.md +++ b/_overviews/scala3-migration/tooling-tour.md @@ -82,7 +82,7 @@ Full-fledged support is being worked on by the team at JetBrains. ### Scalafmt -[Scalafmt](https://scalameta.org/scalafmt/) v3.0.0-RC1 supports both Scala 2.13 and Scala 3. +[Scalafmt](https://scalameta.org/scalafmt/) v3.0.0-RC3 supports both Scala 2.13 and Scala 3. To enable Scala 3 formatting you must set the `runner.dialect = scala3` in your `.scalafmt.conf` file. diff --git a/_overviews/scala3-migration/tutorial-macro-cross-building.md b/_overviews/scala3-migration/tutorial-macro-cross-building.md index 506ffa5d62..fd8ac2ea24 100644 --- a/_overviews/scala3-migration/tutorial-macro-cross-building.md +++ b/_overviews/scala3-migration/tutorial-macro-cross-building.md @@ -24,7 +24,7 @@ In order to exemplify this tutorial, we will consider the minimal macro library lazy val example = project .in(file("example")) .settings( - scalaVersion := "2.13.5", + scalaVersion := "2.13.6", libraryDependencies ++= Seq( "org.scala-lang" % "scala-reflect" % scalaVersion.value ) @@ -69,7 +69,7 @@ The main idea is to build the artifact twice and to publish two releases: You can add Scala 3 to the list of `crossScalaVersions` of your project: ```scala -crossScalaVersions := Seq("2.13.5", "3.0.0-RC3") +crossScalaVersions := Seq("2.13.6", "3.0.0") ``` The `scala-reflect` dependency won't be useful in Scala 3. @@ -87,15 +87,15 @@ libraryDependencies ++= { } ``` -After reloading sbt, you can switch to the Scala 3 context by running `++3.0.0-RC3`. -At any point you can go back to the Scala 2.13 context by running `++2.13.5`. +After reloading sbt, you can switch to the Scala 3 context by running `++3.0.0`. +At any point you can go back to the Scala 2.13 context by running `++2.13.6`. ## 2. Rearrange the code in version-specific source directories If you try to compile with Scala 3 you should see some errors of the same kind as: {% highlight text %} -sbt:example> ++3.0.0-RC3 +sbt:example> ++3.0.0 sbt:example> example / compile [error] -- Error: /example/src/main/scala/location/Location.scala:15:35 [error] 15 | val location = typeOf[Location] @@ -198,13 +198,13 @@ class MacrosSpec extends munit.FunSuite { You should now be able to run the tests in both versions. {% highlight text %} -sbt:example> ++2.13.5 +sbt:example> ++2.13.6 sbt:example> example / test location.MacrosSpec: + location [info] Passed: Total 1, Failed 0, Errors 0, Passed 1 [success] -sbt:example> ++3.0.0-RC3 +sbt:example> ++3.0.0 sbt:example> example / test location.MacrosSpec: + location diff --git a/_overviews/scala3-migration/tutorial-macro-mixing.md b/_overviews/scala3-migration/tutorial-macro-mixing.md index 01f2727a8e..fb9e59fcca 100644 --- a/_overviews/scala3-migration/tutorial-macro-mixing.md +++ b/_overviews/scala3-migration/tutorial-macro-mixing.md @@ -87,13 +87,13 @@ However, in many cases you will have to move the Scala 2.13 macro implementation lazy val example = project.in(file("example")) .settings( - scalaVersion := "3.0.0-RC1" + scalaVersion := "3.0.0" ) .dependsOn(`example-compat`) lazy val `example-compat` = project.in(file("example-compat")) .settings( - scalaVersion := "2.13.5", + scalaVersion := "2.13.6", libraryDependency += "org.scala-lang" % "scala-reflect" % scalaVersion.value ) ``` @@ -133,15 +133,15 @@ Since we want to execute the tests in Scala 2.13 and Scala 3, we create a cross- // build.sbt lazy val `example-test` = project.in(file("example-test")) .settings( - scalaVersion := "3.0.0-RC1", - crossScalaVersions := Seq("3.0.0-RC1", "2.13.5"), + scalaVersion := "3.0.0", + crossScalaVersions := Seq("3.0.0", "2.13.6"), scalacOptions ++= { CrossVersion.partialVersion(scalaVersion.value) match { case Some((2, 13)) => Seq("-Ytasty-reader") case _ => Seq.empty } }, - libraryDependencies += "org.scalameta" %% "munit" % "0.7.23" % Test + libraryDependencies += "org.scalameta" %% "munit" % "0.7.26" % Test ) .dependsOn(example) ``` @@ -163,13 +163,13 @@ class MacrosSpec extends munit.FunSuite { You should now be able to run the tests in both versions. {% highlight text %} -sbt:example> ++2.13.5 +sbt:example> ++2.13.6 sbt:example> example-test / test location.MacrosSpec: + location [info] Passed: Total 1, Failed 0, Errors 0, Passed 1 [success] -sbt:example> ++3.0.0-RC1 +sbt:example> ++3.0.0 sbt:example> example-test / test location.MacrosSpec: + location @@ -191,7 +191,7 @@ You are now ready to publish your library. It can be used in Scala 3 projects, or in Scala 2.13 projects with these settings: ```scala -scalaVersion := "2.13.5" +scalaVersion := "2.13.6" libraryDependencies += ("org" %% "example" % "x.y.z").cross(CrossVersion.for2_13Use3) scalacOptions += "-Ytasty-reader" ``` diff --git a/_overviews/scala3-migration/tutorial-prerequisites.md b/_overviews/scala3-migration/tutorial-prerequisites.md index b3b3571520..1f56a15c45 100644 --- a/_overviews/scala3-migration/tutorial-prerequisites.md +++ b/_overviews/scala3-migration/tutorial-prerequisites.md @@ -69,8 +69,8 @@ You can find all configured compiler plugins by looking at the compiler options {% highlight text %} sbt:example> show example / Compile / scalacOptions -[info] * -Xplugin:target/compiler_plugins/wartremover_2.13.5-2.4.12.jar -[info] * -Xplugin:target/compiler_plugins/semanticdb-scalac_2.13.5-4.3.20.jar +[info] * -Xplugin:target/compiler_plugins/wartremover_2.13.6-2.4.15.jar +[info] * -Xplugin:target/compiler_plugins/semanticdb-scalac_2.13.6-4.4.18.jar [info] * -Yrangepos [info] * -P:semanticdb:targetroot:/example/target/scala-2.13/meta {% endhighlight %} diff --git a/_overviews/scala3-migration/tutorial-sbt.md b/_overviews/scala3-migration/tutorial-sbt.md index faf386e879..c9be7185e3 100644 --- a/_overviews/scala3-migration/tutorial-sbt.md +++ b/_overviews/scala3-migration/tutorial-sbt.md @@ -43,16 +43,16 @@ This is crucial to avoid bugs that could happen when fixing the incompatibilitie Configuring cross-building ins sbt is as short as: ```scala -scalaVersion := "3.0.0-RC3" -crossScalaVersions ++= Seq("2.13.5", "3.0.0-RC3") +scalaVersion := "3.0.0" +crossScalaVersions ++= Seq("2.13.6", "3.0.0") ``` This configuration means: -- The default version is `3.0.0-RC3`. -- 2.13.5 can be loaded by running the `++2.13.5` command. -- 3.0.0-RC3 can be loaded by running the `++3.0.0-RC3` command. +- The default version is `3.0.0`. +- 2.13.6 can be loaded by running the `++2.13.6` command. +- 3.0.0 can be loaded by running the `++3.0.0` command. -Beware that the `reload` command will always load the default version---here it is 3.0.0-RC3. +Beware that the `reload` command will always load the default version---here it is 3.0.0. ## 4. Prepare the dependencies @@ -77,20 +77,20 @@ Make sure the one you choose does not bring any breaking change. You can use the Scala 2.13 version of the library. The syntax is: ```scala -("com.lihaoyi" %% "os-lib" % "0.7.3").cross(CrossVersion.for3Use2_13) +("com.lihaoyi" %% "os-lib" % "0.7.7").cross(CrossVersion.for3Use2_13) ``` Or for a Scala.js dependencies: ```scala -("com.lihaoyi" %%% "os-lib" % "0.7.3").cross(CrossVersion.for3Use2_13) +("com.lihaoyi" %%% "os-lib" % "0.7.7").cross(CrossVersion.for3Use2_13) ``` Once you have fixed all the unresolved dependencies, you can check that the tests are still passing in Scala 2.13: {% highlight text %} -sbt:example> ++2.13.5 -[info] Setting Scala version to 2.13.5 on 1 project. +sbt:example> ++2.13.6 +[info] Setting Scala version to 2.13.6 on 1 project. ... sbt:example> example / test ... @@ -138,8 +138,8 @@ Also you should disable `-Xfatal-warnings` to take full advantage of the migrati It is now time to try compiling in Scala 3: {% highlight text %} -sbt:example> ++3.0.0-RC3 -[info] Setting Scala version to 3.0.0-RC3 on 1 project. +sbt:example> ++3.0.0 +[info] Setting Scala version to 3.0.0 on 1 project. ... sbt:example> example / compile ... @@ -171,8 +171,8 @@ This is particularly crucial if your project is a published library. After fixing an incompatibility, you can validate the solution by running the tests in Scala 2.13. {% highlight text %} -sbt:example> ++2.13.5 -[info] Setting Scala version to 2.13.5 on 1 project. +sbt:example> ++2.13.6 +[info] Setting Scala version to 2.13.6 on 1 project. ... sbt:example> example / test ... @@ -186,7 +186,7 @@ Only the migration warnings are remaining. You can patch them automatically by compiling with the `-source:3.0-migration -rewrite` options. {% highlight text %} -sbt:example> ++3.0.0-RC3 +sbt:example> ++3.0.0 sbt:example> set example / scalacOptions += "-rewrite" sbt:example> example / compile ... @@ -206,11 +206,11 @@ Good tests are the only guarantee to prevent such bugs from going unnoticed. Make sure that the tests are passing in both Scala 2.13 and Scala 3. {% highlight text %} -sbt:example> ++2.13.5 +sbt:example> ++2.13.6 sbt:example> example / test ... [success] -sbt:example> ++3.0.0-RC3 +sbt:example> ++3.0.0 sbt:example> example / test ... [success] From 96f043bd08720e633f17318b9904f9521552d0c2 Mon Sep 17 00:00:00 2001 From: Tim Zhlobich Date: Sat, 29 May 2021 17:20:33 +0300 Subject: [PATCH 0280/1870] Fix a typo in macros.md --- _overviews/scala3-macros/tutorial/macros.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/_overviews/scala3-macros/tutorial/macros.md b/_overviews/scala3-macros/tutorial/macros.md index be0f40d473..269ef8876e 100644 --- a/_overviews/scala3-macros/tutorial/macros.md +++ b/_overviews/scala3-macros/tutorial/macros.md @@ -94,7 +94,7 @@ While this is also possible purely with `inline`, implementing it with macros wi ```scala inline def power(inline x: Double, inline n: Int) = - ${ evalPower('x, 'n) } + ${ powerCode('x, 'n) } def powerCode( x: Expr[Double], From da90c6219834c6bc0a4b4aa18e68c576bec45ff2 Mon Sep 17 00:00:00 2001 From: procris Date: Sun, 30 May 2021 15:52:34 +0300 Subject: [PATCH 0281/1870] Update for-comprehensions.md --- _ru/tour/for-comprehensions.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/_ru/tour/for-comprehensions.md b/_ru/tour/for-comprehensions.md index cd091ad6a1..29aad7105c 100644 --- a/_ru/tour/for-comprehensions.md +++ b/_ru/tour/for-comprehensions.md @@ -30,7 +30,7 @@ val twentySomethings = for (user <- userBase if (user.age >=20 && user.age < 30) twentySomethings.foreach(name => println(name)) // выводит "Travis Dennis" ``` - `for`-выражение, используется с оператором `yield`, на самом деле создает `List`. Потому что мы указали `yield user.name` (то есть вывести имя пользователя), получаем `List[String]`. `user <- userBase` и есть наш генератор, а `if (user.age >=20 && user.age < 30)` - это фильтр который отфильтровывает пользователей, не достигших 20-летнего возраста. + `for`-выражение, используется с оператором `yield`, на самом деле создает `List`. Потому что мы указали `yield user.name` (то есть вывести имя пользователя), получаем `List[String]`. `user <- userBase` и есть наш генератор, а `if (user.age >=20 && user.age < 30)` - это фильтр который отфильтровывает пользователей, не достигших 30-летнего возраста. Ниже приведен более сложный пример использования двух генераторов. Он вычисляет все пары чисел между `0` и `n-1`, сумма которых равна заданному значению `v`: From 8ea52c0381b15860fd86c6ef67f35a9f433d9fa8 Mon Sep 17 00:00:00 2001 From: Takaaki Hirano Date: Mon, 31 May 2021 10:39:38 +0900 Subject: [PATCH 0282/1870] Update scala-for-java-programmers.md MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 方 -> 型 --- _ja/tutorials/scala-for-java-programmers.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/_ja/tutorials/scala-for-java-programmers.md b/_ja/tutorials/scala-for-java-programmers.md index a7798b69b2..8d6fb7aef3 100644 --- a/_ja/tutorials/scala-for-java-programmers.md +++ b/_ja/tutorials/scala-for-java-programmers.md @@ -219,7 +219,7 @@ Scala におけるクラスは Java の構文に近い構文を使って宣言 コンパイラはここでのように型をいつでも推論できるわけではありません。 残念ながらいつできて、いつできないかを正確に分かる簡単な規則はありません。 -実際には、コンパイラは明示的に与えられていない方を推論できないときに訴えてくるので、あまり問題になりません。 +実際には、コンパイラは明示的に与えられていない型を推論できないときに訴えてくるので、あまり問題になりません。 簡単な規則として、初心者 Scala プログラマーは、文脈から推定しやすそうな型宣言を省略してみてコンパイラーが認めてくれるか試してみてください。 しばらくすれば、いつ型を省略するか、いつ明示的に指定するか、良い感触をつかむはずです。 From e2b18162bb82702e60bfcc318dfcec37b05e2aa4 Mon Sep 17 00:00:00 2001 From: Julien Richard-Foy Date: Mon, 31 May 2021 08:29:02 +0200 Subject: [PATCH 0283/1870] Apply suggestions from code review Co-authored-by: Jonathan --- learn.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/learn.md b/learn.md index edff7d303f..2204c55f1d 100644 --- a/learn.md +++ b/learn.md @@ -36,7 +36,7 @@ this course in the following video:

#U62gG*{1sw&qO$#*;tM>!Y4C`)q|@WrTcA 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�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%0DON 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

-After taking this course, you might be interested in growing further your +After taking this course, you might be interested in improving your skills in specific areas by taking the courses [Parallel Programming], [Big Data Analysis with Scala and Spark], or [Programming Reactive Systems]. From 0b3fd1bb85a2c249025c26be0a2e8bd42c9b0b77 Mon Sep 17 00:00:00 2001 From: veysiertekin <500893+veysiertekin@users.noreply.github.com> Date: Wed, 2 Jun 2021 11:37:13 +0100 Subject: [PATCH 0284/1870] Change suggested Markdown editor with an open source alternative - MacDown --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index eef762ce16..230a12d252 100644 --- a/README.md +++ b/README.md @@ -62,9 +62,9 @@ The markdown used in this site uses [kramdown](https://kramdown.gettalong.org/) ### Markdown Editor for OSX ### -There's a free markdown editor for OSX called [Mou](http://25.io/mou/). It's quite convenient to work with, and it generates the translated Markdown in real-time alongside of your editor window, as can be seen here: +There's a free markdown editor for OSX called [MacDown](https://github.com/MacDownApp/macdown). It's quite convenient to work with, and it generates the translated Markdown in real-time alongside of your editor window, as can be seen here: -![Mou Screen Shot](http://25.io/mou/img/1.png) +![MacDown Screen Shot](https://raw.githubusercontent.com/MacDownApp/macdown/3e2a2bf101c215c143bf00d9f857965f0ee82487/assets/screenshot.png) ## License ## From 949f14a2758a296b5576c2c7487b19182b57e424 Mon Sep 17 00:00:00 2001 From: Seth Tisue Date: Wed, 2 Jun 2021 07:44:04 -0700 Subject: [PATCH 0285/1870] master is now main --- .github/workflows/build.yml | 4 ++-- _includes/sidebar-toc-glossary.html | 2 +- _includes/sidebar-toc-multipage-overview.html | 2 +- _includes/sidebar-toc-singlepage-overview.html | 2 +- _includes/sidebar-toc-style.html | 2 +- _includes/sidebar-toc-tour-overview.html | 2 +- _includes/sidebar-toc.html | 2 +- _includes/tutorial-toc.html | 2 +- _includes/upcoming-training.html | 4 ++-- _ja/scala3/contribute-to-docs.md | 6 +++--- _layouts/frontpage.html | 4 ++-- _layouts/sip.html | 2 +- _layouts/sips.html | 2 +- _overviews/contributors/index.md | 2 +- _sips/sip-submission.md | 4 ++-- _sips/sip-tutorial.md | 8 ++++---- scala3/contribute-to-docs.md | 6 +++--- 17 files changed, 28 insertions(+), 28 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 775eb48eb0..a4d258f897 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -22,11 +22,11 @@ jobs: run: bundle exec jekyll build - name: HTMLProofer run: | - # # Checking for docs.scala-lang/blob/master leads to a chicken and egg problem because of the edit links of new pages. + # # Checking for docs.scala-lang/blob/main leads to a chicken and egg problem because of the edit links of new pages. bundle exec htmlproofer ./_site/\ --only-4xx\ --http-status-ignore "400,401,429"\ --empty-alt-ignore\ --allow-hash-href\ - --url-ignore '/https://github.com/scala/docs.scala-lang/blob/master/.*/,/www.oracle.com/' + --url-ignore '/https://github.com/scala/docs.scala-lang/blob/main/.*/,/www.oracle.com/' diff --git a/_includes/sidebar-toc-glossary.html b/_includes/sidebar-toc-glossary.html index f75f98ccd1..f1055cfd13 100644 --- a/_includes/sidebar-toc-glossary.html +++ b/_includes/sidebar-toc-glossary.html @@ -5,6 +5,6 @@
Terms

-
+
diff --git a/_includes/sidebar-toc-multipage-overview.html b/_includes/sidebar-toc-multipage-overview.html index 8942aa3169..ceab98320f 100644 --- a/_includes/sidebar-toc-multipage-overview.html +++ b/_includes/sidebar-toc-multipage-overview.html @@ -62,6 +62,6 @@
Contents
{% endif %}
- + diff --git a/_includes/sidebar-toc-singlepage-overview.html b/_includes/sidebar-toc-singlepage-overview.html index bcea6a8911..7b2e68e995 100644 --- a/_includes/sidebar-toc-singlepage-overview.html +++ b/_includes/sidebar-toc-singlepage-overview.html @@ -26,6 +26,6 @@
Contents
{% endif %}
- + diff --git a/_includes/sidebar-toc-style.html b/_includes/sidebar-toc-style.html index eec6ffb078..b82f7974e9 100644 --- a/_includes/sidebar-toc-style.html +++ b/_includes/sidebar-toc-style.html @@ -52,7 +52,7 @@
Contents
{% endif %}
- + {% endif %} diff --git a/_includes/sidebar-toc-tour-overview.html b/_includes/sidebar-toc-tour-overview.html index ed5f756cb2..4150ede379 100644 --- a/_includes/sidebar-toc-tour-overview.html +++ b/_includes/sidebar-toc-tour-overview.html @@ -43,6 +43,6 @@
Contents
{% endif %}
- + diff --git a/_includes/sidebar-toc.html b/_includes/sidebar-toc.html index eec6ffb078..b82f7974e9 100644 --- a/_includes/sidebar-toc.html +++ b/_includes/sidebar-toc.html @@ -52,7 +52,7 @@
Contents
{% endif %}
- + {% endif %} diff --git a/_includes/tutorial-toc.html b/_includes/tutorial-toc.html index 6d34a77d95..8f54cd0a74 100644 --- a/_includes/tutorial-toc.html +++ b/_includes/tutorial-toc.html @@ -24,6 +24,6 @@
Contents
{% include tutorial-tour-list.txt %}
- + diff --git a/_includes/upcoming-training.html b/_includes/upcoming-training.html index 7b205eb794..1609682751 100644 --- a/_includes/upcoming-training.html +++ b/_includes/upcoming-training.html @@ -33,6 +33,6 @@

{{training.title}}

{% endfor %} - \ No newline at end of file + diff --git a/_ja/scala3/contribute-to-docs.md b/_ja/scala3/contribute-to-docs.md index dda4e2433e..69a9a0478b 100644 --- a/_ja/scala3/contribute-to-docs.md +++ b/_ja/scala3/contribute-to-docs.md @@ -30,19 +30,19 @@ Scala 3 の高品質なドキュメンテーションを作るためのいくつ ## Scala 3 Book [Scala 3 Book][scala3-book] は Alvin Alexander 氏 が書いている。 この本は Scala 3 のすべての重要な機能の概説書である。これから Scala を使いはじめる読者を対象にしている。 -- [Sources](https://github.com/scala/docs.scala-lang/tree/master/_overviews/scala3-book) +- [Sources](https://github.com/scala/docs.scala-lang/tree/main/_overviews/scala3-book) - [Issues](https://github.com/scala/docs.scala-lang/issues) ## Macros Tutorial [Macros Tutorial](/scala3/guides/macros)は Nicolas Stucki 氏 が書いている。この本では Scala 3 のマクロとそのベストプラクティスについて詳しく説明している。 -- [Sources](https://github.com/scala/docs.scala-lang/tree/master/_overviews/scala3-macros) +- [Sources](https://github.com/scala/docs.scala-lang/tree/main/_overviews/scala3-macros) - [Issues](https://github.com/scala/docs.scala-lang/issues) ## Migration Guide [Scala 3 Migration Guide](/scala3/guides/migration/compatibility-intro.html) は Scala 2 と Scala 3 の互換性、移行に役立つツールの紹介、そして詳しい移行のガイドを含んだ包括的なドキュメントである。 -- [Source](https://github.com/scala/docs.scala-lang/tree/master/_overviews/scala3-migration) +- [Source](https://github.com/scala/docs.scala-lang/tree/main/_overviews/scala3-migration) - [Issues](https://github.com/scalacenter/docs.scala-lang/issues) diff --git a/_layouts/frontpage.html b/_layouts/frontpage.html index 86a7694ae1..743e27bd83 100644 --- a/_layouts/frontpage.html +++ b/_layouts/frontpage.html @@ -216,7 +216,7 @@

{{event.title}}

{% endfor %} @@ -383,4 +383,4 @@

{{site.data.common.texts.scalaSupportersTitle}}

-{% include footer.html %} \ No newline at end of file +{% include footer.html %} diff --git a/_layouts/sip.html b/_layouts/sip.html index 9537c472fe..3d778db55e 100644 --- a/_layouts/sip.html +++ b/_layouts/sip.html @@ -26,7 +26,7 @@
SIP Contents

- + diff --git a/_layouts/sips.html b/_layouts/sips.html index 2bb7843cf0..de3535a24e 100644 --- a/_layouts/sips.html +++ b/_layouts/sips.html @@ -40,7 +40,7 @@
Writing a SIP
  • Submitting a SIP
  • Tutorial: Writing a SIP
  • - + diff --git a/_overviews/contributors/index.md b/_overviews/contributors/index.md index 0d31996273..c20879ffbd 100644 --- a/_overviews/contributors/index.md +++ b/_overviews/contributors/index.md @@ -742,7 +742,7 @@ Last, add the following job to the “test” stage, in the `.travis.yml` file: This will check that pull requests don’t make changes that are binary incompatible with the previous stable version. -We suggest working with the following Git workflow: the `master` branch always receives pull requests +We suggest working with the following Git workflow: the `main` branch always receives pull requests for the next major version (so, binary compatibility checks are disabled, by setting the `mimaPreviousArtifacts` value to `Set.empty`), and each major version `N` has a corresponding `N.x` branch (e.g., `1.x`, `2.x`, etc.) branch where the binary compatibility checks are enabled. diff --git a/_sips/sip-submission.md b/_sips/sip-submission.md index 1d7d1d0609..e2efb5ec2a 100644 --- a/_sips/sip-submission.md +++ b/_sips/sip-submission.md @@ -76,7 +76,7 @@ a SIP or needs more work. After receiving the green light from the Process Lead, you can write up your idea and submit it as a SIP. -A SIP is a Markdown document written in conformance with the [process template](https://github.com/scala/docs.scala-lang/blob/master/_sips/sip-template.md). +A SIP is a Markdown document written in conformance with the [process template](https://github.com/scala/docs.scala-lang/blob/main/_sips/sip-template.md). It ought to contain a clear specification of the proposed changes. When such changes significantly alter the compiler internals, the author is invited to provide a proof of concept. Delivering a basic implementation can speed up the @@ -323,7 +323,7 @@ Scala compiler. The process to submit is simple: * Fork the Scala documentation repository, [https://github.com/scala/docs.scala-lang](https://github.com/scala/docs.scala-lang). -* Create a new SIP file in the `_sips/sips/`. Use the [S(L)IP template](https://github.com/scala/docs.scala-lang/blob/master/_sips/sip-template.md) +* Create a new SIP file in the `_sips/sips/`. Use the [S(L)IP template](https://github.com/scala/docs.scala-lang/blob/main/_sips/sip-template.md) * Make sure the new file follows the format: `YYYY-MM-dd-{title}.md`. Use the proposal date for `YYYY-MM-dd`. * Use the [Markdown Syntax](https://daringfireball.net/projects/markdown/syntax) to write your SIP. * Follow the instructions in the [README](https://github.com/scala/docs.scala-lang/) to build your SIP locally so you can ensure that it looks correct on the website. diff --git a/_sips/sip-tutorial.md b/_sips/sip-tutorial.md index 2696fd12af..6103c16d94 100644 --- a/_sips/sip-tutorial.md +++ b/_sips/sip-tutorial.md @@ -10,10 +10,10 @@ This tutorial details of how to write a new SIP and adding it to the website. The process to submit is simple: * Fork the [Scala documentation repository](https://github.com/scala/docs.scala-lang) and clone it. -* Create a new SIP file in the `_sips/sips`. Use the [SIP template](https://github.com/scala/docs.scala-lang/blob/master/_sips/sip-template.md) +* Create a new SIP file in the `_sips/sips`. Use the [SIP template](https://github.com/scala/docs.scala-lang/blob/main/_sips/sip-template.md) * Make sure the new file follows the format: `YYYY-MM-dd-{title}.md`. Use the proposal date for `YYYY-MM-dd`. * Use the [Markdown Syntax](https://daringfireball.net/projects/markdown/syntax) to write your SIP. - * Follow the instructions in the [README](https://github.com/scala/docs.scala-lang/blob/master/README.md) to build your SIP locally so you can ensure that it looks correct on the website. + * Follow the instructions in the [README](https://github.com/scala/docs.scala-lang/blob/main/README.md) to build your SIP locally so you can ensure that it looks correct on the website. * Create a link to your SIP in the "pending sips" section of `index.md`. * Commit your changes and push them to your forked repository. * Create a new pull request. This will notify the Scala SIP team. @@ -34,7 +34,7 @@ Use the [Markdown Syntax](https://daringfireball.net/projects/markdown/syntax) t If you would like a starting point, clone the [SIP Template](./sip-template.html) in `_sips/sip-template.md` and use that. -See the [source](https://github.com/scala/docs.scala-lang/blob/master/_sips/sip-template.md) for this document (`sip-tutorial.md`) for how to do syntax highlighting. +See the [source](https://github.com/scala/docs.scala-lang/blob/main/_sips/sip-template.md) for this document (`sip-tutorial.md`) for how to do syntax highlighting. ```scala class Foo @@ -46,6 +46,6 @@ class Foo Testing changes requires installing [Jekyll](https://jekyllrb.com/docs/installation/). Since this site is hosted on github pages, make sure you have [whatever version of Jekyll that github is running](https://help.github.com/articles/using-jekyll-with-pages#troubleshooting). As of the writing of this README, that is version >= 1.0.x. After the installation, you need to start up the local server. The -[README](https://github.com/scala/docs.scala-lang/blob/master/README.md) gives +[README](https://github.com/scala/docs.scala-lang/blob/main/README.md) gives a concise explanation on how to do it. When the server is running, view your changes at [https://localhost:4000/sips](https://localhost:4000/sips). diff --git a/scala3/contribute-to-docs.md b/scala3/contribute-to-docs.md index 25d719a764..91b467766f 100644 --- a/scala3/contribute-to-docs.md +++ b/scala3/contribute-to-docs.md @@ -28,13 +28,13 @@ Typically, each of the different documentation projects contain links (and so do ## Scala 3 Book The [Scala 3 Book][scala3-book] is being written by Alvin Alexander and provides an overview over all the important features of Scala 3. It targets readers, which are new to Scala. -- [Sources](https://github.com/scala/docs.scala-lang/tree/master/_overviews/scala3-book) +- [Sources](https://github.com/scala/docs.scala-lang/tree/main/_overviews/scala3-book) - [Issues](https://github.com/scala/docs.scala-lang/issues) ## Macros Tutorial The [Macros Tutorial](/scala3/guides/macros) is being written by Nicolas Stucki and contains detailed information about macros in Scala 3 and best-practices. -- [Sources](https://github.com/scala/docs.scala-lang/tree/master/_overviews/scala3-macros) +- [Sources](https://github.com/scala/docs.scala-lang/tree/main/_overviews/scala3-macros) - [Issues](https://github.com/scala/docs.scala-lang/issues) ## Migration Guide @@ -42,7 +42,7 @@ The [Scala 3 Migration Guide](/scala3/guides/migration/compatibility-intro.html) contains an comprehensive overview over compatibility between Scala 2 and Scala 3, a tour presenting the migration tools, and detailed migration guides. -- [Source](https://github.com/scala/docs.scala-lang/tree/master/_overviews/scala3-migration) +- [Source](https://github.com/scala/docs.scala-lang/tree/main/_overviews/scala3-migration) - [Issues](https://github.com/scalacenter/docs.scala-lang/issues) ## Scala 3 Language Reference From 3d94c2fb4c6df2b8db2bfda9209c5bd65aab64c6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jakub=20Koz=C5=82owski?= Date: Wed, 2 Jun 2021 19:17:24 +0200 Subject: [PATCH 0286/1870] Update index.md --- _overviews/plugins/index.md | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/_overviews/plugins/index.md b/_overviews/plugins/index.md index 9e1b2015b7..20b3508cf9 100644 --- a/_overviews/plugins/index.md +++ b/_overviews/plugins/index.md @@ -46,11 +46,10 @@ include: - Plugins that alter Scala's behavior around errors and warnings, such as [silencer](https://github.com/ghik/silencer), [splain](https://github.com/tek/splain) and [clippy](https://scala-clippy.org/). - Plugins that analyze the structure of source code, such as - [Sculpt](https://github.com/lightbend/scala-sculpt) and [acyclic](https://github.com/lihaoyi/acyclic). + [Sculpt](https://github.com/lightbend/scala-sculpt), [acyclic](https://github.com/lihaoyi/acyclic) and [graph-buddy](https://github.com/VirtusLab/graphbuddy). - Plugins that instrument user code to collect information, such as the code coverage tool [scoverage](https://github.com/scoverage/scalac-scoverage-plugin). -- Plugins that add metaprogramming facilities to Scala, - such as [Macro Paradise](https://github.com/scalamacros/paradise), [semanticdb](https://scalameta.org/docs/semanticdb/guide.html). +- Plugins that enable tooling. One such plugin is [semanticdb](https://scalameta.org/docs/semanticdb/guide.html), which enables [scalafix](https://scalacenter.github.io/scalafix/) (a well-known refactoring and linting tool) to do its work. Another one is [Macro Paradise](https://github.com/scalamacros/paradise) (only needed for Scala 2.12). - Plugins that modify existing Scala constructs in user code, such as [better-monadic-for](https://github.com/oleg-py/better-monadic-for) and [better-tostring](https://github.com/polyvariant/better-tostring). - Plugins that add entirely new constructs to Scala by From 619652ef2d82107bdc03acfbb55877abd2fec84d Mon Sep 17 00:00:00 2001 From: nscarcella Date: Thu, 3 Jun 2021 03:37:26 -0300 Subject: [PATCH 0287/1870] Fixed typos (#2049) * Fixed missing `then` keyword * Replaced Any type for Matchable * Adding missing parenthesis * Added short Matchable description --- _overviews/scala3-book/fun-write-map-function.md | 4 ++-- _overviews/scala3-book/methods-most.md | 8 +++++--- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/_overviews/scala3-book/fun-write-map-function.md b/_overviews/scala3-book/fun-write-map-function.md index 37a0748074..633d9b8fb8 100644 --- a/_overviews/scala3-book/fun-write-map-function.md +++ b/_overviews/scala3-book/fun-write-map-function.md @@ -20,13 +20,13 @@ Given that statement, you start to write the method signature. First, you know that you want to accept a function as a parameter, and that function should transform an `Int` into some generic type `A`, so you write: ```scala -def map(f: (Int) => A +def map(f: (Int) => A) ``` The syntax for using a generic type requires declaring that type symbol before the parameter list, so you add that: ```scala -def map[A](f: (Int) => A +def map[A](f: (Int) => A) ``` Next, you know that `map` should also accept a `List[Int]`: diff --git a/_overviews/scala3-book/methods-most.md b/_overviews/scala3-book/methods-most.md index b501b1687b..ac2140a41b 100644 --- a/_overviews/scala3-book/methods-most.md +++ b/_overviews/scala3-book/methods-most.md @@ -233,7 +233,7 @@ Here’s a method named `isTruthy` that implements the Perl definitions of `true ```scala def isTruthy(a: Any) = - if a == 0 || a == "" + if a == 0 || a == "" then false else true @@ -256,13 +256,14 @@ A `match` expression can also be used as the entire method body, and often is. Here’s another version of `isTruthy`, written with a `match` expression : ```scala -def isTruthy(a: Any) = a match +def isTruthy(a: Matchable) = a match case 0 | "" => false case _ => true ``` -This method works just like the previous method that used an `if`/`else` expression. +This method works just like the previous method that used an `if`/`else` expression. We use `Matchable` instead of `Any` as the parameter's type to accept any value that supports pattern matching. +For more details on the `Matchable` trait, see the [Reference documentation][reference_matchable]. ## Controlling visibility in classes @@ -401,3 +402,4 @@ See the [Reference documentation][reference] for more details on these features. [extension]: {% link _overviews/scala3-book/ca-extension-methods.md %} [reference_extension_methods]: {{ site.scala3ref }}/contextual/extension-methods.html [reference]: {{ site.scala3ref }}/overview.html +[reference_matchable]: {{ site.scala3ref }}/other-new-features/matchable.html From 6b2ae553fc0b34e1b6f78b30a81e6892e59b3553 Mon Sep 17 00:00:00 2001 From: SourceCodeBot Date: Thu, 3 Jun 2021 16:54:34 +0200 Subject: [PATCH 0288/1870] docs: add import notice for extension methods (#2042) * docs: add import notice for extension methods * fix: solved review discussions --- .../scala3-book/ca-extension-methods.md | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/_overviews/scala3-book/ca-extension-methods.md b/_overviews/scala3-book/ca-extension-methods.md index 7c8639e020..b860b4f928 100644 --- a/_overviews/scala3-book/ca-extension-methods.md +++ b/_overviews/scala3-book/ca-extension-methods.md @@ -50,6 +50,25 @@ Then in your code you use `circumference` just as though it was originally defin aCircle.circumference ``` +### Import extension method + +Imagine, that `circumference` is defined in package `lib`, you can import it by + +```scala +import lib.circumference + +aCircle.circumference +``` + +The compiler also support you if the import is missing by showing a detailed compilation error message such as the following: + +```text +value circumference is not a member of Circle, but could be made available as an extension method. + +The following import might fix the problem: + + import lib.circumference +``` ## Discussion From 38c8ef07dd499326b3a5a8660817d2bf02ee7d52 Mon Sep 17 00:00:00 2001 From: Philippus Baalman Date: Fri, 4 Jun 2021 12:17:43 +0200 Subject: [PATCH 0289/1870] Fix redirects --- _sips/all.md | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/_sips/all.md b/_sips/all.md index ed26042765..8133c137af 100644 --- a/_sips/all.md +++ b/_sips/all.md @@ -2,8 +2,9 @@ layout: sips title: List of All SIPs -redirect_from: "/sips/sip-list.html" -redirect_from: "/sips/pending/index.html" +redirect_from: + - "/sips/sip-list.html" + - "/sips/pending/index.html" --- From 6b8bc3882609961746ea005ad9fb2fd94f03d027 Mon Sep 17 00:00:00 2001 From: Philippus Baalman Date: Fri, 4 Jun 2021 12:23:48 +0200 Subject: [PATCH 0290/1870] Fix redirects --- _tour/named-arguments.md | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/_tour/named-arguments.md b/_tour/named-arguments.md index 3dc7a4a503..af82d72844 100644 --- a/_tour/named-arguments.md +++ b/_tour/named-arguments.md @@ -8,8 +8,9 @@ next-page: traits previous-page: default-parameter-values prerequisite-knowledge: function-syntax -redirect_from: "/tutorials/tour/named-arguments.html" -redirect_from: "/tutorials/tour/named-parameters.html" +redirect_from: + - "/tutorials/tour/named-arguments.html" + - "/tutorials/tour/named-parameters.html" --- When calling methods, you can label the arguments with their parameter names like so: From a480f7581acab3e49b5fa2d4169c76bafa41efc0 Mon Sep 17 00:00:00 2001 From: Philippus Baalman Date: Fri, 4 Jun 2021 12:24:22 +0200 Subject: [PATCH 0291/1870] Fix redirects --- _tour/tour-of-scala.md | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/_tour/tour-of-scala.md b/_tour/tour-of-scala.md index 2f23fdd254..59e4072e3a 100644 --- a/_tour/tour-of-scala.md +++ b/_tour/tour-of-scala.md @@ -7,9 +7,10 @@ num: 1 next-page: basics -redirect_from: "/tutorials/tour/tour-of-scala.html" -redirect_from: "/tutorials/tour/anonymous-function-syntax.html" -redirect_from: "/tutorials/tour/explicitly-typed-self-references.html" +redirect_from: + - "/tutorials/tour/tour-of-scala.html" + - "/tutorials/tour/anonymous-function-syntax.html" + - "/tutorials/tour/explicitly-typed-self-references.html" --- ## Welcome to the tour From 980dc6d1f9e9f53c63413a1c11c82b2bde24f496 Mon Sep 17 00:00:00 2001 From: Philippus Baalman Date: Fri, 4 Jun 2021 12:24:49 +0200 Subject: [PATCH 0292/1870] Fix redirects --- _tour/for-comprehensions.md | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/_tour/for-comprehensions.md b/_tour/for-comprehensions.md index 54ed69f0bf..ce9a8849c5 100644 --- a/_tour/for-comprehensions.md +++ b/_tour/for-comprehensions.md @@ -7,8 +7,9 @@ num: 19 next-page: generic-classes previous-page: extractor-objects -redirect_from: "/tutorials/tour/for-comprehensions.html" -redirect_from: "/tutorials/tour/sequence-comprehensions.html" +redirect_from: + - "/tutorials/tour/for-comprehensions.html" + - "/tutorials/tour/sequence-comprehensions.html" --- Scala offers a lightweight notation for expressing *sequence comprehensions*. Comprehensions have the form `for (enumerators) yield e`, where `enumerators` refers to a semicolon-separated list of enumerators. An *enumerator* is either a generator which introduces new variables, or it is a filter. A comprehension evaluates the body `e` for each binding generated by the enumerators and returns a sequence of these values. From f51e92ee1dd4b976b036f83cf73b232df533604e Mon Sep 17 00:00:00 2001 From: Philippus Baalman Date: Fri, 4 Jun 2021 12:25:14 +0200 Subject: [PATCH 0293/1870] Fix redirects --- _tour/abstract-type-members.md | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/_tour/abstract-type-members.md b/_tour/abstract-type-members.md index 8cad19b617..77dedcc386 100644 --- a/_tour/abstract-type-members.md +++ b/_tour/abstract-type-members.md @@ -8,8 +8,9 @@ previous-page: inner-classes topics: abstract type members prerequisite-knowledge: variance, upper-type-bound -redirect_from: "/tutorials/tour/abstract-types.html" -redirect_from: "/tour/abstract-types.html" +redirect_from: + - "/tutorials/tour/abstract-types.html" + - "/tour/abstract-types.html" --- Abstract types, such as traits and abstract classes, can in turn have abstract type members. From 2eee485ffb573391f00861027d85d61b53afc1a5 Mon Sep 17 00:00:00 2001 From: Philippus Baalman Date: Fri, 4 Jun 2021 14:39:30 +0200 Subject: [PATCH 0294/1870] Fix redirects --- _overviews/FAQ/index.md | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/_overviews/FAQ/index.md b/_overviews/FAQ/index.md index b9eca9a551..0e4b7200ad 100644 --- a/_overviews/FAQ/index.md +++ b/_overviews/FAQ/index.md @@ -2,14 +2,15 @@ layout: singlepage-overview title: Scala FAQ permalink: /tutorials/FAQ/index.html -redirect_from: "/tutorials/FAQ/breakout.html" -redirect_from: "/tutorials/FAQ/chaining-implicits.html" -redirect_from: "/tutorials/FAQ/collections.html" -redirect_from: "/tutorials/FAQ/context-bounds.html" -redirect_from: "/tutorials/FAQ/finding-implicits.html" -redirect_from: "/tutorials/FAQ/finding-symbols.html" -redirect_from: "/tutorials/FAQ/stream-view.html" -redirect_from: "/tutorials/FAQ/yield.html" +redirect_from: + - "/tutorials/FAQ/breakout.html" + - "/tutorials/FAQ/chaining-implicits.html" + - "/tutorials/FAQ/collections.html" + - "/tutorials/FAQ/context-bounds.html" + - "/tutorials/FAQ/finding-implicits.html" + - "/tutorials/FAQ/finding-symbols.html" + - "/tutorials/FAQ/stream-view.html" + - "/tutorials/FAQ/yield.html" --- Frequently asked questions, with _brief_ answers and/or links to From c3fd91cc9b2c2148410373ebab177cc85597b30e Mon Sep 17 00:00:00 2001 From: Alessandro Buggin <830963+abuggin@users.noreply.github.com> Date: Thu, 10 Jun 2021 14:21:41 +0100 Subject: [PATCH 0295/1870] Minor typo --- _overviews/scala3-migration/tooling-migration-mode.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/_overviews/scala3-migration/tooling-migration-mode.md b/_overviews/scala3-migration/tooling-migration-mode.md index 045ede947b..b8c2cb0904 100644 --- a/_overviews/scala3-migration/tooling-migration-mode.md +++ b/_overviews/scala3-migration/tooling-migration-mode.md @@ -37,7 +37,7 @@ where possible standard options include: The `-source:3.0-migration` option makes the compiler forgiving on most of the dropped features, printing warnings in place of errors. Each warning is a strong indication that the compiler is even capable of safely rewriting the deprecated pieces of code into their cross-compiling counterparts. -We call this the **Scala 3 migration compialtion**. +We call this the **Scala 3 migration compilation**. ## Automatic rewrites From 262f04216954d5ee7651300c3f8fac0b17199883 Mon Sep 17 00:00:00 2001 From: vincenzobaz Date: Fri, 28 May 2021 10:49:25 +0200 Subject: [PATCH 0296/1870] Use GitHub actions instead of Travis CI --- _overviews/contributors/index.md | 354 ++++++++++++------------------- 1 file changed, 135 insertions(+), 219 deletions(-) diff --git a/_overviews/contributors/index.md b/_overviews/contributors/index.md index 0d31996273..4421211e15 100644 --- a/_overviews/contributors/index.md +++ b/_overviews/contributors/index.md @@ -46,62 +46,47 @@ use the correct sbt version. ## Setup Continuous Integration The first reason for setting up a continuous integration (CI) server is to systematically run tests on pull requests. -Examples of CI servers that are free for open source projects are [Travis CI](https://travis-ci.org), -[Drone](https://drone.io) or [AppVeyor](https://appveyor.com). +Examples of CI servers that are free for open source projects are [GitHub Actions](https://github.com/features/actions), +[Travis CI](https://travis-ci.com), [Drone](https://drone.io) or [AppVeyor](https://appveyor.com). -Our example uses Travis CI. To enable Travis CI on your project, go to [travis-ci.org](https://travis-ci.org/), -sign up using your GitHub account, and enable your project repository. Then, add a `.travis.yml` file to your -repository with the following content: +Our example uses Github Actions. This feature is enabled by default on GitHub repositories. You can verify if that is +the case and enable them in the *Actions* section of the *Settings* tab of the repository. -~~~ yaml -language: scala -~~~ - -Push your changes and check that Travis CI triggers a build for your repository. - -Travis CI tries to guess which build tool your project uses and executes a default command to run the project tests. -For instance, if your repository contains a `build.sbt` file in the root directory, Travis CI executes the -`sbt ++$TRAVIS_SCALA_VERSION test` command, where the `TRAVIS_SCALA_VERSION` variable is, by default, set to an -arbitrary Scala version (`2.12.8`, at the time these lines are written), which could be inconsistent with the -`scalaVersion` defined in your `build.sbt` file. - -To avoid this potential inconsistency, you want to use one Scala version definition as a single source of truth. -For instance, the [sbt-travisci](https://github.com/dwijnand/sbt-travisci) plugin lets you define the Scala version -in the `.travis.yml` file, and then forwards this version to your sbt build definition. Alternatively, you can -override the default command run by Travis CI to use the Scala version defined by the `scalaVersion` settings of -your build. +With Actions enabled, you can create a *workflow definition file*. A **workflow** is an automated procedure, +composed of one or more jobs. A **job** is a set of sequential steps that are executed on the same runner. +A **step** is an individual task that can run commands; a step can be either an *action* or a shell command. +An **action** is the smallest building block of a workflow, it is possible to reuse community actions or to +define new ones. -The latter approach is the one used in this guide. Override the command run by Travis CI by adding the folliwng -lines to your `.travis.yml` file: +To create a workflow, create a *yaml* file in the directory `.github/workflows/` in the repository, for example +`.github/workflows/ci.yml` with the following content: ~~~ yaml +name: Continuous integration +on: push + jobs: - include: - - stage: test - script: sbt test + Tests: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 # Retrieve the content of the repository + - uses: olafurpg/setup-scala@v11 # Set up a jdk and sbt + - name: unit tests # Custom action consisting of a shell command + run: sbt +test ~~~ -Travis CI will now execute the `sbt test` command, which uses the Scala version from the build definition. +This workflow is called *Continuous integration* and it will run every time one or more commits are pushed to +the repository. It contains only one job called *Tests*, which will run on an Ubuntu runner and that is composed +of three actions. `setup-scala` uses the sbt version specified in `project/build.properties` and the Scala +version defined in your `build.sbt`. -Last, an important thing to setup is caching, to avoid the CI server to re-download your project dependencies each -time it runs. For instance, in case you use sbt, you can instruct Travis CI to save the content of the `~/.ivy2/` -and `~/.sbt/` directories across builds by adding the following lines to your `.travis.yml` file: - -~~~ yaml -# These directories are cached at the end of the build -cache: - directories: - - $HOME/.ivy2/cache - - $HOME/.sbt -before_cache: - # Cleanup the cached directories to avoid unnecessary cache updates - - rm -fv $HOME/.ivy2/.sbt.ivy.lock - - find $HOME/.ivy2/cache -name "ivydata-*.properties" -print -delete - - find $HOME/.sbt -name "*.lock" -print -delete -~~~ +The worfklow above will run at any push to any branch of the repository. You can +specify the branch or add more triggers such as pull requests, releases, tags or +schedules. More information about workflow triggers is available [here](https://docs.github.com/en/actions/reference/events-that-trigger-workflows). +while the `setup-scala` action is hosted [in this repository](https://github.com/olafurpg/setup-scala). For reference, here is our complete -[.travis.yml example file](https://github.com/scalacenter/library-example/blob/master/.travis.yml). +[workflow example file](https://github.com/scalacenter/library-example/blob/master/.github/.workflows/ci.yml). ## Publish a Release @@ -125,7 +110,7 @@ sign the binaries. ### Create a Sonatype Account and Project Follow the instructions given on the [OSSRH Guide](https://central.sonatype.org/pages/ossrh-guide.html#initial-setup) -to create a new Sonatype account (unless you already have one) and to +to create a new Sonatype account (unless you already have one) and to [create a new project ticket](https://issues.sonatype.org/secure/CreateIssue.jspa?issuetype=21&pid=10134). This latter step is where you define the `groupId` that you will release to. You can use a domain name that you already own, otherwise a common practice is to use `io.github.(username)` (where `(username)` is replaced with your GitHub @@ -143,7 +128,7 @@ This step has to be performed only once per person. ### Setup Your Project -In case you use sbt, we recommend using the [sbt-sonatype](https://github.com/xerial/sbt-sonatype) +In case you use sbt, we recommend using the [sbt-sonatype](https://github.com/xerial/sbt-sonatype) and [sbt-pgp](https://www.scala-sbt.org/sbt-pgp/) plugins to publish your artifacts. Add the following dependencies to your `project/plugins.sbt` file: @@ -201,7 +186,7 @@ And make sure your build does **not** define the `version` setting. With this setup, the process for cutting a release is the following. Create a Git tag whose name begins with a lowercase `v` followed by the version number: - + ~~~ bash $ git tag v0.1.0 ~~~ @@ -236,9 +221,8 @@ Continuous publication addresses these issues by delegating the publication proc follows: any contributor with write access to the repository can cut a release by pushing a Git tag, the CI server first checks that the tests pass and then runs the publication commands. -The remaining sections show how to setup Travis CI for continuous publication on Sonatype. You can find instructions -for other CI servers and repositories in the [sbt-release-early](https://github.com/scalacenter/sbt-release-early) -plugin documentation. +The remaining sections show how to setup GitHub Actions for continuous publication on Sonatype. You can find instructions +for Travis CI in the [sbt-ci-release](https://github.com/olafurpg/sbt-ci-release) plugin documentation. ### Setup the CI Server @@ -247,28 +231,14 @@ it is possible to securely give this information by using the secret management #### Export Your Sonatype Account Credentials -The `SONATYPE_USERNAME` and `SONATYPE_PASSWORD` environment variables are recognized by the `sbt-sonatype` -plugin, as documented [here](https://github.com/xerial/sbt-sonatype#homesbtsbt-version-013-or-10sonatypesbt-1). +Create two [GitHub Encrypted secrets](https://docs.github.com/en/actions/reference/encrypted-secrets) +for your Sonatype account credentials: `SONATYPE_USERNAME` and `SONATYPE_PASSWORD`. +To do so, go to the *Settings* tab of the repository and select *Secrets* on the left panel. +You can then use the button *New repository secret* to open the secret creation menu where you will enter +the name of the secret and its content. -With Travis CI, you will have to install the [Travis CLI](https://github.com/travis-ci/travis.rb#installation). - -Then, run the following commands from your project root directory to add your Sonatype credentials as -environment variables to your `.travis.yml` file in an encrypted form: - -~~~ bash -$ travis encrypt SONATYPE_USERNAME="(Sonatype user name)" --add -$ travis encrypt SONATYPE_PASSWORD="(Sonatype password)" --add -~~~ - -(Put your actual user name and password in place of `(Sonatype user name)` and `(Sonatype password)`) - -The `--add` option updates your `.travis.yml` file with entries like the following: - -~~~ yaml -env: - global: - - secure: "dllL1w+pZT6yTBYwy5hX07t8r0JL5Cqer6YgYnXJ+q3OhSGUs7ul2fDUiqVxGIgUpTij1cGwBmoJOTbRk2V/be4+3Ua4ZNrAxjNF2ehqUcV5KdC3ufTTTXX0ZoL9MqEIb+GKzKtPqbzR4uly/5q5NbV7J1GeZRhummnx87POl6yH4kmXTpahig7vvnwN5dLanMshRb2Z8tO8kF4SnC31QuNBDQLnS89PEajHQu+LRAJloYvcikm+NeUj79m64CYg9JZdrHvZpIYKOMY1twT+lYoerqzG+asiNE1WrDs/We1RFVgcrKLpEThcvuIxuuPKhu24+0KteAX+7z/ulT0lndyBRfuuDjHV844LrNbjhnTB64V1uF7aEdaEZRLTsFQnFZqzpoqYqxzgfow9LN/kU5CMJX1R4wwf3YgR1VC9ZfjZnu0Pbt24g48I+72ZDNk3oRZoPsN9AtovwdZcg7TgU/iPcHNKSNhEZRP6ryhv/9aX3URLkfhnDaJmTXAnC3YCYt5cGo0FBUHARA+AHcas14Dx95bFSbH7EBivb2LiDmi44goRCWR4p+vNSBJ6Ak1NZz/+paai0pXDG6S/VdqwGSmmfjn7m9H3L5c8X5xNich9qtZbWz0fj2baZGq/doA8KE91JCzX11p/9fKNzbVivQZdsw3C3ZWDjkMZM+hl++0=" -~~~ +Repository Secrets allow us to safely store confidential information and to expose +it to Actions workflows without the risk of committing them to git history. #### Export Your PGP Key Pair @@ -285,72 +255,65 @@ uid Julien Richard-Foy In my case, I have one key pair, whose ID is `BE614499`. -Export your public and private keys into files, in a `ci` directory: - -~~~ bash -$ mkdir ci -$ gpg -a --export (key ID) > ci/pubring.asc -$ gpg -a --export-secret-keys (key ID) > ci/secring.asc -~~~ +Then: + + 1. Create a new Secret containing the passphrase of your PGP key named `PGP_PASSPHRASE`. + 2. Create a new Secret containing the base64 encoded secret of your private key, which you can obtain + by running: +``` +# macOS +gpg --armor --export-secret-keys $LONG_ID | base64 +# Ubuntu (assuming GNU base64) +gpg --armor --export-secret-keys $LONG_ID | base64 -w0 +# Arch +gpg --armor --export-secret-keys $LONG_ID | base64 | sed -z 's;\n;;g' +# FreeBSD (assuming BSD base64) +gpg --armor --export-secret-keys $LONG_ID | base64 +# Windows +gpg --armor --export-secret-keys %LONG_ID% | openssl base64 +``` + 3. Publish your public key signature to a public server, for example [http://keyserver.ubuntu.com:11371](http://keyserver.ubuntu.com:11371/). + You can obtain the signature by running: +``` +# macOS and linux +gpg --armor --export $LONG_ID +# Windows +gpg --armor --export %LONG_ID% +``` (Replace `(key ID)` with **your** key ID) -Add the `ci/pubring.asc` file (which contains your public key) to your repository. The `secring.asc` file -(which contains your private key) should **not** be added as it is to the repository, so make sure it will -be ignored by Git by adding it to the `.gitignore` file: - -~~~ -ci/secring.asc -~~~ - -Encrypt it with the `travis` tool: - -~~~ bash -$ travis encrypt-file ci/secring.asc ci/secring.asc.enc --add -~~~ - -As advised in the command output, make sure to add the `secring.asc.enc` to the git repository. - -The `--add` option above adds a line like the following to your `.travis.yml` file: - -~~~ diff -before_install: - - openssl aes-256-cbc -K $encrypted_602f530300eb_key -iv $encrypted_602f530300eb_iv -in ci/secring.asc.enc -out ci/secring.asc -d -~~~ - -Finally, add export your PGP passphrase to the `.travis.yml` file: - -~~~ -$ travis encrypt PGP_PASSPHRASE="(your passphrase)" --add -~~~ - -(Replace `(your passphrase)` with your actual passphrase) #### Publish From the CI Server -On Travis CI, you can define a -[conditional stage](https://docs.travis-ci.com/user/build-stages/#specifying-stage-order-and-conditions) -publishing the library when a tag is pushed: +On GitHub Actions, you can define a workflow to publish the library when a tag is pushed: ~~~ yaml -jobs: - include: - - stage: test - script: sbt test - - stage: deploy - if: tag =~ ^v - script: sbt publishSigned sonatypeRelease -~~~ +# .github/workflows/release.yml +name: Continuous publication +on: + push: + branches: ['**'] + tags: [v*] -The last step is to tell your build definition how to retrieve the PGP passphrase from the `PGP_PASSPHRASE` -environment variable and to use the `pubring.asc` and `secring.asc` files as the PGP key pair. -Include the following settings in your `build.sbt` file: - -~~~ scala -pgpPublicRing := file("ci/pubring.asc") -pgpSecretRing := file("ci/secring.asc") -pgpPassphrase := sys.env.get("PGP_PASSPHRASE").map(_.toArray) -~~~ +jobs: + release: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + with: + fetch-depth: 0 # fetch all tags, required for sbt-dynver + - uses: olafurpg/setup-scala@v11 + - run: sbt ci-release + env: + PGP_PASSPHRASE: ${{ secrets.PGP_PASSPHRASE }} + PGP_SECRET: ${{ secrets.PGP_SECRET }} + SONATYPE_PASSWORD: ${{ secrets.SONATYPE_PASSWORD }} + SONATYPE_USERNAME: ${{ secrets.SONATYPE_USERNAME }} +~~~ + +The `env` statement exposes the secrets you defined earlier to the publication process through +environment variables. ### Cut a Release @@ -374,19 +337,7 @@ scalaVersion := crossScalaVersions.value.head ~~~ The second line makes sbt use by default the first Scala version of the `crossScalaVersions`. - -Modify the CI jobs to use all the Scala versions of your build definition by using the `+` prefix, -when appropriate: - -~~~ yaml -jobs: - include: - - stage: test - script: sbt +test - - stage: deploy - if: tag =~ ^v - script: sbt +publishSigned sonatypeRelease -~~~ +The CI job will use all the Scala versions of your build definition. ## Publish Online Documentation @@ -589,78 +540,28 @@ can browse it at [https://scalacenter.github.io/library-example/](https://scalac ### Continuous Publication -You need to grant the CI job write access to the Git repository hosting the documentation. This can be achieved -by creating an SSH key that the CI job can use to push the website to GitHub. - -Create an SSH key: +You can extend `.github/workflows/release.yml` to automatically publish documentation to GitHub pages. +To do so, add another job: -~~~ bash -$ ssh-keygen -t rsa -b 4096 -C "sbt-site@travis" -f ci/travis-key -~~~ - -Make sure to **not** define a passphrase (just leave it empty and press enter), and to add the private -key (the `ci/travis-key` file) to your `.gitignore`: - -~~~ -ci/secring.asc -ci/travis-key -~~~ +```yml +# .github/workflows/release.yml +name: Continuous publication -Add the public key, `ci/travis-key.pub`, in the Deploy Keys section of your GitHub project’s settings page: - -![](/resources/images/travis-publishing-key.png) - -Make sure you “allow write access” by checking the box. - -The private key has to be added to the repository, like we did with the PGP private key. Unfortunately, due -to a limitation of Travis CI, you can not add several encrypted files. The -[workaround](https://docs.travis-ci.com/user/encrypting-files/#encrypting-multiple-files) consists in -creating an archive containing all the files to encrypt. In your case, you want to encrypt the PGP -key and the SSH key into a single `ci/secrets.tar` file: - -~~~ bash -$ tar cvf ci/secrets.tar ci/secring.asc ci/travis-key -$ travis encrypt-file ci/secrets.tar ci/secrets.tar.enc --add -~~~ - -Make sure to add the `ci/secrets.tar` file to your `.gitignore`: - -~~~ -ci/secring.asc -ci/travis-key -ci/secrets.tar -~~~ - -Finally, update the `.travis.yml` file to unpack the archive and push the documentation website -on releases: - -~~~ yaml jobs: - include: - - stage: test - # Run tests for all Scala versions - script: sbt +test - name: "Tests" - # Check that the documentation can be built - - script: sbt makeSite - name: "Documentation" - - - stage: deploy - if: tag =~ ^v - script: - # decrypt PGP secret key and GitHub SSH key - - openssl aes-256-cbc -K $encrypted_602f530300eb_key -iv $encrypted_602f530300eb_iv -in ci/secrets.tar.enc -out ci/secrets.tar -d - - tar xvf ci/secrets.tar - # load the key in the ssh-agent - - chmod 600 ci/travis-key - - eval "$(ssh-agent -s)" - - ssh-add ci/travis-key - # perform deployment - - sbt makeSite +publishSigned sonatypeRelease ghpagesPushSite -~~~ - -(Replace the `$encrypted_602f530300eb_key` and `$encrypted_602f530300eb_iv` variables with the ones produced by the -`travis encrypt-file` command) + release: # The release job is not changed, you can find it above + publishSite: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + - uses: olafurpg/setup-scala@v11 + - name: Generate site + run: sbt makeSite + - uses: JamesIves/github-pages-deploy-action@4.1.3 + with: + branch: gh-pages + folder: target/site + +``` As usual, cut a release by pushing a Git tag. The CI server will run the tests, publish the binaries and update the online documentation. @@ -699,14 +600,19 @@ addSbtPlugin("com.geirsson" % "sbt-scalafmt" % "1.5.1") In the `CONTRIBUTING.md` file, mention that you use that code formatter and encourage users to use the “format on save” feature of their editor. -In your `.travis.yml` file, add a first stage checking that the code has been properly formatted: +In your `.github/workflows/ci.yml` file, add a step checking that the code has been properly formatted: ~~~ yaml +# .github/workflows/ci.yml +# The three periods `...` indicate the parts of file that do not change +# from the snippets above and they are omitted for brevity jobs: - include: - - - stage: style - script: sbt scalafmtCheck + ci: + # ... + steps: + # ... + - name: Code style + run: sbt scalafmtCheck ~~~ ## Evolve @@ -732,11 +638,21 @@ Configure it as follow, in `build.sbt`: mimaPreviousArtifacts := previousStableVersion.value.map(organization.value %% name.value % _).toSet ~~~ -Last, add the following job to the “test” stage, in the `.travis.yml` file: +Last, add the following step to the job `ci` of the `Continuous integration` workflow, in the `.github/workflows/ci.yml` file: ~~~ yaml - - script: sbt mimaReportBinaryIssues - name: "Binary compatibility" +# .github/workflows/ci.yml +# The three periods `...` indicate the parts of file that do not change +# from the snippets above and they are omitted for brevity + +# ... +jobs: + ci: + # ... + steps: + # ... + - name: Binary compatibility + run: sbt mimaReportBinaryIssues ~~~ This will check that pull requests don’t make changes that are binary incompatible with the From 797f0f77b1f1b3276c6d281718c1aefaa40ffcc3 Mon Sep 17 00:00:00 2001 From: vincenzobaz Date: Wed, 9 Jun 2021 16:22:36 +0200 Subject: [PATCH 0297/1870] t# This is a combination of 3 commits. Drop Scala 2.11 --- _overviews/contributors/index.md | 41 +++++++++++++++++++------------- 1 file changed, 24 insertions(+), 17 deletions(-) diff --git a/_overviews/contributors/index.md b/_overviews/contributors/index.md index 4421211e15..1c94648972 100644 --- a/_overviews/contributors/index.md +++ b/_overviews/contributors/index.md @@ -50,7 +50,9 @@ Examples of CI servers that are free for open source projects are [GitHub Action [Travis CI](https://travis-ci.com), [Drone](https://drone.io) or [AppVeyor](https://appveyor.com). Our example uses Github Actions. This feature is enabled by default on GitHub repositories. You can verify if that is -the case and enable them in the *Actions* section of the *Settings* tab of the repository. +the case in the *Actions* section of the *Settings* tab of the repository. +If *Disable all actions* is checked, then Actions are not enabled and you can activate them +by selecting *Allow all actions*, *Allow local actions only* or *Allow select actions*. With Actions enabled, you can create a *workflow definition file*. A **workflow** is an automated procedure, composed of one or more jobs. A **job** is a set of sequential steps that are executed on the same runner. @@ -66,7 +68,7 @@ name: Continuous integration on: push jobs: - Tests: + ci: runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 # Retrieve the content of the repository @@ -75,18 +77,23 @@ jobs: run: sbt +test ~~~ -This workflow is called *Continuous integration* and it will run every time one or more commits are pushed to -the repository. It contains only one job called *Tests*, which will run on an Ubuntu runner and that is composed -of three actions. `setup-scala` uses the sbt version specified in `project/build.properties` and the Scala -version defined in your `build.sbt`. +This workflow is called *Continuous integration* and it will run every time one +or more commits are pushed to the repository. It contains only one job called +*ci*, which will run on an Ubuntu runner and that is composed of three +actions. The action `setup-scala` installs the sbt launcher in the runner. Then +the job runs `sbt +test`, which loads the sbt version specified in +`project/build.properties`, and runs the project tests using the Scala version +defined in the file `build.sbt`. -The worfklow above will run at any push to any branch of the repository. You can -specify the branch or add more triggers such as pull requests, releases, tags or -schedules. More information about workflow triggers is available [here](https://docs.github.com/en/actions/reference/events-that-trigger-workflows). -while the `setup-scala` action is hosted [in this repository](https://github.com/olafurpg/setup-scala). +The workflow above will run at any push to any branch of the repository. You +can specify the branch or add more triggers such as pull requests, releases, +tags or schedules. More information about workflow triggers is available +[here](https://docs.github.com/en/actions/reference/events-that-trigger-workflows). +while the `setup-scala` action is hosted [in this +repository](https://github.com/olafurpg/setup-scala). -For reference, here is our complete -[workflow example file](https://github.com/scalacenter/library-example/blob/master/.github/.workflows/ci.yml). +For reference, here is our complete [workflow example +file](https://github.com/scalacenter/library-example/blob/master/.github/.workflows/ci.yml). ## Publish a Release @@ -156,7 +163,7 @@ import xerial.sbt.Sonatype._ sonatypeProjectHosting := Some(GitHubHosting("scalacenter", "library-example", "julien.richard-foy@epfl.ch")) // publish to the sonatype repository -publishTo := sonatypePublishTo.value +publishTo := sonatypePublishToBundle.value ~~~ Put your Sonatype credentials in a `$HOME/.sbt/1.0/sonatype.sbt` file: @@ -289,7 +296,7 @@ gpg --armor --export %LONG_ID% On GitHub Actions, you can define a workflow to publish the library when a tag is pushed: ~~~ yaml -# .github/workflows/release.yml +# .github/workflows/publish.yml name: Continuous publication on: push: @@ -332,7 +339,7 @@ If you have written a library, you probably want it to be usable from several Sc Define the versions you want to support in the `crossScalaVersions` setting, in your `build.sbt` file: ~~~ scala -crossScalaVersions := Seq("2.12.8", "2.11.12") +crossScalaVersions := Seq("2.13.6", "2.12.8") scalaVersion := crossScalaVersions.value.head ~~~ @@ -540,11 +547,11 @@ can browse it at [https://scalacenter.github.io/library-example/](https://scalac ### Continuous Publication -You can extend `.github/workflows/release.yml` to automatically publish documentation to GitHub pages. +You can extend `.github/workflows/publish.yml` to automatically publish documentation to GitHub pages. To do so, add another job: ```yml -# .github/workflows/release.yml +# .github/workflows/publish.yml name: Continuous publication jobs: From 5c24940560a5107139bf93364e562b428a7257a4 Mon Sep 17 00:00:00 2001 From: vincenzobaz Date: Fri, 11 Jun 2021 11:36:15 +0200 Subject: [PATCH 0298/1870] Update dependencies --- _overviews/contributors/index.md | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/_overviews/contributors/index.md b/_overviews/contributors/index.md index 1c94648972..76eb540b80 100644 --- a/_overviews/contributors/index.md +++ b/_overviews/contributors/index.md @@ -72,7 +72,7 @@ jobs: runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 # Retrieve the content of the repository - - uses: olafurpg/setup-scala@v11 # Set up a jdk and sbt + - uses: olafurpg/setup-scala@v12 # Set up a jdk and sbt - name: unit tests # Custom action consisting of a shell command run: sbt +test ~~~ @@ -140,8 +140,8 @@ and [sbt-pgp](https://www.scala-sbt.org/sbt-pgp/) plugins to publish your artifa dependencies to your `project/plugins.sbt` file: ~~~ scala -addSbtPlugin("org.xerial.sbt" % "sbt-sonatype" % "2.4") -addSbtPlugin("com.jsuereth" % "sbt-pgp" % "1.1.0") +addSbtPlugin("org.xerial.sbt" % "sbt-sonatype" % "3.9.7") +addSbtPlugin("com.jsuereth" % "sbt-pgp" % "2.1.1") ~~~ And make sure your build fulfills the [Sonatype requirements](https://central.sonatype.org/publish/requirements) @@ -183,7 +183,7 @@ Last, we recommend using the [sbt-dynver](https://github.com/dwijnand/sbt-dynver of your releases. Add the following dependency to your `project/plugins.sbt` file: ~~~ scala -addSbtPlugin("com.dwijnand" % "sbt-dynver" % "3.1.0") +addSbtPlugin("com.dwijnand" % "sbt-dynver" % "4.1.1") ~~~ And make sure your build does **not** define the `version` setting. @@ -310,7 +310,7 @@ jobs: - uses: actions/checkout@v2 with: fetch-depth: 0 # fetch all tags, required for sbt-dynver - - uses: olafurpg/setup-scala@v11 + - uses: olafurpg/setup-scala@v12 - run: sbt ci-release env: PGP_PASSPHRASE: ${{ secrets.PGP_PASSPHRASE }} @@ -339,7 +339,7 @@ If you have written a library, you probably want it to be usable from several Sc Define the versions you want to support in the `crossScalaVersions` setting, in your `build.sbt` file: ~~~ scala -crossScalaVersions := Seq("2.13.6", "2.12.8") +crossScalaVersions := Seq("2.13.6", "2.12.14") scalaVersion := crossScalaVersions.value.head ~~~ @@ -372,8 +372,8 @@ most other documentation generators, which are based on Ruby, Node.js or Python) To install Paradox and sbt-site, add the following lines to your `project/plugins.sbt` file: ~~~ scala -addSbtPlugin("com.typesafe.sbt" % "sbt-site" % "1.3.2") -addSbtPlugin("com.lightbend.paradox" % "sbt-paradox" % "0.4.4") +addSbtPlugin("com.typesafe.sbt" % "sbt-site" % "1.4.1") +addSbtPlugin("com.lightbend.paradox" % "sbt-paradox" % "0.9.2") ~~~ And then add the following configuration to your `build.sbt` file: @@ -560,7 +560,7 @@ jobs: runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 - - uses: olafurpg/setup-scala@v11 + - uses: olafurpg/setup-scala@v12 - name: Generate site run: sbt makeSite - uses: JamesIves/github-pages-deploy-action@4.1.3 @@ -601,7 +601,7 @@ For instance, to use [scalafmt](https://scalameta.org/scalafmt/), add the follow file: ~~~ scala -addSbtPlugin("com.geirsson" % "sbt-scalafmt" % "1.5.1") +addSbtPlugin("org.scalameta" % "sbt-scalafmt" % "2.4.2") ~~~ In the `CONTRIBUTING.md` file, mention that you use that code formatter and encourage users to use the “format @@ -636,7 +636,7 @@ break this versioning policy. Add the `sbt-mima-plugin` to your build with the f `project/plugins.sbt` file: ~~~ scala -addSbtPlugin("com.typesafe" % "sbt-mima-plugin" % "0.3.0") +addSbtPlugin("com.typesafe" % "sbt-mima-plugin" % "0.9.2") ~~~ Configure it as follow, in `build.sbt`: From f0ee521a5c99065fc84ddb3cd7ed84af9706d12f Mon Sep 17 00:00:00 2001 From: "Lan, Jian" <45252210+ShapelessCat@users.noreply.github.com> Date: Sat, 12 Jun 2021 01:22:07 -0700 Subject: [PATCH 0299/1870] Fix why-scala-3.md The second `LinearSeq` of the clause "traits like `LinearSeq` and `LinearSeq`" should be another trait. --- _overviews/scala3-book/why-scala-3.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/_overviews/scala3-book/why-scala-3.md b/_overviews/scala3-book/why-scala-3.md index 1c23d1e7f0..e5f317f9f3 100644 --- a/_overviews/scala3-book/why-scala-3.md +++ b/_overviews/scala3-book/why-scala-3.md @@ -45,7 +45,7 @@ For instance, a `List` is defined as a class---technically it’s an abstract cl val x = List(1, 2, 3) ``` -However, what appears to the programmer to be a simple `List` is actually built from a combination of several specialized types, including an abstract class named `AbstractSeq`, traits like `LinearSeq` and `LinearSeq`, and more. +However, what appears to the programmer to be a simple `List` is actually built from a combination of several specialized types, including an abstract class named `AbstractSeq`, traits like `LinearSeq` and `LinearSeqOps`, and more. Those types are similarly composed of other small, modular units of code. In addition to building a type like `List` from a series of modular traits, the `List` API also consists of dozens of other methods, many of which are higher-order functions: From 273a57fd4fa472fc3248a1a26703daeaa593ced4 Mon Sep 17 00:00:00 2001 From: Julien Richard-Foy Date: Wed, 9 Jun 2021 18:15:48 +0200 Subject: [PATCH 0300/1870] Suggestions in the Scala book MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit I’ve reviewed the chapters Methods, Functions, and Packaging and Imports. --- .../scala3-book/fun-anonymous-functions.md | 4 +- _overviews/scala3-book/fun-hofs.md | 32 ++++++------ .../scala3-book/fun-write-map-function.md | 4 +- _overviews/scala3-book/methods-intro.md | 2 +- .../scala3-book/methods-main-methods.md | 4 +- _overviews/scala3-book/methods-most.md | 25 ++++----- _overviews/scala3-book/packaging-imports.md | 51 +++++++++++-------- 7 files changed, 65 insertions(+), 57 deletions(-) diff --git a/_overviews/scala3-book/fun-anonymous-functions.md b/_overviews/scala3-book/fun-anonymous-functions.md index c771c1458c..39d87da216 100644 --- a/_overviews/scala3-book/fun-anonymous-functions.md +++ b/_overviews/scala3-book/fun-anonymous-functions.md @@ -116,7 +116,7 @@ In other examples, you can simplify your anonymous functions further. For instance, beginning with the most explicit form, you can print each element in `ints` using this anonymous function with the `List` class `foreach` method: ```scala -ints.foreach((i:Int) => println(i)) +ints.foreach((i: Int) => println(i)) ``` As before, the `Int` declaration isn’t required, and because there’s only one argument, the parentheses around `i` aren’t needed: @@ -131,7 +131,7 @@ Because `i` is used only once in the body of the function, the expression can be ints.foreach(println(_)) ``` -Finally, if an anonymous function consists of one statement that takes a single argument, you don’t need to explicitly name and specify the argument, so the statement can finally be reduced to this: +Finally, if an anonymous function consists of one method call that takes a single argument, you don’t need to explicitly name and specify the argument, so you can finally write only the name of the method (here, `println`): ```scala ints.foreach(println) diff --git a/_overviews/scala3-book/fun-hofs.md b/_overviews/scala3-book/fun-hofs.md index c8d93c46ef..0985c38ea2 100644 --- a/_overviews/scala3-book/fun-hofs.md +++ b/_overviews/scala3-book/fun-hofs.md @@ -37,7 +37,7 @@ As a beneficial side effect of this discussion, once you’re comfortable with t To understand how higher-order functions work, it helps to dig into an example. For instance, you can understand the type of functions `filter` accepts by looking at its Scaladoc. -Here’s the `filter` definition in the `List` class: +Here’s the `filter` definition in the `List[A]` class: ```scala def filter(p: (A) => Boolean): List[A] @@ -102,7 +102,7 @@ Here’s how this works: It’s just like naming a `String` parameter `s` or an `Int` parameter `i`. - The type signature of `f` specifies the *type* of the functions this method will accept. - The `()` portion of `f`’s signature (on the left side of the `=>` symbol) states that `f` takes no input parameters. -- The `Unit` portion of the signature (on the right side of the `=>` symbol) indicates that `f` should return nothing. +- The `Unit` portion of the signature (on the right side of the `=>` symbol) indicates that `f` should not return a meaningful result. - Looking back at the body of the `sayHello` method (on the right side of the `=` symbol), the `f()` statement there invokes the function that’s passed in. Now that we’ve defined `sayHello`, let’s create a function to match `f`’s signature so we can test it. @@ -148,7 +148,7 @@ The only thing to do now is see a few more examples of how to define different t In this method: ```scala -def sayHello(f: () => Unit) +def sayHello(f: () => Unit): Unit ``` We noted that the type signature for `f` is: @@ -157,7 +157,7 @@ We noted that the type signature for `f` is: () => Unit ``` -We know that this means, “a function that takes no input parameters and returns nothing (given by `Unit`).” +We know that this means, “a function that takes no input parameters and returns nothing meaningful (given by `Unit`).” To demonstrate more type signature examples, here’s a function that takes a `String` parameter and returns an `Int`: @@ -255,40 +255,40 @@ executeAndPrint(multiply, 3, 9) // prints 27 ## Function type signature consistency -A great thing about learning about Scala’s function type signatures is that the syntax you use to define function input parameters is the same syntax you use to write anonymous functions and function variables. +A great thing about learning about Scala’s function type signatures is that the syntax you use to define function input parameters is the same syntax you use to write function literals. -For instance, if you were to write an anonymous function that calculates the sum of two integers, you’d write it like this: +For instance, if you were to write a function that calculates the sum of two integers, you’d write it like this: ```scala -(Int, Int) => Int = (a, b) => a + b +val f: (Int, Int) => Int = (a, b) => a + b ``` That code consists of the type signature: ```` -(Int, Int) => Int = (a, b) => a + b ------------------ +val f: (Int, Int) => Int = (a, b) => a + b + ----------------- ```` The input parameters: ```` -(Int, Int) => Int = (a, b) => a + b - ------ +val f: (Int, Int) => Int = (a, b) => a + b + ------ ```` and the body of the function: ```` -(Int, Int) => Int = (a, b) => a + b - ----- +val f: (Int, Int) => Int = (a, b) => a + b + ----- ```` -Scala’s consistency is shown here, where this anonymous function type signature: +Scala’s consistency is shown here, where this function type: ```` -(Int, Int) => Int = (a, b) => a + b ------------------ +val f: (Int, Int) => Int = (a, b) => a + b + ----------------- ```` is the same as the type signature you use to define a function input parameter: diff --git a/_overviews/scala3-book/fun-write-map-function.md b/_overviews/scala3-book/fun-write-map-function.md index 633d9b8fb8..74cab95213 100644 --- a/_overviews/scala3-book/fun-write-map-function.md +++ b/_overviews/scala3-book/fun-write-map-function.md @@ -66,7 +66,7 @@ As a bonus, notice that the `for` expression doesn’t do anything that depends Therefore, you can replace `Int` in the type signature with the generic type parameter `B`: ```scala -def map[A,B](f: (B) => A, xs: List[B]): List[A] = +def map[A, B](f: (B) => A, xs: List[B]): List[A] = for x <- xs yield f(x) ``` @@ -76,7 +76,7 @@ These examples demonstrate that `map` works as desired: ```scala def double(i : Int) = i * 2 -map(double, List(1, 2, 3)) // List(2,4,6) +map(double, List(1, 2, 3)) // List(2, 4, 6) def strlen(s: String) = s.length map(strlen, List("a", "bb", "ccc")) // List(1, 2, 3) diff --git a/_overviews/scala3-book/methods-intro.md b/_overviews/scala3-book/methods-intro.md index a6bf3e2fff..1c1414746c 100644 --- a/_overviews/scala3-book/methods-intro.md +++ b/_overviews/scala3-book/methods-intro.md @@ -9,7 +9,7 @@ next-page: methods-most In Scala 2, _methods_ can be defined inside classes, traits, objects, case classes, and case objects. -But it gets better: In Scala 3 they can also be defined _outside_ any of those constructs with a new feature named Toplevel definitions. +But it gets better: In Scala 3 they can also be defined _outside_ any of those constructs; we say that they are "top-level" definitions, since they are not nested in another definition. In short, methods can now be defined anywhere. Many features of methods are demonstrated in the next section. diff --git a/_overviews/scala3-book/methods-main-methods.md b/_overviews/scala3-book/methods-main-methods.md index 1077e238a2..bee342a45f 100644 --- a/_overviews/scala3-book/methods-main-methods.md +++ b/_overviews/scala3-book/methods-main-methods.md @@ -11,7 +11,7 @@ next-page: methods-summary Scala 3 offers a new way to define programs that can be invoked from the command line: Adding a `@main` annotation to a method turns it into entry point of an executable program: ```scala -@main def hello = println("Hello, world") +@main def hello() = println("Hello, world") ``` Just save that line of code in a file named something like *Hello.scala*---the filename doesn’t have to match the method name---and compile it with `scalac`: @@ -81,7 +81,7 @@ Illegal command line: java.lang.NumberFormatException: For input string: "sixty" The Scala compiler generates a program from an `@main` method `f` as follows: - It creates a class named `f` in the package where the `@main` method was found. -- The class has a static method `main` with the usual signature: It takes an `Array[String]` as argument and returns `Unit`. +- The class has a static method `main` with the usual signature of a Java `main` method: it takes an `Array[String]` as argument and returns `Unit`. - The generated `main` method calls method `f` with arguments converted using methods in the `scala.util.CommandLineParser` object. For instance, the `happyBirthday` method above generates additional code equivalent to the following class: diff --git a/_overviews/scala3-book/methods-most.md b/_overviews/scala3-book/methods-most.md index ac2140a41b..233c51b847 100644 --- a/_overviews/scala3-book/methods-most.md +++ b/_overviews/scala3-book/methods-most.md @@ -7,16 +7,16 @@ previous-page: methods-intro next-page: methods-main-methods --- -This section introduces the various aspects of how to define and call methods in Scala 2. +This section introduces the various aspects of how to define and call methods in Scala 3. ## Defining Methods Scala methods have many features, including these: - Generic (type) parameters -- Automatically provided `using` parameters - Default parameter values - Multiple parameter groups +- Context-provided parameters - By-name parameters - ... @@ -63,7 +63,7 @@ The Scala collections classes have dozens of built-in methods. These examples show how to call them: ```scala -val x = List(1,2,3) +val x = List(1, 2, 3) x.size // 3 x.contains(1) // true @@ -102,7 +102,7 @@ res0: Int = 4 ``` Notice that there’s no need for a `return` statement at the end of the method. -Because almost everything in Scala is an _expression_---meaning that each line of code returns (or _evaluates to) a value---there’s no need to use `return`. +Because almost everything in Scala is an _expression_---meaning that each line of code returns (or _evaluates to_) a value---there’s no need to use `return`. This becomes more clear when you condense that method and write it on one line: @@ -118,6 +118,7 @@ The body of a method can use all the different features of the language: - `for` loops and `for` expressions - Variable assignments - Calls to other methods +- Definitions of other methods As an example of a real-world multiline method, this `getStackTraceAsString` method converts its `Throwable` input parameter into a well-formatted `String`: @@ -202,10 +203,10 @@ When a method takes no parameters, it’s said to have an _arity_ level of _arit Similarly, when a method takes one parameter it’s an _arity-1_ method. When you create arity-0 methods: -- If the method has side effects, such as calling `println`, declare the method with empty parentheses -- If the method does not have side effects---such as getting the size of a collection, which is similar to accessing a field on the collection---leave the parentheses off +- If the method performs side effects, such as calling `println`, declare the method with empty parentheses +- If the method does not perform side effects---such as getting the size of a collection, which is similar to accessing a field on the collection---leave the parentheses off -For example, this method has a side effect, so it’s declared with empty parentheses: +For example, this method performs a side effect, so it’s declared with empty parentheses: ```scala def speak() = println("hi") @@ -218,7 +219,7 @@ speak // error: "method speak must be called with () argument" speak() // prints "hi" ``` -While this is just a convention, following it dramatically improves code readability: It makes it easier to understand at a glance that an arity-0 method has side effects. +While this is just a convention, following it dramatically improves code readability: It makes it easier to understand at a glance that an arity-0 method performs side effects. {% comment %} Some of that wording comes from this page: https://docs.scala-lang.org/style/method-invocation.html @@ -233,7 +234,7 @@ Here’s a method named `isTruthy` that implements the Perl definitions of `true ```scala def isTruthy(a: Any) = - if a == 0 || a == "" then + if a == 0 || a == "" || a == false then false else true @@ -257,7 +258,7 @@ Here’s another version of `isTruthy`, written with a `match` expression : ```scala def isTruthy(a: Matchable) = a match - case 0 | "" => false + case 0 | "" | false => false case _ => true ``` @@ -279,7 +280,7 @@ d.speak() // prints "Woof" ``` Methods can also be marked as `private`. -This makes them private to the current class, and they can’t be overridden in subclasses: +This makes them private to the current class, so they can’t be called nor overridden in subclasses: ```scala class Animal: @@ -290,7 +291,7 @@ class Cat extends Animal: override def breathe() = println("Yo, I’m totally breathing") ``` -If you want to make a method private to the current class and also allow subclasses to override it, mark the method as `protected`, as shown with the `speak` method in this example: +If you want to make a method private to the current class and also allow subclasses to call it or override it, mark the method as `protected`, as shown with the `speak` method in this example: ```scala class Animal: diff --git a/_overviews/scala3-book/packaging-imports.md b/_overviews/scala3-book/packaging-imports.md index b34071123d..ef3b9a16c1 100644 --- a/_overviews/scala3-book/packaging-imports.md +++ b/_overviews/scala3-book/packaging-imports.md @@ -33,26 +33,33 @@ package com.acme.myapp.model class Person ... ``` -By convention, package names should be all lower case, and the formal naming convention is *...*. +By convention, package names should be all lower case, and the formal naming convention is *\.\.\.\*. Although it’s not required, package names typically follow directory structure names, so if you follow this convention, a `Person` class in this project will be found in a *MyApp/src/main/scala/com/acme/myapp/model/Person.scala* file. -### Curly brace packaging style +### Using multiple packages in the same file -The other way to declare packages in Scala is by using the curly brace namespace notation used in languages like C, C++, and C#: +The syntax shown above applies to the entire source file: all the definitions in the file +`Person.scala` belong to package `com.acme.myapp.model`, according to the package clause +at the beginning of the file. + +Alternatively, it is possible to write package clauses that apply only to the definitions +they contain: ```scala -package users { - package administrators { - class AdminUser - } - package normalusers { - class NormalUser - } -} +package users: + + package administrators: // the full name of this package is users.administrators + class AdminUser // the full name of this class is users.administrators.AdminUser + + package normalusers: // the full name of this package is users.normalusers + class NormalUser // the full name of this class is users.normalusers.NormalUser ``` +Note that the package names are followed by a colon, and that the defininitions within +a package are indented. + The advantages of this approach are that it allows for package nesting, and provides more obvious control of scope and encapsulation, especially within the same file. @@ -92,27 +99,27 @@ A note before moving on: In Scala you can import one member from a package like this: ```scala -import java.io.File +import scala.concurrent.Future ``` and multiple members like this: ```scala -import java.io.File -import java.io.IOException -import java.io.FileNotFoundException +import scala.concurrent.Future +import scala.concurrent.Promise +import scala.concurrent.blocking ``` When importing multiple members, you can import them more concisely like this: ```scala -import java.io.{File, IOException, FileNotFoundException} +import scala.concurrent.{Future, Promise, blocking} ``` -When you want to import everything from the *java.io* package, use this syntax: +When you want to import everything from the *scala.concurrent* package, use this syntax: ```scala -import java.io.* +import scala.concurrent.* ``` @@ -170,13 +177,13 @@ val res0: java.util.ArrayList[String] = [] Because those Java classes are hidden, you can also use the Scala `List`, `Set`, and `Map` classes without having a naming collision: ```scala -scala> val a = List(1,2,3) +scala> val a = List(1, 2, 3) val a: List[Int] = List(1, 2, 3) -scala> val b = Set(1,2,3) +scala> val b = Set(1, 2, 3) val b: Set[Int] = Set(1, 2, 3) -scala> val c = Map(1->1, 2->2) +scala> val c = Map(1 -> 1, 2 -> 2) val c: Map[Int, Int] = Map(1 -> 1, 2 -> 2) ``` @@ -241,7 +248,7 @@ Two packages are implicitly imported into the scope of all of your source code f - java.lang.* - scala.* -The Scala `Predef` object is also imported by default. +The members of the Scala object `Predef` are also imported by default. > If you ever wondered why you can use classes like `List`, `Vector`, `Map`, etc., without importing them, they’re available because of definitions in the `Predef` object. From 08ede3bd71d7e400206b247beaf213065bf2535d Mon Sep 17 00:00:00 2001 From: Todd O'Bryan Date: Mon, 14 Jun 2021 01:06:14 -0700 Subject: [PATCH 0301/1870] Update quotes.md (#2047) I think the first two things are just typos. The third seems much easier for me, as a native English speaker, to understand. --- _overviews/scala3-macros/tutorial/quotes.md | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/_overviews/scala3-macros/tutorial/quotes.md b/_overviews/scala3-macros/tutorial/quotes.md index fe99cb4260..a772b23f8f 100644 --- a/_overviews/scala3-macros/tutorial/quotes.md +++ b/_overviews/scala3-macros/tutorial/quotes.md @@ -14,7 +14,7 @@ Intuitively, the code directly within the quote is not executed now, while the c ```scala val msg = Expr("Hello") -val printHello = '{ print($hello) } +val printHello = '{ print($msg) } println(printHello.show) // print("Hello") ``` @@ -46,7 +46,8 @@ def myBadCounter2(using Quotes): Expr[Int] = '{ } ``` Clearly, this should not work as the variable does not exist yet. -To make sure you can only write programs that do not contain these kinds of problems we restrict the set of references to variable and other definitions. + +To make sure you cannot write programs that contain these kinds of problems, we restrict the kinds of references allowed in quote environments. We introduce _levels_ as a count of the number of quotes minus the number of splices surrounding an expression or definition. From e70abc8308d1d262ade788c96a11d27745815c02 Mon Sep 17 00:00:00 2001 From: Julien Richard-Foy Date: Wed, 2 Jun 2021 15:59:37 +0200 Subject: [PATCH 0302/1870] Some suggestions in the Scala 3 book --- _overviews/scala3-book/introduction.md | 4 +- _overviews/scala3-book/scala-features.md | 38 ++++----- _overviews/scala3-book/taste-collections.md | 12 ++- .../scala3-book/taste-control-structures.md | 17 ++-- _overviews/scala3-book/taste-functions.md | 4 +- _overviews/scala3-book/taste-methods.md | 2 +- _overviews/scala3-book/taste-modeling.md | 14 +-- _overviews/scala3-book/taste-objects.md | 4 +- _overviews/scala3-book/why-scala-3.md | 85 ++++++++++--------- scala3/contribute-to-docs.md | 2 +- 10 files changed, 90 insertions(+), 92 deletions(-) diff --git a/_overviews/scala3-book/introduction.md b/_overviews/scala3-book/introduction.md index c2e131e26c..3d3558203d 100644 --- a/_overviews/scala3-book/introduction.md +++ b/_overviews/scala3-book/introduction.md @@ -12,8 +12,8 @@ The goal of this book is to provide an informal introduction to the Scala langua It touches on all Scala topics, in a relatively light manner. If at any time while you’re reading this book and want more information on a specific feature, you’ll find links to our [_Reference_ documentation][reference], which covers many new features of the Scala language in more detail. -Over the course of this book, we hope to demonstrate that Scala is a beautiful, expressive programming language, with a clean, modern syntax, and supports functional programming (FP), object-oriented programming (OOP), and a fusion of FP and OOP in a typed setting. -Scala’s syntax, grammar, and features have been re-thought, debated in an open process, and updated in 2020 to be more clear and easier to understand than ever before. +Over the course of this book, we hope to demonstrate that Scala is a beautiful, expressive programming language, with a clean, modern syntax, which supports functional programming (FP) and object-oriented programming (OOP), and that provides a safe static type system. +Scala’s syntax, grammar, and features have been re-thought, debated in an open process, and updated in 2020 to be clearer and easier to understand than ever before. The book begins with a whirlwind tour of many of Scala’s features in the [“A Taste of Scala” section][taste]. After that tour, the sections that follow it provide more details on those language features. diff --git a/_overviews/scala3-book/scala-features.md b/_overviews/scala3-book/scala-features.md index 048d7e4519..f0c8efb129 100644 --- a/_overviews/scala3-book/scala-features.md +++ b/_overviews/scala3-book/scala-features.md @@ -30,8 +30,8 @@ Looking at Scala from the proverbial “30,000 foot view,” you can make the fo - It has a concise, readable syntax - It’s statically-typed (but feels dynamic) - It has an expressive type system -- It’s a pure functional programming (FP) language -- It’s a pure object-oriented programming (OOP) language +- It’s a functional programming (FP) language +- It’s an object-oriented programming (OOP) language - It supports the fusion of FP and OOP - Contextual abstractions provide a clear way to implement _term inference_ - It runs on the JVM (and in the browser) @@ -63,7 +63,7 @@ val newNumbers = double(oldNumbers) ``` That code instructs the compiler what to do on a step-by-step basis. -Instead, we write high-level, functional code using higher-order functions and lambdas like this to achieve the same effect: +Instead, we write high-level, functional code using higher-order functions and lambdas like this to compute the same result: ```scala val newNumbers = oldNumbers.map(_ * 2) @@ -92,7 +92,7 @@ nums.filter(i => i > 1) nums.filter(_ > 1) ``` -And traits, classes, and methods are defined with a clean, light syntax: +Traits, classes, and methods are defined with a clean, light syntax: ```scala trait Animal: @@ -128,15 +128,13 @@ As Heather Miller states, Scala is considered to be a [strong, statically-typed - Correctness: you catch most errors at compile-time - Great IDE support - - Code completion + - Reliable code completion - Catching errors at compile-time means catching mistakes as you type - Easy and reliable refactoring - - Reliable code completion - You can refactor your code with confidence - Method type declarations tell readers what the method does, and help serve as documentation -- Types make your code easier to maintain -- Scalability: types help ensure correctness across arbitrarily large applications and development teams -- Strong typing in combination with excellent inference enables mechanisms like [contextual abstraction]({{ site.scala3ref }}/contextual/motivation.html) that allows you to omit boilerplate code. Often, this boilerplate code can be inferred by the compiler, based on type definitions and a given context (e.g. method arguments for implicit parameters). +- Scalability and maintainability: types help ensure correctness across arbitrarily large applications and development teams +- Strong typing in combination with excellent inference enables mechanisms like [contextual abstraction]({{ site.scala3ref }}/contextual/motivation.html) that allows you to omit boilerplate code. Often, this boilerplate code can be inferred by the compiler, based on type definitions and a given context. {% comment %} In that list: @@ -156,11 +154,11 @@ In that list: - i removed these items until we can replace them: * [Compound types](/tour/compound-types.html) -* [Implicit parameters](/tour/implicit-parameters.html) and [conversions](/tour/implicit-conversions.html) +* [conversions](/tour/implicit-conversions.html) * [Explicitly typed self references](/tour/self-types.html) {% endcomment %} -Scala’s expressive type system enforces, at compile-time, that abstractions are used in a safe and coherent manner. +Scala’s type system enforces, at compile-time, that abstractions are used in a safe and coherent manner. In particular, the type system supports: - [Type inference](/tour/type-inference.html) @@ -187,11 +185,11 @@ In particular, the type system supports: In combination, these features provide a powerful basis for the safe reuse of programming abstractions and for the type-safe extension of software. -### A pure FP language +### A functional programming language Scala is a functional programming (FP) language, meaning: -- Functions are variables, and can be passed around like any other variable +- Functions are values, and can be passed around like any other value - Higher-order functions are directly supported - Lambdas are built in - Everything in Scala is an expression that returns a value @@ -200,10 +198,10 @@ Scala is a functional programming (FP) language, meaning: - Those collection classes come with dozens of functional methods: they don’t mutate the collection, but instead return an updated copy of the data -### A pure OOP language +### An object-oriented language -Scala is a _pure_ object-oriented programming (OOP) language. -Every variable is an object and every “operator” is a method. +Scala is an object-oriented programming (OOP) language. +Every value is an instance of a class and every “operator” is a method. In Scala, all types inherit from a top-level class `Any`, whose immediate children are `AnyVal` (_value types_, such as `Int` and `Boolean`) and `AnyRef` (_reference types_, as in Java). This means that the Java distinction between primitive types and boxed types (e.g. `int` vs. `Integer`) isn’t present in Scala. @@ -236,9 +234,9 @@ Following Haskell, Scala was the second popular language to have some form of _i In Scala 3 these concepts have been completely re-thought and more clearly implemented. The core idea is _term inference_: Given a type, the compiler synthesizes a “canonical” term that has that type. -In Scala, an implicit parameter directly leads to an inferred argument term that could also be written down explicitly. +In Scala, a context parameter directly leads to an inferred argument term that could also be written down explicitly. -Use cases for this concept include implementing type classes, establishing context, dependency injection, expressing capabilities, computing new types, and proving relationships between them. +Use cases for this concept include implementing [type classes]({% link _overviews/scala3-book/ca-type-classes.md %}), establishing context, dependency injection, expressing capabilities, computing new types, and proving relationships between them. Scala 3 makes this process more clear than ever before. Read about contextual abstractions in the [Reference documentation]({{ site.scala3ref }}/contextual/motivation.html). @@ -442,7 +440,7 @@ Serialization: - [ScalaPB](https://github.com/scalapb/ScalaPB) -Science and data analysis: +### Science and data analysis: - [Algebird](https://github.com/twitter/algebird) - [Spire](https://github.com/typelevel/spire) @@ -461,7 +459,7 @@ Science and data analysis: - [TensorFlow Scala](https://github.com/eaplatanios/tensorflow_scala) -### FP & FRP +### Functional Programming & Functional Reactive Programming FP: diff --git a/_overviews/scala3-book/taste-collections.md b/_overviews/scala3-book/taste-collections.md index e40b85887b..67fdbc1d61 100644 --- a/_overviews/scala3-book/taste-collections.md +++ b/_overviews/scala3-book/taste-collections.md @@ -60,15 +60,13 @@ nums.map(_.toUpperCase) // List("ONE", "TWO") nums.flatMap(_.toUpperCase) // List('O', 'N', 'E', 'T', 'W', 'O') ``` -These examples show how the “fold” and “reduce” methods are used to sum the values in a sequence of integers: +These examples show how the “foldLeft” and “reduceLeft” methods are used to sum the values in a sequence of integers: ```scala val firstTen = (1 to 10).toList // List(1, 2, 3, 4, 5, 6, 7, 8, 9, 10) -firstTen.reduce(_ + _) // 55 firstTen.reduceLeft(_ + _) // 55 -firstTen.fold(100)(_ + _) // 155 (100 is a “seed” value) -firstTen.foldLeft(100)(_ + _) // 155 +firstTen.foldLeft(100)(_ + _) // 155 (100 is a “seed” value) ``` There are many more methods available to Scala collections classes, and they’re demonstrated in the [Collections chapter][collections], and in the [API Documentation][api]. @@ -93,9 +91,9 @@ val t = (11, "eleven", Person("Eleven")) Once you have a tuple, you can access its values by binding them to variables, or access them by number: ```scala -t._1 // 11 -t._2 // "eleven" -t._3 // Person("Eleven") +t(0) // 11 +t(1) // "eleven" +t(2) // Person("Eleven") ``` You can also use this _extractor_ approach to assign the tuple fields to variable names: diff --git a/_overviews/scala3-book/taste-control-structures.md b/_overviews/scala3-book/taste-control-structures.md index a527f603d2..5c30f73da4 100644 --- a/_overviews/scala3-book/taste-control-structures.md +++ b/_overviews/scala3-book/taste-control-structures.md @@ -186,7 +186,7 @@ This example shows (a) how to use a `match` expression as the body of a method, ```scala // getClassAsString is a method that takes a single argument of any type. -def getClassAsString(x: Any): String = x match +def getClassAsString(x: Matchable): String = x match case s: String => s"'$s' is a String" case i: Int => "Int" case d: Double => "Double" @@ -199,6 +199,10 @@ getClassAsString("hello") // 'hello' is a String getClassAsString(List(1, 2, 3)) // List ``` +The method `getClassAsString` takes as a parameter a value of type [Matchable]({{ site.scala3ref }}/other-new-features/matchable.html), which can be +any type supporting pattern matching (some types don’t support pattern matching because this could +break encapsulation). + There’s _much_ more to pattern matching in Scala. Patterns can be nested, results of patterns can be bound, and pattern matching can even be user-defined. See the pattern matching examples in the [Control Structures chapter][control] for more details. @@ -231,29 +235,26 @@ It’s one-line syntax looks like this: while x >= 0 do x = f(x) ``` -Again, Scala’s control structure syntax is flexible, and you can write this code in different ways depending on your preferences: +In Scala 2, the syntax was a bit different. The condition was surrounded by parentheses, and +there was no `do` keyword: ```scala while (x >= 0) do x = f(x) while (x >= 0) { x = f(x) } ``` +Scala 3 still supports the Scala 2 syntax for the sake of compatibility. + The `while` loop multiline syntax looks like this: ```scala var x = 1 -// without parentheses while x < 3 do println(x) x += 1 - -// with parentheses -while (x < 3) - println(x) - x += 1 ``` diff --git a/_overviews/scala3-book/taste-functions.md b/_overviews/scala3-book/taste-functions.md index 7977f6d600..b103dba666 100644 --- a/_overviews/scala3-book/taste-functions.md +++ b/_overviews/scala3-book/taste-functions.md @@ -11,13 +11,13 @@ next-page: taste-objects Scala has most features you’d expect in a functional programming language, including: -- Lambdas +- Lambdas (anonymous functions) - Higher-order functions (HOFs) - Immutable collections in the standard library Lambdas, also known as _anonymous functions_, are a big part of keeping your code concise but readable. -The `map` method of the `List` class is a typical example of a higher-order function---a function that takes a lambda as parameter. +The `map` method of the `List` class is a typical example of a higher-order function---a function that takes a function as parameter. These two examples are equivalent, and show how to multiply each number in a list by `2` by passing a lambda into the `map` method: diff --git a/_overviews/scala3-book/taste-methods.md b/_overviews/scala3-book/taste-methods.md index 011ba23bd7..2718059bb1 100644 --- a/_overviews/scala3-book/taste-methods.md +++ b/_overviews/scala3-book/taste-methods.md @@ -128,7 +128,7 @@ extension (s: String) ## See also Scala Methods can be much more powerful: they can take type parameters and context parameters. -They are covered in detail in the [Data Modeling][data-1] section. +They are covered in detail in the [Domain Modeling][data-1] section. diff --git a/_overviews/scala3-book/taste-modeling.md b/_overviews/scala3-book/taste-modeling.md index aaee4fa19a..20c605c6f9 100644 --- a/_overviews/scala3-book/taste-modeling.md +++ b/_overviews/scala3-book/taste-modeling.md @@ -81,7 +81,7 @@ c.stopRunning() // "No need to stop" ``` If that code makes sense---great, you’re comfortable with traits as interfaces. -If not, don’t worry, they’re explained in more detail in the [Data Modeling][data-1] chapter. +If not, don’t worry, they’re explained in more detail in the [Domain Modeling][data-1] chapter. ### Classes @@ -106,7 +106,7 @@ Notice that the class declaration creates a constructor: val p = Person("John", "Stephens") ``` -Constructors and other class-related topics are covered in the [Data Modeling][data-1] chapter. +Constructors and other class-related topics are covered in the [Domain Modeling][data-1] chapter. ## FP Domain Modeling @@ -170,7 +170,7 @@ enum Nat: case Succ(pred: Nat) ``` -Enums are covered in detail in the [Data Modeling][data-1] section of this book, and in the [Reference documentation]({{ site.scala3ref }}/enums/enums.html). +Enums are covered in detail in the [Domain Modeling][data-1] section of this book, and in the [Reference documentation]({{ site.scala3ref }}/enums/enums.html). ### Case classes @@ -183,7 +183,7 @@ When the compiler sees the `case` keyword in front of a `class` it has these eff - An `unapply` method is generated, which lets you use case classes in more ways in `match` expressions. - A `copy` method is generated in the class. This provides a way to create updated copies of the object without changing the original object. -- `equals` and `hashCode` methods are generated. +- `equals` and `hashCode` methods are generated to implement structural equality. - A default `toString` method is generated, which is helpful for debugging. @@ -206,7 +206,7 @@ case class Person( val p = Person("Reginald Kenneth Dwight", "Singer") // a good default toString method -p // Person = Person(Reginald Kenneth Dwight,Singer) +p // : Person = Person(Reginald Kenneth Dwight,Singer) // can access its fields, which are immutable p.name // "Reginald Kenneth Dwight" @@ -215,10 +215,10 @@ p.name = "Joe" // error: can’t reassign a val field // when you need to make a change, use the `copy` method // to “update as you copy” val p2 = p.copy(name = "Elton John") -p2 // Person = Person(Elton John,Singer) +p2 // : Person = Person(Elton John,Singer) ``` -See the [Data Modeling][data-1] sections for many more details on `case` classes. +See the [Domain Modeling][data-1] sections for many more details on `case` classes. diff --git a/_overviews/scala3-book/taste-objects.md b/_overviews/scala3-book/taste-objects.md index 1ba49e30d6..ae522627f1 100644 --- a/_overviews/scala3-book/taste-objects.md +++ b/_overviews/scala3-book/taste-objects.md @@ -1,7 +1,7 @@ --- -title: Objects +title: Singleton Objects type: section -description: This section provides an introduction to the use of objects in Scala 3. +description: This section provides an introduction to the use of singleton objects in Scala 3. num: 12 previous-page: taste-functions next-page: taste-collections diff --git a/_overviews/scala3-book/why-scala-3.md b/_overviews/scala3-book/why-scala-3.md index e5f317f9f3..e6c5b2bd96 100644 --- a/_overviews/scala3-book/why-scala-3.md +++ b/_overviews/scala3-book/why-scala-3.md @@ -45,7 +45,7 @@ For instance, a `List` is defined as a class---technically it’s an abstract cl val x = List(1, 2, 3) ``` -However, what appears to the programmer to be a simple `List` is actually built from a combination of several specialized types, including an abstract class named `AbstractSeq`, traits like `LinearSeq` and `LinearSeqOps`, and more. +However, what appears to the programmer to be a simple `List` is actually built from a combination of several specialized types, including abstract classes named `Iterable`, `Seq`, and `LinearSeq`. Those types are similarly composed of other small, modular units of code. In addition to building a type like `List` from a series of modular traits, the `List` API also consists of dozens of other methods, many of which are higher-order functions: @@ -67,7 +67,7 @@ The `List` class is immutable, so all of those methods return new values, as sho ## 2) A dynamic feel Scala’s _type inference_ often makes the language feel dynamically typed, even though it’s statically typed. -This is true with variable assignment: +This is true with variable declaration: ```scala val a = 1 @@ -108,7 +108,7 @@ val b: Password | Username = if (true) name else password ## 3) Concise syntax -Scala is a low ceremony, “concise but still readable” language. For instance, variable type assignment is concise: +Scala is a low ceremony, “concise but still readable” language. For instance, variable declaration is concise: ```scala val a = 1 @@ -120,8 +120,8 @@ Creating types like traits, classes, and enumerations are concise: ```scala trait Tail: - def wagTail: Unit - def stopTail: Unit + def wagTail(): Unit + def stopTail(): Unit enum Topping: case Cheese, Pepperoni, Sausage, Mushrooms, Onions @@ -151,7 +151,7 @@ All of these expressions and many more are concise, and still very readable: wha Implicits in Scala 2 were a major distinguishing design feature. They represented _the_ fundamental way to abstract over context, with a unified paradigm that served a great variety of use cases, among them: -- Implementing type classes +- Implementing [type classes]({% link _overviews/scala3-book/ca-type-classes.md %}) - Establishing context - Dependency injection - Expressing capabilities @@ -208,7 +208,7 @@ See that chapter for more details on these features. Scala can be used on the server side with terrific frameworks: - The [Play Framework](https://www.playframework.com) lets you build highly scalable server-side applications and microservices -- [Akka Actors](https://akka.io) let you use the actor model to greatly simplify parallel and concurrent software applications +- [Akka Actors](https://akka.io) let you use the actor model to greatly simplify distributed and concurrent software applications Scala can also be used in the browser with the [Scala.js project](https://www.scala-js.org), which is a type-safe replacement for JavaScript. The Scala.js ecosystem [has dozens of libraries](https://www.scala-js.org/libraries) to let you use React, Angular, jQuery, and many other JavaScript and Scala libraries in the browser. @@ -227,50 +227,50 @@ While these all use the `List` class, the same methods work with other collectio Here are some examples: ```scala -List.range(1, 3) // List(1, 2) -List.range(1, 6, 2) // List(1, 3, 5) -List.fill(3)("foo") // List(foo, foo, foo) -List.tabulate(3)(n => n * n) // List(0, 1, 4) -List.tabulate(4)(n => n * n) // List(0, 1, 4, 9) - -val a = List(10, 20, 30, 40, 10) // List(10, 20, 30, 40, 10) -a.distinct // List(10, 20, 30, 40) -a.drop(2) // List(30, 40, 10) -a.dropRight(2) // List(10, 20, 30) -a.dropWhile(_ < 25) // List(30, 40, 10) -a.filter(_ < 25) // List(10, 20, 10) -a.filter(_ > 100) // List() -a.find(_ > 20) // Some(30) -a.head // 10 -a.headOption // Some(10) -a.init // List(10, 20, 30, 40) -a.intersect(List(19,20,21)) // List(20) -a.last // 10 -a.lastOption // Some(10) -a.map(_ * 2) // List(20, 40, 60, 80, 20) -a.slice(2,4) // List(30, 40) -a.tail // List(20, 30, 40, 10) -a.take(3) // List(10, 20, 30) -a.takeRight(2) // List(40, 10) -a.takeWhile(_ < 30) // List(10, 20) -a.filter(_ < 30).map(_ * 10) // List(100, 200) +List.range(1, 3) // List(1, 2) +List.range(start = 1, end = 6, step = 2) // List(1, 3, 5) +List.fill(3)("foo") // List(foo, foo, foo) +List.tabulate(3)(n => n * n) // List(0, 1, 4) +List.tabulate(4)(n => n * n) // List(0, 1, 4, 9) + +val a = List(10, 20, 30, 40, 10) // List(10, 20, 30, 40, 10) +a.distinct // List(10, 20, 30, 40) +a.drop(2) // List(30, 40, 10) +a.dropRight(2) // List(10, 20, 30) +a.dropWhile(_ < 25) // List(30, 40, 10) +a.filter(_ < 25) // List(10, 20, 10) +a.filter(_ > 100) // List() +a.find(_ > 20) // Some(30) +a.head // 10 +a.headOption // Some(10) +a.init // List(10, 20, 30, 40) +a.intersect(List(19,20,21)) // List(20) +a.last // 10 +a.lastOption // Some(10) +a.map(_ * 2) // List(20, 40, 60, 80, 20) +a.slice(2, 4) // List(30, 40) +a.tail // List(20, 30, 40, 10) +a.take(3) // List(10, 20, 30) +a.takeRight(2) // List(40, 10) +a.takeWhile(_ < 30) // List(10, 20) +a.filter(_ < 30).map(_ * 10) // List(100, 200) val fruits = List("apple", "pear") -fruits.map(_.toUpperCase) // List(APPLE, PEAR) -fruits.flatMap(_.toUpperCase) // List(A, P, P, L, E, P, E, A, R) +fruits.map(_.toUpperCase) // List(APPLE, PEAR) +fruits.flatMap(_.toUpperCase) // List(A, P, P, L, E, P, E, A, R) val nums = List(10, 5, 8, 1, 7) -nums.sorted // List(1, 5, 7, 8, 10) -nums.sortWith(_ < _) // List(1, 5, 7, 8, 10) -nums.sortWith(_ > _) // List(10, 8, 7, 5, 1) +nums.sorted // List(1, 5, 7, 8, 10) +nums.sortWith(_ < _) // List(1, 5, 7, 8, 10) +nums.sortWith(_ > _) // List(10, 8, 7, 5, 1) ``` -## 8) Built-in practices +## 8) Built-in best practices Scala idioms encourage best practices in many ways. -For immutability, you’re encouraged to create immutable `val` fields: +For immutability, you’re encouraged to create immutable `val` declarations: ```scala val a = 1 // immutable variable @@ -283,7 +283,7 @@ val b = List(1,2,3) // List is immutable val c = Map(1 -> "one") // Map is immutable ``` -Case classes are primarily intended for use in functional programming, and their parameters are immutable: +Case classes are primarily intended for use in [domain modeling]({% link _overviews/scala3-book/domain-modeling-intro.md %}), and their parameters are immutable: ```scala case class Person(name: String) @@ -386,6 +386,7 @@ _Safety_ is related to several new and changed features: - Multiversal equality - Restricting implicit conversions - Null safety +- Safe initialization Good examples of _ergonomics_ are enumerations and extension methods, which have been added to Scala 3 in a very readable manner: diff --git a/scala3/contribute-to-docs.md b/scala3/contribute-to-docs.md index 91b467766f..642a12f2c0 100644 --- a/scala3/contribute-to-docs.md +++ b/scala3/contribute-to-docs.md @@ -16,7 +16,7 @@ We welcome contributions from the community to every aspect of the documentation ### How can I contribute? -In general, there is many different ways you could help us: +In general, there are many ways you can help us: - **Confused about something in any of the docs?** Open an issue. - **Found something not up-to-date?** Open an issue or create a PR. From 5bc689d64915c1e7f90a6d821e2adc7aa3c36a47 Mon Sep 17 00:00:00 2001 From: Julien Richard-Foy Date: Mon, 7 Jun 2021 18:35:57 +0200 Subject: [PATCH 0303/1870] Some suggestions in the Scala 3 book (2) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit I’ve reviewed the following chapters: - a first look at types - control structures - domain modeling Here are some simple suggestions, or typos fixes. --- _overviews/scala3-book/control-structures.md | 34 ++++++------------- _overviews/scala3-book/domain-modeling-fp.md | 2 +- _overviews/scala3-book/domain-modeling-oop.md | 21 ++++++------ .../scala3-book/domain-modeling-tools.md | 20 +---------- _overviews/scala3-book/first-look-at-types.md | 7 ++-- 5 files changed, 27 insertions(+), 57 deletions(-) diff --git a/_overviews/scala3-book/control-structures.md b/_overviews/scala3-book/control-structures.md index a1fd727a3d..50f81a2b1b 100644 --- a/_overviews/scala3-book/control-structures.md +++ b/_overviews/scala3-book/control-structures.md @@ -144,26 +144,14 @@ scala> for i <- ints do println(i) 3 ```` -When you need a multiline block of code following the `for` generator, use either of these approaches: +When you need a multiline block of code following the `for` generator, use the following syntax: ```scala -// option 1 for i <- ints do val x = i * 2 println(s"i = $i, x = $x") - -// option 2 -for (i <- ints) - val x = i * 2 - println(s"i = $i, x = $x") - -// option 3 -for (i <- ints) { - val x = i * 2 - println(s"i = $i, x = $x") -} ``` ### Multiple generators @@ -276,7 +264,7 @@ val list = yield i * 2 -// result: list == Vector(20, 22, 24) +// list: IndexedSeq[Int] = Vector(20, 22, 24) ``` After that `for` expression runs, the variable `list` is a `Vector` that contains the values shown. @@ -288,7 +276,7 @@ This is how the expression works: It multiples it by `2`, then yields the value `22`. You can think of these yielded values as accumulating in a temporary holding place. 3. Finally the loop gets the number `12` from the range, multiplies it by `2`, yielding the number `24`. - The loop completes at this point and yields the final result, the `Vector(20,22,24)`. + The loop completes at this point and yields the final result, the `Vector(20, 22, 24)`. {% comment %} NOTE: This is a place where it would be great to have a TIP or NOTE block: @@ -297,7 +285,7 @@ NOTE: This is a place where it would be great to have a TIP or NOTE block: While the intent of this section is to demonstrate `for` expressions, it can help to know that the `for` expression shown is equivalent to this `map` method call: ```scala -val list = (10 to 12).map { i => i * 2} +val list = (10 to 12).map(i => i * 2) ``` `for` expressions can be used any time you need to traverse all of the elements in a collection and apply an algorithm to those elements to create a new list. @@ -312,7 +300,7 @@ val capNames = for name <- names yield val capName = nameWithoutUnderscore.capitalize capName -// result: List[String] = List(Olivia, Walter, Peter) +// capNames: List[String] = List(Olivia, Walter, Peter) ``` @@ -329,7 +317,7 @@ def between3and10(xs: List[Int]): List[Int] = if x <= 10 yield x -between3and10(List(1, 3, 7, 11)) // result: List(3, 7) +between3and10(List(1, 3, 7, 11)) // : List[Int] = List(3, 7) ``` @@ -386,7 +374,7 @@ If it’s between `0` and `6`, `day` is bound to a string that represents one of Otherwise, the catch-all case is represented by the `_` character, and `day` is bound to the string, `"invalid day"`. > When writing simple `match` expressions like this, it’s recommended to use the `@switch` annotation on the variable `i`. -> This annotation provides a compile time warning if the switch can’t be compiled to a `tableswitch` or `lookupswitch`, which are better for performance. +> This annotation provides a compile-time warning if the switch can’t be compiled to a `tableswitch` or `lookupswitch`, which are better for performance. ### Using the default value @@ -417,7 +405,7 @@ val evenOrOdd = i match ``` -### Using `if` expressions in `case` statements +### Using `if` guards in `case` clauses You can also use guards in the `case`s of a match expression. In this example the second and third `case` both use guards to match multiple integer values: @@ -528,8 +516,8 @@ def pattern(x: Matchable): String = x match case a: Array[Int] => s"array of int: ${a.mkString(",")}" case as: Array[String] => s"string array: ${as.mkString(",")}" case d: Dog => s"dog: ${d.name}" - case list: List[_] => s"got a List: $list" - case m: Map[_, _] => m.toString + case list: List[?] => s"got a List: $list" + case m: Map[?, ?] => m.toString // the default wildcard pattern case _ => "Unknown" @@ -561,7 +549,7 @@ finally println("Came to the 'finally' clause.") ``` -Assuming that the `openAndReadAFile` method uses the Java `java.io._` classes to read a file and doesn’t catch its exceptions, attempting to open and read a file can result in both a `FileNotFoundException` and an `IOException`, and those two exceptions are caught in the `catch` block of this example. +Assuming that the `openAndReadAFile` method uses the Java `java.io.*` classes to read a file and doesn’t catch its exceptions, attempting to open and read a file can result in both a `FileNotFoundException` and an `IOException`, and those two exceptions are caught in the `catch` block of this example. [matchable]: {{ site.scala3ref }}/other-new-features/matchable.html diff --git a/_overviews/scala3-book/domain-modeling-fp.md b/_overviews/scala3-book/domain-modeling-fp.md index 4d42dc6abb..dec7dda6d2 100644 --- a/_overviews/scala3-book/domain-modeling-fp.md +++ b/_overviews/scala3-book/domain-modeling-fp.md @@ -43,7 +43,7 @@ An FP design is implemented in a similar way: > As we will see, reasoning about programs in this style is quite different from the object-oriented programming. > Data in FP simply **is**: -> Separating functionality from your data let's you inspect your data without having to worry about behavior. +> Separating functionality from your data lets you inspect your data without having to worry about behavior. In this chapter we’ll model the data and operations for a “pizza” in a pizza store. You’ll see how to implement the “data” portion of the Scala/FP model, and then you’ll see several different ways you can organize the operations on that data. diff --git a/_overviews/scala3-book/domain-modeling-oop.md b/_overviews/scala3-book/domain-modeling-oop.md index 10821996d9..c06260d84d 100644 --- a/_overviews/scala3-book/domain-modeling-oop.md +++ b/_overviews/scala3-book/domain-modeling-oop.md @@ -89,12 +89,11 @@ When designing software in Scala, it’s often helpful to only consider using cl NOTE: I think “leaves” may technically be the correct word to use, but I prefer “leafs.” {% endcomment %} -```text -traits T1 T2 ... T3 -composed traits S extends T1, T2 ... S extends T2, T3 -classes C extends S, T3 -instances new C -``` +| Traits | `T1`, `T2`, `T3` +| Composed traits | `S extends T1, T2`, `S extends T2, T3` +| Classes | `C extends S, T3` +| Instances | `C()` + This is even more the case in Scala 3, where traits now can also take parameters, further eliminating the need for classes. #### Defining Classes @@ -147,7 +146,7 @@ class Counter: // can only be observed by the method `count` private var currentCount = 0 - def tick() = currentCount += 1 + def tick(): Unit = currentCount += 1 def count: Int = currentCount ``` Every instance of the class `Counter` has its own private state that can only be observed through the method `count`, as the following interaction illustrates: @@ -198,7 +197,7 @@ There are a few things that need explanation. #### Abstract Type Members The declaration `type S <: Subject` says that within the trait `SubjectObserver` we can refer to some _unknown_ (that is, abstract) type that we call `S`. However, the type is not completely unknown: we know at least that it is _some subtype_ of the trait `Subject`. -All traits and classes extending `SubjectObserer` are free to chose any type for `S` as long as the chosen type is a subtype of `Subject`. +All traits and classes extending `SubjectObserer` are free to choose any type for `S` as long as the chosen type is a subtype of `Subject`. The `<: Subject` part of the declaration is also referred to as an _upper bound on `S`_. #### Nested Traits @@ -210,12 +209,12 @@ The second trait, `Subject`, defines one private field `observers` to store all Subscribing to a subject simply stores the object into this list. Again, the type of parameter `obs` is `O`, not `Observer`. -#### Selftype Annotations +#### Self-type Annotations Finally, you might have wondered what the `self: S =>` on trait `Subject` is supposed to mean. -This is called a _selftype annotation_. +This is called a _self-type annotation_. It requires subtypes of `Subject` to also be subtypes of `S`. This is necessary to be able to call `obs.notify` with `this` as an argument, since it requires a value of type `S`. -If `S` was a _concrete_ type, the selftype annotation could be replaced by `trait Subject extends S`. +If `S` was a _concrete_ type, the self-type annotation could be replaced by `trait Subject extends S`. ### Implementing the Component We can now implement the above component and define the abstract type members to be concrete types: diff --git a/_overviews/scala3-book/domain-modeling-tools.md b/_overviews/scala3-book/domain-modeling-tools.md index bd9e955ba5..b8fd76f2fc 100644 --- a/_overviews/scala3-book/domain-modeling-tools.md +++ b/_overviews/scala3-book/domain-modeling-tools.md @@ -33,27 +33,9 @@ class Movie(var name: String, var director: String, var year: Int) ``` These examples show that Scala has a very lightweight way to declare classes. -The definition of the class `Person` roughly corresponds to the following, more explicit, version: - -```scala -class Person: - // fields - var name: String = null - var vocation: String = null - - // constructor - def this(_name: String, _vocation: String) = - // call to the super constructor - this() - // assigning the fields - name = _name - vocation = _vocation -``` - -This version defines the two fields `name` and `vocation`, together with a constructor that accepts values for those two fields and assigns them. All of the parameters of our example classes are defined as `var` fields, which means they are mutable: you can read them, and also modify them. -If you want them to be immutable---read only---create them as `val` fields instead. +If you want them to be immutable---read only---create them as `val` fields instead, or use a case class. Prior to Scala 3, you used the `new` keyword to create a new instance of a class: diff --git a/_overviews/scala3-book/first-look-at-types.md b/_overviews/scala3-book/first-look-at-types.md index 0a14e41a8c..106f564258 100644 --- a/_overviews/scala3-book/first-look-at-types.md +++ b/_overviews/scala3-book/first-look-at-types.md @@ -267,13 +267,14 @@ A common use is to signal non-termination, such as a thrown exception, program e `Null` is a subtype of all reference types (i.e. any subtype of `AnyRef`). It has a single value identified by the keyword literal `null`. -`Null` is provided mostly for interoperability with other JVM languages and should almost never be used in Scala code. -Alternatives to `null` are discussed in the [Functional Programming chapter][fp] of this book, and the [API documentation][option-api]. - +Currently, the usage of `null` is considered bad practice. It should be used mostly for interoperability with other JVM languages. An opt-in compiler option changes the status of `Null` to fix the caveats related to its usage. This option might become the default in a future version of Scala. You can learn more about it [here][safe-null]. +In the meantime, `null` should almost never be used in Scala code. +Alternatives to `null` are discussed in the [Functional Programming chapter][fp] of this book, and the [API documentation][option-api]. [reference]: {{ site.scala3ref }}/overview.html [matchable]: {{ site.scala3ref }}/other-new-features/matchable.html [interpolation]: {% link _overviews/core/string-interpolation.md %} [fp]: {% link _overviews/scala3-book/fp-intro.md %} [option-api]: https://dotty.epfl.ch/api/scala/Option.html +[safe-null]: {{ site.scala3ref }}/other-new-features/explicit-nulls.html From 84ef96cf45c0c27a59fda3162b529e01d210f6c8 Mon Sep 17 00:00:00 2001 From: SourceCodeBot Date: Mon, 14 Jun 2021 21:14:46 +0200 Subject: [PATCH 0304/1870] fix: fix syntax issue with arguments --- _overviews/scala3-book/ca-given-using-clauses.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/_overviews/scala3-book/ca-given-using-clauses.md b/_overviews/scala3-book/ca-given-using-clauses.md index dd1b4ccc1b..5ba38fd64b 100644 --- a/_overviews/scala3-book/ca-given-using-clauses.md +++ b/_overviews/scala3-book/ca-given-using-clauses.md @@ -26,7 +26,7 @@ def renderWebsite(path: String, c: Config): String = def renderWidget(items: List[String], c: Config): String = ??? val config = Config(8080, "docs.scala-lang.org") -renderWebsite("/home")(config) +renderWebsite("/home", config) ``` Let us assume that the configuration does not change throughout most of our code base. Passing `c` to each and every method call (like `renderWidget`) becomes very tedious and makes our program more difficult to read, since we need to ignore the `c` argument. From 83206c35bbfeaafe52ae49bd92d709894e76d1f3 Mon Sep 17 00:00:00 2001 From: Stephan Schneider Date: Mon, 14 Jun 2021 21:32:28 +0200 Subject: [PATCH 0305/1870] Update index.md typo --- _overviews/FAQ/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/_overviews/FAQ/index.md b/_overviews/FAQ/index.md index 0e4b7200ad..e7d25dbcf5 100644 --- a/_overviews/FAQ/index.md +++ b/_overviews/FAQ/index.md @@ -188,7 +188,7 @@ differ from a function value such as: Note that in **Scala 3** most of the differences will go; for example, they will be able to [accept implicit parameters](https://dotty.epfl.ch/docs/reference/contextual/context-functions.html) -as well as [type parameterts](https://dotty.epfl.ch/docs/reference/new-types/polymorphic-function-types.html). +as well as [type parameters](https://dotty.epfl.ch/docs/reference/new-types/polymorphic-function-types.html). Nevertheless, it is still recommended to use methods most of the time, unless you absolutely need a function. And, thanks to From f6943140ff557f826c81e2d46ea96d72f6a83011 Mon Sep 17 00:00:00 2001 From: Julien Richard-Foy Date: Mon, 14 Jun 2021 17:04:36 +0200 Subject: [PATCH 0306/1870] Suggestions in the Scala 3 book (part 4) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit I’ve reviewed the following chapters: - Scala Collections - Functional Programming - Types and the Type System - Contextual Abstractions --- _overviews/scala3-book/ca-context-bounds.md | 2 +- .../scala3-book/ca-given-using-clauses.md | 2 +- .../scala3-book/ca-implicit-conversions.md | 11 +++--- _overviews/scala3-book/collections-classes.md | 36 ++++++++++--------- _overviews/scala3-book/collections-methods.md | 16 ++++----- .../fp-functional-error-handling.md | 18 +++++----- _overviews/scala3-book/types-inferred.md | 2 +- _overviews/scala3-book/types-type-classes.md | 4 +-- _overviews/scala3-book/types-variance.md | 16 ++++----- 9 files changed, 57 insertions(+), 50 deletions(-) diff --git a/_overviews/scala3-book/ca-context-bounds.md b/_overviews/scala3-book/ca-context-bounds.md index fd435eb68f..462774a2d4 100644 --- a/_overviews/scala3-book/ca-context-bounds.md +++ b/_overviews/scala3-book/ca-context-bounds.md @@ -13,7 +13,7 @@ next-page: ca-given-imports - TODO: define "synthesized" and "synthesized arguments" {% endcomment %} -In many situations the name of a _context parameter_ doesn’t have to be mentioned explicitly, since it’s only used in synthesized arguments for other context parameters. +In many situations the name of a _context parameter_ doesn’t have to be mentioned explicitly, since it’s only used by the compiler in synthesized arguments for other context parameters. In that case you don’t have to define a parameter name, and can just provide the parameter type. diff --git a/_overviews/scala3-book/ca-given-using-clauses.md b/_overviews/scala3-book/ca-given-using-clauses.md index dd1b4ccc1b..39af385316 100644 --- a/_overviews/scala3-book/ca-given-using-clauses.md +++ b/_overviews/scala3-book/ca-given-using-clauses.md @@ -47,7 +47,7 @@ The Scala compiler thus performs **term inference**. In our call to `renderWidget(List("cart"))` the Scala compiler will see that there is a term of type `Config` in scope (the `c`) and automatically provide it to `renderWidget`. So the program is equivalent to the one above. -In fact, since we do not need to refer to `c` in our implementation of `renderWebsite` anymore, we can even omit it in the signature: +In fact, since we do not need to refer to `c` in our implementation of `renderWebsite` anymore, we can even omit its name in the signature: ```scala // no need to come up with a parameter name diff --git a/_overviews/scala3-book/ca-implicit-conversions.md b/_overviews/scala3-book/ca-implicit-conversions.md index 4a421da97b..d04cefa104 100644 --- a/_overviews/scala3-book/ca-implicit-conversions.md +++ b/_overviews/scala3-book/ca-implicit-conversions.md @@ -8,8 +8,8 @@ next-page: ca-summary --- -Implicit conversions are defined by `given` instances of the _scala.Conversion_ class. -For example, not accounting for possible conversion errors, this code defines an an implicit conversion from `String` to `Int`: +Implicit conversions are defined by `given` instances of the `scala.Conversion` class. +For example, not accounting for possible conversion errors, this code defines an implicit conversion from `String` to `Int`: ```scala given Conversion[String, Int] with @@ -34,10 +34,13 @@ def plus1(i: Int) = i + 1 plus1("1") ``` +> Note the clause `import scala.language.implicitConversions` at the beginning, +> to enable implicit conversions in the file. + ## Discussion -The Predef package contains “auto-boxing” conversions that map primitive number types to subclasses of _java.lang.Number_. -For instance, the conversion from `Int` to _java.lang.Integer_ can be defined as follows: +The Predef package contains “auto-boxing” conversions that map primitive number types to subclasses of `java.lang.Number`. +For instance, the conversion from `Int` to `java.lang.Integer` can be defined as follows: ```scala given int2Integer: Conversion[Int, java.lang.Integer] = diff --git a/_overviews/scala3-book/collections-classes.md b/_overviews/scala3-book/collections-classes.md index 7226398406..e9b7adec45 100644 --- a/_overviews/scala3-book/collections-classes.md +++ b/_overviews/scala3-book/collections-classes.md @@ -28,9 +28,9 @@ When you need more flexibility, see these pages at the end of this section for m Looking at Scala collections from a high level, there are three main categories to choose from: -- **Sequences** are a linear collection of elements and may be _indexed_ (like an array) or _linear_ (like a linked list) +- **Sequences** are a sequential collection of elements and may be _indexed_ (like an array) or _linear_ (like a linked list) - **Maps** contain a collection of key/value pairs, like a Java `Map`, Python dictionary, or Ruby `Hash` -- **Sets** are an unordered sequence of unique elements +- **Sets** are an unordered collection of unique elements All of those are basic types, and have subtypes for specific purposes, such as concurrency, caching, and streaming. In addition to those three main categories, there are other useful collection types, including ranges, stacks, and queues. @@ -74,7 +74,7 @@ The main collections you’ll use on a regular basis are: | `LazyList` | ✓ | | A lazy immutable linked list, its elements are computed only when they’re needed; Good for large or infinite sequences. | | `ArrayBuffer` | | ✓ | The go-to type for a mutable, indexed sequence | | `ListBuffer` | | ✓ | Used when you want a mutable `List`; typically converted to a `List` | -| `Map` | ✓ | ✓ | An iterable sequence that consists of pairs of keys and values. | +| `Map` | ✓ | ✓ | An iterable collection that consists of pairs of keys and values. | | `Set` | ✓ | ✓ | An iterable collection with no duplicate elements | As shown, `Map` and `Set` come in both immutable and mutable versions. @@ -109,7 +109,7 @@ For example, if you need an immutable, indexed collection, in general you should Conversely, if you need a mutable, indexed collection, use an `ArrayBuffer`. > `List` and `Vector` are often used when writing code in a functional style. -> `ArrayBuffer` is commonly used when writing code in a mutable style. +> `ArrayBuffer` is commonly used when writing code in an imperative style. > `ListBuffer` is used when you’re mixing styles, such as building a list. The next several sections briefly demonstrate the `List`, `Vector`, and `ArrayBuffer` types. @@ -291,7 +291,7 @@ val nums = Vector(1, 2, 3, 4, 5) val strings = Vector("one", "two") -case class Person(val name: String) +case class Person(name: String) val people = Vector( Person("Bert"), Person("Ernie"), @@ -383,10 +383,9 @@ Or if you prefer methods with textual names you can also use `append`, `appendAl Here are some examples of `+=` and `++=`: ```scala -var nums = ArrayBuffer(1, 2, 3) // ArrayBuffer(1, 2, 3) +val nums = ArrayBuffer(1, 2, 3) // ArrayBuffer(1, 2, 3) nums += 4 // ArrayBuffer(1, 2, 3, 4) -nums += (5, 6) // ArrayBuffer(1, 2, 3, 4, 5, 6) -nums ++= List(7, 8) // ArrayBuffer(1, 2, 3, 4, 5, 6, 7, 8) +nums ++= List(5, 6) // ArrayBuffer(1, 2, 3, 4, 5, 6) ``` ### Removing elements from an ArrayBuffer @@ -415,7 +414,7 @@ a.update(0, 10) // ArrayBuffer(10, 2, 50, 4) ## Maps -A `Map` is an iterable sequence that consists of pairs of keys and values. +A `Map` is an iterable collection that consists of pairs of keys and values. Scala has both mutable and immutable `Map` types, and this section demonstrates how to use the _immutable_ `Map`. ### Creating an immutable Map @@ -433,13 +432,13 @@ val states = Map( Once you have a `Map` you can traverse its elements in a `for` loop like this: ```scala -for ((k,v) <- states) println(s"key: $k, value: $v") +for (k, v) <- states do println(s"key: $k, value: $v") ``` The REPL shows how this works: ```` -scala> for ((k,v) <- states) println(s"key: $k, value: $v") +scala> for (k, v) <- states do println(s"key: $k, value: $v") key: AK, value: Alaska key: AL, value: Alabama key: AZ, value: Arizona @@ -463,7 +462,7 @@ Add elements to an immutable map using `+` and `++`, remembering to assign the r ```scala val a = Map(1 -> "one") // a: Map(1 -> one) val b = a + (2 -> "two") // b: Map(1 -> one, 2 -> two) -val c = b + ( +val c = b ++ Seq( 3 -> "three", 4 -> "four" ) @@ -482,13 +481,13 @@ val a = Map( 4 -> "four" ) -a - 4 // Map(1 -> one, 2 -> two, 3 -> three) -a - 4 - 3 // Map(1 -> one, 2 -> two) +val b = a - 4 // b: Map(1 -> one, 2 -> two, 3 -> three) +val c = a - 4 - 3 // c: Map(1 -> one, 2 -> two) ``` ### Updating Map elements -To update elements in an immutable map, use the `updated` method while assigning the result to a new variable: +To update elements in an immutable map, use the `updated` method (or the `+` operator) while assigning the result to a new variable: ```scala val a = Map( @@ -497,7 +496,8 @@ val a = Map( 3 -> "three" ) -val b = a.updated(3, "THREE!") // Map(1 -> one, 2 -> two, 3 -> THREE!) +val b = a.updated(3, "THREE!") // b: Map(1 -> one, 2 -> two, 3 -> THREE!) +val c = a + (2 -> "TWO...") // c: Map(1 -> one, 2 -> TWO..., 3 -> three) ``` ### Traversing a Map @@ -511,7 +511,7 @@ val states = Map( "AZ" -> "Arizona" ) -for ((k,v) <- states) println(s"key: $k, value: $v") +for (k, v) <- states do println(s"key: $k, value: $v") ``` That being said, there are _many_ ways to work with the keys and values in a map. @@ -558,6 +558,8 @@ val c = b ++ Seq(4, 1, 5, 5) // HashSet(5, 1, 2, 3, 4) Notice that when you attempt to add duplicate elements, they’re quietly dropped. +Also notice that the order of iteration of the elements is arbitrary. + ### Deleting elements from a Set diff --git a/_overviews/scala3-book/collections-methods.md b/_overviews/scala3-book/collections-methods.md index 3e6c208a21..4316dea761 100644 --- a/_overviews/scala3-book/collections-methods.md +++ b/_overviews/scala3-book/collections-methods.md @@ -34,7 +34,7 @@ The following methods work on all of the sequence types, including `List`, `Vect ## Examples of common methods To give you an overview of what you’ll see in the following sections, these examples show some of the most commonly used collections methods. -First, here are some methods don’t use lambdas: +First, here are some methods that don’t use lambdas: ```scala val a = List(10, 20, 30, 40, 10) // List(10, 20, 30, 40, 10) @@ -103,7 +103,7 @@ a.map(double(_)) a.map(double) ``` -In the last example, when an anonymous function consists of one statement that takes a single argument, you don’t have to name the argument, so even `-` isn’t required. +In the last example, when an anonymous function consists of one function call that takes a single argument, you don’t have to name the argument, so even `_` isn’t required. Finally, you can combine HOFs as desired to solve problems: @@ -217,10 +217,10 @@ david ## `head` The `head` method comes from Lisp and other earlier functional programming languages. -It’s used to print the first element (the head element) of a list: +It’s used to access the first element (the head element) of a list: ```scala -oneToTen.head // Int = 1 +oneToTen.head // 1 names.head // adam ``` @@ -228,8 +228,8 @@ Because a `String` can be seen as a sequence of characters, you can also treat i This is how `head` works on these strings: ```scala -"foo".head // Char = 'f' -"bar".head // Char = 'b' +"foo".head // 'f' +"bar".head // 'b' ``` `head` is a great method to work with, but as a word of caution it can also throw an exception when called on an empty collection: @@ -242,7 +242,7 @@ emptyList.head // java.util.NoSuchElementException: head of empty Because of this you may want to use `headOption` instead of `head`, especially when programming in a functional style: ```scala -emptyList.headOption // Option[Int] = None +emptyList.headOption // None ``` As shown, it doesn’t throw an exception, it simply returns the type `Option` that has the value `None`. @@ -256,7 +256,7 @@ The `tail` method also comes from Lisp, and it’s used to print every element i A few examples demonstrate this: ```scala -oneToTen.head // Int = 1 +oneToTen.head // 1 oneToTen.tail // List(2, 3, 4, 5, 6, 7, 8, 9, 10) names.head // adam diff --git a/_overviews/scala3-book/fp-functional-error-handling.md b/_overviews/scala3-book/fp-functional-error-handling.md index ee33cffe11..d56dfff3a6 100644 --- a/_overviews/scala3-book/fp-functional-error-handling.md +++ b/_overviews/scala3-book/fp-functional-error-handling.md @@ -106,7 +106,7 @@ makeInt(x) match case None => println("That didn’t work.") ``` -In this example, if `x` can be converted to an `Int`, the first `case` statement is executed; if `x` can’t be converted to an `Int`, the second `case` statement is executed. +In this example, if `x` can be converted to an `Int`, the expression on the right-hand side of the first `case` clause is evaluated; if `x` can’t be converted to an `Int`, the expression on the right-hand side of the second `case` clause is evaluated. @@ -240,19 +240,20 @@ makeInt(x) match Getting back to `null` values, a place where a `null` value can silently creep into your code is with a class like this: ```scala -class Address: +class Address( var street1: String, var street2: String, - var city: String, - var state: String, + var city: String, + var state: String, var zip: String +) ``` While every address on Earth has a `street1` value, the `street2` value is optional. As a result, the `street2` field can be assigned a `null` value: ```scala -val santa = new Address( +val santa = Address( "1 Main Street", null, // <-- D’oh! A null value! "North Pole", @@ -265,18 +266,19 @@ Historically, developers have used blank strings and null values in this situati In Scala---and other modern languages---the correct solution is to declare up front that `street2` is optional: ```scala -class Address: +class Address( var street1: String, var street2: Option[String], // an optional value var city: String, var state: String, var zip: String +) ``` Now developers can write more accurate code like this: ```scala -val santa = new Address( +val santa = Address( "1 Main Street", None, // 'street2' has no value "North Pole", @@ -288,7 +290,7 @@ val santa = new Address( or this: ```scala -val santa = new Address( +val santa = Address( "123 Main Street", Some("Apt. 2B"), "Talkeetna", diff --git a/_overviews/scala3-book/types-inferred.md b/_overviews/scala3-book/types-inferred.md index fab485fecc..d56bafb629 100644 --- a/_overviews/scala3-book/types-inferred.md +++ b/_overviews/scala3-book/types-inferred.md @@ -12,7 +12,7 @@ As with other statically typed programming languages, in Scala you can _declare_ ```scala val x: Int = 1 -val x: Double = 1 +val y: Double = 1 ``` In those examples the types are _explicitly_ declared to be `Int` and `Double`, respectively. diff --git a/_overviews/scala3-book/types-type-classes.md b/_overviews/scala3-book/types-type-classes.md index 239866ecb7..24619309d1 100644 --- a/_overviews/scala3-book/types-type-classes.md +++ b/_overviews/scala3-book/types-type-classes.md @@ -23,7 +23,7 @@ In Scala 3, _type classes_ are just _traits_ with one or more type parameters, l trait Show[A]: def show(a: A): String ``` -Instances of `Show` for a particular type `A` witness that `A` we can show an instance of type `A`. +Instances of `Show` for a particular type `A` witness that we can show (i.e., produce a text representation of) an instance of type `A`. For example, let’s look at the following `Show` instance for `Int` values: ```scala @@ -43,7 +43,7 @@ toHtml(42)(ShowInt()) // results in "

    The number is 42!

    " ``` -#### Automatically passing Type Class Instances +#### Automatically passing type class instances Since type classes are a very important way to structure software, Scala 3 offers additional features that make working with them very convenient. We discuss these additional features (which fall into the category of *Contextual Abstractions*) in a [later chapter][typeclasses-chapter] of this book. diff --git a/_overviews/scala3-book/types-variance.md b/_overviews/scala3-book/types-variance.md index 5eec37b647..90ee0d04ba 100644 --- a/_overviews/scala3-book/types-variance.md +++ b/_overviews/scala3-book/types-variance.md @@ -22,11 +22,11 @@ Let us also assume the following parameterized types: trait Pipeline[T]: def process(t: T): T -// an example of an covariant type +// an example of a covariant type trait Producer[+T]: def make: T -// an example of an contravariant type +// an example of a contravariant type trait Consumer[-T]: def take(t: T): Unit ``` @@ -73,7 +73,7 @@ In contrast to `Pipeline`, which is invariant, the type `Producer` is marked as This is valid, since the type parameter is only used in a _return position_. Marking it as covariant means that we can pass (or return) a `Producer[Book]` where a `Producer[Buyable]` is expected. -And in fact, this is sound: The type of `Producer[Buyable].make` only promises to _return_ a `Buyable`. +And in fact, this is sound. The type of `Producer[Buyable].make` only promises to _return_ a `Buyable`. As a caller of `make`, we will be happy to also accept a `Book`, which is a subtype of `Buyable`---that is, it is _at least_ a `Buyable`. This is illustrated by the following example, where the function `makeTwo` expects a `Producer[Buyable]`: @@ -108,12 +108,12 @@ They have an additional ISBN method in our example, but you are free to ignore t In contrast to the type `Producer`, which is marked as covariant, the type `Consumer` is marked as **contravariant** by prefixing the type parameter with a `-`. This is valid, since the type parameter is only used in an _argument position_. -Marking it as contravariant means that we can pass (or return) a `Producer[Item]` where a `Producer[Buyable]` is expected. -That is, we have the subtyping relationship `Producer[Item] <: Producer[Buyable]`. -Remember, for type `Consumer`, it was the other way around, and we had `Consumer[Buyable] <: Consumer[Item]`. +Marking it as contravariant means that we can pass (or return) a `Consumer[Item]` where a `Consumer[Buyable]` is expected. +That is, we have the subtyping relationship `Consumer[Item] <: Consumer[Buyable]`. +Remember, for type `Producer`, it was the other way around, and we had `Producer[Buyable] <: Producer[Item]`. -And in fact, this is sound: The type of `Producer[Buyable].make` only promises us to _return_ a `Buyable`. -As a caller of `make`, we will be happy to also accept a `Book`, which is a subtype of `Buyable`---that is, it is _at least_ a `Buyable`. +And in fact, this is sound. The method `Consumer[Item].take` accepts an `Item`. +As a caller of `take`, we can also supply a `Buyable`, which will be happily accepted by the `Consumer[Item]` since `Buyable` is a subtype of `Item`---that is, it is _at least_ an `Item`. #### Contravariant Types for Consumers From 592063af448278ba521e82dac23ebc6b4fb1122a Mon Sep 17 00:00:00 2001 From: Seth Tisue Date: Tue, 15 Jun 2021 12:57:20 -0700 Subject: [PATCH 0307/1870] update FAQ for Scala 3 release (#2074) --- _overviews/FAQ/index.md | 33 ++++++++++++++------------------- 1 file changed, 14 insertions(+), 19 deletions(-) diff --git a/_overviews/FAQ/index.md b/_overviews/FAQ/index.md index e7d25dbcf5..ba0cce896d 100644 --- a/_overviews/FAQ/index.md +++ b/_overviews/FAQ/index.md @@ -2,14 +2,14 @@ layout: singlepage-overview title: Scala FAQ permalink: /tutorials/FAQ/index.html -redirect_from: +redirect_from: - "/tutorials/FAQ/breakout.html" - "/tutorials/FAQ/chaining-implicits.html" - "/tutorials/FAQ/collections.html" - "/tutorials/FAQ/context-bounds.html" - "/tutorials/FAQ/finding-implicits.html" - "/tutorials/FAQ/finding-symbols.html" - - "/tutorials/FAQ/stream-view.html" + - "/tutorials/FAQ/stream-view.html" - "/tutorials/FAQ/yield.html" --- @@ -35,25 +35,21 @@ are out there; there are many. You can go on the [Scala room on Gitter](https://gitter.im/scala/scala) or another community forum and -ask for book recommendations, but note that you'll get more helpful +ask for book recommendations. You'll get more helpful answers if you provide some information about your background and your reasons for wanting to learn Scala. ### Should I learn Scala 2, or Scala 3? -The default choice remains Scala 2 for now. Most Scala jobs are Scala -2 jobs; most Scala books and online learning materials cover Scala 2; -tooling and library support is strongest in Scala 2; and so on. +Scala 3 was released in May 2021. Because Scala 3 is still so new, +most Scala jobs are Scala 2 jobs; most Scala books and online learning +materials cover Scala 2; tooling and library support is strongest in +Scala 2; and so on. -Scala 3.0.0 is planned for release in 2021, and a number of -Scala 3 books will come out in 2021 as well. In time, there will -be more and more Scala 3 jobs as well. +Thus, Scala 2 remains a common and reasonable choice. -### When is Scala 3 coming out? - -In 2021. Watch the [Scala blog](https://www.scala-lang.org/blog/) -for announcements. For a more detailed view of how work is progressing, -see the [Dotty milestones](https://github.com/lampepfl/dotty/milestones). +Some books that cover Scala 3 are already available; more are on the +way. In time, there will be more and more Scala 3 jobs as well. ### Where are Scala jobs advertised? @@ -181,11 +177,10 @@ differ from a function value such as: val square: Int => Int = x => x * x -[Complete answer on Stack Overflow](https://stackoverflow.com/a/2530007/4111404). - -[Summary with practical differences](https://tpolecat.github.io/2014/06/09/methods-functions.html). +For Scala 2, there is a [complete answer on Stack Overflow](https://stackoverflow.com/a/2530007/4111404) +and a [summary with practical differences](https://tpolecat.github.io/2014/06/09/methods-functions.html). -Note that in **Scala 3** most of the differences will go; +Note that in **Scala 3** the differences are fewer; for example, they will be able to [accept implicit parameters](https://dotty.epfl.ch/docs/reference/contextual/context-functions.html) as well as [type parameters](https://dotty.epfl.ch/docs/reference/new-types/polymorphic-function-types.html). @@ -193,7 +188,7 @@ as well as [type parameters](https://dotty.epfl.ch/docs/reference/new-types/poly Nevertheless, it is still recommended to use methods most of the time, unless you absolutely need a function. And, thanks to [eta-expansion](https://stackoverflow.com/questions/39445018/what-is-the-eta-expansion-in-scala) -you rarely would need to define a function over a method. +you rarely would need to define a function rather than a method. ### What's the difference between types and classes? From d9a05be0d454d9433db78187a13f9b6dee2ebfd4 Mon Sep 17 00:00:00 2001 From: "Lan, Jian" Date: Tue, 15 Jun 2021 14:06:23 -0700 Subject: [PATCH 0308/1870] Fix why-scala-3.md --- _overviews/scala3-book/why-scala-3.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/_overviews/scala3-book/why-scala-3.md b/_overviews/scala3-book/why-scala-3.md index e6c5b2bd96..ac74de1606 100644 --- a/_overviews/scala3-book/why-scala-3.md +++ b/_overviews/scala3-book/why-scala-3.md @@ -29,7 +29,6 @@ It’s hard to list every benefit of Scala, but a “Top Ten” list might look - ## 1) FP/OOP fusion More than any other language, Scala supports a fusion of the FP and OOP paradigms. @@ -45,7 +44,7 @@ For instance, a `List` is defined as a class---technically it’s an abstract cl val x = List(1, 2, 3) ``` -However, what appears to the programmer to be a simple `List` is actually built from a combination of several specialized types, including abstract classes named `Iterable`, `Seq`, and `LinearSeq`. +However, what appears to the programmer to be a simple `List` is actually built from a combination of several specialized types, including traits named `Iterable`, `Seq`, and `LinearSeq`. Those types are similarly composed of other small, modular units of code. In addition to building a type like `List` from a series of modular traits, the `List` API also consists of dozens of other methods, many of which are higher-order functions: @@ -106,6 +105,7 @@ val b: Password | Username = if (true) name else password ``` + ## 3) Concise syntax Scala is a low ceremony, “concise but still readable” language. For instance, variable declaration is concise: @@ -176,7 +176,6 @@ These capabilities are described in detail in other sections, so see the [Contex - ## 5) Seamless Java integration Scala/Java interaction is seamless in many ways. @@ -357,6 +356,7 @@ Some of the most important features in this category are: {% comment %} A list of types from the Dotty documentation: + - Inferred types - Generics - Intersection types From fcb797833e2b08cd0e549037109dc1b3450ba86b Mon Sep 17 00:00:00 2001 From: Elias Baldwin Date: Tue, 15 Jun 2021 14:15:45 -0700 Subject: [PATCH 0309/1870] Fix typo on line 131 of domain-modeling-oop.md --- _overviews/scala3-book/domain-modeling-oop.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/_overviews/scala3-book/domain-modeling-oop.md b/_overviews/scala3-book/domain-modeling-oop.md index c06260d84d..56d0972198 100644 --- a/_overviews/scala3-book/domain-modeling-oop.md +++ b/_overviews/scala3-book/domain-modeling-oop.md @@ -128,7 +128,7 @@ In order to allow this, the base class needs to be marked as `open`: ```scala open class Person(name: String) ``` -Marking classes with [`open`][open] is a new feature of Sala 3. Having to explicitly mark classes as open avoids many common pitfalls in OO design. +Marking classes with [`open`][open] is a new feature of Scala 3. Having to explicitly mark classes as open avoids many common pitfalls in OO design. In particular, it requires library designers to explicitly plan for extension and for instance document the classes that are marked as open with additional extension contracts. {% comment %} From 6ca2c3dbcb959eee3424e90a6dea5afdcfa26f6f Mon Sep 17 00:00:00 2001 From: Andrea Peruffo Date: Mon, 24 May 2021 14:40:20 +0100 Subject: [PATCH 0310/1870] Add graalvm AOT notes --- _overviews/jdk-compatibility/overview.md | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/_overviews/jdk-compatibility/overview.md b/_overviews/jdk-compatibility/overview.md index 880c4a4614..6c6a0e9201 100644 --- a/_overviews/jdk-compatibility/overview.md +++ b/_overviews/jdk-compatibility/overview.md @@ -89,6 +89,16 @@ JDK 17 prereleases are already available. The final release is [targeted](https: The Scala community build doesn't run on JDK 17 yet. We will add it once 17 is closer to release. +## GraalVM Native Image compatibility notes + +There are several records of successfully using Scala with [GraalVM](https://www.graalvm.org) Native Image(i.e.: ahead of time compiler) to produce directly executable binaries. +Beware that, even using solely the Scala standard library, Native Image compilation have some heavy requirements in terms of [reflective access](https://www.graalvm.org/reference-manual/native-image/Reflection/), and it very likely require additional configuration steps to be performed. + +A few sbt plugins are offering support for GraalVM Native Image compilation: + +- [sbt-native-packager](https://www.scala-sbt.org/sbt-native-packager/formats/graalvm-native-image.html) +- [sbt-native-image](https://github.com/scalameta/sbt-native-image) + ## Scala 3 The Scala 3.0.x series supports JDK 8, as well as 11 and beyond. From 57f573092edbb37d038da4d8f479a115757aa89e Mon Sep 17 00:00:00 2001 From: Theofanis Despoudis <328805+theodesp@users.noreply.github.com> Date: Wed, 9 Jun 2021 16:36:21 +0100 Subject: [PATCH 0311/1870] Update learn.md Removed ScalaCourses expired link for consistency and less confusion --- learn.md | 3 --- 1 file changed, 3 deletions(-) diff --git a/learn.md b/learn.md index 2204c55f1d..19af2b78c9 100644 --- a/learn.md +++ b/learn.md @@ -101,9 +101,6 @@ You can visit his [YouTube channel](https://www.youtube.com/user/DrMarkCLewis/fe ## allaboutscala [allaboutscala](https://allaboutscala.com/) provides detailed tutorials for beginners. -## ScalaCourses -[Independent Courseware](https://getscala.com), online self-study or instructor-led Scala and Play courses for a fee. - ## DevInsideYou [DevInsideYou](https://youtube.com/devinsideyou) is a YouTube channel with hundreds of hours of free Scala content. From e2aa390b9d5ba0410181c84a64f9ed2990455ca0 Mon Sep 17 00:00:00 2001 From: kenji yoshida <6b656e6a69@gmail.com> Date: Sat, 19 Jun 2021 04:53:48 +0900 Subject: [PATCH 0312/1870] Create CODEOWNERS https://docs.github.com/en/github/creating-cloning-and-archiving-repositories/creating-a-repository-on-github/about-code-owners --- .github/CODEOWNERS | 1 + 1 file changed, 1 insertion(+) create mode 100644 .github/CODEOWNERS diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS new file mode 100644 index 0000000000..ce1bb0f48b --- /dev/null +++ b/.github/CODEOWNERS @@ -0,0 +1 @@ +/_ja @scala/docs-ja From af81dade1616289e5bc5e01404322713ba433582 Mon Sep 17 00:00:00 2001 From: Myyk Seok Date: Sat, 19 Jun 2021 16:34:05 +0800 Subject: [PATCH 0313/1870] Fix typo: eather -> either --- _overviews/scala3-migration/incompat-dropped-features.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/_overviews/scala3-migration/incompat-dropped-features.md b/_overviews/scala3-migration/incompat-dropped-features.md index 2ba51e4a86..a8fe9b7789 100644 --- a/_overviews/scala3-migration/incompat-dropped-features.md +++ b/_overviews/scala3-migration/incompat-dropped-features.md @@ -204,7 +204,7 @@ Existential type is a [dropped feature](https://dotty.epfl.ch/docs/reference/dro def foo: List[Class[T]] forSome { type T } // Error: Existential types are no longer supported ``` -> Existential type is an experimental feature in Scala 2.13 that must be enabled explicitly eather by importing `import scala.language.existentials` or by setting the `-language:existentials` compiler flag. +> Existential type is an experimental feature in Scala 2.13 that must be enabled explicitly either by importing `import scala.language.existentials` or by setting the `-language:existentials` compiler flag. The proposed solution is to introduce an enclosing type that carries the dependent type: From 9ce11019bb8bfb0796a39af4503fa3d277113943 Mon Sep 17 00:00:00 2001 From: Abhishek Vyas <44902551+abhi887@users.noreply.github.com> Date: Mon, 21 Jun 2021 00:22:10 +0530 Subject: [PATCH 0314/1870] scala-for-python-devs.md creating multiline string variables Added an example for creating multiline string variables --- _overviews/scala3-book/scala-for-python-devs.md | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/_overviews/scala3-book/scala-for-python-devs.md b/_overviews/scala3-book/scala-for-python-devs.md index b045e67ac6..4a39f4ee27 100644 --- a/_overviews/scala3-book/scala-for-python-devs.md +++ b/_overviews/scala3-book/scala-for-python-devs.md @@ -136,13 +136,19 @@ These examples demonstrate how to create variables in Python and Scala. x = 1 -
    x = "Hi"
    +
    x = "Hi" +
    x = """foo +
           bar +
           baz"""
    val x = 1 -
    val x = "Hi"
    +
    val x = "Hi" +
    val x = """foo +
               bar +
               baz"""
    From 652241943ce762bbd488461a257e61cd640321c6 Mon Sep 17 00:00:00 2001 From: PJ Fanning Date: Mon, 21 Jun 2021 14:23:35 +0100 Subject: [PATCH 0315/1870] compatibility example has wrong scala version --- _overviews/scala3-migration/compatibility-classpath.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/_overviews/scala3-migration/compatibility-classpath.md b/_overviews/scala3-migration/compatibility-classpath.md index e9d71d65ab..521b2e448b 100644 --- a/_overviews/scala3-migration/compatibility-classpath.md +++ b/_overviews/scala3-migration/compatibility-classpath.md @@ -113,13 +113,13 @@ Or, in case `bar` is a published Scala 3 library: ```scala lazy val foo = project.in.file("foo") .settings( - scalaVersion := "3.0.0", + scalaVersion := "2.13.6", scalacOptions += "-Ytasty-reader", libraryDependencies += ("org.bar" %% "bar" % "1.0.0").cross(CrossVersion.for2_13Use3) ) ``` -Similarly to `CrossVersion.for2_13Use3`, we use `CrossVersion.for3Use2_13` in sbt to resolve `bar_2.13` instead of `bar_3`. +Similarly to `CrossVersion.for2_13Use3`, we use `CrossVersion.for3Use2_13` in sbt to resolve `bar_3` instead of `bar_2.13`. ## Interoperability Overview From ce031b5be7d04107c96c22e9afdbc850e6634a2e Mon Sep 17 00:00:00 2001 From: Abhishek Vyas <44902551+abhi887@users.noreply.github.com> Date: Mon, 21 Jun 2021 19:34:38 +0530 Subject: [PATCH 0316/1870] updated identifiers for multiline string and dictionary variables updated identifiers for multiline string variables and dictionary/map variable in scala-for-python-devs.md --- _overviews/scala3-book/scala-for-python-devs.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/_overviews/scala3-book/scala-for-python-devs.md b/_overviews/scala3-book/scala-for-python-devs.md index 4a39f4ee27..0934989d4e 100644 --- a/_overviews/scala3-book/scala-for-python-devs.md +++ b/_overviews/scala3-book/scala-for-python-devs.md @@ -137,7 +137,7 @@ These examples demonstrate how to create variables in Python and Scala. x = 1
    x = "Hi" -
    x = """foo +
    y = """foo
           bar
           baz"""
    @@ -146,7 +146,7 @@ These examples demonstrate how to create variables in Python and Scala. val x = 1
    val x = "Hi" -
    val x = """foo +
    val y = """foo
               bar
               baz"""
    @@ -186,7 +186,7 @@ These examples demonstrate how to create variables in Python and Scala. - val movies = Map( + val x = Map(
      "Toy Story" -> 8.3,
      "Forrest Gump" -> 8.8,
      "Cloud Atlas" -> 7.4 From 5f734205a00ae937f335c59e5fed26d4d6b69cf9 Mon Sep 17 00:00:00 2001 From: Seth Tisue Date: Mon, 21 Jun 2021 13:39:55 -0700 Subject: [PATCH 0317/1870] fix Error Formatting page --- _data/overviews.yml | 2 +- _overviews/compiler-options/errors.md | 5 +++++ 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/_data/overviews.yml b/_data/overviews.yml index 1764f6bc5e..54bb90a02b 100644 --- a/_data/overviews.yml +++ b/_data/overviews.yml @@ -257,7 +257,7 @@ - title: Error Formatting by: Torsten Schmits icon: cog - url: "compiler-options/index.html" + url: "compiler-options/errors.html" description: "A new engine for more user-friendly error messages, printing chains of dependent implicits and colored found/required type diffs." diff --git a/_overviews/compiler-options/errors.md b/_overviews/compiler-options/errors.md index f6e7823689..8128ef96ae 100644 --- a/_overviews/compiler-options/errors.md +++ b/_overviews/compiler-options/errors.md @@ -1,3 +1,8 @@ +--- +layout: singlepage-overview +title: Error Formatting +--- + # Introduction An advanced mechanism for formatting type errors and inspecting missing From 7c7eb8499a26b7ea7a1b07074dc3a25f4f431e4a Mon Sep 17 00:00:00 2001 From: Dean Wampler Date: Tue, 22 Jun 2021 16:08:18 -0500 Subject: [PATCH 0318/1870] Updated Programming Scala book images --- .../books/ProgrammingScala-final-border.gif | Bin 5574 -> 5619 bytes resources/img/books/ProgrammingScala.jpg | Bin 42408 -> 60005 bytes 2 files changed, 0 insertions(+), 0 deletions(-) diff --git a/resources/img/books/ProgrammingScala-final-border.gif b/resources/img/books/ProgrammingScala-final-border.gif index 69f7cb8cad766bf0185700a2712858f73f7d9c8a..a8646acbdd87d5a7b1ee0fd9fd9c85b2f2048c81 100644 GIT binary patch literal 5619 zcmcI``8(A6`~UOxn#GKn(J+=Fn!(6kW7o!DEJ+%Yq7Fm0O3p+{HT1H})(|PAK?@OM zNs>Ba-)ksYQjJQdy-`kaQaZH?%Q>%i>*zNKR5<{fd3T+ zg~Maf@>o0`hb9mRiX?f8B1xH|tfr!_p`xs=s-Ui_uBoo7wR$y8OIt@vONXY*&|agb z!&s|lV5rA1T5D)(xYpFzc%2E;%+%Cuow=3yIxBMvYs(EAtt>a#Y}~xTdh^DO_FEhr zwrqB^b6`8zu^pXU*lt^$owmAe+qTukW7{@Q4==Cn9$q_k?(*K@v(snyEb&=+vwys+x4XORd3S$b@4!IsUjx0}gMEX2{aqjW9}W!s^?G1rXs~BwNHRS% zJUl$~VR%&XV0iRF&*;Ok9}k~MB)#*J@ke7Lug4yJ9DDNk@uSHnkEWiCOifIGo0y)O zeE4+w@%!l++4QsDPhZZ=JbnIbcJ}$i?DJ>uUPxa^Cue6TzRkXV^>XI*tGBOTzj`a^>zhIV@MACIH zwLOySoT<3peV?PGr0*=RKfTo+pP47SSC8f4&WyRdct@H?WpHpO{KdRq?@Q?gF zdc(ie_0su2p6<1*aoy{F&-uea!k!10Vq^>jpR5v-ts`Um@~#{hE)PsX|9a`0sbb^1 zs&$l-g?$dyW-)5 zruw1CvRc%)=7Zx83S(q>ld<8OUy>}^csqv-&ps~SW_qi37H53Oa%|iB1;0XXPHHuF z>oM(-d5+stX5UP-`n9)t@sc~&rny=t882x@Pcp`1o?mIs+&vmMHXd}E82n1GR`1vg zqjleLX99y1-!a^)=OVI9jjiU=cWk$-4$Tdi>kjm+I&p69{Eo&8mHJ-6`s0T}@|$M^ z!rr%@F)k#~AGICa3Ooa0Fy9Fc=Xs}bfYVaeA3TluKa!g>5+^aN7y+MS_7Dpi_di4>C&>_C67-dhK z{oBai;OUXve)rN!(%^7nnvF~U>yhf`f{!Cg<|Ff|raG6UUc{DcjhvC^{P`Xwt$*_( z;%$S~3T?!t!s|4pr`{r)GLcBWJvf#;qNaa3sN3EDqm)D#^ZG#27$?oy zx=F5H7b0VaBrijXFJQHweRdV_S86d>C+hnVO&wxTm%`v;tv|6{Rpew%Y5neW%b)+@ zSZ6?xxJ5Pfq$T^7)8xsd%g$Th=X0h&)6PJN!%H3Jrn=4~?}UFct{u8@c|`ZqntOGd z#?~0V+I4!0?QrtI!<+$cKQlE5G#%BdHLV z|Fh$JE5kr=VIBMPke4T;kg`(vQ1_$xi{A=3M5`M|{n+-xXqn!6{GS~OlvY~M9^Pj2 zRLnjgcKpox$^y$=xgVRO3j>N_@oom^Na*f;H zh1`@qH1ZE3*a|x-f&IOqvrK}mPi%tZLXQdJh1)BGNCkUR4eqnf_(mp?@^S`Emt~mx z6=rbg%?Qlus6?!#EKzY#gfXJeZm}nhub#Mou}o{o+-uUM+Rlu$Oe@b0<)|_wvR-DS zb`EzQ4(>=zvqa3YLa&6Zo9Cz*0z*6C`jOU3fjkC43L%2k~1V3_9{ z30sry<(qU>jCiG4?rF@qoZr39+K}gRi!qDeRNbk%Mk&o=UnMEV)_F}Bo@39?Cp!)J zkei%O`|Gv~{U^JP8!>@Dn=<`8w)T`n7-VhTTvc*(ze@D@dh>z~!s^pDJ+GgkPcJOw zQ92%WO^M8m;>kvtVaJ08(UhVjX4c?mu1xzrR)pI z`QP>%8J-GGCv=NwREQX2;?(S;T4yjboL+8MXnc6is5{O}uv{=jsc22j+QpcS?Cu_X zPqHj|I*fCnPORGT>FD)e^vvI1ztvY=NLKRYB~e5|9G}x`)ov3!rfjQ`z;eD^XqLTq zSZB!H*Su66`ulpzt()1CDSl1Fu+5XgUG|IGHOEBBLCzh7Z%^6A6-@Lyc4hRrwIc27 zs59GzSan3zRAkc;<*C*-Qbzr}R^IDL>BygWok<79TxQCe1+JW!UgA03o6jQcE6qucW6$H|*wNYLnnL9PxZeDN}TbmKQB2K9F3T@4qbql{A zbP_bH99BgO8tCXCEQ1S?Vv!qEkq|}U0+fyn(pUy^bT?uflw^q^>LN?dqCb%oDM(h15TY0n|KQz(i8x#CC)G(nh~lAE zv0u(6kdAl z5U6s3^07+xcSjDVX`s;Q$nF-(ftg_H9G zsebg;byq`?m9(gxPZE@E2!U~-e_*2L&tn)ez783+K@8LWlY|bhBg2X;n8t-vnUDqt zjLJQXAd@12+{_MsVI2{)8i_Hd!+0kAI2_Ug;HWU=IPgS+CIyR5 zK%0ZkM&xgAh}NGBixtbMRbB8C7nE?&KnCUdLH*TG(L10FTDhsYU3RB4`bR?I^ zgY_hQ$r6l9F*ToGH@lJ%Gx7skc7?SONP`Q20QM8$K3e0;5qX8By_tBqU<4Z=mW$!w zcmkLtC{vN-X$nipLO?-cA8vr?Qoi#de~pxHh6bXz7%f@8K0VAumm-#&!O<^LnR%LI z*if9-?*{=Mw2O(aLrPKviNRcKEEnrb$2jv6!w{@D4`}cp5*b;`&C%dMN@Rr0fgYcL zDej&nesIM_2nXVcEJ&`|PNPSzJ`oK#FutGvARN}=U2$#$YsHvsNyRytj~5qnn2xbN zh<2u9Qmarf4^k3>@P245lBvN-AG|1}v&sXxMh9i6BU?Rnm{~+AKvoJ;H1r&MP~gwE zd~Ie0gLlP#8W8@&_u_b5tfv5z=7#=>O${JpYOp|w2N+V=kcsf+AuCPxNV>gLDdRgjp2kZv7DN4bNP!8-aZ!FUOhs{qw-D_vKzCK3{bWW?bU}4q>>SZ0_uja-XJu11B}Q6Dm}rETggVE9l2;n z8OnCa2w^~b3}Is_ToqRvpBb}TIYVEOr1=QCZCR^p=J_N7)|OmQVU}%jV>^RXy&ClB zceXuZ?9W8w$hkp(i~8DfiZ_%)DKTYwlHwg-4H7lyRd+i2J9)-$L$;ZS;tN$P!*Inpae{QF|v88PW&CtQL9Y~(NHu={UI zls+cid2d)GFXjUwcA9ReP^)C5NW`bd=rJ~%rpdWAU;42Sa4qJ(bujtUKjJB|qxMp{ zh8X^L8cMu@eNHCE&v$NdAbqlcP8~An7^7@4hwx%pu6zBK`7ZmJjyszYLv%OCYj6Ij z11lh)75VBWwCAxnz#rzHcr%83xq8j&U>YNGBVuG44*)Y%Ia42E(J(0b5hcOnvM}*dAq9G#A~~?uci;B$cUqR&v{*{UNYj$FXpuScl(<8l#YRLlWa>BI8lcv%_DXJ!w=<>Ijh@ z2pZ6QK-M*6MG`t*&KeyF_Z{BNn%jt!Ye;fz$ewGL5+xxPa{gi!(s%&pmmTpchGfO8 zwxG_K%ZVx)D872luf#56TjC+J@clhn!`=>&v%xQ4Q5EOB?dC|clAXB{Z@X6*Ma;b8 YT)^)+s+S#2M=?0SZl|3b1c6Qe2dyeKE&u=k literal 5574 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 diff --git a/resources/img/books/ProgrammingScala.jpg b/resources/img/books/ProgrammingScala.jpg index 07db7ec46afc58b6c3f551498481de25399610a8..232d0abff801c3f66ec604c7a3432d4d71635341 100644 GIT binary patch literal 60005 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μ8+16;|D;{!&AR`JUqnB;8p7R)%11~9ND&0l5Lpvr zMz9PjDwy?oOz%b~l31)<7KX552qygT=l7VjwN`vZQaF5<%|KOm z;lb~-lldpeHo#snB*2T3>~8#Md=)arT-wOl@ti6bj#>`He~i4ohD!_aQiL-r7s+hZ za31K-0qmlU`!1|^|CmD{;gmD@)g?6Csi)u8@hvKs_Yj`=axzbTv1LN@0fs!}O&~)Q zIsXNWVRtiob-89SjULkcas`*`f)3fu&_99f?NalM3!`}R;cKr6x(d|fNa}gxEm7YVpmd8*${Fe;Q9w=X14RjCz zrh0z2$(^D8y)XRA4=19LK-96vL&`vR+XAk0D->u1vf6nG-oq5Q>G5v{e zta}R>7KByKTSm?!NwptlLW}|afbPhkNTJt<`707(KyOy^-5t05p~KOMTL#H_Of6j6 zOLlOBM&!fS+R`K6949>NhQB|@JSz!{EYsDFi{|d2^Rm48?VZfiD1Q@J*qx9Tpw_-k z`h^TBSN(+$A1#%OyXVy~BYQPv@0*Kv6!5r@K3qKR9cU5I#-alqfFPXM-iIR*)@crG zGGD;$APvU46$6=y<*HtrLSTxCbw}olsyO&ozEY{roPSec{Uz5xkFI>OAE>mao4RZ1 zPqV4cfp(o(Kuh$&o!nhFZ4(`8-&O@%)_!oyE?I%z5)|fG)xXRNes7!++-BWwx)n-T zYb#qnP~5~|ZpEK-|7Db?fK-ESkApX~e`=yfIvp$WKg0=+U+ZuFl(t@@IcFF=q1pCe zd{`eCeK%=THZyf=O6q7bM}Kw(Yzhwrb>%rVrtvz56S6=?HJqsTeAR6A&%R}}Rv~9; zqlu^VjC~_yy=JM9PLob6OUB53ih_-On%D3#T})+M&Epn~6xKOq(Supxt0iN9T+I(# z&d;N5A_T(lG8 zD<4E5Lf~8#L?;{j)*0bBaQjR6t@@y;8zlDvvv1}qe0=9MTD(gA z#B-zZ4h6IjAFN3B0^KwM>?_^=^3%sq=KSau)R$Csq)c{w^mHi+nPwcXA>d8hs@ z6T15|q&-ilxX#I&-S*YvcQ9Hs(LWnusrd_7y-K5+xM5obw&y=UMEzs#aFK6h)6Y{! zmrQ%a3&x5pLz({t^jP@Nq2#=$M{9Q$g=X%BEmX6eW6pNwlN$HAt0DND8L9ml@$gUS zlz?kM$-LrXBLmaox7q!|GYzd(*?m9Ovb7PpH9JBtW_-uVbVRFDGjR}kP5kLIO>R*C zB99{2;}I5tz1%s?rK0HgUH-Qem-wVc{%t?IdoO$75cDuNZ(rZg5?_5pvOqg$X1P6r zn=*#aA&{k+J#N@K8MJ>&jk?pNTQTHT4SaE$D9G!S+yA(Kq;+^=yLRLG%h`*^+=`dS zAxvi{1PYx2%-WmwZA)r?mNNjhT`JMxfZLhB_4F#pTCB4wEXpnTZoT%&W{gDLvhfej zu8fJ9N{{~j`mUsxIb!Zv&6vvi*9dl!0sT&p#yXLlW^M(#9Wc6$i7K^)g@k5C4`SZIShy z3|~lhsqDbPhL2>L{pSd-3w-OjIC~x{+QArooXWjpfw>NVFSs?h$G4B>)*Rb%QGo)R zPSv(5pUy&OtP;7&3x38 zK-$fkyfe1TkNqv$og5zDxvAv0wH#fEw#SMSe%IMUa@{<>z0(^>HZgL1`&Y2>5&STN z+u|8`qKQZ)^jVm9<84lvNlEuPDHppIKkfgJ>Qw$4JN92r`Tqx1=Z&?#Z^~mQA2_Fw zJa5<5N zYm&nowZdPH(e5jA)=}3`h_snpWtuxbmp0z1sRG`-4-TZ=l7Y#>+Ht6$M|mi_{#|UJ zq6xk|ftt8j0#qhO>L=C?7bR$gCzB2iZD0-a=(Pyd_F_^i0ifzkNDyMP6U{i2E9GVO z>q1f%p8HV@PO2eV$KaE%CTY9k6TG|xvaDG-cpRfF__^UKPN?7xbkm{Q?U9fd8ywO! z|3ehd_%cM-4MwfEoRbsC`W4*3u7p|B>L^w*$~2}6l-Tr2+C87%eUYk{GoV zkT+FWM*l9B;+h!Gq(Q~=TM&=%Rm;ePRha&5O$;F+n3aKInD;F=gf`wKt7?1kAh+=% z(oR-)m_K>LdfTQ`-n9Q7A6HQcnUJedc|BiYlP|~Q6SVrzdS_3*#QUL^T*a0NW$7oH zPec(fYPRNrP=N1NwDt#Tr@K1&s0V2mBzx?iUwLuM1Je5Izjgu+4b^9^;5_OZ1f=)t zyTxCR!rJh4r%#H%ez*eR=g)1inN)x0rfS4^~wf`u!Q;`F32@2D{|9D;f?Z3lmi{#{6AKys7{Ie~=4jCJ>%}5OKrX zm^j%~*3)kK7PKP2WsD6HBh-#bdjjKyWHed@^tbylg~WVGI0%e;FUa|Lm{!9rDCpJC)g2ESVA0Zz(mYu2 z`D7^@NoHwpl?HRT$dR&AnULm#F9?t!U)!dylq&DQJJ1s$6IV} zj)4Xj8MpC>EMFj-EuCdgS;~8S*hCxFQ@=O|^15S@& z;~@+>a_bO8GX%JdC+WM|_!|0FlP8H8G^d~#I@7!qdvGr@piO#z44&^WQ}4%XOL{yJ zZUjAGzN!tE6Buf!Z`MASl1u!23t)ZB_yYSc;NaTd($cu9fK#wP=0SwXHq>y>WCmuC z(scEsNZtW|_{Zs!LVo;I?p;d=;+cXGF}xuN=Ty?fyrYBwChDIcrt+un-hj2Q+sIe7 zcCG~A*Ans{JllQ6SmbZ;^@-P#jvVtAFi{Db7BKCOasM1vcF4RhOp8h_WEBoG7Fg#@amCBfYp%I!d?b+w#k6IcsTdEXT3x-rAu(MEAqH6CIRJ1%OEoL(C?c%GY ziYjk=GDMzV>vop|0Gon~mP{3eI@vztZCc!wzrLm=)ukx#CF%w}tR-*99L5YV(faN# zw;x_pT>Lov`^;iaiCODm-La-f02mD126?i)2o*@mj$Bl-#~95~zwsc5tc=M!hyd5Y zG$24qjQ@iN^wRrN;XZc_Ih4^;M6B_@r?+4M9R}<_1{%T~M*4jxcW3@Te zAga?01PedF^t}D~6&wf!xt1WMJrasJq zlI0!Gch)wP63%pXEz%i>#n_$)FD(%DkO9N$o5)#nEp|Ak9nXz~$7Oq&>s~DiU_x0wRX_e^8`2Z+pHpgSA?s_u8FpRJ0*aq&Zq!$oIiei@VeJs%+jDLx zD%x&6GdbVksqWoyIzCinnw?M<#uX__a8D-tF3WT(T`v3?H=;W+Zk>0&>%m{kW`g!G zZ-lc*6^RA>=s&Y?P3?;R_#i2;i%$_04CWS?pXht*q&Kf38O(I!mW^5~_=Bu1r zc5CEz9rt{$YIXXgP)^CtYPJKw@$-wMKh+QBSu_cR_Bj=sWBT%VT)D+h!Scya05jLR ztu7z-3j7K0IV5yKU%teS6EQNLs$WBK?lQns_52lpud`8$-8Wf9 zM`ZBoKWM?+^z4X;n)*ppjP@WRpjz#l*>%aM5@KTh#@#7$`*(^0B*=Y~j+jYuPXdue z+8Wq|XV7~w9A*nB6>rNJAI0I2uE`(${A}S2pg^R9gVA1f0-Sl(CB3eRkwwJO;8)BJ zIizqcd3yH?*~x_JVQJlvZ*AS$X)yMRETTR6SU1lE6jq*(U%!*D96}aD8%qJ$VB0p2 zHG}V71(TB#5TJep+QV@S4x2EUsyJ|wwV5qzekvyxr3EP{#hjoJNi)WFV3{4GJ)?z` z&6`?xE{#;t-3s$)bn-SFvHT|~lZI22Lvu7q#VOwlRSPTQ2g6fG+9}%I!zFG_dDy*i0lCh)ZmMGr0)ot( z4b2G$FtAG%H^&wx)3=bv6YXu(%w?BHkL2H6*R3N;uDFd2O1+LPdwdiIww!8Evfq=c z>!rt@#+i)D{7guBuend~-MNq^3%sm5KYehvPYuqzwNp%EN^N^F%EolZzWTXkM&HDV z20r=jaOr1>H1j5Dy$`DI?i=|II)qY(8Tm{3jp_^ z*q_h)P9l=5q-Pw_chQKp!Fd=*$ZB{8XJ$moq;aqnI}|^J&*=PVsc5VB%w?L4_~)Gt zeD41N(v}w`qle#V~=SG5zIk9e} zPGFm>h`Wt1123c+ zoC$D+8{6dpt>|1!PSlW+NgfBXT3=R|6M@gcs8FoOWZpq5-r9fME)LK- zw4`qkZ7y^>#*FldyfGtZ#CthENnZ92#dpMDNBv)ft_}x#jb0-Lki3TtV*(j)@ek7223!vcERwi?KoCXimI57z;!`ZDh8a0pFbwBPtNtwB3<|Gq?B z9f6=--7(Ffi7bl(@j(~5|7xbzilvwc^bK;{qH)I5ZEaJaO>PMx94f!J8UId-ni z8j<|z)-AYdpq&<^5PQ1gwWF9=4l$-85JonkO=|DHSmcQwseUZnr@XEkEwuW+995b- z#vZbB>4U7Bl1+A(kfH(ng1l|}Ka#iq?@+wVxzz|RQsEL^LtqnezV<4>U&14Fk8m0M zcaEaQ#M*3Rs$h?!LNdCRGZ2;6yFKeadAG#236b)ie{Nw85b!M1yDd$jc=+2?_v!FZ zl9DeN!Ol7eILKzT>%eP-fI=+m?-~Lfh)m%T{`ab%t#zce9O`J=(rZ57b$g(cL=xlc zKgI2r^?pwk$ z;0S8~Q6(|AFiA>XnHT%3q90bI z+te)V`iYj-%pru;x0^JNEXNZP@|JHY7v==r&VFy@OoBw;Pc-pEI;xIEd>1QGu7EK= z&Ra^=GhS%5U_=xtR)4m8acf77&{|x}P0hB?@p6{-9uS5x=qtE|PKl&On*b+PGHu2h zGRWXP7GcerBy=;o2vXl-jiF3}_mWL^9%)~z^$GgNWtEcEmw}F}m_Sf~$!pu}+!7sI z>*KO}W6&8YkN2b3f_br)uQ(;XR6icSr%Nqj<~E|4KV=LieA%}E-fvU6g(s92n=BKG zIlcDpJE@YH?4+0;FCYGHuD9E1*kC7Aozgh{ zrs{Li*k&d*v(+W=f?IJ)ve4}H&LC%iEi#Uo|cOa((WuO<4_}x7z%z zfc74?^cej^yf~+gL%m=^1al_$i?G<6Nxv!%n%-#z5ix;Sc8s0`3TC&rK76}{*xHe8 zTRW+Wd-N0k4ii$}-I}Sn{zE)6yz9(J5VXrx`Qec;lDI+2F8|>9>+7Y#?er{RA$d8i zM$1WY^rD=HY{io)hKKSg^726rj199lKe@;vkNxmHk#6BP7cl}lX&NYf{42|w&0>2lI0GiLvGYFH%S}%PpikM$lJ*K(Q zp72fV&>ZX+a4{GrF<{}(a67DQ=@LXVdYp5^7v9+kP+a^p06%Eri-oAt?1q=+7qP=i zE5Pj<+l2&r2>Ze<=I@Kc*lT*xb&SuU=Z_=8?`2om`_$OMh2+m(9c~HXk>6g}OK`U* z95|T`@=^&zxwGOS>!`(jfTf``G0?r8T%*fZ*grF~C{=XY=-`wyDi#qSH0fXuA+~o_ z;gnWPgR@QWH(7c6gg^LFJdOFr=&$}zZj*lF!4>0HYm$x6q3xZ2nELo6*uH$+Aw52i z6O6Qb$!?n2PUQU7_9WXS_xujK3M4}9$3%@K!V3&z_m@iU+Ob6#-*kpW`S{rd?3d)f zy|F3kXX2qMKvI;Z?=q}*2-C7N2Ea{pl=gRFS^MwW4s`U(dDnX?WNBBSvJ!D>1eEb? z-xJE*2ytr}C0lC{TeXt~+)Q${ipxRh_EEdNc2bQbsqu$AAlK&!r?%69J#dmtoKRtD zE2qZ|1t5UtXvQt<_UDvzz{csB248Q)6(a(3qL^**dvu}emFEXu#HnpWR z@8#w!YtMccjSyLKZ1^tksP%Mda5*or94@5*N}3@n$#>z>1NlXdmI_hUJayMLxbAv8 zPMwAJ8L>hw7x@Z}M+9A}>qJhx+O8;Lc^1%ZJ6xNuah}khv>@ zfaK{inx9W+t>qFyQ|a9%D6CSUN~LBRYa)qTUs^{(rV=|u4)diHrpl?WQju{hN#Lj! zLbe4G3F~AIdZfJ_?acH?%H79VZ?Eg0cHhN+z#20PipSwMvw^`vbwaP zRUW~@qSQ3aIs;Dm%snPoIUS6$n;=r< zml-0rCT`m1zi@_x?MAz+ERBGxJxke9^}$R5&Fwv>S*^oeQ&%Y=-~2QiS5#8J+yaDa z40Ya*CC$!(!BK_#5qBr^oa~ZVE`P1_P#bkO0uoYF9l^gI^RrJat@VO5Dn}(b2*zSV z!|tT0zsxM6tM3BvCa7l*cQM>`m6~`AS^+HllhqeRhaBJ1{%%+;Ct?u+9-%bNID3Uw z`qU1*H}Cl>68%D2NwrcLF<%F|r#c$?v=2~qcIznKYG~%E^<2zKWUhYe60DQ9_LhaK zJ4$6d1MNYESyCwj2G!$Wwr5zyDS|R;2$EGviq0)>de2>YX+ZbS+9( zps~a0RNL{FNk+(o#A?Mr1f@PAZMRmAvleN5{UR40;Q_iVgN(Vu&EoU|(fya^$qNnb zaaAaxox#YJ!={)6$zUg8=8if`4~X0T3gPD#=uYs&a%T)nqAeX;ojgLgvq-q3Xp4b% zOKYLKm*5kU%u~9DZx167OcTrq@L!i%VD4idAhHMr4cnZMAG3wR+fu5b5*)--$Skee z&R-C9-f$PKlphdeDwl(f)I+L;%>edtu?=T^T*sIqTQPuW?7mwSr@(p%W=%!;>+pRnsl-Q5S> z)lBV9xFwm_T=P{@;B|pV()dD6%Ly#6fCDo^!jt8Hk-hg(n%ua$tlM(2i554yVAW2P zr}lwVYipWe#Y(9AeZC34VLor3vUSFfAD?;V-mgCaL%{vw*j>44t|HP z&?wN(JGe=;sOTU}Lawc0zpw)#CM=~oxqHtxoE{Ks2C(n}#2`%*%U>5o!4!FxR_@t{ zZy;F`qBG+=IL+DfR&8%4k~_QzSw02d{8i=zg*L~RJi%t&qp-CDU{2_B8UP>BdnEL} z-YufAl_!mDT0-S*(-nai(xjP;&amj5M~ilVuf2!H&0V5=Z=UNBYC-}_)M=(uljCyr z8SR+YlPR`M@0^&xZEaFa?_{(rY+PSUSfaV16=5&HQ`WN;7>fKdE~EES&G#EPkDttO zNj+tFya}EoxWcHjt)bEGg9{p9BplwIR3)z5xpfQrAhV~9FPjlxR3ibOM*TRDA5-|u z`=Qlo{eDRC?-oY|0$Fz|iGnw$H?ZIvRLzs~IxoF@gv=&;izLuP-XW$Pmx=Wxnw(*dE^)Guj-`~lg|FU~R5 z(%feoJ!epYbV^;EzF9wkUF2SjS#6&9v+TRQyUd+#@l*+@rRs?-+>(a#lg0@5=PyUiuwl6(Hsf47; zF~lst2eJvpX=aRqraR=;kOFOJlw04;;5dQCRB5v{XFI4AK&^p_57wnqi;C?PvFtC+ z2T2sBCO)rSsk4Hg#VoZgxE2PL3C-Rm^cM#NhXXGa#()y29_Ty?5Onz*5Kvv>P)R)r z(dFH@UWg5#!JAJc)md1{wZJg^3up&^IbJ%DD)xyTflL21iv1`IBi32w%Zm{)W8^yh zY(!pSsg4a&IePY~E@y@(4T2PL2Q zGM)j3$~qcq^j%*#AQ0&ybH7;w)%$j=hzs-C;$#x4@{FEujxgkCCE3&}i}8SW7u!Ax3# z8}@=-E7(Ud!!?2W-#btGW&Zx>G@1-0Q`Zi{N(j;=x~@1W5f0cqO&w7h>TD zciZ_xoxY-4>$N(D%raW5=lP;c_6m^yhY#K~BYjV~^~jE4%$FI^)>E2G*+m$OO8PDD zlhA=JEI<4fAMJ-W%yd{m->W1g2!5zN;E{aZH)rwDp26GAx`BKRr76F5QHk=waC4KN z_$JOx)v}Yd*TTCflRe}YYCgszAlOUiqWl&4IuPSVRB*`7xy$b}V^hm~fFXo(G^O6M z9u=TDkOS{V&!lHP0q~T22vEErE}uNIg4RD)Ak2K5B~?kA;J}CJ-vRVbN?28u(_Icd zfXUzt47?|>vlH`)QS=|uC_dX%dOvP;;E(0n5tw-z13OfTlaKZzt=`(&l0ngFrI9NQ z{ovBU%pUzKt-k7wd&LjB#qBHa81lWw1n)^0gWyv{m0>q%1oL;a{!h#umaUn144rp- z(5j^tX&Du_Rzno?gLHyBFMZ6`&zADN-JzR$-%)u55&#j)cSF*JNcfT{SCCPtF!&WW zyurRii?elw12cDutRFl;VtnhPB|({Hu8ZA z*hUSgPin_Eeit$Zh~2Blyq<4wUzqeF6JnMu9GwCVhwmcbHpfF&3)5n&dwSR{vFBYb zFQD>p014vqks3mlIQnHeIIDJa)Dy$h_}?~+|7d?JNcm46p-`Jh?62&CJiWLmvJ|06 z!n|`|T(Z_4**V{AL6zqRskbugDY`%CfJDW5jBNE)7Pap;)jN8Que?gs+BQ-KUwX)e-|moEr-`f;Lc4gbkJe5fLoL1JMdr_8Jl<6eb(4%K3u zJzu*B!Q0?HOAdeQC9ArH$^qK5b8vz|yd}nRnd}{oZ%Q#zmnW)A$CN?q++|4(dM5C$ zPUfW04l~ZLJN+Zw32dG6^I)0PCpV_B8`oir>nv}Q?609vqyvky8kiF9Ux3(YEBN;L zou8G3_mi3od>*5o-M27y$$Lg#qZA61d<)Qd7tEP6PRdy3hJ9dsHb-ntey5_oA3(2{ zma78?+$_mTUNu;&n9IHKM2j2%57l>IOo2gQG(s6_aBTb^BRA8`XZg`~7fhn@;4%;g zr!@@@DAAVkkI)~nkU$KeHn4SNbJ-8;v%lWmkRK{z{D%=~) zhzBNlq--PGcBB#er3Jok`g3-A8|WK#Fs?4s4%D&^<4=bW!J3%^30cbgnbmad^&It; z`g$N6o1A_E+dD6mg3WA<89x3NE^qtg?01=DP1Y-Gtw|)0iz!!K7K_Y&7ad1u@Jb4D z=zvg1Xh(Z}@xs=;cGD+bk-|jEE_&t*GC?`9V)ZhN zKjdL}$2j2b4kQ;=h#j0|7*Ncc=J%DWaUp)867#RcHSY(koOO?38;0uw&=Z5}3k0c9 zdX}WEOs;nH;fivSWptr@dN*<6+$o3@jxX|a@?B(T^ycooNNJJ$!%->h1VI+rN=-_Y zv8|mX&>qKo(@tFKa{H%~lbJvq+F1D`x0E`Spz=^Pne%$z559_m5PSWSk{K=yHAys>H2FoeS0qTlyYdcY^fA@ z)SVF4&@uQR<&T&cPR@(w>(}~Sr5_ESvHoa5I)dN*dAL#Hc{>N1%B|oNqfuqxnKwY# zsgJK8bsuRvz#^E&8QnLXlmd-{2FPZe+QC_aXYaI=2f0|H&uxcO7;ka+ zBn!+Xj+mD#C!S{A=5mk6Rpvlmd9}SvE`pP1k)&A)9%t++^da%0sYNRNv-ZU%IJia| z&>Yu&E_`EiO>`WlUb3vroqU&J(z|kiZ8KQb{;gNHT$OB5)dHzDt4;YAdH(tln{tB? zGa-%@w&aA!21wzWKb!WyQT^fRl{D(S{nZE10=hAfS9Fn~1Dz%yUw-K_f88#@d7Bg> zd@aKBiLBK5Y^U8q%$yVxNc}-7%0vr|C=s@)R0Jt#Y>f`9qOGl)l4ND?X=mr7BJcu2 z4yro%VwZ8mb>}wyk>62TPJlPcH@xwm=JjH(7T-ICyzOCK% z;z|@j_eoyDfnzb&WMJ1kWvBMm;bEu1>a%bfxvb)8FBWj>h%xTy6B0dRSa|edwJ>HA z7rpc6kII{1bI^R6<_irSrUA!8vwJtT-_M8*W5^KItnX7jLtxfNzVR59#ts9FS5Uzj ztLJ~$)BQ&QxW@nE+LK}i{15fBl6eD zdJg6T3n^KE=Q;P2QVwR2^`LE-)!l&0oV<&2Tr@-izJAH5Sy(o+{_@^-Y$V3D0}Y)` zy8`Q8q4WUh0}LP~*QTo2~O z=FHWTm}{deYH#dtqUKw}ya+P$MI}6eT~LcG;~1zGOdRdaf2h(ob(ASip1-*=6Y6f; z1@||IhDsYTa;FfcG^@xuUa3SYn#%CYqx675J8u&hYYr3Wh^W&f{{`HL)ux}~cjaua z<|D(PD=;}A(OsaFIo!*WoWfep+%@i~C}3 z_08m*i5S+QW1o_jGc)Zo7dp30r6xcmT24Uc-SoM4zs@GGA|mT!hc8=bqjH6#`Z1{H z18rhF%TY8~SHQMadz00wGb10wa^I0)bZMcvx7nWEBw$1j*s+I-p53e@yObF$Xl6oXz zJRlz{%9dAEpKt&#+s~Y0@T&e3fwO%vJS{mQ{RGhv(ktUk)&Du@W=*Dpb}}+DRt7yQ zD8%p%%XbjNa;J_w>CgAvqO3KyR1FD~*V(+bJ>5C^#((~i>(VjIFYjlqe5u;)i<3^! zUirJ4JzfR_WkBaq{H^Kt#=^{eOOnIaeRcD03m%^2ID3tBR*a$#&nCo;Xk{4kv5XJX ze~mjNMa^yoMcVbC<7yo=<8C8OPtv43)SxCg-sVZ8ZQt9bl0nl3QkUOGOdLbhU{-lV zV&G-aaHl)Z?s!!P2i2s};Zma;5xkKk@Wfb{JD6(5l7k{bBYC&@MYV3mPWn&X}zdv!Ucf*3zDN zjVuPF_YF0^it`!)2vg3 zI%U3oO+H99E2_b?6^_NGr%I8%gcxAfV^9|87Z{VhH%lB<_t8&1E$Hu0ZiH%eZpDv0 zpYGTXpS&U(dP5g*wvNr3DNXXumcPS;_J7sgv)kSAV8_g7S33~_iG*x|n+iQ_@5Wy% z8VU{x(5pC~ETOMT2zG>Vo(l}t+4rMBSl0MF27WP=`X3!W|MyVp|EHe%>hqOoQ^~iH zWQqebbbGEu$!^q06JNh6i~oSX?&A(=!V59mpFT@k#vQYZh~e zLos1MmHmPE=;o-Bt*PZEZZRENCx>Qm0^2dUnNOOOYjSN@6q_y6*T1)QSMcYUgJd-} zEo`sN4-V%R%I~IvgY^R&X+l4E5*ut})gycy+L0`TY?fc9iilLWeoBf%ZAkLRT~QaV z?(AydrLcl(%PdwBj)>it)M@1ie;Ya}QdP592dvaeDR~}(^q3>D{D1A8=T}qfwueKL zjuC0n3=m2}Z=nbXK_G=1nsljB0@9Hp8!#ZfhF%m1y$GR(;s!*;&^uC;?xw3Cf^A>! zxW_&AIrp6V7u=6)tue=3W3BO)`Of*952QUKFT;npbAA66a*&qvg^7d78k%7*v=TvJf7^JnHA)3nrIWyKuo!2{R#)iAdzaF z4z;Sm5?%_Y&{k3bc9Aka&)cAO{p*!kfG=Cm)be9(vsr=JI;h$61muXMKOM3wUhORY z_qrR;Msm5O8o*_?$}!o(93PC4NRVd`XA)K~uF^LW_PBh;29?~h+ua8Sw;RD1fscjH z-XYp-KGjsSbv;jl^Pt|MP#E?_paeh_NSk~68cz#}hh4DPuDJi0!}MyOKDmc8j~1h9 zknNDb{W)*e2w<@rZn!5;I^(At(m8|(2Eh87Ey*dG|)BY zsa0?126uYwbaKv?r)%bQrZ}K26a*0;(;=e(O)B*PUe1j#4y&zqmrw;q97uaS0+95`9nKjRv;n7+&>=k?mdlCRBrvxfc}F z^F1%3f-&TVupK47c9Z=w^_7U)=Bed`D31G%!0Pq=3A;g_fyy#X+f{TJHij}~-Uwb*uN zs@Iv%A?deT3yz$o7Ex$%upco!ChWkSu}CEDy+}>(xdMS~x+2gbvx{I5fDWx=XpYJn z17Wb{QJzPn#G?JApm`3HjO{JCDmlu2iluE$l}tqdJ4N_KmwW84XCP^Z#NNK^M&M{S zTLb&Rv2qjvcuGxGs(^;_kPu0n@>@{BW!2-<5TYICEL${uJYk)-Kxm=rZyj6y&o%$w z}ne|E4EFg%P{$cjpt;6JrIkLFWrKb+nIRi_FwO)&UI@rw^~6 zrwX#eQB?9XHH)?G{-I>4;630vuf+yE%9UG3!}hR`xGeBqvF$J;J(TUvwV6owQ(!c; z0Ap$=6(R(K-FM=qx=$=1w3wI2?8aErm@;4P{hcROP$kjhJ+F2E3n}BoP1^_7MiXQ3 zsh+y>t%1T`>bF6iXwB;ULLch7!tvMSd%O_6V3e;EVKCDo!Ktz$3{1_8?dfP6za1rG zKG^ev{xXs_$*Ky+=RQ2Xr&9oYQ=9)HtUx#_kU(MSx-kZ)i+JT zq*YlfgsFz{C4KZ;T)k!9+L!L=O54{dhy>DS-(BJ}xw*!x;+JZ&csT3XjmmfBWa~18 zVk#=m-h+AT0(l69da4lCK)J5;g78*$CP>@t8olU>J80E^9zgeblT9k~FA=Z1I$PO})UX>HGG16qyiuG~=Y6m|9={ zEkpDp-Pbayvbn#YABkFj&(i#-1@V4cDV?}=3?{=L*+i*k6Ax!=Yk;7%px_0HIp?&G zhch2vPBb$+rQp)b;de&RH4@Mlr<4P1f2bk3#SH-^omAL^4R1Cz`8d&?+nx=QHxu15 zg}1mIwH&jnaYr1w55>UexBP=tbrjYlb(Xt2(kH|2!eaXfyE<*FElbzsTf<7Y>q4fd zkor^mrK#BEaUn!*D*W+Y8$COsO-9ESLEDsCZLDG#%Zx=NUDKI zikql_Ri)u7qS7zl;bgcN=)-(j%Oo9zlq3`Wpw=?a%7?~zP3^8K*s5*e&Q0r4NaaGF zY0!?y?l|wyN*oV$NsJA2tp_5we&apk^c9`wW?eUsE&g)YVK9pp9sTt!z(|n*9q>bj zd(?rF=Y3}iRLP%!ysH=aG4O)1)YYY-&~=lfT_%ign{|y+?@=gH$=+9SZ41R_Xusr} zN{faR*6QmUi9GpUm?}YxE#6q){sLXS!+ens_``Zk;rTIJB0KLCp;Eok^GN^?0 zS|n#mgt^$Hrva`r?z*c0ONBK|x;Et}TBlc(W!x`n3m?@J1Zaqd!1Fg0*X z`*gb+FwZ*ja&4I2j-I_#>2?%c^V)>F`q(b@VXpF9L#ELh)m=$KfbF>dnrFFct&i*j z5~O?kU0d<0q!)X@)CC@a&Xayw9)igzY|uB#?@H1!92@W1nke^5r`YiGiZnQXQFvy@ zYQ{FR>1Jx|xG5xb0IF##TYcDAMn*j9873 zRn|V?tkZ8YD$AiGB>Rw(+aiNYw*ZoUV?Qz`1_30 z3q9gD+0DTdYEbk5+swc#Py9jxnSO6HH<2N9U&ZXJnkuR7?o*nsxlpAX+%dAHU^?s` zq^oxF2*Z{~qso)cRES;Jvc^eA{5ey^7nr$ConYtbf%}8jVc5aAjwUS}r6-=Y#GQ6^ zuBcAR-`^#7J7>4ZI=4m`zDwFJr237V(zZM+q$Ik#SOv^k_N%dv;;tk|@V?6L{XQ3e z3RNZkHDe@M|D~OSQ2+Zi_n*RX#g0HeAr6ZV*D4)FIrt;*g4b~u_y6Xony(D`T zOfjPIPKU?9Qz7H*ybJj+mo`eOc&YYq#yof#N#0NL;OF?QcY=|Ha#Pp7LHkA9 zqC(Rf`*9HnhK%Vxto^DP>2BS}w1``+Fvg*J7(*bl`Hq}2;wBoOS9Zf zHcF35XT3P!0jOy5YBhhqax=O8?SNxOFMDXbd6-sQ;X)e7?R8xKI{~jmRX#6?tq5zg#xdDTS|TzTFtVKil~yz(vmV zwrXT?j8%5oOl1*+JPr5+xkCtYXoL-dSS+8fjOF#;YeCmqx_Zor;4Ri&rK(CSJx*Tk z4|GHNPguSLnx?=#?LbPhY7M(to6llI)1x2?Q#_j5?r3*j)(l5>M>-0AF*|UuUQ?9B zT@Qsf?}3{?V3>>gL3TB=h3O_(XWBrRP{CX(2ER|8M6sQi9tBj55uh3XL?6s__U4-t zTz5;V^vBwBt_3>C3d46e=FMU$!^(4Nj>8q5(vTG-@L4T7>Dn9ZY18~@7O@8(XvF>~ zu}tlJwV>g^F{C7QGCWmxSJvBIiB_?ZP37%?qW29_S2DEG?5^ig`*wG;NK{NV&x)mb zVkebaz{d$I)jCo0kZy13YleOd>c{x`iyXgKL(lsZo8 ze<((J`HyVF{Vsq;7ZMUWz5J|s{^bkK(MID1=_pM~^-Pn0K#iK8n&(y1KZ-mBCDZ-{ zQ2x04VX#v00x$hRdhRzSy{7*F=lZAN^{*Fnx;I`<&oG(lK37PVm$j>zyZ}&e&WRK1l%804SbS0bqL(^0o6#sP>2!cehv^< zlD8ZQ@q8(?uZ{Zvg((!;)v;=kSNLRum8dntZCm8RRD*AEdIn@ItUGhBCsWUC9%!H$ zMKbfxEwVkfq&%da#a-rvTcHk32OInP_!xz3%8i<3zNgs3J!+h84ZO*NPfb$3m!&PQ zvW=MDJAvZLTQb>e1D9KL$J7R=IB@)BPq0h@U7{ZjK;zE4G)C0x96OzUZ;;9AkA#)r zo>pG&R0^3L48WDo3_1g-7oG8a>*a#q?*AZ1Y_k{V=J${0{=mxT7*`wEK;x}rmH~yu z3Tn#BEVUW+Q=;#$XJynPM)imP1o#X~S9sm~l*#;x>Q$`_zQ+NgnEa8SJ1-~LWRbV0 zm0ZbZJoHUkSWh)92E~>YSsiOQ;g09)S~W7Ro>J)jELi!ddlJ{miwa+^5GMo76Tl7~ z?J~WSh~g?|6m%!Kr)|SJJWuNj54T*Eows+7_Ysf0gXFm;YpvmehvI`&Q4hASX2%Uu zu5u02jY_+r0RnN8GYp9nPhT4+oHY2PC}M*1#Vyk#AEcv+qay-_Wplj~%&)Et2BZim z8Tdc$c*9qMMELw6pG91#hTz|{XGu%7qwjt`K-Gup>k&SJQ=u=pE(6g>M{Bijc@ccbMyoI0R??tLvSqu!Fb+Z(9 zw=lM$B0(oL;wGFJlmck^3TL=+rE!g-T`95>Zm65^PT6(mC65cNADMsS1zR*e3GB8v z_5BI+o5YXB8jqv=_{GZfhvp18;7%R}=uu%LrobCLR3UPX9KOaO%PiStAm?9mQ`pc> ziy%q3DT8;zLGXP~;4%a=5tlGhjGu2hoE-0`OnBd3HQ2xGR~X%K58dnv>?u)YSg4JLe`>#tY*8c_t-0d~T%iJzK|Z zehAe2S9`C+}Y?9V9=E+w|LU8e7?!((%gSB`A>=*>Q`s4SRIei}3)jdK|~ z$zurJ;^@lPCf08D_J-!Lcei<`#Y6^MiK?QlyG}Q(Dx8_iMmECQC@m5XG_Ya$pzoW* z4Lv1aR9af`rP}5x^g<>8@11(%JsbUt=)(Z&=~O_Pmb36-u*{XRv1$L9@6@aP+p`Y# zg7DryyyY`pX#>uK)vv2vFylz3FZ?mH42Xz1^M`J?gCyVG=hrS}5j6;KZ@AR;YV1-@ z|MbE z$Y{UA`=YCi%6d`QvB$&ax$!wqwrRa+;qsOwV=!Oeq@A*7x;)-mbbU~2Y!VDlDF@G3nkF3&hy`07I9NIp-kUlVT?x}lyT>55$?pL4c zD(zw891;>UwF-q&zwu!N0Vt}h{99so6d(nHA`IE>!MsmDNwbdRfN!GtXiP3@y+ zIZGyj>tvCa8#qt>>oFgi77rx}`V$1vEr@bhk|;Qzu{Vr-?mn~ZMF@MK_#`iBLX{w>C@LJq+(GA3JZj0>A~vZ) zbNR}g&@PCFnlNm9de^85VM*A_L`1q`S}^gDJFu#`hNTcN9+a8x6NqTfxEXcj7lzNt z^cR{>XyHHMt^Qst@Gn>z*_UkwpN*$)Y+lPKi-ISz`e(a}Q;Aua6hf5R+gm9DPg*Wl z2s*~Cv>g-+Se!c_Fyp|&^z?`cioVNW6LxyR1z$rn9%#ni%hA+3`u)|Wy2-JUSvsEa z-6$*@Wc!47xb10~Zk1svz|6_eDrP-D$F)M)hlm4MZZ*ySl)1Q<6T&nsw`6_7xX$uvVNvvTMO&V@CovMzlH(g_*Q9b& z+@z`iKr;1!GC+_REqW79!S8o$s0lR!IwGr|`8m&}KfTll{vClgTX!h&P~VVzXKF!O zQ4Fe*?eOyA;6BlhAUmOWmxnX=%_`3>TxsB^=55XE zH{aK4T!BbDve*^Q*G>giG>B24grY?g66HR7VxOl8B-&-m}Fnc;akij2u3Otr2jNRjM=xc-rX>NS}6ufTHp4_rm`K6y5RLX3KriYOxb= zRf=4Cl{oGCGHRr3xF!fPp8;v!7m=3>x(0cjU*lng>)Nl)%#G3dBO4^C`r(3KH{B@p zgfTP}8EkFpjc%PXLt>26DHArr^|DwoE%Yci;rvj@tblhc#pdtdcQ|FDG#D;9HAUwo zIS?WGsNs=zo`PJD&4&?X|-;`;TUBKf;o;t zhY1$TEasxu48 zS{z)%UvkEK-8+}X0BO33nMcZx_$~@4u`3MLl!;*nkyp6#`+bZKD2>?6#j~>fTPG?^ zAu2q#TFYzi1y?m*&G#akU2^h&Z(im=N15j#;Awwr+nC}O<5eGr<9W8?tlTg=xg#`j z1HM87W=m7B9RQqp(8F2rU;z*Suyx%R2lzLPSN{HMU;hf&{_kcdpnrsOw=^mqUZi=O zsgo2H(623%k_rr08)iD&F|!jrtJG0A9=1$u&^!_cV!o@`5}LbvEIm3xHXuJ^Jsx6R zgZeqS8gUr2m3Mn<3mT9c8KSAs;pjK5Zz>I>s>~T{ji${-<<7MNV^DBIrzaJzaMt4c zg~b%D*iKDuGWxE3s>R6Q(x*{WQ<>Fi@A@)$bh*x?`Unqv`m>mrLf3iEjkzKp88l1P zAX@~1IwBay@_mW^%2^R3wmb`Wn;F{1Uf?LGobT4UJ+{v>uo71EpaOHgeFACj3Dxox zuv4^J&00O9oLd$9#(n4}VxL(joO(8t{RD}NS!AnESz$nubI3pmEutb=tP;isV)l7E zY@8U;T2T9K?hPt))rNs$qCL+$WN00sF+ry^ElaD!^^A*VQ_xucwq&DSejIA>S>0v* z($Ah841v0a3A7dANw;=^)HZj|4DMqvo_6LeKaOH1M@cJNLsL9o$i1H&##!^={~aIx z>qh?9&-h2H)4u`!((WYRP+Y8&D6QNkmR?L!D^;2byyZvp%+70%yY Date: Tue, 22 Jun 2021 16:35:27 -0500 Subject: [PATCH 0319/1870] Updated content for Programming Scala by Dean Wampler --- _books/2-programming-scala.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/_books/2-programming-scala.md b/_books/2-programming-scala.md index 27a1e9ce61..8fc729169f 100644 --- a/_books/2-programming-scala.md +++ b/_books/2-programming-scala.md @@ -1,11 +1,11 @@ --- title: "Programming Scala" -link: https://shop.oreilly.com/product/0636920033073.do +link: http://programming-scala.com image: /resources/img/books/ProgrammingScala-final-border.gif -status: Updated for Scala 2.12 -authors: ["Alex Payne", "Dean Wampler"] +status: Updated for Scala 3 +authors: ["Dean Wampler"] publisher: O’Reilly publisherLink: https://www.oreilly.com/ --- -Both are industry experts, Alex Payne being the lead API programmer at Twitter, a social networking service based on Scala. O’Reilly, the publisher, writes: "Learn how to be more productive with Scala, a new multi-paradigm language for the Java Virtual Machine (JVM) that integrates features of both object-oriented and functional programming. With this book, you'll discover why Scala is ideal for highly scalable, component-based applications that support concurrency and distribution. You'll also learn how to leverage the wealth of Java class libraries to meet the practical needs of enterprise and Internet projects more easily." +Dean is a well-known member of the Scala community, using Scala recently for streaming data systems at Lightbend and now at Domino Data Lab. This edition covers the new features of Scala 3, with comparisons to Scala 2, both to explain why the changes were made and how they improve Scala, and also to enable developers using mixed Scala 2 and 3 code bases to work effectively. The book is aimed at professional programmers who want a comprehensive, in-depth, yet pragmatic tour of Scala and best practices for using it. From bcad9c105fc521b4bff0661017dede35c17042c0 Mon Sep 17 00:00:00 2001 From: Seth Tisue Date: Wed, 23 Jun 2021 13:49:51 -0700 Subject: [PATCH 0320/1870] update JDK 17 info on JDK compatiblity page --- _overviews/jdk-compatibility/overview.md | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/_overviews/jdk-compatibility/overview.md b/_overviews/jdk-compatibility/overview.md index 6c6a0e9201..85e65f3448 100644 --- a/_overviews/jdk-compatibility/overview.md +++ b/_overviews/jdk-compatibility/overview.md @@ -12,8 +12,8 @@ Sometimes new JVM and JDK (Java Development Kit) versions require us to update S | JDK version | Minimum Scala versions | Recommended Scala versions | |:-----------:|:---------------------------------|:-----------------------------------------------------------| -| 17 | 2.13.6, 2.12.14 (see below) | 2.13.6, 2.12.14 (see below) -| 16 | 2.13.5, 2.12.14 | 2.13.6, 2.12.14 +| 17 | 2.13.6, 2.12.15 (forthcoming) | 2.13.6, 2.12.15 (forthcoming) | +| 16 | 2.13.5, 2.12.14 | 2.13.6, 2.12.14 | | 13, 14, 15 | 2.13.2, 2.12.11 | 2.13.6, 2.12.14 | | 12 | 2.13.1, 2.12.9 | 2.13.6, 2.12.14 | | 11 | 2.13.0, 2.12.4, 2.11.12 | 2.13.6, 2.12.14, 2.11.12 | @@ -81,13 +81,15 @@ As far as we know, 12, 13, 14, and 15 are similar to 11 with respect to Scala co JDK 16 was released in March 2021. It is not an LTS release, so the remarks above about non-LTS releases apply. The next LTS release will be JDK 17. -The Scala community build and the Scala build and test suite run on JDK 16. We shipped improved JDK 16 support in [Scala 2.13.5](https://github.com/scala/scala/releases/tag/v2.13.5) and intend to ship the same improvements soon in Scala 2.12.14 ([release timing thread](https://contributors.scala-lang.org/t/scala-2-12-14-planning/4852/2)). +The Scala build and test suite pass on JDK 16, and so does most of the Scala community build. We shipped improved JDK 16 support in [Scala 2.13.5](https://github.com/scala/scala/releases/tag/v2.13.5) and [2.12.14](https://github.com/scala/scala/releases/tag/v2.12.14). ## JDK 17 compatibility notes -JDK 17 prereleases are already available. The final release is [targeted](https://openjdk.java.net/projects/jdk/17/) for September 2021. JDK 17 will be an LTS release. +JDK 17 prereleases are already available. As of June 2021, the feature set is frozen. The final release is [targeted](https://openjdk.java.net/projects/jdk/17/) for September 2021. JDK 17 will be an LTS release. -The Scala community build doesn't run on JDK 17 yet. We will add it once 17 is closer to release. +The Scala community build is mostly green on JDK 17, as of June 2021. We are in the process of making Scala's own build and test suite pass. + +Scala 2.13.6 already supports JDK 17. Scala 2.12.14 mostly works as well, but there is a known issue with lambda deserialiation; a fix will ship in Scala 2.12.15 (see [release timing thread](https://contributors.scala-lang.org/t/scala-2-12-15-planning/5152)). ## GraalVM Native Image compatibility notes @@ -101,6 +103,6 @@ A few sbt plugins are offering support for GraalVM Native Image compilation: ## Scala 3 -The Scala 3.0.x series supports JDK 8, as well as 11 and beyond. +The Scala 3.x series supports JDK 8, as well as 11 and beyond. -As Scala and the JVM continue to evolve, some eventual Scala 3.x version may drop support for JDK 8, in order to better take advantage of new JVM features. It isn't clear yet what the new minimum supported version might become. +As Scala and the JVM continue to evolve, some eventual Scala version may drop support for JDK 8, in order to better take advantage of new JVM features. It isn't clear yet what the new minimum supported version might become. From 0e4bce98931a9a0e4d3ab5c75b5a28905207f444 Mon Sep 17 00:00:00 2001 From: Liam Bohl Date: Thu, 24 Jun 2021 11:37:33 -0400 Subject: [PATCH 0321/1870] Replaced functions deprecated as of 2.13 += (varargs) -> ++= -= (varargs) -> --= retain -> filterInPlace --- _overviews/scala-book/collections-maps.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/_overviews/scala-book/collections-maps.md b/_overviews/scala-book/collections-maps.md index 1556a66ef8..95e890bbc3 100644 --- a/_overviews/scala-book/collections-maps.md +++ b/_overviews/scala-book/collections-maps.md @@ -83,18 +83,18 @@ Here are some things you can do with a mutable `Map`: ```scala // add elements with += states += ("AZ" -> "Arizona") -states += ("CO" -> "Colorado", "KY" -> "Kentucky") +states ++= Map("CO" -> "Colorado", "KY" -> "Kentucky") // remove elements with -= states -= "KY" -states -= ("AZ", "CO") +states --= List("AZ", "CO") // update elements by reassigning them states("AK") = "Alaska, The Big State" -// retain elements by supplying a function that operates on +// filter elements by supplying a function that operates on // the keys and/or values -states.retain((k,v) => k == "AK") +states.filterInPlace((k,v) => k == "AK") ``` From 8c0d3389302ac608fc436dc61a149dce5b723812 Mon Sep 17 00:00:00 2001 From: Seth Tisue Date: Thu, 24 Jun 2021 08:40:05 -0700 Subject: [PATCH 0322/1870] tweak wording around community build as per Lukas's feedback --- _overviews/jdk-compatibility/overview.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/_overviews/jdk-compatibility/overview.md b/_overviews/jdk-compatibility/overview.md index 85e65f3448..dd151bf707 100644 --- a/_overviews/jdk-compatibility/overview.md +++ b/_overviews/jdk-compatibility/overview.md @@ -81,13 +81,13 @@ As far as we know, 12, 13, 14, and 15 are similar to 11 with respect to Scala co JDK 16 was released in March 2021. It is not an LTS release, so the remarks above about non-LTS releases apply. The next LTS release will be JDK 17. -The Scala build and test suite pass on JDK 16, and so does most of the Scala community build. We shipped improved JDK 16 support in [Scala 2.13.5](https://github.com/scala/scala/releases/tag/v2.13.5) and [2.12.14](https://github.com/scala/scala/releases/tag/v2.12.14). +The Scala build and test suite pass on JDK 16, and so does the Scala community build. We shipped improved JDK 16 support in [Scala 2.13.5](https://github.com/scala/scala/releases/tag/v2.13.5) and [2.12.14](https://github.com/scala/scala/releases/tag/v2.12.14). ## JDK 17 compatibility notes JDK 17 prereleases are already available. As of June 2021, the feature set is frozen. The final release is [targeted](https://openjdk.java.net/projects/jdk/17/) for September 2021. JDK 17 will be an LTS release. -The Scala community build is mostly green on JDK 17, as of June 2021. We are in the process of making Scala's own build and test suite pass. +The Scala community build passes on JDK 17. We are in the process of making Scala's own build and test suite pass. Scala 2.13.6 already supports JDK 17. Scala 2.12.14 mostly works as well, but there is a known issue with lambda deserialiation; a fix will ship in Scala 2.12.15 (see [release timing thread](https://contributors.scala-lang.org/t/scala-2-12-15-planning/5152)). From bcd05f58cb46217358858002a9e17be6a57f2699 Mon Sep 17 00:00:00 2001 From: Dmitrii Naumenko Date: Thu, 24 Jun 2021 19:01:58 +0300 Subject: [PATCH 0323/1870] Update ca-given-imports.md --- _overviews/scala3-book/ca-given-imports.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/_overviews/scala3-book/ca-given-imports.md b/_overviews/scala3-book/ca-given-imports.md index 2b5c0a6429..6cfb436a29 100644 --- a/_overviews/scala3-book/ca-given-imports.md +++ b/_overviews/scala3-book/ca-given-imports.md @@ -14,7 +14,7 @@ The basic form is shown in this example: ```scala object A: class TC - given tc as TC + given tc: TC = ??? def f(using TC) = ??? object B: From c3a58d34c576e4798bc141ac7967117a81331920 Mon Sep 17 00:00:00 2001 From: Altair-Bueno <67512202+Altair-Bueno@users.noreply.github.com> Date: Thu, 24 Jun 2021 19:30:21 +0200 Subject: [PATCH 0324/1870] Using Scala 2 If-else expression instead if () else syntax is from Scala 2. Use if then else instead or simplify it by removing the if-else expression. If-else is unnecessary --- _overviews/scala3-book/taste-objects.md | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/_overviews/scala3-book/taste-objects.md b/_overviews/scala3-book/taste-objects.md index ae522627f1..5c27e3b8a9 100644 --- a/_overviews/scala3-book/taste-objects.md +++ b/_overviews/scala3-book/taste-objects.md @@ -27,8 +27,7 @@ For example, this `StringUtils` object contains a small collection of string-rel ```scala object StringUtils: - def isNullOrEmpty(s: String): Boolean = - if (s==null || s.trim.equals("")) true else false + def isNullOrEmpty(s: String): Boolean = s==null || s.trim.equals("") def leftTrim(s: String): String = s.replaceAll("^\\s+", "") def rightTrim(s: String): String = s.replaceAll("\\s+$", "") ``` From 662cf053d5c84f5e11650e4e6787b41ed34c4d08 Mon Sep 17 00:00:00 2001 From: Altair-Bueno <67512202+Altair-Bueno@users.noreply.github.com> Date: Fri, 25 Jun 2021 11:28:03 +0200 Subject: [PATCH 0325/1870] Added @SethTisue suggestion --- _overviews/scala3-book/taste-objects.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/_overviews/scala3-book/taste-objects.md b/_overviews/scala3-book/taste-objects.md index 5c27e3b8a9..6e33d8fd55 100644 --- a/_overviews/scala3-book/taste-objects.md +++ b/_overviews/scala3-book/taste-objects.md @@ -27,7 +27,7 @@ For example, this `StringUtils` object contains a small collection of string-rel ```scala object StringUtils: - def isNullOrEmpty(s: String): Boolean = s==null || s.trim.equals("") + def isNullOrEmpty(s: String): Boolean = s==null || s.trim == "" def leftTrim(s: String): String = s.replaceAll("^\\s+", "") def rightTrim(s: String): String = s.replaceAll("\\s+$", "") ``` From 430252a1766eb0062784ad992d78eec516965b27 Mon Sep 17 00:00:00 2001 From: Altair-Bueno <67512202+Altair-Bueno@users.noreply.github.com> Date: Fri, 25 Jun 2021 11:29:44 +0200 Subject: [PATCH 0326/1870] Update taste-objects.md --- _overviews/scala3-book/taste-objects.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/_overviews/scala3-book/taste-objects.md b/_overviews/scala3-book/taste-objects.md index 6e33d8fd55..2e6d1428ca 100644 --- a/_overviews/scala3-book/taste-objects.md +++ b/_overviews/scala3-book/taste-objects.md @@ -27,7 +27,7 @@ For example, this `StringUtils` object contains a small collection of string-rel ```scala object StringUtils: - def isNullOrEmpty(s: String): Boolean = s==null || s.trim == "" + def isNullOrEmpty(s: String): Boolean = s==null || s.trim.isEmpty def leftTrim(s: String): String = s.replaceAll("^\\s+", "") def rightTrim(s: String): String = s.replaceAll("\\s+$", "") ``` From f8b8af443956c64769a7577ed0882b182ec8d87e Mon Sep 17 00:00:00 2001 From: Altair-Bueno <67512202+Altair-Bueno@users.noreply.github.com> Date: Fri, 25 Jun 2021 13:06:17 +0200 Subject: [PATCH 0327/1870] Found another Scala 2 `isNullOrEmpty` --- _overviews/scala3-book/domain-modeling-tools.md | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/_overviews/scala3-book/domain-modeling-tools.md b/_overviews/scala3-book/domain-modeling-tools.md index b8fd76f2fc..f59c39c8af 100644 --- a/_overviews/scala3-book/domain-modeling-tools.md +++ b/_overviews/scala3-book/domain-modeling-tools.md @@ -219,8 +219,7 @@ Here’s an example of a “string utilities” object that contains a set of me object StringUtils: def truncate(s: String, length: Int): String = s.take(length) def containsWhitespace(s: String): Boolean = s.matches(".*\\s.*") - def isNullOrEmpty(s: String): Boolean = - if s == null || s.trim.equals("") then true else false + def isNullOrEmpty(s: String): Boolean = s==null || s.trim.isEmpty ``` We can use the object as follows: From cb136c0b509d438348c6e9737eb0fb55a7d119fe Mon Sep 17 00:00:00 2001 From: Jentsch Date: Sat, 26 Jun 2021 11:52:38 +0200 Subject: [PATCH 0328/1870] Fix docker port in Readme.md docker-compose.yml:7 exposes the port on 4000 --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index eef762ce16..8b3d557025 100644 --- a/README.md +++ b/README.md @@ -22,7 +22,7 @@ To build and view site with docker: docker-compose up -It will incrementally build and serve site at `http://localhost:8080` +It will incrementally build and serve site at `http://localhost:4000` ## Contributing ## From 904fdf7d95ce146f37c1ab1ee37c0ecf41917916 Mon Sep 17 00:00:00 2001 From: Genghis Yang Date: Sat, 26 Jun 2021 19:56:02 +0800 Subject: [PATCH 0329/1870] Fix a typo in Domain Modeling / Tools I believe `have also have` is not grammatical. Should be `also have` --- _overviews/scala3-book/domain-modeling-tools.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/_overviews/scala3-book/domain-modeling-tools.md b/_overviews/scala3-book/domain-modeling-tools.md index b8fd76f2fc..e994551aff 100644 --- a/_overviews/scala3-book/domain-modeling-tools.md +++ b/_overviews/scala3-book/domain-modeling-tools.md @@ -66,7 +66,7 @@ p.vocation = "Musician" ### Fields and methods -Classes can have also have methods and additional fields that are not part of constructors. +Classes can also have methods and additional fields that are not part of constructors. They are defined in the body of the class. The body is initialized as part of the default constructor: From 4d0e5d3baae763f96046c2d7ad5b8a6d4658c165 Mon Sep 17 00:00:00 2001 From: Genghis Yang Date: Sat, 26 Jun 2021 21:18:08 +0800 Subject: [PATCH 0330/1870] Fix a typo in scala 3 book domain modeling fp Just a typo --- _overviews/scala3-book/domain-modeling-fp.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/_overviews/scala3-book/domain-modeling-fp.md b/_overviews/scala3-book/domain-modeling-fp.md index dec7dda6d2..9d1c163864 100644 --- a/_overviews/scala3-book/domain-modeling-fp.md +++ b/_overviews/scala3-book/domain-modeling-fp.md @@ -259,7 +259,7 @@ Pizza.price(pizza1) Grouping functionality this way has a few advantages: - It associates functionality with data and makes it easier to find for programmers (and the compiler). -- It creates a namespace and for instance let's us use `price` as a method name without having to rely on overloading. +- It creates a namespace and for instance let's use `price` as a method name without having to rely on overloading. - The implementation of `Topping.price` can access enumeration values like `Cheese` without having to import them. However, there are also a few tradeoffs that should be considered: From 8bd14057ecc07ae2b9c82ba0acc228812e9b7dc3 Mon Sep 17 00:00:00 2001 From: Mario Galic Date: Sat, 10 Apr 2021 19:07:47 +0100 Subject: [PATCH 0331/1870] Conversion Between Option and the Collections - Clarify if Option is considered a collection by summarising discussion at Make Option extend IterableOnce #8038 - Document implicit conversion option2iterable --- ...sion-between-option-and-the-collections.md | 53 +++++++++++++++++++ ...ions-between-java-and-scala-collections.md | 1 + 2 files changed, 54 insertions(+) create mode 100644 _overviews/collections-2.13/conversion-between-option-and-the-collections.md diff --git a/_overviews/collections-2.13/conversion-between-option-and-the-collections.md b/_overviews/collections-2.13/conversion-between-option-and-the-collections.md new file mode 100644 index 0000000000..7fff2ea548 --- /dev/null +++ b/_overviews/collections-2.13/conversion-between-option-and-the-collections.md @@ -0,0 +1,53 @@ +--- +layout: multipage-overview +title: Conversion Between Option and the Collections +partof: collections-213 +overview-name: Collections + +num: 18 +previous-page: conversions-between-java-and-scala-collections + +permalink: /overviews/collections-2.13/:title.html +--- +`Option` can be seen as a collection that has zero or exactly one element, and it provides a degree of interoperability with the collection types found in the package `scala.collection`. In particular, it implements the interface `IterableOnce`, which models the simplest form of collections: something that can be iterated over, at least once. However, `Option` does not implement the more comprehensive interface of `Iterable`. Indeed, we cannot provide a sensible implementation for the operation [`fromSpecific`](https://github.com/scala/scala/blob/6c68c2825e893bb71d6dc78465ac8c6f415cbd93/src/library/scala/collection/Iterable.scala#L173), which is supposed to create an `Option` from a collection of possibly more than one element. Starting from [Scala 2.13](https://github.com/scala/scala/pull/8038), `Option` was made an `IterableOnce` but not an `Iterable`. + +Hence `Option` can be used everywhere an `IterableOnce` is expected, for example, when calling `flatMap` on a collection (or inside a for-comprehension) + +```scala mdoc +for { + a <- Set(1) + b <- Option(41) +} yield (a + b) +// : Set[Int] = Set(42) +``` + +since the operation `flatMap` on the type `Set[Int]` takes a function returning an `IterableOnce`: + +``` +def flatMap[B](f: Int => IterableOnce[B]): Set[B] +``` + +Although `Option` does not extend `Iterable`, there exists an [implicit conversion](https://github.com/scala/scala/blob/6c68c2825e893bb71d6dc78465ac8c6f415cbd93/src/library/scala/Option.scala#L19) between `Option` and `Iterable` + + +``` +implicit def option2Iterable[A](xo: Option[A]): Iterable[A] +``` + +so although `Option[A]` is not a full collection it can be _viewed_ as one. For example, + +```scala mdoc +Some(42).drop(1) +// : Iterable[Int] = List() +``` + +expands to + +```scala mdoc +Option.option2Iterable(Some(42)).drop(1) +// : Iterable[Int] = List() +``` + +because `drop` is not defined on `Option`. A downside of the above implicit conversion is that instead of getting back an `Option[A]` we are left with an `Iterable[A]`. For this reason, `Option`’s documentation carries the following note: + +> Many of the methods in `Option` are duplicative with those in the `Iterable` hierarchy, but they are duplicated for a reason: the implicit conversion tends to leave one with an `Iterable` in situations where one could have retained an `Option`. diff --git a/_overviews/collections-2.13/conversions-between-java-and-scala-collections.md b/_overviews/collections-2.13/conversions-between-java-and-scala-collections.md index 86070db314..b4090053ba 100644 --- a/_overviews/collections-2.13/conversions-between-java-and-scala-collections.md +++ b/_overviews/collections-2.13/conversions-between-java-and-scala-collections.md @@ -6,6 +6,7 @@ overview-name: Collections num: 17 previous-page: creating-collections-from-scratch +next-page: conversion-between-option-and-the-collections languages: [ru] permalink: /overviews/collections-2.13/:title.html From 824a0ab96c40c373fa2b4372098cfe079c696e0b Mon Sep 17 00:00:00 2001 From: Genghis Yang Date: Mon, 28 Jun 2021 16:13:54 +0800 Subject: [PATCH 0332/1870] Fix typo --- _overviews/scala3-book/domain-modeling-fp.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/_overviews/scala3-book/domain-modeling-fp.md b/_overviews/scala3-book/domain-modeling-fp.md index 9d1c163864..31e5d19008 100644 --- a/_overviews/scala3-book/domain-modeling-fp.md +++ b/_overviews/scala3-book/domain-modeling-fp.md @@ -259,7 +259,7 @@ Pizza.price(pizza1) Grouping functionality this way has a few advantages: - It associates functionality with data and makes it easier to find for programmers (and the compiler). -- It creates a namespace and for instance let's use `price` as a method name without having to rely on overloading. +- It creates a namespace and for instance lets us use `price` as a method name without having to rely on overloading. - The implementation of `Topping.price` can access enumeration values like `Cheese` without having to import them. However, there are also a few tradeoffs that should be considered: From 923bb72a713bef577cde546368a30c4a1e2d59d9 Mon Sep 17 00:00:00 2001 From: Julien Richard-Foy Date: Mon, 21 Jun 2021 15:01:12 +0200 Subject: [PATCH 0333/1870] Suggestions on the Scala 3 book (part 5) --- _overviews/scala3-book/concurrency.md | 63 ++++++++----- .../scala3-book/interacting-with-java.md | 11 ++- _overviews/scala3-book/scala-for-java-devs.md | 23 +++-- .../scala3-book/scala-for-javascript-devs.md | 7 +- .../scala3-book/scala-for-python-devs.md | 34 ++++--- _overviews/scala3-book/scala-tools.md | 89 +++++++++++++------ 6 files changed, 139 insertions(+), 88 deletions(-) diff --git a/_overviews/scala3-book/concurrency.md b/_overviews/scala3-book/concurrency.md index 59b86b0815..bda65f21a9 100644 --- a/_overviews/scala3-book/concurrency.md +++ b/_overviews/scala3-book/concurrency.md @@ -55,7 +55,8 @@ You’ll also see examples of methods that are used to handle the value in a fut > When you think about futures, it’s important to know that they’re intended as a one-shot, “Handle this relatively slow computation on some other thread, and call me back with a result when you’re done” construct. > As a point of contrast, [Akka](https://akka.io) actors are intended to run for a long time and respond to many requests during their lifetime. -> While an actor may live forever, a future is intended to be run only once. +> While an actor may live forever, a future eventually contains the result +> of a computation that ran only once. @@ -77,7 +78,7 @@ Now you’re ready to create a future. For this example, first define a long-running, single-threaded algorithm: ```scala -def longRunningAlgorithm = +def longRunningAlgorithm() = Thread.sleep(10_000) 42 ``` @@ -86,29 +87,29 @@ That fancy algorithm returns the integer value `42` after a ten second delay. Now call that algorithm by wrapping it into the `Future` constructor, and assigning the result to a variable: ```scala -scala> val f = Future(longRunningAlgorithm) -f: scala.concurrent.Future[Int] = Future() +scala> val eventualInt = Future(longRunningAlgorithm()) +eventualInt: scala.concurrent.Future[Int] = Future() ``` -Right away your future begins running. -If you immediately check the value of the variable `f`, you see that the future hasn’t completed yet: +Right away, your computation---the call to `longRunningAlgorithm()`---begins running. +If you immediately check the value of the variable `eventualInt`, you see that the future hasn’t been completed yet: ```scala -scala> f +scala> eventualInt val res1: scala.concurrent.Future[Int] = Future() ``` -But if you check again after ten seconds, you’ll see that it completes successfully: +But if you check again after ten seconds, you’ll see that it is completed successfully: ```scala -scala> f +scala> eventualInt val res2: scala.concurrent.Future[Int] = Future(Success(42)) ``` While that’s a relatively simple example, it shows the basic approach: Just construct a new `Future` with your long-running algorithm. One thing to notice is that the `42` you expected is wrapped in a `Success`, which is further wrapped in a `Future`. -This is a key concept to understand: the value in a `Future` is always an instance of one of the *scala.util.Try* types: `Success` or `Failure`. +This is a key concept to understand: the value in a `Future` is always an instance of one of the `scala.util.Try` types: `Success` or `Failure`. Therefore, when you work with the result of a future, you use the usual `Try`-handling techniques. @@ -118,7 +119,7 @@ Therefore, when you work with the result of a future, you use the usual `Try`-ha This is what the result looks like when you call `map` right after creating the variable `f`: ```scala -scala> val a = f.map(_ * 2) +scala> val a = eventualInt.map(_ * 2) a: scala.concurrent.Future[Int] = Future() ``` @@ -139,13 +140,13 @@ In addition to higher-order functions like `map`, you can also use callback meth One commonly used callback method is `onComplete`, which takes a *partial function* in which you handle the `Success` and `Failure` cases: ```scala -f.onComplete { +eventualInt.onComplete { case Success(value) => println(s"Got the callback, value = $value") case Failure(e) => e.printStackTrace } ``` -When you paste that code in the REPL you’ll see the result: +When you paste that code in the REPL you’ll eventually see the result: ```scala Got the callback, value = 42 @@ -180,10 +181,11 @@ See the [Futures and Promises][futures] page for a discussion of additional meth ## Running multiple futures and joining their results -To run multiple futures in parallel and join their results when all of the futures complete, use a `for` expression. +To run multiple computations in parallel and join their results when all of the futures have been completed, use a `for` expression. + The correct approach is: -1. Create the futures +1. Start the computations that return `Future` results 2. Merge their results in a `for` expression 3. Extract the merged result using `onComplete` or a similar technique @@ -191,27 +193,27 @@ The correct approach is: ### An example The three steps of the correct approach are shown in the following example. -A key is that you first create the futures and then join them in the `for` expression: +A key is that you first start the computations that return futures, and then join them in the `for` expression: ```scala import scala.concurrent.Future import scala.concurrent.ExecutionContext.Implicits.global import scala.util.{Failure, Success} -val startTime = System.currentTimeMillis -def delta() = System.currentTimeMillis - startTime +val startTime = System.currentTimeMillis() +def delta() = System.currentTimeMillis() - startTime def sleep(millis: Long) = Thread.sleep(millis) @main def multipleFutures1 = println(s"creating the futures: ${delta()}") - // (1) create the futures + // (1) start the computations that return futures val f1 = Future { sleep(800); 1 } // eventually returns 1 val f2 = Future { sleep(200); 2 } // eventually returns 2 val f3 = Future { sleep(400); 3 } // eventually returns 3 - // (2) run them simultaneously in a `for` expression + // (2) join the futures in a `for` expression val result = for r1 <- f1 @@ -251,10 +253,23 @@ All of that code is run on the JVM’s main thread. Then, at 806 ms, the three futures complete and the code in the `yield` block is run. Then the code immediately goes to the `Success` case in the `onComplete` method. -The 806 ms output is a key to seeing that the three futures are run in parallel. -If they were run sequentially, the total time would be about 1,400 ms---the sum of the sleep times of the three futures. -But because they’re run in parallel, the total time is just slightly longer than the longest-running future: `f1`, which is 800 ms. - +The 806 ms output is a key to seeing that the three computations are run in parallel. +If they were run sequentially, the total time would be about 1,400 ms---the sum of the sleep times of the three computations. +But because they’re run in parallel, the total time is just slightly longer than the longest-running computation: `f1`, which is 800 ms. + +> Notice that if the computations were run within the `for` expression, they +> would be executed sequentially, not in parallel: +> ~~~ +> // Sequential execution (no parallelism!) +> for +> r1 <- Future { sleep(800); 1 } +> r2 <- Future { sleep(200); 2 } +> r3 <- Future { sleep(400); 3 } +> yield +> r1 + r2 + r3 +> ~~~ +> So, if you want the computations to be possibly run in parallel, remember +> to run them outside of the `for` expression. ### A method that returns a future diff --git a/_overviews/scala3-book/interacting-with-java.md b/_overviews/scala3-book/interacting-with-java.md index 36ceb7fe58..8ccb38e156 100644 --- a/_overviews/scala3-book/interacting-with-java.md +++ b/_overviews/scala3-book/interacting-with-java.md @@ -58,9 +58,8 @@ You can convert that Java list to a Scala `Seq`, using the conversion utilities ```scala // scala import scala.jdk.CollectionConverters.* -import java.util.List -def testList = +def testList() = println("Using a Java List in Scala") val javaList: java.util.List[String] = JavaClass.getStrings() val scalaSeq: Seq[String] = javaList.asScala.toSeq @@ -156,7 +155,7 @@ class Dog extends Animal, Wagging, Running: ## How to use Scala collections in Java -When you need to use a Scala collection class in your Java code, use the methods of Scala’s _scala.jdk.javaapi.CollectionConverters_ object in your Java code to make the conversions work. +When you need to use a Scala collection class in your Java code, use the methods of Scala’s `scala.jdk.javaapi.CollectionConverters` object in your Java code to make the conversions work. For example, if you have a `List[String]` like this in a Scala class: ```scala @@ -192,7 +191,7 @@ Here are a few things to notice in that code: ## How to use Scala `Option` in Java -When you need to use a Scala `Option` in your Java code, you can convert the `Option` to a Java `Optional` value using the `toJava` method of the Scala _scala.jdk.javaapi.OptionConverters_ object. +When you need to use a Scala `Option` in your Java code, you can convert the `Option` to a Java `Optional` value using the `toJava` method of the Scala `scala.jdk.javaapi.OptionConverters` object. To demonstrate this, create a Scala class with two `Option[String]` values, one containing a string and the other one empty: @@ -203,7 +202,7 @@ object ScalaObject: val noneString: Option[String] = None ``` -Then in your Java code, convert those `Option[String]` values into `java.util.Optional[String]` using the `toJava` method from the _scala.jdk.javaapi.OptionConverters_ object: +Then in your Java code, convert those `Option[String]` values into `java.util.Optional[String]` using the `toJava` method from the `scala.jdk.javaapi.OptionConverters` object: ```java // java @@ -258,7 +257,7 @@ System.out.println(jm.multiply(3,4)); // 12 ## How to handle Scala methods that throw exceptions in Java code When you’re writing Scala code using Scala programming idioms, you’ll never write a method that throws an exception. -But if for some reason you have a Scala method that does throw an exception, and you want Java developers to be able to use that method, add the `@throws` annotation to your Scala method so Java consumers will know the exceptions they can throw. +But if for some reason you have a Scala method that does throw an exception, and you want Java developers to be able to use that method, add the `@throws` annotation to your Scala method so Java consumers will know the exceptions it can throw. For example, this Scala `exceptionThrower` method is annotated to declare that it throws an `Exception`: diff --git a/_overviews/scala3-book/scala-for-java-devs.md b/_overviews/scala3-book/scala-for-java-devs.md index 50d1777677..be54f5fd25 100644 --- a/_overviews/scala3-book/scala-for-java-devs.md +++ b/_overviews/scala3-book/scala-for-java-devs.md @@ -49,6 +49,7 @@ Also at a high level, the differences between Java and Scala are: - Scala has a full suite of immutable collections, including `List`, `Vector`, and immutable `Map` and `Set` implementations - Everything in Scala is an _expression_: constructs like `if` statements, `for` loops, `match` expressions, and even `try`/`catch` expressions all have return values - Scala idioms favor immutability by default: you’re encouraged to use immutable (`final`) variables and immutable collections +- Idiomatic Scala code does not use `null`, and thus does not suffer from `NullPointerException` - The Scala ecosystem has other [build tools][tools] in sbt, Mill, and others - In addition to running on the JVM, the [Scala.js](https://www.scala-js.org) project lets you use Scala as a JavaScript replacement - The [Scala Native](http://www.scala-native.org) project adds low-level constructs to let you write “systems” level code, and also compiles to native executables @@ -117,14 +118,18 @@ This section provides comparisons of features related to OOP-style classes and m ### OOP style class, primary constructor: +Scala doesn’t follow the JavaBeans standard, so instead of showing Java +code written in the JavaBeans style, here we show Java code that is +equivalent to the Scala code that follows it. + @@ -976,7 +981,7 @@ val a = Array("a", "b") as being backed by this Java `String[]`: ```scala -String[] a = ["a", "b"] +String[] a = ["a", "b"]; ``` However, a Scala `Array` also has all of the functional methods you expect in a Scala collection, including `map` and `filter`: @@ -1275,7 +1280,7 @@ For more information on dealing with errors and exceptions in Scala, see the [Fu That concludes are comparison of the Java and Scala languages. -Currently there are other concepts in Scala which currently have no equal in Java 11. +There are other concepts in Scala which currently have no equal in Java 11. This includes: - Everything related to Scala’s [contextual abstractions][contextual] diff --git a/_overviews/scala3-book/scala-for-javascript-devs.md b/_overviews/scala3-book/scala-for-javascript-devs.md index 0237e0d63c..a577837e56 100644 --- a/_overviews/scala3-book/scala-for-javascript-devs.md +++ b/_overviews/scala3-book/scala-for-javascript-devs.md @@ -36,7 +36,7 @@ At a high level, Scala shares these similarities with JavaScript: - Both languages have similar `if` statements, `while` loops, and `for` loops - Starting [at this Scala.js page](https://www.scala-js.org/libraries/index.html), you’ll find dozens of libraries to support React, Angular, jQuery, and many other JavaScript and Scala libraries - JavaScript objects are mutable; Scala objects _can_ be mutable when writing in an imperative style -- Both JavaScript and Scala support _promises_ as a way of running asynchronous computations ([Scala concurrency][concurrency] uses futures and promises) +- Both JavaScript and Scala support _promises_ as a way of handling the result of asynchronous computations ([Scala concurrency][concurrency] uses futures and promises) ### High-level differences @@ -441,7 +441,7 @@ In both JavaScript and Scala, functions are objects, so their functionality is s @@ -474,7 +474,7 @@ In both JavaScript and Scala, functions are objects, so their functionality is s
    class Person { -
      private String firstName; -
      private String lastName; -
      private int age; +
      public String firstName; +
      public String lastName; +
      public int age;
      public Person(
        String firstName,
        String lastName, int age @@ -160,9 +165,9 @@ This section provides comparisons of features related to OOP-style classes and m
    public class Person { -
      private String firstName; -
      private String lastName; -
      private int age; +
      public String firstName; +
      public String lastName; +
      public int age;

      // primary constructor
      public Person( @@ -424,7 +429,7 @@ This section compares Java interfaces to Scala traits, including how classes ext
    - class Dog extends Animal, HasLegs, HasTail + class Dog extends Animal implements HasLegs, HasTail
    - // technically this is a “method,” not a function + // technically this is a method, not a function
    def add(a: Int, b: Int) = a + b
    add(2, 2)   // 4
    In Scala, showing the `Int` return type is optional. -It’s _not_ shown in the `add` example and _is_ shown in the `addThenDouble` example, so you can see both approaches. +It’s _not_ shown in the `add` example and _is_ shown in the `addAndDouble` example, so you can see both approaches. @@ -1374,4 +1374,3 @@ There are other concepts in Scala which currently have no equivalent in JavaScri [union-types]: {% link _overviews/scala3-book/types-union.md %} - diff --git a/_overviews/scala3-book/scala-for-python-devs.md b/_overviews/scala3-book/scala-for-python-devs.md index 0934989d4e..395d7c450d 100644 --- a/_overviews/scala3-book/scala-for-python-devs.md +++ b/_overviews/scala3-book/scala-for-python-devs.md @@ -230,7 +230,7 @@ These examples demonstrate how to create variables in Python and Scala. -If a Scala field is going to be mutable, use `var` instead of `val` for variable assignment: +If a Scala field is going to be mutable, use `var` instead of `val` for variable definition: ```scala var x = 1 @@ -631,18 +631,14 @@ Scala also has `match` expressions. - x = [i*10 for i in range(1,4)] -
    # x: [10,20,30]
    + xs = [i * 10 for i in range(1, 4)] +
    # xs: [10,20,30]
    - val x = -
      for -
        i <- 1 to 3 -
      yield -
        i * 10 -
    // x: Vector(10, 20, 30)
    + val xs = for i <- 1 to 3 yield i * 10 +
    // xs: Vector(10, 20, 30)
    @@ -894,9 +890,7 @@ However, the default Scala map is _immutable_, and has a number of transformatio - for -
      (key,value) <- myMap -
    do + for (key,value) <- myMap do
      println(key)
      println(value)
    @@ -934,7 +928,7 @@ The Python set is similar to the _mutable_ Scala `Set` class. set = {1,2,1} -
    # set: {1,2}
    +
    # set: {1,2}
    @@ -1012,7 +1006,7 @@ Those lists are used in the following table, that shows how to apply mapping and - x = [i*10 for i in numbers] + x = [i * 10 for i in numbers] @@ -1034,7 +1028,9 @@ Those lists are used in the following table, that shows how to apply mapping and - val evens = numbers.filter(_ % 2 == 0) + val evens = numbers.filter(_ % 2 == 0) +
    // or +
    val evens = for i <- numbers if i % 2 == 0 yield i
    @@ -1051,8 +1047,9 @@ Those lists are used in the following table, that shows how to apply mapping and - val x = numbers.filter(_ % 2 == 0) -
              .map(_ * 10)
    + val x = numbers.filter(_ % 2 == 0).map(_ * 10) +
    // or +
    val x = for i <- numbers if i % 2 == 0 yield i * 10
    @@ -1064,8 +1061,7 @@ Those lists are used in the following table, that shows how to apply mapping and - def times_10(n): return n * 10 -
    x = map(lambda x: x * 10, numbers)
    + x = map(lambda x: x * 10, numbers) diff --git a/_overviews/scala3-book/scala-tools.md b/_overviews/scala3-book/scala-tools.md index 81f7177515..75bb1f2c0d 100644 --- a/_overviews/scala3-book/scala-tools.md +++ b/_overviews/scala3-book/scala-tools.md @@ -22,7 +22,7 @@ We’ll start by showing how to use sbt to build your Scala projects, and then w ## Building Scala projects with sbt You can use several different tools to build your Scala projects, including Ant, Maven, Gradle, Mill, and more. -But a tool named _sbt_ was the first build tool that was specifically created for Scala, and these days it’s supported by [Lightbend](https://www.lightbend.com), the company that also maintains [Akka](https://akka.io), the [Play framework](https://www.playframework.com), the [Lagom framework](https://www.lagomframework.com), and more. +But a tool named _sbt_ was the first build tool that was specifically created for Scala. > To install sbt, see [its download page](https://www.scala-sbt.org/download.html) or our [Getting Started][getting_started] page. @@ -38,7 +38,20 @@ $ mkdir hello $ cd hello ``` -Then create a file named _build.sbt_ that contains this line: +In the directory `hello`, create a subdirectory `project`: + +```bash +$ mkdir project +``` + +Create a file named _build.properties_ in the directory `project`, with +the following content: + +```text +sbt.version=1.5.4 +``` + +Then create a file named _build.sbt_ in the project root directory that contains this line: ```scala scalaVersion := "{{ site.scala-3-version }}" @@ -51,6 +64,18 @@ Now create a file named something like _Hello.scala_---the first part of the nam ``` That’s all you have to do. + +You should have a project structure like the following: + +~~~ bash +$ tree +. +├── build.sbt +├── Hello.scala +└── project + └── build.properties +~~~ + Now run the project with this `sbt` command: ```bash @@ -61,7 +86,7 @@ You should see output that looks like this, including the `"Hello, world"` from ```bash $ sbt run -[info] welcome to sbt 1.4.4 (AdoptOpenJDK Java 11.x) +[info] welcome to sbt 1.5.4 (AdoptOpenJDK Java 11.x) [info] loading project definition from project ... [info] loading settings for project from build.sbt ... [info] compiling 1 Scala source to target/scala-3.0.0/classes ... @@ -70,7 +95,9 @@ Hello, world [success] Total time: 2 s ``` -When you look at your directory, you’ll see that sbt has created two directories named _project_ and _target_. +The sbt launcher---the `sbt` command-line tool---loads the version of sbt set in the file _project/build.properties_, which loads the version of the Scala compiler set in the file _build.sbt_, compiles the code in the file _Hello.scala_, and runs the resulting bytecode. + +When you look at your directory, you’ll see that sbt has a directory named _target_. These are working directories that sbt uses. As you can see, creating and running a little Scala project with sbt takes just a few simple steps. @@ -92,31 +119,34 @@ A nice benefit of that is that once you’re comfortable with its structure, it The first thing to know is that underneath the root directory of your project, sbt expects a directory structure that looks like this: -```bash -build.sbt -project/ -src/ --- main/ - |-- java/ - |-- resources/ - |-- scala/ -|-- test/ - |-- java/ - |-- resources/ - |-- scala/ -target/ +```text +. +├── build.sbt +├── project/ +│ └── build.properties +├── src/ +│ ├── main/ +│ │ ├── java/ +│ │ ├── resources/ +│ │ └── scala/ +│ └── test/ +│ ├── java/ +│ ├── resources/ +│ └── scala/ +└── target/ ``` You can also add a _lib_ directory under the root directory if you want to add unmanaged dependencies---JAR files---to your project. If you’re going to create a project that has Scala source code files and tests, but won’t be using any Java source code files, and doesn’t need any “resources”---such as embedded images, configuration files, etc.---this is all you really need under the _src_ directory: -```bash -src/ --- main/ - |-- scala/ -|-- test/ - |-- scala/ +```text +. +└── src/ + ├── main/ + │ └── scala/ + └── test/ + └── scala/ ``` @@ -284,11 +314,18 @@ As with the previous lesson, create an sbt project directory structure for a pro $ mkdir HelloScalaTest $ cd HelloScalaTest $ mkdir -p src/{main,test}/scala -$ mkdir project target +$ mkdir project ``` -### Creating the build.sbt file +### Creating the build.properties and build.sbt files + +Next, create a _build.properties_ file in the _project/_ subdirectory of your project +with this line: + +```text +sbt.version=1.5.4 +``` Next, create a _build.sbt_ file in the root directory of your project with these contents: @@ -298,7 +335,7 @@ version := "0.1" scalaVersion := "{{site.scala-3-version}}" libraryDependencies ++= Seq( - "org.scalatest" %% "scalatest" % "3.3.0-SNAP3" % Test + "org.scalatest" %% "scalatest" % "3.2.9" % Test ) ``` From 512f89eb3fbdd80305d56e186f3775a7c49621ce Mon Sep 17 00:00:00 2001 From: Julien Richard-Foy Date: Mon, 28 Jun 2021 17:30:19 +0200 Subject: [PATCH 0334/1870] Clarify the recommended learning path via the MOOCs --- learn.md | 16 ++++++++++++++++ resources/images/learning-path.png | Bin 0 -> 42763 bytes 2 files changed, 16 insertions(+) create mode 100644 resources/images/learning-path.png diff --git a/learn.md b/learn.md index 19af2b78c9..797f193e3e 100644 --- a/learn.md +++ b/learn.md @@ -36,6 +36,8 @@ this course in the following video: +This course is also a good way to upgrade your Scala 2 knowledge to Scala 3. + After taking this course, you might be interested in improving your skills in specific areas by taking the courses [Parallel Programming], [Big Data Analysis with Scala and Spark], or [Programming Reactive Systems]. @@ -61,6 +63,20 @@ and Spark. teaches how to write responsive, scalable, and resilient systems with the library Akka. +### Scala Learning Path + +The diagram below summarizes the possible learning paths with our courses: + +![](/resources/images/learning-path.png) + +The “foundational” courses target programmers with no prior experience in Scala, whereas the “deepening” +courses aim at strengthening Scala programmers skills in a specific domain (such as parallel programming). + +We recommend starting with either Effective Programming in Scala, or Functional Programming Principles in +Scala followed by Functional Program Design. Then, you can complement your Scala skills by taking any +of the courses Programming Reactive Systems, Parallel Programming, or Big Data Analysis with Scala and Spark. +In case you take the Scala Specialization, you will end with the Scala Capstone Project. + ### Scala 2 Courses The above courses use Scala 3 (except the Spark courses). If needed, you can find diff --git a/resources/images/learning-path.png b/resources/images/learning-path.png new file mode 100644 index 0000000000000000000000000000000000000000..43e9d09631651ea12fc71a3cd9707a9f97e05da8 GIT binary patch literal 42763 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 Date: Mon, 28 Jun 2021 10:07:30 -0700 Subject: [PATCH 0335/1870] FAQ: Who's behind Scala? --- _overviews/FAQ/index.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/_overviews/FAQ/index.md b/_overviews/FAQ/index.md index ba0cce896d..1bf9ea5b7a 100644 --- a/_overviews/FAQ/index.md +++ b/_overviews/FAQ/index.md @@ -58,6 +58,10 @@ This is addressed on our [Community page](https://scala-lang.org/community/#scal In short, the only officially sanctioned place is the [scala/job-board room on Gitter](https://gitter.im/scala/job-board). +### Who's behind Scala? + +This is answered [on the community page](https://www.scala-lang.org/community/#whos-behind-scala). + ### Can I use the Scala logo? See [scala/scala-lang#1040](https://github.com/scala/scala-lang/issues/1040). From 9ffe4b9aff6443d9e789a89bf2c84a62be7a55e7 Mon Sep 17 00:00:00 2001 From: Julien Richard-Foy Date: Wed, 30 Jun 2021 11:18:07 +0200 Subject: [PATCH 0336/1870] Merge https://github.com/lampepfl/dotty/blob/master/docs/docs/usage/getting-started.md here MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - The part about scastie was already mentioned in our scala3/getting-started.md page - Copied the part about the giter8 templates into the Scala 3 book, - IDE support was covered in our getting-started page - Skipped “Standalone installation”, since the recommended way to install Scala 3 is to use `cs` - “Scala 3 for scripting” was already covered by scala3/book/taste-hello-world.md --- _overviews/scala3-book/scala-tools.md | 36 +++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) diff --git a/_overviews/scala3-book/scala-tools.md b/_overviews/scala3-book/scala-tools.md index 75bb1f2c0d..bffe1791dd 100644 --- a/_overviews/scala3-book/scala-tools.md +++ b/_overviews/scala3-book/scala-tools.md @@ -269,6 +269,42 @@ There, that’s much faster. If you type `help` at the sbt command prompt you’ll see a list of other commands you can run. But for now, just type `exit` (or press `CTRL-D`) to leave the sbt shell. +### Using project templates + +Manually creating the project structure can be tedious. Thankfully, sbt can create it for you, +based on a template. + +To create a Scala 3 project from a template, run the following command in a shell: + +~~~ +$ sbt new scala/scala3.g8 +~~~ + +Sbt will load the template, ask some questions, and create the project files in a subdirectory: + +~~~ +$ tree scala-3-project-template +scala-3-project-template +├── build.sbt +├── project +│ └── build.properties +├── README.md +└── src + ├── main + │ └── scala + │ └── Main.scala + └── test + └── scala + └── Test1.scala +~~~ + +> If you want to create a Scala 3 project that cross-compiles with Scala 2, use the template `scala/scala3-cross.g8`: +> +> ~~~ +> $ sbt new scala/scala3-cross.g8 +> ~~~ + +Learn more about `sbt new` and project templates in the [documentation of sbt](https://www.scala-sbt.org/1.x/docs/sbt-new-and-Templates.html#sbt+new+and+Templates). ### Other build tools for Scala From 446a51fb7d8b4f907f2325d1a5cc3affcdc1790f Mon Sep 17 00:00:00 2001 From: Nate Black Date: Wed, 30 Jun 2021 08:31:25 -0400 Subject: [PATCH 0337/1870] Removed 'do' line from the Scala 2 while section --- _overviews/scala3-book/taste-control-structures.md | 1 - 1 file changed, 1 deletion(-) diff --git a/_overviews/scala3-book/taste-control-structures.md b/_overviews/scala3-book/taste-control-structures.md index 5c30f73da4..520453481f 100644 --- a/_overviews/scala3-book/taste-control-structures.md +++ b/_overviews/scala3-book/taste-control-structures.md @@ -239,7 +239,6 @@ In Scala 2, the syntax was a bit different. The condition was surrounded by pare there was no `do` keyword: ```scala -while (x >= 0) do x = f(x) while (x >= 0) { x = f(x) } ``` From 9b8c42b8498c3f55d0d2ffcec9c8c02b0c3d4866 Mon Sep 17 00:00:00 2001 From: Julien Richard-Foy Date: Wed, 30 Jun 2021 15:06:16 +0200 Subject: [PATCH 0338/1870] Merge https://github.com/lampepfl/dotty/blob/master/docs/docs/usage/ide-support.md here MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Only added a mention of BSP - Skipped instructions in “importing the project using BSP using IntelliJ” because they are not working --- scala3/getting-started.md | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/scala3/getting-started.md b/scala3/getting-started.md index b24836f764..c888285fb3 100644 --- a/scala3/getting-started.md +++ b/scala3/getting-started.md @@ -117,8 +117,9 @@ They both offer rich IDE features, but you can still use [many other editors.](h When prompted to do so, select _Import build_. >[Metals](https://scalameta.org/metals) is a “Scala language server” that provides support for writing Scala code in VS Code and other editors like [Atom, Sublime Text, and more](https://scalameta.org/metals/docs/editors/overview.html), using the Language Server Protocol. -(For details on how Metals works, see, [“Write Scala in VS Code, Vim, Emacs, Atom and Sublime Text with Metals”](https://www.scala-lang.org/2019/04/16/metals.html).) - +> +> Under the hood, Metals communicates with the build tool by using +> the [Build Server Protocol (BSP)](https://build-server-protocol.github.io/). For details on how Metals works, see, [“Write Scala in VS Code, Vim, Emacs, Atom and Sublime Text with Metals”](https://www.scala-lang.org/2019/04/16/metals.html). ### View the source code From 3d941d96c703c12d4c8732ae5306530b5c7239d5 Mon Sep 17 00:00:00 2001 From: Adrien Piquerez Date: Wed, 30 Jun 2021 15:17:52 +0200 Subject: [PATCH 0339/1870] Fix page number --- _overviews/scala3-migration/external-resources.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/_overviews/scala3-migration/external-resources.md b/_overviews/scala3-migration/external-resources.md index 77a65829b2..4915537176 100644 --- a/_overviews/scala3-migration/external-resources.md +++ b/_overviews/scala3-migration/external-resources.md @@ -2,7 +2,7 @@ title: External Resources type: section description: This section lists external resources about the migration to Scala 3. -num: 26 +num: 27 previous-page: plugin-kind-projector next-page: --- From 01b5a7cfff1ae96a9c2b9d1918df4f9e66fc2b5c Mon Sep 17 00:00:00 2001 From: Adrian Theodorescu Date: Sat, 3 Jul 2021 13:49:48 -0500 Subject: [PATCH 0340/1870] Fix typo in overviews/scala-book/scala-build-tool-sbt --- _overviews/scala-book/scala-build-tool-sbt.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/_overviews/scala-book/scala-build-tool-sbt.md b/_overviews/scala-book/scala-build-tool-sbt.md index e798bc05d2..8986433976 100644 --- a/_overviews/scala-book/scala-build-tool-sbt.md +++ b/_overviews/scala-book/scala-build-tool-sbt.md @@ -156,7 +156,7 @@ If you type `help` at the sbt command prompt you’ll see a bunch of other comma ## See also -Here’s a list of other build tools you can use to build Scala projects are: +Here’s a list of other build tools you can use to build Scala projects: - [Ant](http://ant.apache.org/) - [Gradle](https://gradle.org/) From 1b0bd33313fa592a65bec9731a85d9425ebf4c56 Mon Sep 17 00:00:00 2001 From: Genghis Yang Date: Sun, 4 Jul 2021 17:26:13 +0800 Subject: [PATCH 0341/1870] Remove duplicated `a` --- _overviews/scala3-book/fp-functions-are-values.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/_overviews/scala3-book/fp-functions-are-values.md b/_overviews/scala3-book/fp-functions-are-values.md index 0c8a1df792..d2766c65fe 100644 --- a/_overviews/scala3-book/fp-functions-are-values.md +++ b/_overviews/scala3-book/fp-functions-are-values.md @@ -37,7 +37,7 @@ val doubles = nums.filter(underFive).map(double) This ability to treat methods and functions as values is a powerful feature that functional programming languages provide. -> Technically, a a function that takes another function as an input parameter is known as a *Higher-Order Function*. +> Technically, a function that takes another function as an input parameter is known as a *Higher-Order Function*. > (If you like humor, as someone once wrote, that’s like saying that a class that takes an instance of another class as a constructor parameter is a Higher-Order Class.) From bf9f32e844c577d1d4ba55a5f7fe31ffd11a4300 Mon Sep 17 00:00:00 2001 From: Haythem Chagwey Date: Sun, 4 Jul 2021 10:48:27 +0100 Subject: [PATCH 0342/1870] Update the Type inference section's link --- _overviews/scala3-book/scala-features.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/_overviews/scala3-book/scala-features.md b/_overviews/scala3-book/scala-features.md index f0c8efb129..606365a130 100644 --- a/_overviews/scala3-book/scala-features.md +++ b/_overviews/scala3-book/scala-features.md @@ -161,7 +161,7 @@ In that list: Scala’s type system enforces, at compile-time, that abstractions are used in a safe and coherent manner. In particular, the type system supports: -- [Type inference](/tour/type-inference.html) +- [Inferred types]({% link _overviews/scala3-book/types-inferred.md %}) - [Generic classes]({% link _overviews/scala3-book/types-generics.md %}) - [Variance annotations]({% link _overviews/scala3-book/types-variance.md %}) - [Upper](/tour/upper-type-bounds.html) and [lower](/tour/lower-type-bounds.html) type bounds From 45678020ba4566d9d8cf8562a39827c7d1dbe34a Mon Sep 17 00:00:00 2001 From: Julien Richard-Foy Date: Mon, 5 Jul 2021 14:36:41 +0200 Subject: [PATCH 0343/1870] Introduce a page about worksheets MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Previously, the page “Scala Tools” was mainly about sbt. We now have a chapter “Scala Tools”, which contains two sections: “Building and Testing Scala Projects with sbt”, and “Worksheets”. --- .../scala3-book/interacting-with-java.md | 4 +- _overviews/scala3-book/scala-for-java-devs.md | 2 +- .../scala3-book/scala-for-javascript-devs.md | 2 +- .../scala3-book/scala-for-python-devs.md | 2 +- _overviews/scala3-book/scala-tools.md | 508 +---------------- _overviews/scala3-book/taste-repl.md | 2 + _overviews/scala3-book/tools-sbt.md | 512 ++++++++++++++++++ _overviews/scala3-book/tools-worksheets.md | 56 ++ .../images/scala3-book/intellij-worksheet.png | Bin 0 -> 12899 bytes .../images/scala3-book/metals-worksheet.png | Bin 0 -> 16233 bytes 10 files changed, 579 insertions(+), 509 deletions(-) create mode 100644 _overviews/scala3-book/tools-sbt.md create mode 100644 _overviews/scala3-book/tools-worksheets.md create mode 100644 resources/images/scala3-book/intellij-worksheet.png create mode 100644 resources/images/scala3-book/metals-worksheet.png diff --git a/_overviews/scala3-book/interacting-with-java.md b/_overviews/scala3-book/interacting-with-java.md index 8ccb38e156..5b0b99286b 100644 --- a/_overviews/scala3-book/interacting-with-java.md +++ b/_overviews/scala3-book/interacting-with-java.md @@ -2,8 +2,8 @@ title: Interacting with Java type: chapter description: This page demonstrates how Scala code can interact with Java, and how Java code can interact with Scala code. -num: 70 -previous-page: scala-tools +num: 72 +previous-page: tools-worksheets next-page: scala-for-java-devs --- diff --git a/_overviews/scala3-book/scala-for-java-devs.md b/_overviews/scala3-book/scala-for-java-devs.md index be54f5fd25..125f77c06e 100644 --- a/_overviews/scala3-book/scala-for-java-devs.md +++ b/_overviews/scala3-book/scala-for-java-devs.md @@ -2,7 +2,7 @@ title: Scala for Java Developers type: chapter description: This page is for Java developers who are interested in learning about Scala 3. -num: 71 +num: 73 previous-page: interacting-with-java next-page: scala-for-javascript-devs --- diff --git a/_overviews/scala3-book/scala-for-javascript-devs.md b/_overviews/scala3-book/scala-for-javascript-devs.md index a577837e56..462a1017ce 100644 --- a/_overviews/scala3-book/scala-for-javascript-devs.md +++ b/_overviews/scala3-book/scala-for-javascript-devs.md @@ -2,7 +2,7 @@ title: Scala for JavaScript Developers type: chapter description: This chapter provides an introduction to Scala 3 for JavaScript developers -num: 72 +num: 74 previous-page: scala-for-java-devs next-page: scala-for-python-devs --- diff --git a/_overviews/scala3-book/scala-for-python-devs.md b/_overviews/scala3-book/scala-for-python-devs.md index 395d7c450d..77fb3c5881 100644 --- a/_overviews/scala3-book/scala-for-python-devs.md +++ b/_overviews/scala3-book/scala-for-python-devs.md @@ -2,7 +2,7 @@ title: Scala for Python Developers type: chapter description: This page is for Python developers who are interested in learning about Scala 3. -num: 73 +num: 75 previous-page: scala-for-javascript-devs next-page: --- diff --git a/_overviews/scala3-book/scala-tools.md b/_overviews/scala3-book/scala-tools.md index bffe1791dd..52e4bc67b7 100644 --- a/_overviews/scala3-book/scala-tools.md +++ b/_overviews/scala3-book/scala-tools.md @@ -4,510 +4,10 @@ type: chapter description: This chapter looks at two commonly-used Scala tools, sbt and ScalaTest. num: 69 previous-page: concurrency -next-page: interacting-with-java +next-page: tools-sbt --- +This chapter introduces two ways to write and run Scala programs: -In this chapter you’ll see two tools that are commonly used in Scala projects: - -- The [sbt](https://www.scala-sbt.org) build tool -- [ScalaTest](https://www.scalatest.org), a source code testing framework - -We’ll start by showing how to use sbt to build your Scala projects, and then we’ll show how to use sbt and ScalaTest together to test your Scala projects. - -> If you want to learn about tools to help you migrate your Scala 2 code to Scala 3, see our [Scala 3 Migration Guide](/scala3/guides/migration/compatibility-intro.html). - - - -## Building Scala projects with sbt - -You can use several different tools to build your Scala projects, including Ant, Maven, Gradle, Mill, and more. -But a tool named _sbt_ was the first build tool that was specifically created for Scala. - -> To install sbt, see [its download page](https://www.scala-sbt.org/download.html) or our [Getting Started][getting_started] page. - - - -### Creating a “Hello, world” project - -You can create an sbt “Hello, world” project in just a few steps. -First, create a directory to work in, and move into that directory: - -```bash -$ mkdir hello -$ cd hello -``` - -In the directory `hello`, create a subdirectory `project`: - -```bash -$ mkdir project -``` - -Create a file named _build.properties_ in the directory `project`, with -the following content: - -```text -sbt.version=1.5.4 -``` - -Then create a file named _build.sbt_ in the project root directory that contains this line: - -```scala -scalaVersion := "{{ site.scala-3-version }}" -``` - -Now create a file named something like _Hello.scala_---the first part of the name doesn’t matter---with this line: - -```scala -@main def helloWorld = println("Hello, world") -``` - -That’s all you have to do. - -You should have a project structure like the following: - -~~~ bash -$ tree -. -├── build.sbt -├── Hello.scala -└── project - └── build.properties -~~~ - -Now run the project with this `sbt` command: - -```bash -$ sbt run -``` - -You should see output that looks like this, including the `"Hello, world"` from your program: - -```bash -$ sbt run -[info] welcome to sbt 1.5.4 (AdoptOpenJDK Java 11.x) -[info] loading project definition from project ... -[info] loading settings for project from build.sbt ... -[info] compiling 1 Scala source to target/scala-3.0.0/classes ... -[info] running helloWorld -Hello, world -[success] Total time: 2 s -``` - -The sbt launcher---the `sbt` command-line tool---loads the version of sbt set in the file _project/build.properties_, which loads the version of the Scala compiler set in the file _build.sbt_, compiles the code in the file _Hello.scala_, and runs the resulting bytecode. - -When you look at your directory, you’ll see that sbt has a directory named _target_. -These are working directories that sbt uses. - -As you can see, creating and running a little Scala project with sbt takes just a few simple steps. - -> For sbt version < 1.5.0, it is required to have the following line in a *project/plugins.sbt* file: `addSbtPlugin("ch.epfl.lamp" % "sbt-dotty" % "{{ site.scala-3-plugin-version }}")` - - -### Using sbt with larger projects - -For a little project, that’s all that sbt requires to run. -For larger projects that require many source code files, dependencies, or sbt plugins, you’ll want to create an organized directory structure. -The rest of this section demonstrates the structure that sbt uses. - - -### The sbt directory structure - -Like Maven, sbt uses a standard project directory structure. -A nice benefit of that is that once you’re comfortable with its structure, it makes it easy to work on other Scala/sbt projects. - -The first thing to know is that underneath the root directory of your project, sbt expects a directory structure that looks like this: - -```text -. -├── build.sbt -├── project/ -│ └── build.properties -├── src/ -│ ├── main/ -│ │ ├── java/ -│ │ ├── resources/ -│ │ └── scala/ -│ └── test/ -│ ├── java/ -│ ├── resources/ -│ └── scala/ -└── target/ -``` - -You can also add a _lib_ directory under the root directory if you want to add unmanaged dependencies---JAR files---to your project. - -If you’re going to create a project that has Scala source code files and tests, but won’t be using any Java source code files, and doesn’t need any “resources”---such as embedded images, configuration files, etc.---this is all you really need under the _src_ directory: - -```text -. -└── src/ - ├── main/ - │ └── scala/ - └── test/ - └── scala/ -``` - - -### “Hello, world” with an sbt directory structure - -{% comment %} -LATER: using something like `sbt new scala/scala3.g8` may eventually - be preferable, but that seems to have a few bugs atm (creates - a 'target' directory above the root; renames the root dir; - uses 'dottyVersion'; 'name' doesn’t match the supplied name; - config syntax is a little hard for beginners.) -{% endcomment %} - -Creating this directory structure is simple. -There are tools to do this for you, but assuming that you’re using a Unix/Linux system, you can use these commands to create your first sbt project directory structure: - -```bash -$ mkdir HelloWorld -$ cd HelloWorld -$ mkdir -p src/{main,test}/scala -$ mkdir project target -``` - -When you run a `find .` command after running those commands, you should see this result: - -```bash -$ find . -. -./project -./src -./src/main -./src/main/scala -./src/test -./src/test/scala -./target -``` - -If you see that, you’re in great shape for the next step. - -> There are other ways to create the files and directories for an sbt project. -> One way is to use the `sbt new` command, [which is documented here on scala-sbt.org](https://www.scala-sbt.org/1.x/docs/Hello.html). -> That approach isn’t shown here because some of the files it creates are more complicated than necessary for an introduction like this. - - -### Creating a first build.sbt file - -At this point you only need two more things to run a “Hello, world” project: - -- A _build.sbt_ file -- A _Hello.scala_ file - -For a little project like this, the _build.sbt_ file only needs a `scalaVersion` entry, but we’ll add three lines that you commonly see: - -```scala -name := "HelloWorld" -version := "0.1" -scalaVersion := "{{ site.scala-3-version }}" -``` - -Because sbt projects use a standard directory structure, sbt can find everything else it needs. - -Now you just need to add a little “Hello, world” program. - - -### A “Hello, world” program - -In large projects, all of your Scala source code files will go under the _src/main/scala_ and _src/test/scala_ directories, but for a little sample project like this, you can put your source code file in the root directory of your project. -Therefore, create a file named _HelloWorld.scala_ in the root directory with these contents: - -```scala -@main def helloWorld = println("Hello, world") -``` - -That code defines a Scala 3 “main” method that prints the `"Hello, world"` when it’s run. - -Now, use the `sbt run` command to compile and run your project: - -```bash -$ sbt run - -[info] welcome to sbt -[info] loading settings for project ... -[info] loading project definition -[info] loading settings for project root from build.sbt ... -[info] Compiling 1 Scala source ... -[info] running helloWorld -Hello, world -[success] Total time: 4 s -``` - -The first time you run `sbt` it downloads everything it needs, and that can take a few moments to run, but after that it gets much faster. - -Also, once you get this first step working, you’ll find that it’s much faster to run sbt interactively. -To do that, first run the `sbt` command by itself: - -```bash -$ sbt - -[info] welcome to sbt -[info] loading settings for project ... -[info] loading project definition ... -[info] loading settings for project root from build.sbt ... -[info] sbt server started at - local:///${HOME}/.sbt/1.0/server/7d26bae822c36a31071c/sock -sbt:hello-world> _ -``` - -Then inside this sbt shell, execute its `run` command: - -```` -sbt:hello-world> run - -[info] running helloWorld -Hello, world -[success] Total time: 0 s -```` - -There, that’s much faster. - -If you type `help` at the sbt command prompt you’ll see a list of other commands you can run. -But for now, just type `exit` (or press `CTRL-D`) to leave the sbt shell. - -### Using project templates - -Manually creating the project structure can be tedious. Thankfully, sbt can create it for you, -based on a template. - -To create a Scala 3 project from a template, run the following command in a shell: - -~~~ -$ sbt new scala/scala3.g8 -~~~ - -Sbt will load the template, ask some questions, and create the project files in a subdirectory: - -~~~ -$ tree scala-3-project-template -scala-3-project-template -├── build.sbt -├── project -│ └── build.properties -├── README.md -└── src - ├── main - │ └── scala - │ └── Main.scala - └── test - └── scala - └── Test1.scala -~~~ - -> If you want to create a Scala 3 project that cross-compiles with Scala 2, use the template `scala/scala3-cross.g8`: -> -> ~~~ -> $ sbt new scala/scala3-cross.g8 -> ~~~ - -Learn more about `sbt new` and project templates in the [documentation of sbt](https://www.scala-sbt.org/1.x/docs/sbt-new-and-Templates.html#sbt+new+and+Templates). - -### Other build tools for Scala - -While sbt is widely used, there are other tools you can use to build Scala projects: - -- [Ant](https://ant.apache.org/) -- [Gradle](https://gradle.org/) -- [Maven](https://maven.apache.org/) -- [Mill](https://com-lihaoyi.github.io/mill/) - -#### Coursier - -In a related note, [Coursier](https://get-coursier.io/docs/overview) is a “dependency resolver,” similar to Maven and Ivy in function. -It’s written from scratch in Scala, “embraces functional programming principles,” and downloads artifacts in parallel for rapid downloads. -sbt uses it to handle most dependency resolutions, and as a command-line tool, it can be used to easily install tools like sbt, Java, and Scala on your system, as shown in our [Getting Started][getting_started] page. - -This example from the `launch` web page shows that the `cs launch` command can be used to launch applications from dependencies: - -```scala -$ cs launch org.scalameta::scalafmt-cli:2.4.2 -- --help -scalafmt 2.4.2 -Usage: scalafmt [options] [...] - - -h, --help prints this usage text - -v, --version print version - more ... -``` - -See Coursier’s [launch page](https://get-coursier.io/docs/cli-launch) for more details. - - - -## Using sbt with ScalaTest - -[ScalaTest](https://www.scalatest.org) is one of the main testing libraries for Scala projects, and in this section you’ll see how to create a Scala/sbt project that uses ScalaTest. - - -### Creating the project directory structure - -As with the previous lesson, create an sbt project directory structure for a project named _HelloScalaTest_ with the following commands: - -```bash -$ mkdir HelloScalaTest -$ cd HelloScalaTest -$ mkdir -p src/{main,test}/scala -$ mkdir project -``` - - -### Creating the build.properties and build.sbt files - -Next, create a _build.properties_ file in the _project/_ subdirectory of your project -with this line: - -```text -sbt.version=1.5.4 -``` - -Next, create a _build.sbt_ file in the root directory of your project with these contents: - -```scala -name := "HelloScalaTest" -version := "0.1" -scalaVersion := "{{site.scala-3-version}}" - -libraryDependencies ++= Seq( - "org.scalatest" %% "scalatest" % "3.2.9" % Test -) -``` - -The first three lines of this file are essentially the same as the first example. -The `libraryDependencies` lines tell sbt to include the dependencies (JAR files) that are needed to include ScalaTest. - -> The ScalaTest documentation has always been good, and you can always find the up to date information on what those lines should look like on the [Installing ScalaTest](https://www.scalatest.org/install) page. - - -### Create a Scala source code file - -Next, create a Scala program that you can use to demonstrate ScalaTest. -First, create a directory under _src/main/scala_ named _math_: - -```bash -$ mkdir src/main/scala/math - ---- -``` - -Then, inside that directory, create a file named _MathUtils.scala_ with these contents: - -```scala -package math - -object MathUtils: - def double(i: Int) = i * 2 -``` - -That method provides a simple way to demonstrate ScalaTest. - - -{% comment %} -Because this project doesn’t have a `main` method, we don’t try to run it with `sbt run`; we just compile it with `sbt compile`: - -```` -$ sbt compile - -[info] welcome to sbt -[info] loading settings for project ... -[info] loading project definition ... -[info] loading settings for project ... -[info] Executing in batch mode. For better performance use sbt's shell -[success] Total time: 1 s -```` - -With that compiled, let’s create a ScalaTest file to test the `double` method. -{% endcomment %} - - -### Your first ScalaTest tests - -ScalaTest is very flexible, and offers several different ways to write tests. -A simple way to get started is to write tests using the ScalaTest `AnyFunSuite`. -To get started, create a directory named _math_ under the _src/test/scala_ directory: - -```bash -$ mkdir src/test/scala/math - ---- -``` - -Next, create a file named _MathUtilsTests.scala_ in that directory with the following contents: - -```scala -package math - -import org.scalatest.funsuite.AnyFunSuite - -class MathUtilsTests extends AnyFunSuite: - - // test 1 - test("'double' should handle 0") { - val result = MathUtils.double(0) - assert(result == 0) - } - - // test 2 - test("'double' should handle 1") { - val result = MathUtils.double(1) - assert(result == 2) - } - - test("test with Int.MaxValue") (pending) - -end MathUtilsTests -``` - -This code demonstrates the ScalaTest `AnyFunSuite` approach. -A few important points: - -- Your test class should extend `AnyFunSuite` -- You create tests as shown, by giving each `test` a unique name -- At the end of each test you should call `assert` to test that a condition has been satisfied -- When you know you want to write a test, but you don’t want to write it right now, create the test as “pending,” with the syntax shown - -Using ScalaTest like this is similar to JUnit, so if you’re coming to Scala from Java, hopefully this looks similar. - -Now you can run these tests with the `sbt test` command. -Skipping the first few lines of output, the result looks like this: - -```` -sbt:HelloScalaTest> test - -[info] Compiling 1 Scala source ... -[info] MathUtilsTests: -[info] - 'double' should handle 0 -[info] - 'double' should handle 1 -[info] - test with Int.MaxValue (pending) -[info] Total number of tests run: 2 -[info] Suites: completed 1, aborted 0 -[info] Tests: succeeded 2, failed 0, canceled 0, ignored 0, pending 1 -[info] All tests passed. -[success] Total time: 1 s -```` - -If everything works well, you’ll see output that looks like that. -Welcome to the world of testing Scala applications with sbt and ScalaTest. - - -### Support for many types of tests - -This example demonstrates a style of testing that’s similar to xUnit _Test-Driven Development_ (TDD) style testing, with a few benefits of the _Behavior-Driven Development_ (BDD) style. - -As mentioned, ScalaTest is flexible and you can also write tests using other styles, such as a style similar to Ruby’s RSpec. -You can also use mock objects, property-based testing, and use ScalaTest to test Scala.js code. - -See the User Guide on the [ScalaTest website](https://www.scalatest.org) for more details on the different testing styles that are available. - - - -## Where to go from here - -For more information about sbt and ScalaTest, see the following resources: - -- [The sbt documentation](https://www.scala-sbt.org/1.x/docs/) -- [The ScalaTest website](https://www.scalatest.org/) - - - -[getting_started]: {{ site.baseurl }}/scala3/getting-started.html +- by creating Scala projects, possibly containing multiple files, and defining a program entry point, +- by interacting with a worksheet, which is a program defined in a single file, executed line by line. diff --git a/_overviews/scala3-book/taste-repl.md b/_overviews/scala3-book/taste-repl.md index 130168c5cb..dba5420401 100644 --- a/_overviews/scala3-book/taste-repl.md +++ b/_overviews/scala3-book/taste-repl.md @@ -54,4 +54,6 @@ val res2: Int = 4 If you prefer a browser-based playground environment, you can also use [scastie.scala-lang.org](https://scastie.scala-lang.org). +If you prefer writing your code in a text editor instead of in console prompt, you can use a [worksheet]. +[worksheet]: {% link _overviews/scala3-book/tools-worksheets.md %} diff --git a/_overviews/scala3-book/tools-sbt.md b/_overviews/scala3-book/tools-sbt.md new file mode 100644 index 0000000000..e5dd291293 --- /dev/null +++ b/_overviews/scala3-book/tools-sbt.md @@ -0,0 +1,512 @@ +--- +title: Building and Testing Scala Projects with sbt +type: section +description: This section looks at a commonly-used build tool, sbt, and a testing library, ScalaTest. +num: 70 +previous-page: scala-tools +next-page: tools-worksheets +--- + +In this section you’ll see two tools that are commonly used in Scala projects: + +- The [sbt](https://www.scala-sbt.org) build tool +- [ScalaTest](https://www.scalatest.org), a source code testing framework + +We’ll start by showing how to use sbt to build your Scala projects, and then we’ll show how to use sbt and ScalaTest together to test your Scala projects. + +> If you want to learn about tools to help you migrate your Scala 2 code to Scala 3, see our [Scala 3 Migration Guide](/scala3/guides/migration/compatibility-intro.html). + + + +## Building Scala projects with sbt + +You can use several different tools to build your Scala projects, including Ant, Maven, Gradle, Mill, and more. +But a tool named _sbt_ was the first build tool that was specifically created for Scala. + +> To install sbt, see [its download page](https://www.scala-sbt.org/download.html) or our [Getting Started][getting_started] page. + + + +### Creating a “Hello, world” project + +You can create an sbt “Hello, world” project in just a few steps. +First, create a directory to work in, and move into that directory: + +```bash +$ mkdir hello +$ cd hello +``` + +In the directory `hello`, create a subdirectory `project`: + +```bash +$ mkdir project +``` + +Create a file named _build.properties_ in the directory `project`, with +the following content: + +```text +sbt.version=1.5.4 +``` + +Then create a file named _build.sbt_ in the project root directory that contains this line: + +```scala +scalaVersion := "{{ site.scala-3-version }}" +``` + +Now create a file named something like _Hello.scala_---the first part of the name doesn’t matter---with this line: + +```scala +@main def helloWorld = println("Hello, world") +``` + +That’s all you have to do. + +You should have a project structure like the following: + +~~~ bash +$ tree +. +├── build.sbt +├── Hello.scala +└── project + └── build.properties +~~~ + +Now run the project with this `sbt` command: + +```bash +$ sbt run +``` + +You should see output that looks like this, including the `"Hello, world"` from your program: + +```bash +$ sbt run +[info] welcome to sbt 1.5.4 (AdoptOpenJDK Java 11.x) +[info] loading project definition from project ... +[info] loading settings for project from build.sbt ... +[info] compiling 1 Scala source to target/scala-3.0.0/classes ... +[info] running helloWorld +Hello, world +[success] Total time: 2 s +``` + +The sbt launcher---the `sbt` command-line tool---loads the version of sbt set in the file _project/build.properties_, which loads the version of the Scala compiler set in the file _build.sbt_, compiles the code in the file _Hello.scala_, and runs the resulting bytecode. + +When you look at your directory, you’ll see that sbt has a directory named _target_. +These are working directories that sbt uses. + +As you can see, creating and running a little Scala project with sbt takes just a few simple steps. + +> For sbt version < 1.5.0, it is required to have the following line in a *project/plugins.sbt* file: `addSbtPlugin("ch.epfl.lamp" % "sbt-dotty" % "{{ site.scala-3-plugin-version }}")` + + +### Using sbt with larger projects + +For a little project, that’s all that sbt requires to run. +For larger projects that require many source code files, dependencies, or sbt plugins, you’ll want to create an organized directory structure. +The rest of this section demonstrates the structure that sbt uses. + + +### The sbt directory structure + +Like Maven, sbt uses a standard project directory structure. +A nice benefit of that is that once you’re comfortable with its structure, it makes it easy to work on other Scala/sbt projects. + +The first thing to know is that underneath the root directory of your project, sbt expects a directory structure that looks like this: + +```text +. +├── build.sbt +├── project/ +│ └── build.properties +├── src/ +│ ├── main/ +│ │ ├── java/ +│ │ ├── resources/ +│ │ └── scala/ +│ └── test/ +│ ├── java/ +│ ├── resources/ +│ └── scala/ +└── target/ +``` + +You can also add a _lib_ directory under the root directory if you want to add unmanaged dependencies---JAR files---to your project. + +If you’re going to create a project that has Scala source code files and tests, but won’t be using any Java source code files, and doesn’t need any “resources”---such as embedded images, configuration files, etc.---this is all you really need under the _src_ directory: + +```text +. +└── src/ + ├── main/ + │ └── scala/ + └── test/ + └── scala/ +``` + + +### “Hello, world” with an sbt directory structure + +{% comment %} +LATER: using something like `sbt new scala/scala3.g8` may eventually + be preferable, but that seems to have a few bugs atm (creates + a 'target' directory above the root; renames the root dir; + uses 'dottyVersion'; 'name' doesn’t match the supplied name; + config syntax is a little hard for beginners.) +{% endcomment %} + +Creating this directory structure is simple. +There are tools to do this for you, but assuming that you’re using a Unix/Linux system, you can use these commands to create your first sbt project directory structure: + +```bash +$ mkdir HelloWorld +$ cd HelloWorld +$ mkdir -p src/{main,test}/scala +$ mkdir project target +``` + +When you run a `find .` command after running those commands, you should see this result: + +```bash +$ find . +. +./project +./src +./src/main +./src/main/scala +./src/test +./src/test/scala +./target +``` + +If you see that, you’re in great shape for the next step. + +> There are other ways to create the files and directories for an sbt project. +> One way is to use the `sbt new` command, [which is documented here on scala-sbt.org](https://www.scala-sbt.org/1.x/docs/Hello.html). +> That approach isn’t shown here because some of the files it creates are more complicated than necessary for an introduction like this. + + +### Creating a first build.sbt file + +At this point you only need two more things to run a “Hello, world” project: + +- A _build.sbt_ file +- A _Hello.scala_ file + +For a little project like this, the _build.sbt_ file only needs a `scalaVersion` entry, but we’ll add three lines that you commonly see: + +```scala +name := "HelloWorld" +version := "0.1" +scalaVersion := "{{ site.scala-3-version }}" +``` + +Because sbt projects use a standard directory structure, sbt can find everything else it needs. + +Now you just need to add a little “Hello, world” program. + + +### A “Hello, world” program + +In large projects, all of your Scala source code files will go under the _src/main/scala_ and _src/test/scala_ directories, but for a little sample project like this, you can put your source code file in the root directory of your project. +Therefore, create a file named _HelloWorld.scala_ in the root directory with these contents: + +```scala +@main def helloWorld = println("Hello, world") +``` + +That code defines a Scala 3 “main” method that prints the `"Hello, world"` when it’s run. + +Now, use the `sbt run` command to compile and run your project: + +```bash +$ sbt run + +[info] welcome to sbt +[info] loading settings for project ... +[info] loading project definition +[info] loading settings for project root from build.sbt ... +[info] Compiling 1 Scala source ... +[info] running helloWorld +Hello, world +[success] Total time: 4 s +``` + +The first time you run `sbt` it downloads everything it needs, and that can take a few moments to run, but after that it gets much faster. + +Also, once you get this first step working, you’ll find that it’s much faster to run sbt interactively. +To do that, first run the `sbt` command by itself: + +```bash +$ sbt + +[info] welcome to sbt +[info] loading settings for project ... +[info] loading project definition ... +[info] loading settings for project root from build.sbt ... +[info] sbt server started at + local:///${HOME}/.sbt/1.0/server/7d26bae822c36a31071c/sock +sbt:hello-world> _ +``` + +Then inside this sbt shell, execute its `run` command: + +```` +sbt:hello-world> run + +[info] running helloWorld +Hello, world +[success] Total time: 0 s +```` + +There, that’s much faster. + +If you type `help` at the sbt command prompt you’ll see a list of other commands you can run. +But for now, just type `exit` (or press `CTRL-D`) to leave the sbt shell. + +### Using project templates + +Manually creating the project structure can be tedious. Thankfully, sbt can create it for you, +based on a template. + +To create a Scala 3 project from a template, run the following command in a shell: + +~~~ +$ sbt new scala/scala3.g8 +~~~ + +Sbt will load the template, ask some questions, and create the project files in a subdirectory: + +~~~ +$ tree scala-3-project-template +scala-3-project-template +├── build.sbt +├── project +│ └── build.properties +├── README.md +└── src + ├── main + │ └── scala + │ └── Main.scala + └── test + └── scala + └── Test1.scala +~~~ + +> If you want to create a Scala 3 project that cross-compiles with Scala 2, use the template `scala/scala3-cross.g8`: +> +> ~~~ +> $ sbt new scala/scala3-cross.g8 +> ~~~ + +Learn more about `sbt new` and project templates in the [documentation of sbt](https://www.scala-sbt.org/1.x/docs/sbt-new-and-Templates.html#sbt+new+and+Templates). + +### Other build tools for Scala + +While sbt is widely used, there are other tools you can use to build Scala projects: + +- [Ant](https://ant.apache.org/) +- [Gradle](https://gradle.org/) +- [Maven](https://maven.apache.org/) +- [Mill](https://com-lihaoyi.github.io/mill/) + +#### Coursier + +In a related note, [Coursier](https://get-coursier.io/docs/overview) is a “dependency resolver,” similar to Maven and Ivy in function. +It’s written from scratch in Scala, “embraces functional programming principles,” and downloads artifacts in parallel for rapid downloads. +sbt uses it to handle most dependency resolutions, and as a command-line tool, it can be used to easily install tools like sbt, Java, and Scala on your system, as shown in our [Getting Started][getting_started] page. + +This example from the `launch` web page shows that the `cs launch` command can be used to launch applications from dependencies: + +```scala +$ cs launch org.scalameta::scalafmt-cli:2.4.2 -- --help +scalafmt 2.4.2 +Usage: scalafmt [options] [...] + + -h, --help prints this usage text + -v, --version print version + more ... +``` + +See Coursier’s [launch page](https://get-coursier.io/docs/cli-launch) for more details. + + + +## Using sbt with ScalaTest + +[ScalaTest](https://www.scalatest.org) is one of the main testing libraries for Scala projects, and in this section you’ll see how to create a Scala/sbt project that uses ScalaTest. + + +### Creating the project directory structure + +As with the previous lesson, create an sbt project directory structure for a project named _HelloScalaTest_ with the following commands: + +```bash +$ mkdir HelloScalaTest +$ cd HelloScalaTest +$ mkdir -p src/{main,test}/scala +$ mkdir project +``` + + +### Creating the build.properties and build.sbt files + +Next, create a _build.properties_ file in the _project/_ subdirectory of your project +with this line: + +```text +sbt.version=1.5.4 +``` + +Next, create a _build.sbt_ file in the root directory of your project with these contents: + +```scala +name := "HelloScalaTest" +version := "0.1" +scalaVersion := "{{site.scala-3-version}}" + +libraryDependencies ++= Seq( + "org.scalatest" %% "scalatest" % "3.2.9" % Test +) +``` + +The first three lines of this file are essentially the same as the first example. +The `libraryDependencies` lines tell sbt to include the dependencies (JAR files) that are needed to include ScalaTest. + +> The ScalaTest documentation has always been good, and you can always find the up to date information on what those lines should look like on the [Installing ScalaTest](https://www.scalatest.org/install) page. + + +### Create a Scala source code file + +Next, create a Scala program that you can use to demonstrate ScalaTest. +First, create a directory under _src/main/scala_ named _math_: + +```bash +$ mkdir src/main/scala/math + ---- +``` + +Then, inside that directory, create a file named _MathUtils.scala_ with these contents: + +```scala +package math + +object MathUtils: + def double(i: Int) = i * 2 +``` + +That method provides a simple way to demonstrate ScalaTest. + + +{% comment %} +Because this project doesn’t have a `main` method, we don’t try to run it with `sbt run`; we just compile it with `sbt compile`: + +```` +$ sbt compile + +[info] welcome to sbt +[info] loading settings for project ... +[info] loading project definition ... +[info] loading settings for project ... +[info] Executing in batch mode. For better performance use sbt's shell +[success] Total time: 1 s +```` + +With that compiled, let’s create a ScalaTest file to test the `double` method. +{% endcomment %} + + +### Your first ScalaTest tests + +ScalaTest is very flexible, and offers several different ways to write tests. +A simple way to get started is to write tests using the ScalaTest `AnyFunSuite`. +To get started, create a directory named _math_ under the _src/test/scala_ directory: + +```bash +$ mkdir src/test/scala/math + ---- +``` + +Next, create a file named _MathUtilsTests.scala_ in that directory with the following contents: + +```scala +package math + +import org.scalatest.funsuite.AnyFunSuite + +class MathUtilsTests extends AnyFunSuite: + + // test 1 + test("'double' should handle 0") { + val result = MathUtils.double(0) + assert(result == 0) + } + + // test 2 + test("'double' should handle 1") { + val result = MathUtils.double(1) + assert(result == 2) + } + + test("test with Int.MaxValue") (pending) + +end MathUtilsTests +``` + +This code demonstrates the ScalaTest `AnyFunSuite` approach. +A few important points: + +- Your test class should extend `AnyFunSuite` +- You create tests as shown, by giving each `test` a unique name +- At the end of each test you should call `assert` to test that a condition has been satisfied +- When you know you want to write a test, but you don’t want to write it right now, create the test as “pending,” with the syntax shown + +Using ScalaTest like this is similar to JUnit, so if you’re coming to Scala from Java, hopefully this looks similar. + +Now you can run these tests with the `sbt test` command. +Skipping the first few lines of output, the result looks like this: + +```` +sbt:HelloScalaTest> test + +[info] Compiling 1 Scala source ... +[info] MathUtilsTests: +[info] - 'double' should handle 0 +[info] - 'double' should handle 1 +[info] - test with Int.MaxValue (pending) +[info] Total number of tests run: 2 +[info] Suites: completed 1, aborted 0 +[info] Tests: succeeded 2, failed 0, canceled 0, ignored 0, pending 1 +[info] All tests passed. +[success] Total time: 1 s +```` + +If everything works well, you’ll see output that looks like that. +Welcome to the world of testing Scala applications with sbt and ScalaTest. + + +### Support for many types of tests + +This example demonstrates a style of testing that’s similar to xUnit _Test-Driven Development_ (TDD) style testing, with a few benefits of the _Behavior-Driven Development_ (BDD) style. + +As mentioned, ScalaTest is flexible and you can also write tests using other styles, such as a style similar to Ruby’s RSpec. +You can also use mock objects, property-based testing, and use ScalaTest to test Scala.js code. + +See the User Guide on the [ScalaTest website](https://www.scalatest.org) for more details on the different testing styles that are available. + + + +## Where to go from here + +For more information about sbt and ScalaTest, see the following resources: + +- [The sbt documentation](https://www.scala-sbt.org/1.x/docs/) +- [The ScalaTest website](https://www.scalatest.org/) + + + +[getting_started]: {{ site.baseurl }}/scala3/getting-started.html diff --git a/_overviews/scala3-book/tools-worksheets.md b/_overviews/scala3-book/tools-worksheets.md new file mode 100644 index 0000000000..3231d4e654 --- /dev/null +++ b/_overviews/scala3-book/tools-worksheets.md @@ -0,0 +1,56 @@ +--- +title: Worksheets +type: section +description: This section looks at worksheets, an alternative to Scala projects. +num: 71 +previous-page: tools-sbt +next-page: interacting-with-java +--- + +A worksheet is a Scala file that is evaluated on save, and the result of each expression is shown +in a column to the right of your program. Worksheets are like a [REPL session] on steroids, and +enjoy 1st class editor support: completion, hyperlinking, interactive errors-as-you-type, etc. +Worksheets use the extension `.worksheet.sc`. + +In the following, we show how to use worksheets in IntelliJ, and in VS Code (with the Metals extension). + +1. Open a Scala project, or create one. + - To create a project in IntelliJ, select “File” -> “New” -> “Project…”, select “Scala” + in the left column, and click “Next” to set the project name and location. + - To create a project in VS Code, run the command “Metals: New Scala project”, select the + seed `scala/scala3.g8`, set the project location, open it in a new VS Code window, and + import its build. +1. Create a file named `hello.worksheet.sc` in the directory `src/main/scala/`. + - In IntelliJ, right-click on the directory `src/main/scala/`, and select “New”, and + then “File”. + - In VS Code, right-click on the directory `src/main/scala/`, and select “New File”. +1. Paste the following content in the editor: + ~~~ + println("Hello, world!") + + val x = 1 + x + x + ~~~ +1. Evaluate the worksheet. + - In IntelliJ, click on the green arrow at the top of the editor to evaluate the worksheet. + - In VS Code, save the file. + + You should see the result of the evaluation of every line on the right panel (IntelliJ), or + as comments (VS Code). + +![]({{ site.baseurl }}/resources/images/scala3-book/intellij-worksheet.png) + +A worksheet evaluated in IntelliJ. + +![]({{ site.baseurl }}/resources/images/scala3-book/metals-worksheet.png) + +A worksheet evaluated in VS Code (with the Metals extension). + +Note that the worksheet will use the Scala version defined by your project (set by the key `scalaVersion`, +in your file `build.sbt`, typically). + +Also note that worksheets don’t have a [program entry point]. Instead, top-level statements and expressions +are evaluated from top to bottom. + +[REPL session]: {% link _overviews/scala3-book/taste-repl.md %} +[program entry point]: {% link _overviews/scala3-book/methods-main-methods.md %} diff --git a/resources/images/scala3-book/intellij-worksheet.png b/resources/images/scala3-book/intellij-worksheet.png new file mode 100644 index 0000000000000000000000000000000000000000..e33fd3566e8c43b3e32aeb06a951f69f57bdd03b GIT binary patch literal 12899 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 literal 0 HcmV?d00001 From 8c1ff35b174b2446b9be5e9739c1d79164b07779 Mon Sep 17 00:00:00 2001 From: Julien Richard-Foy Date: Mon, 5 Jul 2021 16:27:14 +0200 Subject: [PATCH 0344/1870] Create docs.scala-lang.org/scala3/guides/reference and move language-versions here Content was taken from commit 270bd8b0f5af338be73790082d774516a83a73b5 --- _config.yml | 11 +++++- .../scala3-reference/language-versions.md | 36 +++++++++++++++++++ _overviews/scala3-reference/overview.md | 7 ++++ scala3/guides.md | 4 +++ 4 files changed, 57 insertions(+), 1 deletion(-) create mode 100644 _overviews/scala3-reference/language-versions.md create mode 100644 _overviews/scala3-reference/overview.md diff --git a/_config.yml b/_config.yml index ea13ad3eae..395bed4a34 100644 --- a/_config.yml +++ b/_config.yml @@ -123,6 +123,15 @@ defaults: overview-name: "Macros in Scala 3" layout: multipage-overview permalink: "/scala3/guides/macros/:title.html" + - + scope: + path: "_overviews/scala3-reference" + values: + scala3: true + partof: scala3-reference + overview-name: "Scala 3 Language Reference" + layout: multipage-overview + permalink: "/scala3/guides/reference/:title.html" - scope: path: "scala3" @@ -133,7 +142,7 @@ defaults: highlighter: rouge permalink: /:categories/:title.html:output_ext baseurl: -scala3ref: "https://dotty.epfl.ch/docs/reference" +scala3ref: "/scala3/guides/reference" exclude: ["vendor"] plugins: - jekyll-redirect-from diff --git a/_overviews/scala3-reference/language-versions.md b/_overviews/scala3-reference/language-versions.md new file mode 100644 index 0000000000..01a8ab1c32 --- /dev/null +++ b/_overviews/scala3-reference/language-versions.md @@ -0,0 +1,36 @@ +--- +title: Language Versions +type: chapter +description: This page lists the different flavours of language supported by the Scala 3 compiler. +num: 2 +previous-page: overview +--- + +The default Scala language version currently supported by the Dotty compiler is `3.0`. There are also other language versions that can be specified instead: + +- `3.0-migration`: Same as `3.0` but with a Scala 2 compatibility mode that helps moving Scala 2.13 sources over to Scala 3. In particular, it + + - flags some Scala 2 constructs that are disallowed in Scala 3 as migration warnings instead of hard errors, + - changes some rules to be more lenient and backwards compatible with Scala 2.13 + - gives some additional warnings where the semantics has changed between Scala 2.13 and 3.0 + - in conjunction with `-rewrite`, offer code rewrites from Scala 2.13 to 3.0. + +- `future`: A preview of changes introduced in the next versions after 3.0. In the doc pages here we refer to the language version with these changes as `3.1`, but it might be that some of these changes will be rolled out in later `3.x` versions. + +Some Scala-2 specific idioms will be dropped in this version. The feature set supported by this version will be refined over time as we approach its release. + +- `future-migration`: Same as `future` but with additional helpers to migrate from `3.0`. Similarly to the helpers available under `3.0-migration`, these include migration warnings and optional rewrites. + +There are two ways to specify a language version. + +- With a `-source` command line setting, e.g. `-source 3.0-migration`. +- With a `scala.language` import at the top of a source file, e.g: + +```scala +package p +import scala.language.`future-migration` + +class C { ... } +``` + +Language imports supersede command-line settings in the source files where they are specified. Only one language import specifying a source version is allowed in a source file, and it must come before any definitions in that file. diff --git a/_overviews/scala3-reference/overview.md b/_overviews/scala3-reference/overview.md new file mode 100644 index 0000000000..aa34ec188f --- /dev/null +++ b/_overviews/scala3-reference/overview.md @@ -0,0 +1,7 @@ +--- +title: Overview +type: chapter +description: This page begins the reference documentation. +num: 1 +next-page: language-versions +--- diff --git a/scala3/guides.md b/scala3/guides.md index 45587d280f..e6ddb733db 100644 --- a/scala3/guides.md +++ b/scala3/guides.md @@ -18,6 +18,10 @@ guides: icon: birthday-cake url: "/scala3/guides/tasty-overview.html" description: "An overview over the TASTy format aimed at end-users of the Scala language." + - title: Scala 3 Language Reference + icon: book + url: "/scala3/guides/reference/overview.html" + description: "The reference for Scala 3" --- \ No newline at end of file + diff --git a/_layouts/frontpage.html b/_layouts/frontpage.html index 743e27bd83..29fa5825fe 100644 --- a/_layouts/frontpage.html +++ b/_layouts/frontpage.html @@ -299,24 +299,24 @@

    {{forum.title}}

    {% endfor %} -
    -

    Real-time (topic-specialized) chat

    - {% assign modLimit = site.data.chats-forums.gitterChannels.size | modulo: 2 %} +
    +

    Real-time chat

    + {% assign modLimit = site.data.chats-forums.discordServers.size | modulo: 2 %} {% capture channelLimit %} {% if modLimit != 0 %} - {{site.data.chats-forums.gitterChannels.size | minus: 1}} + {{site.data.chats-forums.discordServers.size | minus: 1}} {% else %} - {{site.data.chats-forums.gitterChannels.size}} + {{site.data.chats-forums.discordServers.size}} {% endif %} {% endcapture %} - {% for channel in site.data.chats-forums.gitterChannels limit: channelLimit %} + {% for server in site.data.chats-forums.discordServers limit: channelLimit %} {% if forloop.first %}
    From 2dd2d506445008554d88614618b9faf28b16a355 Mon Sep 17 00:00:00 2001 From: Horimoto Yasuhiro Date: Wed, 9 Feb 2022 23:19:53 +0900 Subject: [PATCH 0573/1870] Add a missing translation in getting-started.md (Japanese) --- _includes/_ja/getting-started.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/_includes/_ja/getting-started.md b/_includes/_ja/getting-started.md index 97ebcbd692..f70eba4848 100644 --- a/_includes/_ja/getting-started.md +++ b/_includes/_ja/getting-started.md @@ -150,7 +150,7 @@ Scala について日本語で質問したい場合、Twitterでつぶやくと
    From 1dd5138701fd92d82ebe284f49e566c39e1e68db Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Doeraene?= Date: Thu, 10 Feb 2022 16:57:43 +0100 Subject: [PATCH 0574/1870] Update the Getting Started page(s) for the latest `cs` behavior. The default installation of coursier now installs Scala 3 by default under `scala` and `scalac`. However, it also allows to override that with `cs launch scala:2.13.8` or `cs install scala:2.13.8`, as Scala 2 and Scala 3 have been unified. --- _includes/getting-started.md | 24 ++++++++++++++---------- 1 file changed, 14 insertions(+), 10 deletions(-) diff --git a/_includes/getting-started.md b/_includes/getting-started.md index dcbf448b0f..628f2a41c5 100644 --- a/_includes/getting-started.md +++ b/_includes/getting-started.md @@ -34,20 +34,24 @@ Along with managing JVMs, `cs setup` also installs useful command-line tools: - The [sbt](https://www.scala-sbt.org/) build tool - [Ammonite](https://ammonite.io/), an enhanced REPL - [scalafmt](https://scalameta.org/scalafmt/), the Scala code formatter -- `scalac` (the Scala 2 compiler) -- `scala` (the Scala 2 REPL and script runner). +- `scalac` (the Scala compiler) +- `scala` (the Scala REPL and script runner). For more information about `cs`, read [coursier-cli documentation](https://get-coursier.io/docs/cli-overview). -> Currently, `cs setup` installs the Scala 2 compiler and runner (the `scalac` and -> `scala` commands, respectively). This is usually not an issue because most projects -> use a build tool that works with both Scala 2 and Scala 3. -> Nevertheless, you can install the Scala 3 compiler and runner as command-line tools -> by running the following additional commands: +> `cs setup` installs the Scala 3 compiler and runner by default (the `scalac` and +> `scala` commands, respectively). Whether you intend to use Scala 2 or 3, +> this is usually not an issue because most projects use a build tool that will +> use the correct version of Scala irrespective of the one installed "globally". +> Nevertheless, you can always launch a specific version of Scala using > ``` -> $ cs install scala3-compiler -> $ cs install scala3 +> $ cs launch scala:{{ site.scala-version }} +> $ cs launch scalac:{{ site.scala-version }} +> ``` +> If you prefer Scala 2 to be run by default, you can force that version to be installed with: +> ``` +> $ cs install scala:{{ site.scala-version }} scalac:{{ site.scala-version }} > ``` ### ...or manually @@ -164,7 +168,7 @@ There are a multitude of mailing lists and real-time chat rooms in case you want + --> From 30f11ac17dbe37d7edc46bd64450dd030207b07d Mon Sep 17 00:00:00 2001 From: Som Snytt Date: Thu, 10 Feb 2022 20:02:07 -0800 Subject: [PATCH 0575/1870] Mention library version quirk --- _overviews/FAQ/index.md | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) diff --git a/_overviews/FAQ/index.md b/_overviews/FAQ/index.md index d20c5d7a4b..fe4b457451 100644 --- a/_overviews/FAQ/index.md +++ b/_overviews/FAQ/index.md @@ -105,9 +105,22 @@ get poor results, try surrounding the symbol with double quotes. sbt 1.x always uses Scala 2.12 to compile build definitions. Your sbt 1.x build definition is always a Scala 2.12 program. -Regardless, in your `build.sbt` you can set `scalaVersion` to anything -you want and your actual program code will be compiled with that -version. +Regardless, in your `build.sbt`, you can set `scalaVersion` to whichever +available distribution you want and your program code will be compiled with that version. + +### I want Scala 3.1.1 (etc); why does std lib say it's using Scala 2.13? + +Scala 3 currently uses the Scala 2.13 library by leveraging its seamless +interoperability. Note that it does not necessarily ingest the latest +version of the Scala 2.13 library. + +``` +Welcome to Scala 3.1.1 (17.0.2, Java OpenJDK 64-Bit Server VM). +Type in expressions for evaluation. Or try :help. + +scala> util.Properties.versionString +val res0: String = version 2.13.6 +``` ### Why is my (abstract or overridden) `val` null? From dcc51592443ca85e535c71068137865daf1ef17e Mon Sep 17 00:00:00 2001 From: czasoprzestrzenny <46657059+czasoprzestrzenny@users.noreply.github.com> Date: Fri, 11 Feb 2022 15:41:48 +0100 Subject: [PATCH 0576/1870] Update generic-classes.md changed a stack pop to stack.pop() --- _tour/generic-classes.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/_tour/generic-classes.md b/_tour/generic-classes.md index 0b479d30df..d883e88115 100644 --- a/_tour/generic-classes.md +++ b/_tour/generic-classes.md @@ -38,8 +38,8 @@ To use a generic class, put the type in the square brackets in place of `A`. val stack = new Stack[Int] stack.push(1) stack.push(2) -println(stack.pop) // prints 2 -println(stack.pop) // prints 1 +println(stack.pop()) // prints 2 +println(stack.pop()) // prints 1 ``` The instance `stack` can only take Ints. However, if the type argument had subtypes, those could be passed in: ``` From 15ba133475ab1f48392e0b82f1356d93899f2178 Mon Sep 17 00:00:00 2001 From: Jamie Thompson Date: Tue, 15 Feb 2022 10:37:40 +0100 Subject: [PATCH 0577/1870] update install instructions for coursier Use the same instructions as listed on the official Coursier website, as git.io short url service is no longer maintained. --- _includes/_ja/getting-started.md | 8 ++++---- _includes/getting-started.md | 6 +++--- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/_includes/_ja/getting-started.md b/_includes/_ja/getting-started.md index 0fe5652204..40bcf9ff29 100644 --- a/_includes/_ja/getting-started.md +++ b/_includes/_ja/getting-started.md @@ -14,7 +14,7 @@ Scala をインストールすると、コンパイラやビルドツールな ### Scala インストーラーを使う(推奨) -Scala のインストーラーは[Coursier](https://get-coursier.io/docs/cli-overview)というツールで、コマンドは`cs`です。このツールを使うと、JVM と標準 Scala ツールがシステムにインストールされます。 +Scala のインストーラーは[Coursier](https://get-coursier.io/docs/cli-overview)というツールで、コマンドは`cs`です。このツールを使うと、JVM と標準 Scala ツールがシステムにインストールされます。 以下の手順でお使いのシステムにインストールしてください。
    @@ -146,7 +146,7 @@ Scala について日本語で質問したい場合、Twitterでつぶやくと -- This is handled in `resources/js/functions.js`. -->

    または、Homebrewを使用しない場合は

    - $ curl -fLo cs https://git.io/coursier-cli-macos && chmod +x cs && (xattr -d com.apple.quarantine cs || true) && ./cs setup
    + $ curl -fL https://github.com/coursier/launchers/raw/master/cs-x86_64-apple-darwin.gz | gzip -d > cs && chmod +x cs && (xattr -d com.apple.quarantine cs || true) && ./cs setup
    diff --git a/_includes/getting-started.md b/_includes/getting-started.md index 628f2a41c5..83c1de45fe 100644 --- a/_includes/getting-started.md +++ b/_includes/getting-started.md @@ -170,7 +170,7 @@ There are a multitude of mailing lists and real-time chat rooms in case you want -- This is handled in `resources/js/functions.js`. -->

    Alternatively, if you don't use Homebrew

    - $ curl -fLo cs https://git.io/coursier-cli-macos && chmod +x cs && (xattr -d com.apple.quarantine cs || true) && ./cs setup
    + $ curl -fL https://github.com/coursier/launchers/raw/master/cs-x86_64-apple-darwin.gz | gzip -d > cs && chmod +x cs && (xattr -d com.apple.quarantine cs || true) && ./cs setup
    From b3e7f156841a4b3b7ec3f36d739f01d3c65874b1 Mon Sep 17 00:00:00 2001 From: Bersier Date: Wed, 16 Feb 2022 16:06:11 -0500 Subject: [PATCH 0578/1870] Update staging.md Added a link for "PCP". --- _scala3-reference/metaprogramming/staging.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/_scala3-reference/metaprogramming/staging.md b/_scala3-reference/metaprogramming/staging.md index 0e90966c85..bb35f51055 100644 --- a/_scala3-reference/metaprogramming/staging.md +++ b/_scala3-reference/metaprogramming/staging.md @@ -62,7 +62,7 @@ impose the following restrictions on the use of splices. The framework as discussed so far allows code to be staged, i.e. be prepared to be executed at a later stage. To run that code, there is another method in class `Expr` called `run`. Note that `$` and `run` both map from `Expr[T]` -to `T` but only `$` is subject to the PCP, whereas `run` is just a normal method. +to `T` but only `$` is subject to the [PCP](./macros.html#the-phase-consistency-principle), whereas `run` is just a normal method. `scala.quoted.staging.run` provides a `Quotes` that can be used to show the expression in its scope. On the other hand `scala.quoted.staging.withQuotes` provides a `Quotes` without evaluating the expression. From 99b84bc5a89a1e76535abbea3199d1bb8ee31020 Mon Sep 17 00:00:00 2001 From: Ye Shu Date: Sun, 20 Feb 2022 18:58:55 -0500 Subject: [PATCH 0579/1870] Fix deprecated warning in scala for java programer ``` warning: method + in class Int is deprecated (since 2.13.0): Adding a number and a String is deprecated. Use the string interpolation `s"$num$str"` override def toString(): String = year + "-" + month + "-" + day ``` --- _it/tutorials/scala-for-java-programmers.md | 2 +- _ja/tutorials/scala-for-java-programmers.md | 2 +- _ko/tutorials/scala-for-java-programmers.md | 2 +- _overviews/tutorials/scala-for-java-programmers.md | 2 +- _zh-cn/tutorials/scala-for-java-programmers.md | 2 +- _zh-tw/tutorials/scala-for-java-programmers.md | 2 +- 6 files changed, 6 insertions(+), 6 deletions(-) diff --git a/_it/tutorials/scala-for-java-programmers.md b/_it/tutorials/scala-for-java-programmers.md index 5cf8cb4b1c..7a60a2d6c6 100644 --- a/_it/tutorials/scala-for-java-programmers.md +++ b/_it/tutorials/scala-for-java-programmers.md @@ -578,7 +578,7 @@ definendo la classe `Date` come segue: def year = y def month = m def day = d - override def toString(): String = year + "-" + month + "-" + day + override def toString(): String = s"$year-$month-$day" La parte importante qui è la dichiarazione `extends Ord` che segue il nome della classe e dei parametri. Dichiara che la classe `Date` eredita il diff --git a/_ja/tutorials/scala-for-java-programmers.md b/_ja/tutorials/scala-for-java-programmers.md index 8d6fb7aef3..b49113ff72 100644 --- a/_ja/tutorials/scala-for-java-programmers.md +++ b/_ja/tutorials/scala-for-java-programmers.md @@ -461,7 +461,7 @@ Java の `Object` 型のより一般的なものとしてとらえられます def year = y def month = m def day = d - override def toString(): String = year + "-" + month + "-" + day + override def toString(): String = s"$year-$month-$day" ここで重要なのは、クラス名とパラメータのあとに続く `extends Ord` という宣言です。 `Date` クラスが `Ord` トレイトを継承していることを宣言しています。 diff --git a/_ko/tutorials/scala-for-java-programmers.md b/_ko/tutorials/scala-for-java-programmers.md index 4f26dee244..b3f3d1b6d3 100644 --- a/_ko/tutorials/scala-for-java-programmers.md +++ b/_ko/tutorials/scala-for-java-programmers.md @@ -547,7 +547,7 @@ Java 프로그래머들이 트레잇을 이해하는 가장 쉬운 길은 코드 def year = y def month = m def day = d - override def toString(): String = year + "-" + month + "-" + day + override def toString(): String = s"$year-$month-$day" 여기서 중요한 부분은 클래스 이름과 파라미터 뒤에 따라오는 `extends Ord` 선언이다. 이 선언은 `Date` 클래스가 `Ord` diff --git a/_overviews/tutorials/scala-for-java-programmers.md b/_overviews/tutorials/scala-for-java-programmers.md index 52c988066e..ebac87fce3 100644 --- a/_overviews/tutorials/scala-for-java-programmers.md +++ b/_overviews/tutorials/scala-for-java-programmers.md @@ -595,7 +595,7 @@ represent as integers. We therefore start the definition of the def year = y def month = m def day = d - override def toString(): String = year + "-" + month + "-" + day + override def toString(): String = s"$year-$month-$day" The important part here is the `extends Ord` declaration which follows the class name and parameters. It declares that the diff --git a/_zh-cn/tutorials/scala-for-java-programmers.md b/_zh-cn/tutorials/scala-for-java-programmers.md index 9ee8838b4d..00559b596d 100644 --- a/_zh-cn/tutorials/scala-for-java-programmers.md +++ b/_zh-cn/tutorials/scala-for-java-programmers.md @@ -308,7 +308,7 @@ Java 中我们会将这个树用一个抽象父类表示,然后每种节点跟 def year = y def month = m def day = d - override def toString(): String = year + "-" + month + "-" + day + override def toString(): String = s"$year-$month-$day" 这边要注意的是声明在类名称跟参数之后的 `extends Ord`。这个语法声明了 `Date` 继承 `Ord` 特质。 diff --git a/_zh-tw/tutorials/scala-for-java-programmers.md b/_zh-tw/tutorials/scala-for-java-programmers.md index 290ee22ac3..d9b4bcd4d0 100755 --- a/_zh-tw/tutorials/scala-for-java-programmers.md +++ b/_zh-tw/tutorials/scala-for-java-programmers.md @@ -308,7 +308,7 @@ Java 中我們會將這個樹用一個抽象母類別表示,然後每種節點 def year = y def month = m def day = d - override def toString(): String = year + "-" + month + "-" + day + override def toString(): String = s"$year-$month-$day" 這邊要注意的是宣告在類別名稱跟參數之後的 `extends Ord`。這個語法宣告了 `Date` 繼承 `Ord` 特質。 From cf096aebaaceb121695d1aea973c5216c97d8437 Mon Sep 17 00:00:00 2001 From: Som Snytt Date: Wed, 23 Feb 2022 20:24:54 -0800 Subject: [PATCH 0580/1870] Add lightbend blog post --- _overviews/compiler-options/optimizer.md | 221 +++++++++++++++++++++++ 1 file changed, 221 insertions(+) create mode 100644 _overviews/compiler-options/optimizer.md diff --git a/_overviews/compiler-options/optimizer.md b/_overviews/compiler-options/optimizer.md new file mode 100644 index 0000000000..a5cf6fbb29 --- /dev/null +++ b/_overviews/compiler-options/optimizer.md @@ -0,0 +1,221 @@ +# The Scala 2.12 / 2.13 Inliner and Optimizer + +_by [Lukas Rytz](https://github.com/lrytz), November 7, 2018_ + +tl;dr: + +- Don't enable the optimizer during development: it breaks incremental compilation, and it makes the compiler slower. Only enable it for testing, on CI, and to build releases. +- Enable method-local optimizations with `-opt:l:method`. This option is safe for binary compatibility, but typically doesn't improve performance on its own. +- Enable inlining in addition to method-local optimizations with `-opt:l:inline` and `-opt-inline-from:[PATTERN]` + - Don't inline from your dependencies when publishing a library, it breaks binary compatibility. Use `-opt-inline-from:my.package.**` to only inline from packages within your library. + - When compiling an application with global inlining (`-opt-inline-from:**`), ensure that the run-time classpath is exactly the same as the compile-time classpath. +- The `@inline` annotation only has an effect if the inliner is enabled. It tells the inliner to always try to inline the annotated method or callsite. +- Without the `@inline` annotation, the inliner generally inlines higher-order methods and forwarder methods. The main goal is to eliminate megamorphic callsites due to functions passed as argument, and to eliminate value boxing. Other optimizations are delegated to the JVM. + +To learn more, read on. + +## Intro + +The Scala compiler has included an inliner since version 2.0. Closure elimination and dead code elimination were added in 2.1. That was the first Scala optimizer, written and maintained by [Iulian Dragos](https://github.com/dragos). He continued to improve these features over time and consolidated them under the `-optimise` flag (later Americanized to `-optimize`), which remained available through Scala 2.11. + +The optimizer was re-written for Scala 2.12 to become more reliable and powerful – and to side-step the spelling issue by calling the new flag `-opt`. This post describes how to use the optimizer in Scala 2.12 and 2.13: what it does, how it works, and what are its limitations. + +## Motivation + +Why does the Scala compiler even have a JVM bytecode optimizer? The JVM is a highly optimized runtime with a just-in-time (JIT) compiler with 19 years of tuning. It's because there are certain well-known code patterns that the JVM fails to optimize properly. These patterns are common in functional languages such as Scala. (Increasingly, Java code with lambdas is catching up and showing the same performance issues at run-time.) + +The two most important such patterns are "megamorphic dispatch" (also called "the inlining problem") and value boxing. If you'd like to learn more about these problems in the context of Scala, you could watch the part of [my Scala Days 2015 talk (starting at 26:13)](https://youtu.be/Ic4vQJcYwsU?t=1573). + +The goal of the Scala optimizer is to produce bytecode that the JVM can execute fast. It is also a goal to avoid performing any optimizations that the JVM can already do well. + +This means that the Scala optimizer may become obsolete in the future, if the JIT compiler is improved to handle these patterns better. In fact, with the arrival of GraalVM, that future might be nearer than you think! We take a closer look at Graal in a follow-up post. But for now, we dive into some details about the Scala optimizer. + +## Constraints and assumptions + +The Scala optimizer has to make its improvements within fairly narrow constraints: + +- The optimizer only changes method bodies, but never signatures of classes or methods. The generated bytecode has the same (binary) interface, whether or not the optimizer is enabled. +- We don't assume the whole program (all user code plus all of its dependencies, that together make up an application) is known when running the optimizer. There may be classes on the run-time classpath that we don't see at compile-time: we may be compiling a library, or only a component of an application. This means that: + - Every non-final method can potentially be overridden, even if at compile-time there are no classes that define such an override + - Consequently, we can only inline methods that can be resolved at compile-time: final methods, methods in `object`s, and methods where the receiver's type is precisely known (for example, in `(new A).f`, the receiver is known to be exactly `A`, not a subtype of `A`). +- The optimizer does not break applications that use reflection. This follows from the two points above: changes to classes could be observed by reflection, and additional classes could be loaded and instantiated dynamically. + +However, even when staying within these constraints, some changes performed by the optimizer can be observed at run-time: + +- Inlined methods disappear from call stacks. + + - This can lead to unexpected behaviors when using a debugger. + - Related: line numbers (stored in bytecode) are discarded when a method is inlined into a different classfile, which also impacts debugging experience. (This [could be improved](https://github.com/scala/scala-dev/issues/3).) + +- Inlining a method can delay class loading of the class where the method is defined. + +- The optimizer assumes that modules (singletons like `object O`) are never `null`. + - This assumption can be false if the module is loaded in its superclass. The following example throws a `NullPointerException` when compiled normally, but prints `0` when compiled with the optimizer enabled: + + ```scala + class A { + println(Test.f) + } + object Test extends A { + @inline def f = 0 + def main(args: Array[String]): Unit = () + } + ``` + + - This assumption can be disabled with `-opt:-assume-modules-non-null`, which results in additional null checks in optimized code. + +- The optimizer removes unnecessary loads of certain built-in modules, for example `scala.Predef` and `scala.runtime.ScalaRunTime`. This means that initialization (construction) of these modules can be skipped or delayed. + + - For example, in `def f = 1 -> ""`, the method `Predef.->` is inlined and the access to `Predef` is eliminated. The resulting code is `def f = new Tuple2(1, "")`. + - This assumption can be disabled with `-opt:-allow-skip-core-module-init` + +- The optimizer eliminates unused `C.getClass` calls, which may delay class loading. This can be disabled with `-opt:-allow-skip-class-loading`. + +## Binary compatibility + +Scala minor releases are binary compatible with each other, for example 2.12.6 and 2.12.7. The same is true for many libraries in the Scala ecosystem. These binary compatibility promises are the main reason for the Scala optimizer not to be enabled everywhere. + +The reason is that inlining a method from one class into another changes the (binary) interface that is accessed: + +```scala +class C { + private[this] var x = 0 + @inline final def inc(): Int = { x += 1; x } +} +``` + +When inlining a callsite `c.inc()`, the resulting code no longer calls `inc`, but instead accesses the field `x` directly. Since that field is private (also in bytecode), inlining `inc` is only allowed within the class `C` itself. Trying to access `x` from any other class would cause an `IllegalAccessError` at run-time. + +However, there are many cases where implementation details in Scala source code become public in bytecode: + +```scala +class C { + private def x = 0 + @inline final def m: Int = x +} +object C { + def t(c: C) = c.x +} +``` + +Scala allows accessing the private method `x` in the companion object `C`. In bytecode, however, the classfile for the companion `C$` is not allowed to access a private method of `C`. For that reason, the Scala compiler "mangles" the name of `x` to `C$$x` and makes the method public. + +This means that `m` can be inlined into classes other than `C`, since the resulting code invokes `C.C$$x` instead of `C.m`. Unfortunately this breaks Scala's binary compatibility promise: the fact that the public method `m` calls a private method `x` is considered to be an implementation detail that can change in a minor release of the library defining `C`. + +Even more trivially, assume that method `m` was buggy and is changed to `def m = if (fullMoon) 1 else x` in a minor release. Normally, it would be enough for a user to put the new version on the classpath. However, if the old version of `c.m` was inlined at compile-time, having the new version of C on the run-time classpath would not fix the bug. + +In order to safely use the Scala optimizer, users need to make sure that the compile-time and run-time classpaths are identical. This has a far-reaching consequence for library developers: **libraries that are published to be consumed by other projects should not inline code from the classpath**. The inliner can be configured to inline code from the library itself using `-opt-inline-from:my.package.**`. + +The reason for this restriction is that dependency management tools like sbt will often pick newer versions of transitive dependencies. For example, if library `A` depends on `core-1.1.1`, `B` depends on `core-1.1.2` and the application depends on both `A` and `B`, the build tool will put `core-1.1.2` on the classpath. If code from `core-1.1.1` was inlined into `A` at compile-time, it might break at run-time due to a binary incompatibility. + +## Using and interacting with the optimizer + +The compiler flag for enabling the optimizer is `-opt`. Running `scalac -opt:help` shows how to use the flag. + +By default (without any compiler flags, or with `-opt:l:default`), the Scala compiler eliminates unreachable code, but does not run any other optimizations. + +`-opt:l:method` enables all method-local optimizations, for example: + +- Elimination of code that loads unused values +- Rewriting of null and `isInstanceOf` checks whose result is known at compile-time +- Elimination of value boxes like `java.lang.Integer` or `scala.runtime.DoubleRef` that are created within a method and don't escape it + +Individual optimizations can be disabled. For example, `-opt:l:method,-nullness-tracking` disables nullness optimizations. + +Method-local optimizations alone typically don't have any positive effect on performance, because source code usually doesn't have unnecessary boxing or null checks. However, local optimizations can often be applied after inlining, so it's really the combination of inlining and local optimizations that can improve program performance. + +`-opt:l:inline` enables inlining in addition to method-local optimizations. However, to avoid unexpected binary compatibility issues, we also need to tell the compiler which code it is allowed to inline. This is done with the `-opt-inline-from` compiler flag. Examples: + +- `-opt-inline-from:my.library.**` enables inlining from any class defined in package `my.library`, or in any of its sub-packages. Inlining within a library is safe for binary compatibility, so the resulting binary can be published. It will still work correctly even if one of its dependencies is updated to a newer minor version in the run-time classpath. +- `-opt-inline-from:` enables inlining from the set of source files being compiled in the current compiler invocation. This option can also be used for compiling libraries. If the source files of a library are split up across multiple sbt projects, inlining is only done within each project. Note that in an incremental compilation, inlining would only happen within the sources being re-compiled – but in any case, it is recommended to only enable the optimizer in CI and release builds (and to run `clean` before building). +- `-opt-inline-from:**` allows inlining from every class, including the JDK. This option enables full optimization when compiling an application. To avoid binary incompatibilities, it is mandatory to ensure that the run-time classpath is identical to the compile-time classpath, including the Java standard library. + +Running `scalac -opt-inline-from:help` explains how to use the compiler flag. + +### Inliner heuristics and `@inline` + +When the inliner is enabled, it automatically selects callsites for inlining according to a heuristic. + +As mentioned in the introduction, the main goal of the Scala optimizer is to eliminate megamorphic dispatch and value boxing. In order to keep this post from growing too long, a followup post will include the analysis of concrete examples that motivate which callsites are selected by the inliner heuristic. + +Nevertheless, it is useful to have an intuition of how the heuristic works, so here is an overview: + +- Methods or callsites annotated [`@noinline`](https://www.scala-lang.org/api/current/scala/noinline.html) are not inlined. +- The inliner doesn't inline *into* forwarder methods. +- Methods or callsites annotated [`@inline`](https://www.scala-lang.org/api/current/scala/inline.html) are inlined. +- Higher-order methods with a function literal as argument are inlined. +- Higher-order methods where a parameter function of the callsite method is forwarded to the callee are inlined. +- Methods with an `IntRef` / `DoubleRef` / ... parameter are inlined. When nested methods update variables of the outer method, those variables are boxed into `XRef` objects. These boxes can often be eliminated after inlining the nested method. +- Forwarders, factory methods and trivial methods are inlined. Examples include simple closure bodies like `_ + 1` and synthetic methods (potentially with boxing / unboxing adaptations) such as bridges. + +To prevent methods from exceeding the JVM's method size limit, the inliner has size limits. Inlining into a method stops when the number of instructions exceeds a certain threshold. + +As you can see in the list above, the `@inline` and `@noinline` annotations are the only way for programmers to influence inlining decisions. In general, our recommendation is to avoid using these annotations. If you observe issues with the inliner heuristic that can be fixed by annotating methods, we are very keen to hear about them, for example in the form of a [bug report](https://github.com/scala/bug/issues). + +A related anecdote: in the Scala compiler and standard library (which are built with the optimizer enabled), there are roughly 330 `@inline`-annotated methods. Removing all of these annotations and re-building the project has no effect on the compiler's performance. So the annotations are well-intended and benign, but in reality unnecessary. + +For expert users, `@inline` annotations can be used to hand-tune performance critical code without reducing abstraction. If you have a project that falls into this category, please [let us know](https://contributors.scala-lang.org), we're interested to learn more! + +Finally, note that the `@inline` annotation only has an effect when the inliner is enabled, which is not the case by default. The reason is to avoid introducing accidental binary incompatibilities, as [explained above](#binary-compatibility). + +### Inliner warnings + +The inliner can issue warnings when callsites cannot be inlined. By default, these warnings are not issued individually, but only as a summary at the end of compilation (similar to deprecation warnings). + +``` +$> scalac Test.scala -opt:l:inline '-opt-inline-from:**' +warning: there was one inliner warning; re-run enabling -opt-warnings for details, or try -help +one warning found + +$> scalac Test.scala -opt:l:inline '-opt-inline-from:**' -opt-warnings +Test.scala:3: warning: C::f()I is annotated @inline but could not be inlined: +The method is not final and may be overridden. + def t = f + ^ +one warning found +``` + +By default, the inliner issues warnings for invocations of methods annotated `@inline` that cannot be inlined. Here is the source code that was compiled in the commands above: + +```scala +class C { + @inline def f = 1 + def t = f // cannot inline: C.f is not final +} +object T extends C { + override def t = f // can inline: T.f is final +} +``` + +The `-opt-warnings` flag has more configurations. With `-opt-warnings:_`, a warning is issued for every callsite that is selected by the heuristic but cannot be inlined. See also `-opt-warnings:help`. + +### Inliner log + +If you're curious (or maybe even skeptical) about what the inliner is doing to your code, you can use the `-Yopt-log-inline` flag to produce a trace of the inliner's work: + +```scala +package my.project +class C { + def f(a: Array[Int]) = a.map(_ + 1) +} +``` + +``` +$> scalac Test.scala -opt:l:inline '-opt-inline-from:**' -Yopt-log-inline my/project/C.f +Inlining into my/project/C.f + inlined scala/Predef$.intArrayOps (the callee is annotated `@inline`). Before: 15 ins, after: 30 ins. + inlined scala/collection/ArrayOps$.map$extension (the callee is a higher-order method, the argument for parameter (evidence$6: Function1) is a function literal). Before: 30 ins, after: 94 ins. + inlined scala/runtime/ScalaRunTime$.array_length (the callee is annotated `@inline`). Before: 94 ins, after: 110 ins. + [...] + rewrote invocations of closure allocated in my/project/C.f with body $anonfun$f$1: INVOKEINTERFACE scala/Function1.apply (Ljava/lang/Object;)Ljava/lang/Object; (itf) + inlined my/project/C.$anonfun$f$1 (the callee is a synthetic forwarder method). Before: 654 ins, after: 666 ins. + inlined scala/runtime/BoxesRunTime.boxToInteger (the callee is a forwarder method with boxing adaptation). Before: 666 ins, after: 674 ins. +``` + +Explaining the details here is out of scope for this post. We defer this discussion to a follow-up post that will explain the internals of the Scala optimizer in more detail. + +## Summary + +The goal of this article was to explain why the Scala optimizer exists and give a rough explanation what it can and cannot do. It also showed how to configure and use the optimizer in your project. + +In the next post, we will go into detail about how the optimizer works, what transformations are applied, and how they work together. We will also measure performance improvements that the optimizer can bring. Finally, we will look at related projects, dive a little more into the history of the optimizer, and discuss ideas for the future. From 13f8c85396d73527fdeab4372455424e1ed3a615 Mon Sep 17 00:00:00 2001 From: Som Snytt Date: Wed, 23 Feb 2022 21:39:23 -0800 Subject: [PATCH 0581/1870] Update optimizer overview --- _data/overviews.yml | 5 ++ _overviews/compiler-options/optimizer.md | 68 ++++++++++++------------ 2 files changed, 40 insertions(+), 33 deletions(-) diff --git a/_data/overviews.yml b/_data/overviews.yml index cf89f286a7..ae56e9b5e9 100644 --- a/_data/overviews.yml +++ b/_data/overviews.yml @@ -259,6 +259,11 @@ icon: cog url: "compiler-options/errors.html" description: "A new engine for more user-friendly error messages, printing chains of dependent implicits and colored found/required type diffs." + - title: Optimizer + by: Lukas Rytz and Andrew Marki + icon: cog + url: "compiler-options/optimizer.html" + description: "The compiler can perform various optimizations as specified by compiler options." - category: Legacy diff --git a/_overviews/compiler-options/optimizer.md b/_overviews/compiler-options/optimizer.md index a5cf6fbb29..936967e8a0 100644 --- a/_overviews/compiler-options/optimizer.md +++ b/_overviews/compiler-options/optimizer.md @@ -1,18 +1,26 @@ -# The Scala 2.12 / 2.13 Inliner and Optimizer +--- +layout: singlepage-overview +title: Optimizer +--- + +**[Lukas Rytz](https://github.com/lrytz) (November 7, 2018)** -_by [Lukas Rytz](https://github.com/lrytz), November 7, 2018_ +**[Andrew Marki](https://github.com/som-snytt) (February 29, 2022)** -tl;dr: +# The Scala 2.12 / 2.13 Inliner and Optimizer +## In Brief + +- The Scala compiler has a compile-time optimizer that is available in versions 2.12 and 2.13, but not yet in Scala 3. - Don't enable the optimizer during development: it breaks incremental compilation, and it makes the compiler slower. Only enable it for testing, on CI, and to build releases. -- Enable method-local optimizations with `-opt:l:method`. This option is safe for binary compatibility, but typically doesn't improve performance on its own. -- Enable inlining in addition to method-local optimizations with `-opt:l:inline` and `-opt-inline-from:[PATTERN]` - - Don't inline from your dependencies when publishing a library, it breaks binary compatibility. Use `-opt-inline-from:my.package.**` to only inline from packages within your library. - - When compiling an application with global inlining (`-opt-inline-from:**`), ensure that the run-time classpath is exactly the same as the compile-time classpath. +- Enable method-local optimizations with `-opt:local`. This option is safe for binary compatibility, but typically doesn't improve performance on its own. +- Enable inlining in addition to method-local optimizations with `-opt:inline:[PATTERN]`. + - Don't inline from your dependencies when publishing a library, it breaks binary compatibility. Use `-opt:inline:my.package.**` to only inline from packages within your library. + - When compiling an application with global inlining (`-opt:inline:**`), ensure that the run-time classpath is **exactly the same** as the compile-time classpath. - The `@inline` annotation only has an effect if the inliner is enabled. It tells the inliner to always try to inline the annotated method or callsite. - Without the `@inline` annotation, the inliner generally inlines higher-order methods and forwarder methods. The main goal is to eliminate megamorphic callsites due to functions passed as argument, and to eliminate value boxing. Other optimizations are delegated to the JVM. -To learn more, read on. +Read more to learn more. ## Intro @@ -20,15 +28,17 @@ The Scala compiler has included an inliner since version 2.0. Closure eliminatio The optimizer was re-written for Scala 2.12 to become more reliable and powerful – and to side-step the spelling issue by calling the new flag `-opt`. This post describes how to use the optimizer in Scala 2.12 and 2.13: what it does, how it works, and what are its limitations. +The options were simplified for 2.13.9, as described here. The [earlier version](https://www.lightbend.com/blog/scala-inliner-optimizer) of this article uses the traditional forms, which are still supported. + ## Motivation -Why does the Scala compiler even have a JVM bytecode optimizer? The JVM is a highly optimized runtime with a just-in-time (JIT) compiler with 19 years of tuning. It's because there are certain well-known code patterns that the JVM fails to optimize properly. These patterns are common in functional languages such as Scala. (Increasingly, Java code with lambdas is catching up and showing the same performance issues at run-time.) +Why does the Scala compiler even have a JVM bytecode optimizer? The JVM is a highly optimized runtime with a just-in-time (JIT) compiler that benefits from over two decades of tuning. It's because there are certain well-known code patterns that the JVM fails to optimize properly. These patterns are common in functional languages such as Scala. (Increasingly, Java code with lambdas is catching up and showing the same performance issues at run-time.) The two most important such patterns are "megamorphic dispatch" (also called "the inlining problem") and value boxing. If you'd like to learn more about these problems in the context of Scala, you could watch the part of [my Scala Days 2015 talk (starting at 26:13)](https://youtu.be/Ic4vQJcYwsU?t=1573). The goal of the Scala optimizer is to produce bytecode that the JVM can execute fast. It is also a goal to avoid performing any optimizations that the JVM can already do well. -This means that the Scala optimizer may become obsolete in the future, if the JIT compiler is improved to handle these patterns better. In fact, with the arrival of GraalVM, that future might be nearer than you think! We take a closer look at Graal in a follow-up post. But for now, we dive into some details about the Scala optimizer. +This means that the Scala optimizer may become obsolete in the future, if the JIT compiler is improved to handle these patterns better. In fact, with the arrival of GraalVM, that future might be nearer than you think! But for now, we dive into some details about the Scala optimizer. ## Constraints and assumptions @@ -45,7 +55,7 @@ However, even when staying within these constraints, some changes performed by t - Inlined methods disappear from call stacks. - This can lead to unexpected behaviors when using a debugger. - - Related: line numbers (stored in bytecode) are discarded when a method is inlined into a different classfile, which also impacts debugging experience. (This [could be improved](https://github.com/scala/scala-dev/issues/3).) + - Related: line numbers (stored in bytecode) are discarded when a method is inlined into a different classfile, which also impacts debugging experience. (This [could be improved](https://github.com/scala/scala-dev/issues/3) and is expected to [progress](https://github.com/lampepfl/dotty/pull/11492).) - Inlining a method can delay class loading of the class where the method is defined. @@ -73,7 +83,7 @@ However, even when staying within these constraints, some changes performed by t ## Binary compatibility -Scala minor releases are binary compatible with each other, for example 2.12.6 and 2.12.7. The same is true for many libraries in the Scala ecosystem. These binary compatibility promises are the main reason for the Scala optimizer not to be enabled everywhere. +Scala minor releases are binary compatible with each other, for example, 2.12.6 and 2.12.7. The same is true for many libraries in the Scala ecosystem. These binary compatibility promises are the main reason for the Scala optimizer not to be enabled everywhere. The reason is that inlining a method from one class into another changes the (binary) interface that is accessed: @@ -112,25 +122,25 @@ The reason for this restriction is that dependency management tools like sbt wil The compiler flag for enabling the optimizer is `-opt`. Running `scalac -opt:help` shows how to use the flag. -By default (without any compiler flags, or with `-opt:l:default`), the Scala compiler eliminates unreachable code, but does not run any other optimizations. +By default (without any compiler flags, or with `-opt:default`), the Scala compiler eliminates unreachable code, but does not run any other optimizations. -`-opt:l:method` enables all method-local optimizations, for example: +`-opt:local` enables all method-local optimizations, for example: - Elimination of code that loads unused values - Rewriting of null and `isInstanceOf` checks whose result is known at compile-time - Elimination of value boxes like `java.lang.Integer` or `scala.runtime.DoubleRef` that are created within a method and don't escape it -Individual optimizations can be disabled. For example, `-opt:l:method,-nullness-tracking` disables nullness optimizations. +Individual optimizations can be disabled. For example, `-opt:local,-nullness-tracking` disables nullness optimizations. Method-local optimizations alone typically don't have any positive effect on performance, because source code usually doesn't have unnecessary boxing or null checks. However, local optimizations can often be applied after inlining, so it's really the combination of inlining and local optimizations that can improve program performance. -`-opt:l:inline` enables inlining in addition to method-local optimizations. However, to avoid unexpected binary compatibility issues, we also need to tell the compiler which code it is allowed to inline. This is done with the `-opt-inline-from` compiler flag. Examples: +`-opt:inline` enables inlining in addition to method-local optimizations. However, to avoid unexpected binary compatibility issues, we also need to tell the compiler which code it is allowed to inline. This is done by specifying a pattern after the option to select packages, classes, and methods for inlining. Examples: -- `-opt-inline-from:my.library.**` enables inlining from any class defined in package `my.library`, or in any of its sub-packages. Inlining within a library is safe for binary compatibility, so the resulting binary can be published. It will still work correctly even if one of its dependencies is updated to a newer minor version in the run-time classpath. -- `-opt-inline-from:` enables inlining from the set of source files being compiled in the current compiler invocation. This option can also be used for compiling libraries. If the source files of a library are split up across multiple sbt projects, inlining is only done within each project. Note that in an incremental compilation, inlining would only happen within the sources being re-compiled – but in any case, it is recommended to only enable the optimizer in CI and release builds (and to run `clean` before building). -- `-opt-inline-from:**` allows inlining from every class, including the JDK. This option enables full optimization when compiling an application. To avoid binary incompatibilities, it is mandatory to ensure that the run-time classpath is identical to the compile-time classpath, including the Java standard library. +- `-opt:inline:my.library.**` enables inlining from any class defined in package `my.library`, or in any of its sub-packages. Inlining within a library is safe for binary compatibility, so the resulting binary can be published. It will still work correctly even if one of its dependencies is updated to a newer minor version in the run-time classpath. +- `-opt-inline:`, where the pattern is the literal string ``, enables inlining from the set of source files being compiled in the current compiler invocation. This option can also be used for compiling libraries. If the source files of a library are split up across multiple sbt projects, inlining is only done within each project. Note that in an incremental compilation, inlining would only happen within the sources being re-compiled – but in any case, it is recommended to only enable the optimizer in CI and release builds (and to run `clean` before building). +- `-opt:inline:**` allows inlining from every class, including the JDK. This option enables full optimization when compiling an application. To avoid binary incompatibilities, it is mandatory to ensure that the run-time classpath is identical to the compile-time classpath, including the Java standard library. -Running `scalac -opt-inline-from:help` explains how to use the compiler flag. +Running `scalac -opt:help` explains how to use the compiler flag. ### Inliner heuristics and `@inline` @@ -163,11 +173,11 @@ Finally, note that the `@inline` annotation only has an effect when the inliner The inliner can issue warnings when callsites cannot be inlined. By default, these warnings are not issued individually, but only as a summary at the end of compilation (similar to deprecation warnings). ``` -$> scalac Test.scala -opt:l:inline '-opt-inline-from:**' +$> scalac Test.scala '-opt:inline:**' warning: there was one inliner warning; re-run enabling -opt-warnings for details, or try -help one warning found -$> scalac Test.scala -opt:l:inline '-opt-inline-from:**' -opt-warnings +$> scalac Test.scala '-opt:inline:**' -Wopt Test.scala:3: warning: C::f()I is annotated @inline but could not be inlined: The method is not final and may be overridden. def t = f @@ -187,11 +197,11 @@ object T extends C { } ``` -The `-opt-warnings` flag has more configurations. With `-opt-warnings:_`, a warning is issued for every callsite that is selected by the heuristic but cannot be inlined. See also `-opt-warnings:help`. +The `-Wopt` flag has more configurations. With `-Wopt:_`, a warning is issued for every callsite that is selected by the heuristic but cannot be inlined. See also `-Wopt:help`. ### Inliner log -If you're curious (or maybe even skeptical) about what the inliner is doing to your code, you can use the `-Yopt-log-inline` flag to produce a trace of the inliner's work: +If you're curious (or maybe even skeptical) about what the inliner is doing to your code, you can use the `-Vinline` verbose flag to produce a trace of the inliner's work: ```scala package my.project @@ -201,7 +211,7 @@ class C { ``` ``` -$> scalac Test.scala -opt:l:inline '-opt-inline-from:**' -Yopt-log-inline my/project/C.f +$> scalac Test.scala '-opt:inline:**' -Vinline my/project/C.f Inlining into my/project/C.f inlined scala/Predef$.intArrayOps (the callee is annotated `@inline`). Before: 15 ins, after: 30 ins. inlined scala/collection/ArrayOps$.map$extension (the callee is a higher-order method, the argument for parameter (evidence$6: Function1) is a function literal). Before: 30 ins, after: 94 ins. @@ -211,11 +221,3 @@ Inlining into my/project/C.f inlined my/project/C.$anonfun$f$1 (the callee is a synthetic forwarder method). Before: 654 ins, after: 666 ins. inlined scala/runtime/BoxesRunTime.boxToInteger (the callee is a forwarder method with boxing adaptation). Before: 666 ins, after: 674 ins. ``` - -Explaining the details here is out of scope for this post. We defer this discussion to a follow-up post that will explain the internals of the Scala optimizer in more detail. - -## Summary - -The goal of this article was to explain why the Scala optimizer exists and give a rough explanation what it can and cannot do. It also showed how to configure and use the optimizer in your project. - -In the next post, we will go into detail about how the optimizer works, what transformations are applied, and how they work together. We will also measure performance improvements that the optimizer can bring. Finally, we will look at related projects, dive a little more into the history of the optimizer, and discuss ideas for the future. From 3925a6475dfe3ff6ef0d25c319663d1117df31a9 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sat, 26 Feb 2022 02:56:40 +0000 Subject: [PATCH 0582/1870] Bump nokogiri from 1.12.5 to 1.13.3 Bumps [nokogiri](https://github.com/sparklemotion/nokogiri) from 1.12.5 to 1.13.3. - [Release notes](https://github.com/sparklemotion/nokogiri/releases) - [Changelog](https://github.com/sparklemotion/nokogiri/blob/main/CHANGELOG.md) - [Commits](https://github.com/sparklemotion/nokogiri/compare/v1.12.5...v1.13.3) --- updated-dependencies: - dependency-name: nokogiri dependency-type: indirect ... Signed-off-by: dependabot[bot] --- Gemfile.lock | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/Gemfile.lock b/Gemfile.lock index 0bbe4414f9..5b52d7697a 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -54,9 +54,9 @@ GEM rb-fsevent (~> 0.10, >= 0.10.3) rb-inotify (~> 0.9, >= 0.9.10) mercenary (0.3.6) - mini_portile2 (2.6.1) - nokogiri (1.12.5) - mini_portile2 (~> 2.6.1) + mini_portile2 (2.8.0) + nokogiri (1.13.3) + mini_portile2 (~> 2.8.0) racc (~> 1.4) nokogumbo (2.0.2) nokogiri (~> 1.8, >= 1.8.4) @@ -64,7 +64,7 @@ GEM pathutil (0.16.2) forwardable-extended (~> 2.6) public_suffix (4.0.6) - racc (1.5.2) + racc (1.6.0) rainbow (3.0.0) rb-fsevent (0.11.0) rb-inotify (0.10.1) From 582e6c017de371609f54545b0e340fe4287cc22f Mon Sep 17 00:00:00 2001 From: Seth Tisue Date: Wed, 2 Mar 2022 07:06:41 -0800 Subject: [PATCH 0583/1870] Ruby 2.6 (was 2.5) --- .github/workflows/build.yml | 2 +- Dockerfile | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index f9cca5b785..808f492a7d 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -8,7 +8,7 @@ jobs: - name: Set up Ruby uses: ruby/setup-ruby@v1 with: - ruby-version: 2.5.8 + ruby-version: 2.6.9 bundler-cache: true - name: Set up coursier uses: coursier/setup-action@v1.2.0-M2 diff --git a/Dockerfile b/Dockerfile index b972fe1c24..2fe3d70737 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,4 +1,4 @@ -FROM ruby:2.5 +FROM ruby:2.6 RUN gem install bundler jekyll From b33f3a7d286db7aa3d3eb481b1997b5d1ce7388b Mon Sep 17 00:00:00 2001 From: Som Snytt Date: Thu, 3 Mar 2022 02:46:11 -0800 Subject: [PATCH 0584/1870] Review and corrections --- _data/overviews.yml | 2 +- _overviews/compiler-options/optimizer.md | 10 +++++----- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/_data/overviews.yml b/_data/overviews.yml index ae56e9b5e9..a8bc055f7c 100644 --- a/_data/overviews.yml +++ b/_data/overviews.yml @@ -263,7 +263,7 @@ by: Lukas Rytz and Andrew Marki icon: cog url: "compiler-options/optimizer.html" - description: "The compiler can perform various optimizations as specified by compiler options." + description: "The compiler can perform various optimizations." - category: Legacy diff --git a/_overviews/compiler-options/optimizer.md b/_overviews/compiler-options/optimizer.md index 936967e8a0..cad7255280 100644 --- a/_overviews/compiler-options/optimizer.md +++ b/_overviews/compiler-options/optimizer.md @@ -3,9 +3,9 @@ layout: singlepage-overview title: Optimizer --- -**[Lukas Rytz](https://github.com/lrytz) (November 7, 2018)** +**[Lukas Rytz](https://github.com/lrytz) (2018)** -**[Andrew Marki](https://github.com/som-snytt) (February 29, 2022)** +**[Andrew Marki](https://github.com/som-snytt) (2022)** # The Scala 2.12 / 2.13 Inliner and Optimizer @@ -114,7 +114,7 @@ This means that `m` can be inlined into classes other than `C`, since the result Even more trivially, assume that method `m` was buggy and is changed to `def m = if (fullMoon) 1 else x` in a minor release. Normally, it would be enough for a user to put the new version on the classpath. However, if the old version of `c.m` was inlined at compile-time, having the new version of C on the run-time classpath would not fix the bug. -In order to safely use the Scala optimizer, users need to make sure that the compile-time and run-time classpaths are identical. This has a far-reaching consequence for library developers: **libraries that are published to be consumed by other projects should not inline code from the classpath**. The inliner can be configured to inline code from the library itself using `-opt-inline-from:my.package.**`. +In order to safely use the Scala optimizer, users need to make sure that the compile-time and run-time classpaths are identical. This has a far-reaching consequence for library developers: **libraries that are published to be consumed by other projects should not inline code from the classpath**. The inliner can be configured to inline code from the library itself using `-opt:inline:my.package.**`. The reason for this restriction is that dependency management tools like sbt will often pick newer versions of transitive dependencies. For example, if library `A` depends on `core-1.1.1`, `B` depends on `core-1.1.2` and the application depends on both `A` and `B`, the build tool will put `core-1.1.2` on the classpath. If code from `core-1.1.1` was inlined into `A` at compile-time, it might break at run-time due to a binary incompatibility. @@ -137,7 +137,7 @@ Method-local optimizations alone typically don't have any positive effect on per `-opt:inline` enables inlining in addition to method-local optimizations. However, to avoid unexpected binary compatibility issues, we also need to tell the compiler which code it is allowed to inline. This is done by specifying a pattern after the option to select packages, classes, and methods for inlining. Examples: - `-opt:inline:my.library.**` enables inlining from any class defined in package `my.library`, or in any of its sub-packages. Inlining within a library is safe for binary compatibility, so the resulting binary can be published. It will still work correctly even if one of its dependencies is updated to a newer minor version in the run-time classpath. -- `-opt-inline:`, where the pattern is the literal string ``, enables inlining from the set of source files being compiled in the current compiler invocation. This option can also be used for compiling libraries. If the source files of a library are split up across multiple sbt projects, inlining is only done within each project. Note that in an incremental compilation, inlining would only happen within the sources being re-compiled – but in any case, it is recommended to only enable the optimizer in CI and release builds (and to run `clean` before building). +- `-opt:inline:`, where the pattern is the literal string ``, enables inlining from the set of source files being compiled in the current compiler invocation. This option can also be used for compiling libraries. If the source files of a library are split up across multiple sbt projects, inlining is only done within each project. Note that in an incremental compilation, inlining would only happen within the sources being re-compiled – but in any case, it is recommended to only enable the optimizer in CI and release builds (and to run `clean` before building). - `-opt:inline:**` allows inlining from every class, including the JDK. This option enables full optimization when compiling an application. To avoid binary incompatibilities, it is mandatory to ensure that the run-time classpath is identical to the compile-time classpath, including the Java standard library. Running `scalac -opt:help` explains how to use the compiler flag. @@ -174,7 +174,7 @@ The inliner can issue warnings when callsites cannot be inlined. By default, the ``` $> scalac Test.scala '-opt:inline:**' -warning: there was one inliner warning; re-run enabling -opt-warnings for details, or try -help +warning: there was one inliner warning; re-run enabling -Wopt for details, or try -help one warning found $> scalac Test.scala '-opt:inline:**' -Wopt From 5ab2ddda467ac4b3228338002648c0315da28269 Mon Sep 17 00:00:00 2001 From: Brian Yue Date: Sat, 5 Mar 2022 12:19:04 +0800 Subject: [PATCH 0585/1870] Fix invalid links --- _overviews/scaladoc/contribute.md | 2 +- _scala3-reference/other-new-features/explicit-nulls.md | 2 +- scala3/scaladoc.md | 6 +++--- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/_overviews/scaladoc/contribute.md b/_overviews/scaladoc/contribute.md index c902e99f97..dc0af2ce57 100644 --- a/_overviews/scaladoc/contribute.md +++ b/_overviews/scaladoc/contribute.md @@ -25,4 +25,4 @@ which covers the steps and workflow necessary work on the Scaladoc tool. As of Scala 2.13, the Scaladoc tool is maintained but not actively developed. Major development of Scaladoc will progress as a part of Dotty for Scala 3 in the -[Dottydoc](https://dotty.epfl.ch/docs/usage/dottydoc.html) tool. +[Scaladoc]({% link _overviews/scala3-scaladoc/index.md %}) tool. diff --git a/_scala3-reference/other-new-features/explicit-nulls.md b/_scala3-reference/other-new-features/explicit-nulls.md index a0dac187ae..d33d86c931 100644 --- a/_scala3-reference/other-new-features/explicit-nulls.md +++ b/_scala3-reference/other-new-features/explicit-nulls.md @@ -537,4 +537,4 @@ Our strategy for binary compatibility with Scala binaries that predate explicit and new libraries compiled without `-Yexplicit-nulls` is to leave the types unchanged and be compatible but unsound. -[More details](https://dotty.epfl.ch/docs/internals/explicit-nulls.html) +[More details](https://dotty.epfl.ch/3.0.0/docs/internals/explicit-nulls.html) diff --git a/scala3/scaladoc.md b/scala3/scaladoc.md index 69c307654e..3b8e90b7d8 100644 --- a/scala3/scaladoc.md +++ b/scala3/scaladoc.md @@ -79,7 +79,7 @@ For more information see [Guides](/scala3/guides/scaladoc/search-engine.html) Note that this feature is still in development, so it can be subject to considerable change. If you encounter a bug or have an idea for improvement, don't hesitate to create an issue on [Inkuire](https://github.com/VirtusLab/Inkuire/issues/new) or [dotty](https://github.com/lampepfl/dotty/issues/new). -[scaladoc-docstrings]: https://dotty.epfl.ch/docs/usage/scaladoc/docstrings.html -[static-documentation]: https://dotty.epfl.ch/docs/usage/scaladoc/static-site.html -[built-in-blog]: https://dotty.epfl.ch/docs/usage/scaladoc/blog.html +[scaladoc-docstrings]: {% link _overviews/scala3-scaladoc/docstrings.md %} +[static-documentation]: {% link _overviews/scala3-scaladoc/static-site.md %} +[built-in-blog]: {% link _overviews/scala3-scaladoc/blog.md %} [social-links]: https://dotty.epfl.ch/docs/usage/scaladoc/settings.html#-social-links From 821446e2eb2ed77a39e0839698f821b5e5051562 Mon Sep 17 00:00:00 2001 From: Brian Yue Date: Fri, 4 Mar 2022 22:47:25 +0800 Subject: [PATCH 0586/1870] [zh-cn] Scala 3 Features --- _zh-cn/overviews/scala3-book/introduction.md | 12 +- .../overviews/scala3-book/scala-features.md | 891 ++++++++++++++++++ 2 files changed, 897 insertions(+), 6 deletions(-) create mode 100644 _zh-cn/overviews/scala3-book/scala-features.md diff --git a/_zh-cn/overviews/scala3-book/introduction.md b/_zh-cn/overviews/scala3-book/introduction.md index 158c93df11..21d8562dc2 100644 --- a/_zh-cn/overviews/scala3-book/introduction.md +++ b/_zh-cn/overviews/scala3-book/introduction.md @@ -4,7 +4,7 @@ type: chapter description: This page begins the overview documentation of the Scala 3 language. num: 1 previous-page: -next-page: +next-page: scala-features scala3: true partof: scala3-book @@ -14,13 +14,13 @@ permalink: "/zh-cn/scala3/book/:title.html" --- 欢迎阅读《Scala 3》一书。 -本书的目标是提供对Scala语言的非正式介绍,并以相对轻松的方式涉及所有的Scala主题。 -若您在阅读本书时想了解有关特定功能的更多信息,可以随时参阅[_参考文档_][reference],其中更详细地涵盖了Scala语言的许多新特性。 +本书的目标是提供对 Scala 语言的非正式介绍,并以相对轻松的方式涉及所有的 Scala 主题。 +若您在阅读本书时想了解有关特定功能的更多信息,可以随时参阅[_参考文档_][reference],其中更详细地涵盖了 Scala 语言的许多新特性。 -在本书中,我们希望证明Scala是一种优美的、富有表现力的编程语言。它具有简洁、现代的语法,支持函数式编程(FP)和面向对象编程(OOP),并提供安全的静态类型系统。 -Scala的语法和特性都经过了重新思考与公开辩论,并在2020年更新,比以往任何时候都更清晰、更容易理解。 +在本书中,我们希望证明 Scala 是一种优美的、富有表现力的编程语言。它具有简洁、现代的语法,支持函数式编程(FP)和面向对象编程(OOP),并提供安全的静态类型系统。 +Scala 的语法和特性都经过了重新思考与公开辩论,并在2020年更新,比以往任何时候都更清晰、更容易理解。 -本书首先在[“品味Scala”部分][taste]对Scala的许多特性进行了一次“旋风之旅”。随后的章节会提供有关这些语言特性的更多详细信息。 +本书首先在[“品味 Scala”部分][taste]对 Scala 的许多特性进行了一次“旋风之旅”。随后的章节会提供有关这些语言特性的更多详细信息。 > 我们仍在撰写本书的过程中。 > 您可以[帮助我们改进][contributing] diff --git a/_zh-cn/overviews/scala3-book/scala-features.md b/_zh-cn/overviews/scala3-book/scala-features.md new file mode 100644 index 0000000000..394681e1cf --- /dev/null +++ b/_zh-cn/overviews/scala3-book/scala-features.md @@ -0,0 +1,891 @@ +--- +title: Scala 3 特性 +type: chapter +description: This page discusses the main features of the Scala 3 programming language. +num: 2 +previous-page: introduction +next-page: + +scala3: true +partof: scala3-book +overview-name: "Scala 3 — Book" +layout: multipage-overview +permalink: "/zh-cn/scala3/book/:title.html" +--- + +{% comment %} +The name _Scala_ comes from the word _scalable_, and true to that name, the Scala language is used to power busy websites and analyze huge data sets. +This section introduces the features that make Scala a scalable language. +These features are split into three sections: +{% endcomment %} + +_Scala_ 这个名字来源于 _scalable_ 一词。正如其名,Scala 语言被用于支撑高流量网站以及分析庞大的数据集。 +本节介绍了使 Scala 成为一门可扩展语言的特性。 +这些特性分为三个部分: + +{% comment %} + +- High-level language features +- Lower-level language features +- Scala ecosystem features + +{% endcomment %} + +- 高级语言特性 +- 底层语言特性 +- Scala 生态系统特性 + +{% comment %} +I think of this section as being like an “elevator pitch.” +{% endcomment %} + +{% comment %} + +## High-level features + +{% endcomment %} + +## 高级特性 + +{% comment %} +Looking at Scala from the proverbial “30,000 foot view,” you can make the following statements about it: +{% endcomment %} + +从宏观视角来看 Scala,您可以对它做出以下陈述: + +{% comment %} + +- It’s a high-level programming language +- It has a concise, readable syntax +- It’s statically-typed (but feels dynamic) +- It has an expressive type system +- It’s a functional programming (FP) language +- It’s an object-oriented programming (OOP) language +- It supports the fusion of FP and OOP +- Contextual abstractions provide a clear way to implement _term inference_ +- It runs on the JVM (and in the browser) +- It interacts seamlessly with Java code +- It’s used for server-side applications (including microservices), big data applications, and can also be used in the browser with Scala.js + +{% endcomment %} + +- 它是一种高级编程语言 +- 它具有简明易读的语法 +- 它是静态类型的(但使人感觉是动态的) +- 它有一个表达力强大的类型系统 +- 它是一种函数式编程(FP)语言 +- 它是一种面向对象的编程(OOP)语言 +- 它支持 FP 与 OOP 的融合 +- 上下文抽象提供了一种清晰的方式来实现 _表达式推断_ +- 它在 JVM(和浏览器)上运行 +- 它与 Java 代码无缝交互 +- 它可被用于服务器端应用(包括微服务)、大数据应用,也可以在浏览器中与 Scala.js 共同使用 + +{% comment %} +The following sections take a quick look at these features. +{% endcomment %} + +以下部分将对这些特性进行简要介绍。 + +{% comment %} + +### A high-level language + +{% endcomment %} + +### 一门高级语言 + +{% comment %} +Scala is considered a high-level language in at least two ways. +First, like Java and many other modern languages, you don’t deal with low-level concepts like pointers and memory management. +{% endcomment %} + +Scala 至少在两个方面被认为是一门高级语言。 +首先,像 Java 和许多其他现代语言一样,您不需要与指针和内存管理等底层概念打交道。 + +{% comment %} +Second, with the use of lambdas and higher-order functions, you write your code at a very high level. +As the functional programming saying goes, in Scala you write _what_ you want, not _how_ to achieve it. +That is, we don’t write imperative code like this: +{% endcomment %} + +其次,通过使用 lambda 与高阶函数,您可以在非常高的层次上编写代码。 +正如函数式编程的说法,在 Scala 中,您编写您想要 _“什么”_,而不是 _“如何”_ 去实现它。 +也就是说,我们不会像这样编写命令式代码: + +```scala +def double(ints: List[Int]): List[Int] = { + val buffer = new ListBuffer[Int]() + for (i <- ints) { + buffer += i * 2 + } + buffer.toList +} + +val newNumbers = double(oldNumbers) +``` + +{% comment %} +That code instructs the compiler what to do on a step-by-step basis. +Instead, we write high-level, functional code using higher-order functions and lambdas like this to compute the same result: +{% endcomment %} + +这段代码指示编译器逐步执行特定操作。 +相反,我们使用像这样的高阶函数与 lambda 来编写高层次的函数式代码以计算出相同的结果: + +```scala +val newNumbers = oldNumbers.map(_ * 2) +``` + +{% comment %} +As you can see, that code is much more concise, easier to read, and easier to maintain. +{% endcomment %} + +如您所见,该代码更简洁、更容易阅读且更易于维护。 + +{% comment %} + +### Concise syntax + +{% endcomment %} + +### 简明的语法 + +{% comment %} +Scala has a concise, readable syntax. +For instance, variables are created concisely, and their types are clear: +{% endcomment %} + +Scala 具有简明易读的语法。例如,变量的创建十分简洁,其类型也很明确。 + +```scala +val nums = List(1,2,3) +val p = Person("Martin", "Odersky") +``` + +{% comment %} +Higher-order functions and lambdas make for concise code that’s readable: +{% endcomment %} + +高阶函数与 lambda 使代码简明易读: + +```scala +nums.map(i => i * 2) // long form +nums.map(_ * 2) // short form + +nums.filter(i => i > 1) +nums.filter(_ > 1) +``` + +{% comment %} +Traits, classes, and methods are defined with a clean, light syntax: +{% endcomment %} + +特质(Traits)、类(Class)和方法(Method)都是用简洁、轻巧的语法定义的。 + +```scala +trait Animal: + def speak(): Unit + +trait HasTail: + def wagTail(): Unit + +class Dog extends Animal, HasTail: + def speak() = println("Woof") + def wagTail() = println("⎞⎜⎛ ⎞⎜⎛") +``` + +{% comment %} +Studies have shown that the time a developer spends _reading_ code to _writing_ code is at least a 10:1 ratio, so writing code that is concise _and_ readable is important. +{% endcomment %} + +研究表明,开发人员花在 _阅读_ 代码和 _编写_ 代码上的时间比例至少为 10:1。因此,编写简洁 _并_ 易读的代码非常重要。 + +{% comment %} + +### A dynamic feel + +{% endcomment %} + +### 动态感受 + +{% comment %} +Scala is a statically-typed language, but thanks to its type inference capabilities it feels dynamic. +All of these expressions look like a dynamically-typed language like Python or Ruby, but they’re all Scala: +{% endcomment %} + +Scala 是一种静态类型的语言,但由于其类型推断能力,它使人感觉是动态的。所有这些表达式看起来都像 Python 或 Ruby 这样的动态类型语言代码,但其实它们都是 Scala 代码: + +```scala +val s = "Hello" +val p = Person("Al", "Pacino") +val sum = ints.reduceLeft(_ + _) +val y = for i <- nums yield i * 2 +val z = nums.filter(_ > 100) + .filter(_ < 10_000) + .map(_ * 2) +``` + +{% comment %} +As Heather Miller states, Scala is considered to be a [strong, statically-typed language](https://heather.miller.am/blog/types-in-scala.html), and you get all the benefits of static types: +{% endcomment %} + +正如 Heather Miller 所说,Scala 被认为是一种[强静态类型语言](https://heather.miller.am/blog/types-in-scala.html)。您可以获得静态类型的全部益处: + +{% comment %} + +- Correctness: you catch most errors at compile-time +- Great IDE support + - Reliable code completion + - Catching errors at compile-time means catching mistakes as you type + - Easy and reliable refactoring +- You can refactor your code with confidence +- Method type declarations tell readers what the method does, and help serve as documentation +- Scalability and maintainability: types help ensure correctness across arbitrarily large applications and development teams +- Strong typing in combination with excellent inference enables mechanisms like [contextual abstraction]({{ site.scala3ref }}/contextual.html) that allows you to omit boilerplate code. Often, this boilerplate code can be inferred by the compiler, based on type definitions and a given context. + +{% endcomment %} + +- 正确性:您可以在编译时捕获大多数错误 +- 强大的 IDE 支持 + - 可靠的代码补全 + - 在编译时捕获错误意味着在您打字时捕获错误 + - 简单而可靠的重构 +- 您可以自信地重构您的代码 +- 方法类型声明告诉读者该方法的作用,并作为文档提供帮助 +- 可扩展性与可维护性:类型有助于在任意大小的应用程序与开发团队中确保正确性 +- 强类型结合优秀的推断能力可实现[上下文抽象]({{ site.scala3ref }}/contextual.html)等机制,这允许您省略样板代码。通常,这些样板代码可由编译器根据类型定义及给定的上下文推断出来。 + +{% comment %} +In that list: +- 'Correctness' and 'Scalability' come from Heather Miller’s page +- the IDE-related quotes in this section come from the Scala.js website: + - catch most errors in the IDE + - Easy and reliable refactoring + - Reliable code completion +{% endcomment %} + +{% comment %} + +### Expressive type system + +{% endcomment %} + +### 富有表现力的类型系统 + +{% comment %} +- this text comes from the current [ScalaTour](https://docs.scala-lang.org/tour/tour-of-scala.html). +- TODO: all of the URLs will have to be updated + +- i removed these items until we can replace them: +* [Compound types](/tour/compound-types.html) +* [conversions](/tour/implicit-conversions.html) +* [Explicitly typed self references](/tour/self-types.html) +{% endcomment %} + +{% comment %} +Scala’s type system enforces, at compile-time, that abstractions are used in a safe and coherent manner. +In particular, the type system supports: +{% endcomment %} + +Scala 的类型系统在编译时强制要求以安全与连贯的方式使用抽象概念。特别是,该类型系统支持: + +{% comment %} +- [Inferred types]({% link _overviews/scala3-book/types-inferred.md %}) +- [Generic classes]({% link _overviews/scala3-book/types-generics.md %}) +- [Variance annotations]({% link _overviews/scala3-book/types-variance.md %}) +- [Upper](/tour/upper-type-bounds.html) and [lower](/tour/lower-type-bounds.html) type bounds +- [Polymorphic methods](/tour/polymorphic-methods.html) +- [Intersection types]({% link _overviews/scala3-book/types-intersection.md %}) +- [Union types]({% link _overviews/scala3-book/types-union.md %}) +- [Type lambdas]({{ site.scala3ref }}/new-types/type-lambdas.html) +- [`given` instances and `using` clauses]({% link _overviews/scala3-book/ca-given-using-clauses.md %}) +- [Extension methods]({% link _overviews/scala3-book/ca-extension-methods.md %}) +- [Type classes]({% link _overviews/scala3-book/ca-type-classes.md %}) +- [Multiversal equality]({% link _overviews/scala3-book/ca-multiversal-equality.md %}) +- [Opaque type aliases]({% link _overviews/scala3-book/types-opaque-types.md %}) +- [Open classes]({{ site.scala3ref }}/other-new-features/open-classes.html) +- [Match types]({{ site.scala3ref }}/new-types/match-types.html) +- [Dependent function types]({{ site.scala3ref }}/new-types/dependent-function-types.html) +- [Polymorphic function types]({{ site.scala3ref }}/new-types/polymorphic-function-types.html) +- [Context bounds]({{ site.scala3ref }}/contextual/context-bounds.html) +- [Context functions]({{ site.scala3ref }}/contextual/context-functions.html) +- [Inner classes](/tour/inner-classes.html) and [abstract type members](/tour/abstract-type-members.html) as object members +{% endcomment %} + +- [推断类型]({% link _overviews/scala3-book/types-inferred.md %}) +- [泛型类]({% link _overviews/scala3-book/types-generics.md %}) +- [型变]({% link _overviews/scala3-book/types-variance.md %}) +- [类型上界](/tour/upper-type-bounds.html) 与 [类型下界](/tour/lower-type-bounds.html) +- [多态方法](/tour/polymorphic-methods.html) +- [交叉类型]({% link _overviews/scala3-book/types-intersection.md %}) +- [联合类型]({% link _overviews/scala3-book/types-union.md %}) +- [类型 Lambda]({{ site.scala3ref }}/new-types/type-lambdas.html) +- [`given` 实例与 `using` 子句]({% link _overviews/scala3-book/ca-given-using-clauses.md %}) +- [扩展方法]({% link _overviews/scala3-book/ca-extension-methods.md %}) +- [类型类]({% link _overviews/scala3-book/ca-type-classes.md %}) +- [多元相等]({% link _overviews/scala3-book/ca-multiversal-equality.md %}) +- [不透明类型别名]({% link _overviews/scala3-book/types-opaque-types.md %}) +- [开放类]({{ site.scala3ref }}/other-new-features/open-classes.html) +- [匹配类型]({{ site.scala3ref }}/new-types/match-types.html) +- [依赖函数类型]({{ site.scala3ref }}/new-types/dependent-function-types.html) +- [多态函数类型]({{ site.scala3ref }}/new-types/polymorphic-function-types.html) +- [上下文边界]({{ site.scala3ref }}/contextual/context-bounds.html) +- [上下文函数]({{ site.scala3ref }}/contextual/context-functions.html) +- 作为对象成员的[内部类](/tour/inner-classes.html) 与 [抽象类型](/tour/abstract-type-members.html) + +{% comment %} +In combination, these features provide a powerful basis for the safe reuse of programming abstractions and for the type-safe extension of software. +{% endcomment %} + +通过结合使用,这些特性为编程抽象的安全重用及软件的类型安全扩展提供了强大的基础。 + +{% comment %} + +### A functional programming language + +{% endcomment %} + +### 一门函数式编程语言 + +{% comment %} +Scala is a functional programming (FP) language, meaning: +{% endcomment %} + +Scala 是一门函数式编程(FP)语言,也就是说: + +{% comment %} + +- Functions are values, and can be passed around like any other value +- Higher-order functions are directly supported +- Lambdas are built in +- Everything in Scala is an expression that returns a value +- Syntactically it’s easy to use immutable variables, and their use is encouraged +- It has a wealth of immutable collection classes in the standard library +- Those collection classes come with dozens of functional methods: they don’t mutate the collection, but instead return an updated copy of the data + +{% endcomment %} + +- 函数是值,可以像任何其他值一样被传递 +- 直接支持高阶函数 +- 原生地支持 Lambda +- Scala 中的一切都是会返回值的表达式 +- 从语法上来说,使用不可变变量很容易并且此行为被鼓励 +- 在标准库中有大量的不可变集合类 +- 这些集合类带有许多函数式方法:它们不改变集合本身,而是返回数据的更新副本 + +{% comment %} + +### An object-oriented language + +{% endcomment %} + +### 一门面向对象语言 + +{% comment %} +Scala is an object-oriented programming (OOP) language. +Every value is an instance of a class and every “operator” is a method. +{% endcomment %} + +Scala 是一门面向对象编程(OOP)语言。 +每个值都是一个类的实例,每个“运算符”都是一个方法。 + +{% comment %} +In Scala, all types inherit from a top-level class `Any`, whose immediate children are `AnyVal` (_value types_, such as `Int` and `Boolean`) and `AnyRef` (_reference types_, as in Java). +This means that the Java distinction between primitive types and boxed types (e.g. `int` vs. `Integer`) isn’t present in Scala. +Boxing and unboxing is completely transparent to the user. +{% endcomment %} + +在 Scala 中,所有类型都继承自顶层类 `Any`,其直接子类是 `AnyVal`(_值类型_,例如 `Int` 与 `Boolean`)和 `AnyRef`(_引用类型_,与 Java 中相同)。 +这意味着 Scala 中不存在 Java 中原始类型和包装类型的区别(例如 `int` 与 `Integer`)。 +装箱与拆箱对用户来说是完全透明的。 + +{% comment %} +- AnyRef above is wrong in case of strict null checking, no? On the other hand, maybe too much information to state this here +- probably not worth to mention (too advanced at this point) there is AnyKind +- Add the “types hierarchy” image here? +{% endcomment %} + +{% comment %} + +### Supports FP/OOP fusion + +{% endcomment %} + +### 支持 FP 与 OOP 融合 + +{% comment %} +NOTE: This text in the first line comes from this slide: https://twitter.com/alexelcu/status/996408359514525696 +{% endcomment %} + +{% comment %} +The essence of Scala is the fusion of functional programming and object-oriented programming in a typed setting: + +- Functions for the logic +- Objects for the modularity + +As [Martin Odersky has stated](https://jaxenter.com/current-state-scala-odersky-interview-129495.html), “Scala was designed to show that a fusion of functional and object-oriented programming is possible and practical.” +{% endcomment %} + +Scala 的本质是函数式编程和面向对象编程的融合: + +- 函数用于代表逻辑 +- 对象用于模块化 + +正如 [Martin Odersky 所说](https://jaxenter.com/current-state-scala-odersky-interview-129495.html),“Scala 旨在表明函数式编程与面向对象编程的融合是切实可行的。” + +{% comment %} + +### Term inference, made clearer + +{% endcomment %} + +### 表达式推断,更加清晰 + +{% comment %} +Following Haskell, Scala was the second popular language to have some form of _implicits_. +In Scala 3 these concepts have been completely re-thought and more clearly implemented. + +The core idea is _term inference_: Given a type, the compiler synthesizes a “canonical” term that has that type. +In Scala, a context parameter directly leads to an inferred argument term that could also be written down explicitly. + +Use cases for this concept include implementing [type classes]({% link _overviews/scala3-book/ca-type-classes.md %}), establishing context, dependency injection, expressing capabilities, computing new types, and proving relationships between them. + +Scala 3 makes this process more clear than ever before. +Read about contextual abstractions in the [Reference documentation]({{ site.scala3ref }}/contextual.html). +{% endcomment %} + +继 Haskell 之后,Scala 是第二种具有某种形式的 _隐式_ 的流行语言。 +在 Scala 3 中,这些概念经过了重新考虑并更清晰地实现。 + +其核心思想是 _表达式推断_:给定一个类型,编译器会合成一个具有该类型的“规范”表达式。 +在 Scala 中,一个上下文参数直接导致一个被推断出的参数项的出现。该参数项也可以被显式地写出来。 + +此概念的用例包括实现[类型类]({% link _overviews/scala3-book/ca-type-classes.md %})、建立上下文、依赖注入、表达能力、计算新类型以及证明它们之间的关系。 + +Scala 3 使此过程比以往任何时候都更加清晰。 +请在[参考文档]({{ site.scala3ref }}/contextual.html)中阅读关于上下文抽象的内容。 + +{% comment %} + +### Client & server + +{% endcomment %} + +### 客户端与服务器 + +{% comment %} +Scala code runs on the Java Virtual Machine (JVM), so you get all of its benefits: + +- Security +- Performance +- Memory management +- Portability and platform independence +- The ability to use the wealth of existing Java and JVM libraries + +In addition to running on the JVM, Scala also runs in the browser with Scala.js (and open source third-party tools to integrate popular JavaScript libraries), and native executables can be built with Scala Native and GraalVM. +{% endcomment %} + +Scala 代码在 Java 虚拟机(JVM)上运行,因此您可以获得它的全部益处: + +- 安全性 +- 性能 +- 内存管理 +- 可移植性与平台独立性 +- 能够使用大量的现有 Java 和 JVM 库 + +除了在 JVM 上运行外,Scala 还可以通过 Scala.js (以及开源的第三方工具以集成流行的 JavaScript 库)在浏览器中运行,并且可以使用Scala Native 与 GraalVM 构建原生可执行文件。 + +{% comment %} + +### Seamless Java interaction + +{% endcomment %} + +### 与 Java 无缝交互 + +{% comment %} +You can use Java classes and libraries in your Scala applications, and you can use Scala code in your Java applications. +In regards to the second point, large libraries like [Akka](https://akka.io) and the [Play Framework](https://www.playframework.com) are written in Scala, and can be used in Java applications. +{% endcomment %} + +您可以在 Scala 应用程序中使用 Java 类和库,也可以在 Java 应用程序中使用 Scala 代码。 +对于第二点来说,诸如 [Akka](https://akka.io) 和 [Play Framework](https://www.playframework.com) 之类的大型库是用 Scala 编写的,并且它们可以在 Java 应用程序中使用。 + +{% comment %} +In regards to the first point, Java classes and libraries are used in Scala applications every day. +For instance, in Scala you can read files with a Java `BufferedReader` and `FileReader`: +{% endcomment %} + +对于第一点来说,Scala 应用程序中每天都会用到 Java 类和库。 +例如,在 Scala 中,您可以使用 Java 的 `BufferedReader` 和 `FileReader` 来读取文件: + +```scala +import java.io.* +val br = BufferedReader(FileReader(filename)) +// read the file with `br` ... +``` + +{% comment %} +Using Java code in Scala is generally seamless. + +Java collections can also be used in Scala, and if you want to use Scala’s rich collection class methods with them, you can convert them with just a few lines of code: +{% endcomment %} + +在 Scala 中使用 Java 代码通常是无缝衔接的。 + +Java 集合也可以在 Scala 中使用, 如果您想将 Scala 丰富的集合类方法与其一起使用,只需几行代码即可转换它们: + + +```scala +import scala.jdk.CollectionConverters.* +val scalaList: Seq[Integer] = JavaClass.getJavaList().asScala.toSeq +``` + +{% comment %} + +### Wealth of libraries + +{% endcomment %} + +### 丰富的库 + +{% comment %} +As you’ll see in the third section of this page, Scala libraries and frameworks like these have been written to power busy websites and work with huge datasets: + +1. The [Play Framework](https://www.playframework.com) is a lightweight, stateless, developer-friendly, web-friendly architecture for creating highly-scalable applications +2. [Lagom](https://www.lagomframework.com) is a microservices framework that helps you decompose your legacy monolith and build, test, and deploy entire systems of reactive microservices +3. [Apache Spark](https://spark.apache.org) is a unified analytics engine for big data processing, with built-in modules for streaming, SQL, machine learning and graph processing + +The [Awesome Scala list](https://github.com/lauris/awesome-scala) shows dozens of additional open source tools that developers have created to build Scala applications. + +In addition to server-side programming, [Scala.js](https://www.scala-js.org) is a strongly-typed replacement for writing JavaScript, with open source third-party libraries that include tools to integrate with Facebook’s React library, jQuery, and more. +{% endcomment %} + +正如您将在本页的第三部分中所看到的那样,已经有诸如此类的 Scala 库和框架被编写出来用于支撑高流量网站以及分析庞大的数据集: + +1. [Play Framework](https://www.playframework.com) 是一种用于创建高度可扩展应用程序的轻量级、无状态、对开发者及Web友好的架构 +2. [Lagom](https://www.lagomframework.com) 是一种微服务框架,可帮助您分解遗留的单体应用并构建、测试和部署整个响应式微服务系统 +3. [Apache Spark](https://spark.apache.org) 是一种面向大规模数据处理的统一分析引擎,内置流、SQL、机器学习和图形处理等模块 + +[Awesome Scala 列表](https://github.com/lauris/awesome-scala)展示了开发人员为构建 Scala 应用程序而创建的许多其他开源工具。 + +除了服务器端编程之外,[Scala.js](https://www.scala-js.org) 是一款用于编写 JavaScript 应用的强类型替代方案。其开源的第三方库包含支持与 Facebook 的 React、jQuery 及其他库等集成的工具。 + +{% comment %} +The Lower-Level Features section is like the second part of an elevator pitch. +Assuming you told someone about the previous high-level features and then they say, “Tell me more,” this is what you might tell them. +{% endcomment %} + +{% comment %} + +## Lower-level language features + +{% endcomment %} + +## 底层语言特性 + +{% comment %} +Where the previous section covered high-level features of Scala 3, it’s interesting to note that at a high level you can make the same statements about both Scala 2 and Scala 3. +A decade ago Scala started with a strong foundation of desirable features, and as you’ll see in this section, those benefits have been improved with Scala 3. +{% endcomment %} + +上一节介绍了 Scala 3 的高级特性,有趣的是,您可以从高层次上对 Scala 2 和 Scala 3 作出相同的表述。 +十年前,Scala 就为各种理想特性打下了坚实基础,正如您在本节中即将看到的那样,这些效益在 Scala 3 中得到了提高。 + +{% comment %} +At a “sea level” view of the details---i.e., the language features programmers use everyday---Scala 3 has significant advantages over Scala 2: + +- The ability to create algebraic data types (ADTs) more concisely with enums +- An even more concise and readable syntax: + - The “quiet” control structure syntax is easier to read + - Optional braces + - Fewer symbols in the code creates less visual noise, making it easier to read + - The `new` keyword is generally no longer needed when creating class instances + - The formality of package objects have been dropped in favor of simpler “top level” definitions +- A grammar that’s more clear: + - Multiple different uses of the `implicit` keyword have been removed; those uses are replaced by more obvious keywords like `given`, `using`, and `extension`, focusing on intent over mechanism (see the [Givens][givens] section for details) + - [Extension methods][extension] replace implicit classes with a clearer and simpler mechanism + - The addition of the `open` modifier for classes makes the developer intentionally declare that a class is open for modification, thereby limiting ad-hoc extensions to a code base + - [Multiversal equality][multiversal] rules out nonsensical comparisons with `==` and `!=` (i.e., attempting to compare a `Person` to a `Planet`) + - Macros are implemented much more easily + - Union and intersection offer a flexible way to model types + - Trait parameters replace and simplify early initializers + - [Opaque type aliases][opaque_types] replace most uses of value classes, while guaranteeing the absence of boxing + - Export clauses provide a simple and general way to express aggregation, which can replace the previous facade pattern of package objects inheriting from classes + - The procedure syntax has been dropped, and the varargs syntax has been changed, both to make the language more consistent + - The `@infix` annotation makes it obvious how you want a method to be applied + - The [`@targetName`]({{ site.scala3ref }}/other-new-features/targetName.html) method annotation defines an alternate name for the method, improving Java interoperability, and letting you provide aliases for symbolic operators + +It would take too much space to demonstrate all of those features here, but follow the links in the items above to see those features in action. +All of these features are discussed in detail in the *New*, *Changed*, and *Dropped* features pages in the [Overview documentation][reference]. +{% endcomment %} + +以小见大,从程序员日常使用的语言特性来看,Scala 3 比 Scala 2 具有显著优势: + +- 可以用枚举更简洁地创建代数数据类型(ADT) +- 更简明易读的语法: + - “干净”的控制结构语法更容易阅读 + - 可选的大括号 + - 代码中包含更少的符号,因此会产生更少的视觉噪音,使其更容易阅读 + - 创建类实例时一般不再需要 `new` 关键字 + - 弃用了包对象,转而使用更简单的“顶层”定义 +- 更清晰的语法: + - 移除了 `implicit` 关键字的多种不同用法,这些用法被更显而易见的关键字所取代,如 `given`、 `using`、和 `extension`,以此将关注重点放在意图而不是机制上(详见 [Givens][givens] 部分) + - [扩展方法][extension]通过更加清晰简单的机制取代了隐式类 + - 为类添加了 `open` 修饰符,使开发者能够有意识地声明一个类是可以被修改的,从而限制对代码库的临时扩展 + - [多元相等][multiversal]排除了用 `==` 和 `!=` 进行无意义的比较(即试图将 `Person` 与 `Planet` 进行比较) + - 宏的实现变得更加容易 + - 联合与交叉提供了一种灵活的方式以建模类型 + - 特质参数取代并简化了早期初始化器 + - [不透明类型别名][opaque_types]取代了值类的大多数用途,并确保不进行装箱 + - 导出子句提供了一种简单而通用的方式来表现聚合,它可以取代之前继承自类的包对象的外观模式 + - 删除了过程语法并更改了可变参数语法,这增加了语言一致性 + - `@infix` 注解使得您想让一个方法被如何应用更加显而易见 + - [`@targetName`]({{ site.scala3ref }}/other-new-features/targetName.html) 方法注解为方法定义了一个候补名称。这提高了与 Java 的互操作性,并允许您为符号运算符提供别名 + +在这里演示所有这些特性会占用太多空间,请通过上述内容中的链接来查看这些特性的实际效果。 +所有这些特性都在[概述文档][reference]的*新特性*、*变更的特性*、与*删除的特性*等页面中进行了详细讨论。 + +{% comment %} +CHECKLIST OF ALL ADDED, UPDATED, AND REMOVED FEATURES +===================================================== + +New Features +------------ +- trait parameters +- super traits +- creator applications +- export clauses +- opaque type aliases +- open classes +- parameter untupling +- kind polymorphism +- tupled function +- threadUnsafe annotation +- new control syntax +- optional braces (experimental) +- explicit nulls +- safe initialization + +CHANGED FEATURES +---------------- +- numeric literals +- structural types +- operators +- wildcard types +- type checking +- type inference +- implicit resolution +- implicit conversions +- overload resolution +- match expressions +- vararg patterns +- pattern bindings +- pattern matching +- eta expansion +- compiler plugins +- lazy vals initialization +- main functions + +DROPPED FEATURES +---------------- +- DelayedInit +- macros +- existential types +- type projection +- do/while syntax +- procedure syntax +- package objects +- early initializers +- class shadowing +- limit 22 +- XML literals +- symbol literals +- auto-application +- weak conformance +- nonlocal returns +- [this] qualifier + - private[this] and protected[this] access modifiers are deprecated + and will be phased out +{% endcomment %} + + +{% comment %} + +## Scala ecosystem + +{% endcomment %} + +## Scala 生态系统 + +{% comment %} +TODO: I didn’t put much work into this section because I don’t know if you want + to add many tools because (a) that can be seen as an endorsement and + (b) it creates a section that can need more maintenance than average + since tool popularity can wax and wane. One way to avoid the first + point is to base the lists on Github stars and activity. +{% endcomment %} + +{% comment %} +Scala has a vibrant ecosystem, with libraries and frameworks for every need. +The [“Awesome Scala” list](https://github.com/lauris/awesome-scala) provides a list of hundreds of open source projects that are available to Scala developers, and the [Scaladex](https://index.scala-lang.org) provides a searchable index of Scala libraries. +Some of the more notable libraries are listed below. +{% endcomment %} + +Scala 拥有一个充满活力的生态系统,有满足各种需求的库和框架。 +[Awesome Scala 列表](https://github.com/lauris/awesome-scala)提供了数百个可供 Scala 开发者使用的开源项目,[Scaladex](https://index.scala-lang.org) 则提供了 Scala 库的可搜索索引。 +以下列出了一些比较著名的库: + +{% comment %} + +### Web development + +{% endcomment %} + +### Web 开发 + +{% comment %} + +- The [Play Framework](https://www.playframework.com) followed the Ruby on Rails model to become a lightweight, stateless, developer-friendly, web-friendly architecture for highly-scalable applications +- [Scalatra](https://scalatra.org) is a tiny, high-performance, async web framework, inspired by Sinatra +- [Finatra](https://twitter.github.io/finatra) is Scala services built on TwitterServer and Finagle +- [Scala.js](https://www.scala-js.org) is a strongly-typed replacement for JavaScript that provides a safer way to build robust front-end web applications +- [ScalaJs-React](https://github.com/japgolly/scalajs-react) lifts Facebook’s React library into Scala.js, and endeavours to make it as type-safe and Scala-friendly as possible +- [Lagom](https://www.lagomframework.com) is a microservices framework that helps you decompose your legacy monolith and build, test, and deploy entire systems of Reactive microservices +- +{% endcomment %} + +- [Play Framework](https://www.playframework.com) 遵循 Ruby on Rails 模型,是一种用于高度可扩展应用程序的轻量级、无状态、对开发者及Web友好的架构 +- [Scalatra](https://scalatra.org) 是一个小型的、高性能的、异步的网络框架,其灵感来自于 Sinatra +- [Finatra](https://twitter.github.io/finatra) 是基于 TwitterServer 和 Finagle 构建的 Scala 服务 +- [Scala.js](https://www.scala-js.org) 是 JavaScript 的强类型替代品,它提供了一种更安全的方式以构建稳健的前端 Web 应用程序 +- [ScalaJs-React](https://github.com/japgolly/scalajs-react) 将 Facebook 的 React 库整合至 Scala.js,并努力使其尽可能类型安全和 Scala 友好 +- [Lagom](https://www.lagomframework.com) 是一种微服务框架,可帮助您分解遗留的单体应用并构建、测试和部署整个响应式微服务系统 + +{% comment %} +HTTP(S) libraries: +{% endcomment %} + +HTTP(S) 库: + +- [Akka-http](https://akka.io) +- [Finch](https://github.com/finagle/finch) +- [Http4s](https://github.com/http4s/http4s) +- [Sttp](https://github.com/softwaremill/sttp) + +{% comment %} +JSON libraries: +{% endcomment %} + +JSON 库: + +- [Argonaut](https://github.com/argonaut-io/argonaut) +- [Circe](https://github.com/circe/circe) +- [Json4s](https://github.com/json4s/json4s) +- [Play-JSON](https://github.com/playframework/play-json) + +{% comment %} +Serialization: +{% endcomment %} + +序列化: + +- [ScalaPB](https://github.com/scalapb/ScalaPB) + +{% comment %} + +### Science and data analysis: + +{% endcomment %} + +### 科学和数据分析 + +- [Algebird](https://github.com/twitter/algebird) +- [Spire](https://github.com/typelevel/spire) +- [Squants](https://github.com/typelevel/squants) + +{% comment %} + +### Big data + +{% endcomment %} + +### 大数据 + +- [Apache Spark](https://github.com/apache/spark) +- [Apache Flink](https://github.com/apache/flink) + +{% comment %} + +### AI, machine learning + +- [BigDL](https://github.com/intel-analytics/BigDL) (Distributed Deep Learning Framework for Apache Spark) for Apache Spark +- [TensorFlow Scala](https://github.com/eaplatanios/tensorflow_scala) + +{% endcomment %} + +### 人工智能,机器学习 + +- [BigDL](https://github.com/intel-analytics/BigDL) (用于 Apache Spark 的分布式深度学习框架) +- [TensorFlow Scala](https://github.com/eaplatanios/tensorflow_scala) + +{% comment %} + +### Functional Programming & Functional Reactive Programming + +{% endcomment %} + +### 函数式编程 & 函数式响应式编程 + +{% comment %} +FP: +{% endcomment %} + +函数式编程: + +- [Cats](https://github.com/typelevel/cats) +- [Zio](https://github.com/zio/zio) + +{% comment %} +Functional reactive programming (FRP): +{% endcomment %} + +函数式响应式编程(FRP) + +- [fs2](https://github.com/typelevel/fs2) +- [monix](https://github.com/monix/monix) + +{% comment %} + +### Build tools + +{% endcomment %} + +### 构建工具 + +- [sbt](https://www.scala-sbt.org) +- [Gradle](https://gradle.org) +- [Mill](https://github.com/lihaoyi/mill) + +{% comment %} + +## Summary + +As this page shows, Scala has many terrific programming language features at a high level, at an everyday programming level, and through its developer ecosystem. + +{% endcomment %} + +## 总结 + +如此页所示,Scala 在高层、日常编程层面以及贯穿开发者生态系统都具有许多出色的编程语言特性。 + + +[reference]: {{ site.scala3ref }}/overview.html +[multiversal]: {% link _overviews/scala3-book/ca-multiversal-equality.md %} +[extension]: {% link _overviews/scala3-book/ca-extension-methods.md %} +[givens]: {% link _overviews/scala3-book/ca-given-using-clauses.md %} +[opaque_types]: {% link _overviews/scala3-book/types-opaque-types.md %} + + + From 0eae0a35185c354be03ab5b707b993c06c555be0 Mon Sep 17 00:00:00 2001 From: Thanh Le Date: Tue, 8 Mar 2022 20:37:57 +0100 Subject: [PATCH 0587/1870] Fix link to for type lambdas url --- _overviews/scala3-migration/plugin-kind-projector.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/_overviews/scala3-migration/plugin-kind-projector.md b/_overviews/scala3-migration/plugin-kind-projector.md index 6d49be8d28..8557cdb559 100644 --- a/_overviews/scala3-migration/plugin-kind-projector.md +++ b/_overviews/scala3-migration/plugin-kind-projector.md @@ -100,7 +100,7 @@ type MyLambda[F[_], A] = EitherT[F, Int, A] MyLambda ``` -Alternatively you may use Scala 3's [Native Type Lambdas](https://dotty.epfl.ch/docs/reference/new-types/type-lambdas.html) if you do not need to cross-compile: +Alternatively you may use Scala 3's [Native Type Lambdas](https://docs.scala-lang.org/scala3/reference/new-types/type-lambdas.html) if you do not need to cross-compile: ```scala [F[_], A] =>> EitherT[F, Int, A] From 9097144e071d4290dc165aee2e2855c48aae64dd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Filip=20Zyba=C5=82a?= Date: Tue, 8 Feb 2022 15:13:34 +0100 Subject: [PATCH 0588/1870] Update static site docs --- _overviews/scala3-scaladoc/blog.md | 13 +- _overviews/scala3-scaladoc/static-site.md | 170 ++++++++++++---------- 2 files changed, 96 insertions(+), 87 deletions(-) diff --git a/_overviews/scala3-scaladoc/blog.md b/_overviews/scala3-scaladoc/blog.md index 1e3c371c8e..612ee5c25e 100644 --- a/_overviews/scala3-scaladoc/blog.md +++ b/_overviews/scala3-scaladoc/blog.md @@ -15,24 +15,17 @@ Blog is treated a little differently than regular static sites. This article wil ## Proper directory setup -All your blogposts must be put under `blog/_posts` directory. +All your blogposts must be put under `_blog/_posts` directory. ``` -├── blog +├── _blog │ ├── _posts │ │ └── 2016-12-05-implicit-function-types.md │ └── index.html ``` -If you are using yaml [sidebar]({% link _overviews/scala3-scaladoc/static-site.md %}#sidebar) don't forget to place - -``` -sidebar: - - title: Blog -``` - -somewhere inside the `yaml` tree representing the sidebar sections. Scaladoc will attach under that section all of your blogposts. +Scaladoc loads blog if the `_blog` directory exists. ## Naming convention diff --git a/_overviews/scala3-scaladoc/static-site.md b/_overviews/scala3-scaladoc/static-site.md index e7516ea09c..d9d11f6bf6 100644 --- a/_overviews/scala3-scaladoc/static-site.md +++ b/_overviews/scala3-scaladoc/static-site.md @@ -20,16 +20,18 @@ and will from here on be referred to as "template files" or "templates". A simple "hello world" site could look something like this: ``` -├── docs -│ └── getting-started.md -└── index.html +. +└── / + └── _docs/ + ├── index.html + └── getting-started.html ``` This will give you a site with the following files in generated documentation: ``` index.html -docs/getting-started.html +getting-started.html ``` Scaladoc can transform both files and directories (to organize your documentation into a tree-like structure). By default, directories have a title based on the file name and have empty content. It is possible to provide index pages for each section by creating `index.html` or `index.md` (not both) in the dedicated directory. @@ -98,63 +100,64 @@ Layouts must be placed in a `_layouts` directory in the site root: ``` ├── _layouts │ └── main.html -├── docs -│ └── getting-started.md -└── index.html +└── _docs + └── getting-started.md +``` + +## Assets + +In order to render assets along with static site, they need to be placed in the `_assets` directory in the site root: +``` +├── _assets +│ └── images +│ └── myimage.png +└── _docs + └── getting-started.md +``` +To reference the asset in a page, one need to create link relative to the `_assets` directory + +``` +Take a look at the following image: [My image](images/myimage.png) ``` ## Sidebar -Scaladoc by default uses layout of files in `docs` directory to create table of content. There is also ability to override it by providing a `sidebar.yml` file in the site root: +Scaladoc by default uses directory structure in `_docs` directory to organize static sites. There is also possibility to override it by providing a `sidebar.yml` file in the site root. The YAML configuration file describes the structure of rendered static site and the table of content: ```yaml -sidebar: - - title: Blog - - title: My title - page: my-page1.md - - page: my-page2.md - - page: my-page3/subsection - - title: Reference - subsection: - - page: my-page3.md - - index: my-page4/index.md - subsection: - - page: my-page4/my-page4.md - - title: My subsection - index: my-page5/index.md - subsection: - - page: my-page5/my-page5.md - - index: my-page6/index.md - subsection: - - index: my-page6/my-page6/index.md - subsection: - - page: my-page6/my-page6/my-page6.md -``` - -The `sidebar` key is mandatory. -On each level, you can have three different types of entries: `page`, `blog` or `subsection`. - -`page` is a leaf of the structure and accepts the following attributes: -- `title` (optional) - title of the page -- `page` (mandatory) - path to the file that will represent the page, it can be either html or markdown file to be rendered, there is also the possibility to pass the `directory` path. If so, the scaladoc will render the directory and all its content as if there were no `sidebar.yml` basing on its tree structure and index files. - -The `page` property `subsection` accepts nested nodes, these can be either pages or subsections, which allow you to create tree-like navigation. The attributes are: -- `title` (optional) - title of the page -- `index` (optional) - path to the file that will represent the index file of the subsection, it can be either html or markdown file to be rendered -- `subsection` (mandatory) - nested nodes, can be either pages or subsections - -In `subsection`s, you can omit `title` or `index`, however not specifying any of these properties prevents you from specifying the title of the section. - -`blog` is a special node represented by simple entry `- title: Blog` with no other attributes. All your blog posts will be automatically linked under this section. You can read more about the blog [here]({% link _overviews/scala3-scaladoc/blog.md %}). - -``` -├── blog -│ ├── _posts -│ │ └── 2016-12-05-implicit-function-types.md -│ └── index.html -├── index.html -└── sidebar.yml -``` +index: index.html +subsection: + - title: Usage + index: usage/index.html + directory: usage + subsection: + - title: Dottydoc + page: usage/dottydoc.html + hidden: false + - title: sbt-projects + page: usage/sbt-projects.html + hidden: false +``` +The root element needs to be a `subsection`. +Nesting subsections will result in a tree-like structure of navigation. + +`subsection` properties are: + - `title` - Optional string - A default title of the subsection. + Front-matter titles have higher priorities. + - `index` - Optional string - A path to index page of a subsection. + - `directory` - Optional string - A name of the directory that will contain the subsection. + By default, the directory name is the subsection name converted to kebab case. + - `subsection` - Array of `subsection` or `page`. + + Either `index` or `subsection` must be defined. The subsection defined with `index` and without `subsection` will contain pages and directories loaded recursively from directory of the index page. + +`page` properties are: + - `title` - Optional string - A default title of the page. + Front-matter titles have higher priorities. + - `page` - String - A path to the page + - `hidden` - Optional boolean - A flag that indicates whether the page should be visible in navigation. By default, it is set to `false`. + +**Note**: All paths in YAML configuration file are relative to `/_docs`. ## Hierarchy of title @@ -174,30 +177,43 @@ If the title is specified multiple times, the priority is as follows (from highe Note that if you skip the `index` file in your tree structure or you don't specify the `title` in the frontmatter, there will be given a generic name `index`. The same applies when using `sidebar.yml` but not specifying `title` nor `index`, just a subsection. Again, a generic `index` name will appear. +## Blog +Blog feature is described in [a separate document]({% link _overviews/scala3-scaladoc/blog.md %}) -## Static resources - -You can attach static resources (pdf, images) to your documentation by using two dedicated directories: -`resources` and `images`. After placing your assets under any of these directories, you can reference them in markdown -as if they were relatively at the same level. - -For example, consider the following situation: - +## Advanced configuration +### Full structure of site root ``` -├── blog -│ ├── _posts -│ │ └── 2016-12-05-implicit-function-types.md -│ └── index.html -├── index.html -├── resources -│ └── my_file.pdf -├── images -│ └── my_image.png -└── sidebar.yml - +. +└── / + ├── _layouts_/ + │ └── ... + ├── _docs/ + │ └── ... + ├── _blog/ + │ ├── index.md + │ └── _posts/ + │ └── ... + └── _assets/ + ├── js/ + │ └── ... + ├── img/ + │ └── ... + └── ... ``` +It results in static site containing documents as well as blog. It also contains custom layouts and assets. The structure of rendered documentation can be based on file system but it can also be overriden by YAML configuration. -You can refer to the assets from within any of the files using markdown links: +### Mapping directory structure -``` -This is my blog post. Here is the image ![](my_image.png) and here is my [pdf](my_file.pdf)``` +Using YAML configuration file, we can define how the source directory structure should be transformed in target directory structure. + +Take a look at following subsection definition: +```yaml +- title: Some other subsection + index: abc/index.html + directory: custom-directory + subsection: + - page: abc2/page1.md + - page: foo/page2.md +``` +This subsection shows the ability of YAML configuration to map the directory structure. +Even though the index page and all defined children are in different directories, they will be rendered in `custom-directory`. From 6e2cf92d84dc4ee4290dc65cd83f2a4a4b250796 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Filip=20Zyba=C5=82a?= Date: Thu, 10 Mar 2022 09:05:31 +0100 Subject: [PATCH 0589/1870] Apply suggestions from review --- _overviews/scala3-scaladoc/static-site.md | 27 +++++++++++++---------- 1 file changed, 15 insertions(+), 12 deletions(-) diff --git a/_overviews/scala3-scaladoc/static-site.md b/_overviews/scala3-scaladoc/static-site.md index d9d11f6bf6..127f6c59e7 100644 --- a/_overviews/scala3-scaladoc/static-site.md +++ b/_overviews/scala3-scaladoc/static-site.md @@ -101,7 +101,8 @@ Layouts must be placed in a `_layouts` directory in the site root: ├── _layouts │ └── main.html └── _docs - └── getting-started.md + ├── getting-started.md + └── index.html ``` ## Assets @@ -114,7 +115,7 @@ In order to render assets along with static site, they need to be placed in the └── _docs └── getting-started.md ``` -To reference the asset in a page, one need to create link relative to the `_assets` directory +To reference the asset on a page, one needs to create a link relative to the `_assets` directory ``` Take a look at the following image: [My image](images/myimage.png) @@ -122,7 +123,7 @@ Take a look at the following image: [My image](images/myimage.png) ## Sidebar -Scaladoc by default uses directory structure in `_docs` directory to organize static sites. There is also possibility to override it by providing a `sidebar.yml` file in the site root. The YAML configuration file describes the structure of rendered static site and the table of content: +By default, Scaladoc reflects the directory structure from `_docs` directory in the rendered site. There is also the ability to override it by providing a `sidebar.yml` file in the site root directory. The YAML configuration file describes the structure of the rendered static site and the table of content: ```yaml index: index.html @@ -144,20 +145,20 @@ Nesting subsections will result in a tree-like structure of navigation. `subsection` properties are: - `title` - Optional string - A default title of the subsection. Front-matter titles have higher priorities. - - `index` - Optional string - A path to index page of a subsection. - - `directory` - Optional string - A name of the directory that will contain the subsection. + - `index` - Optional string - A path to index page of a subsection. The path is relative to the `_docs` directory. + - `directory` - Optional string - A name of the directory that will contain the subsection in the generated site. By default, the directory name is the subsection name converted to kebab case. - `subsection` - Array of `subsection` or `page`. - Either `index` or `subsection` must be defined. The subsection defined with `index` and without `subsection` will contain pages and directories loaded recursively from directory of the index page. + Either `index` or `subsection` must be defined. The subsection defined with `index` and without `subsection` will contain pages and directories loaded recursively from the directory of the index page. `page` properties are: - `title` - Optional string - A default title of the page. Front-matter titles have higher priorities. - - `page` - String - A path to the page - - `hidden` - Optional boolean - A flag that indicates whether the page should be visible in navigation. By default, it is set to `false`. + - `page` - String - A path to the page, relative to the `_docs` directory. + - `hidden` - Optional boolean - A flag that indicates whether the page should be visible in the navigation sidebar. By default, it is set to `false`. -**Note**: All paths in YAML configuration file are relative to `/_docs`. +**Note**: All the paths in the YAML configuration file are relative to `/_docs`. ## Hierarchy of title @@ -200,13 +201,13 @@ Blog feature is described in [a separate document]({% link _overviews/scala3-sca │ └── ... └── ... ``` -It results in static site containing documents as well as blog. It also contains custom layouts and assets. The structure of rendered documentation can be based on file system but it can also be overriden by YAML configuration. +It results in a static site containing documents as well as a blog. It also contains custom layouts and assets. The structure of the rendered documentation can be based on the file system but it can also be overridden by YAML configuration. ### Mapping directory structure -Using YAML configuration file, we can define how the source directory structure should be transformed in target directory structure. +Using the YAML configuration file, we can define how the source directory structure should be transformed into an outputs directory structure. -Take a look at following subsection definition: +Take a look at the following subsection definition: ```yaml - title: Some other subsection index: abc/index.html @@ -217,3 +218,5 @@ Take a look at following subsection definition: ``` This subsection shows the ability of YAML configuration to map the directory structure. Even though the index page and all defined children are in different directories, they will be rendered in `custom-directory`. +The source page `abc/index.html` will generate a page `custom-directory/index.html`, the source page `abc2/page1.md` will generate a page `custom-directory/page1.html`, +and the source page `foo/page2.md` will generate a page `custom-directory/page2.html`. From 388973da5dfc75990bb00be1d15ea2bd217b8780 Mon Sep 17 00:00:00 2001 From: Jamie Thompson Date: Mon, 14 Mar 2022 14:12:50 +0100 Subject: [PATCH 0590/1870] list scala 3 releases in api/all --- api/all.md | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/api/all.md b/api/all.md index ddf77295f7..ea55e544d9 100644 --- a/api/all.md +++ b/api/all.md @@ -6,6 +6,8 @@ includeTOC: true ## Latest releases +* Scala 3.1.1 + * [Library API](https://www.scala-lang.org/api/3.1.1/) * Scala 2.13.8 * [Library API](https://www.scala-lang.org/api/2.13.8/) * [Compiler API](https://www.scala-lang.org/api/2.13.8/scala-compiler/scala/) @@ -58,6 +60,14 @@ https://scala-ci.typesafe.com/artifactory/scala-integration/org/scala-lang/ ## Previous releases +* Scala 3.1.0 + * [Library API](https://www.scala-lang.org/api/3.1.0/) +* Scala 3.0.2 + * [Library API](https://www.scala-lang.org/api/3.0.2/) +* Scala 3.0.1 + * [Library API](https://www.scala-lang.org/api/3.0.1/) +* Scala 3.0.0 + * [Library API](https://www.scala-lang.org/api/3.0.0/) * Scala 2.13.7 * [Library API](https://www.scala-lang.org/api/2.13.7/) * [Compiler API](https://www.scala-lang.org/api/2.13.7/scala-compiler/scala/) From 5152494a70fb70694d0381474115e404d7e89317 Mon Sep 17 00:00:00 2001 From: TSLsun Date: Sat, 19 Mar 2022 11:10:20 +0800 Subject: [PATCH 0591/1870] fix compiling warnings in code example --- _tour/classes.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/_tour/classes.md b/_tour/classes.md index 47b5079bc5..ee3dc33703 100644 --- a/_tour/classes.md +++ b/_tour/classes.md @@ -76,17 +76,17 @@ class Point { private var _y = 0 private val bound = 100 - def x = _x + def x: Int = _x def x_= (newValue: Int): Unit = { - if (newValue < bound) _x = newValue else printWarning + if (newValue < bound) _x = newValue else printWarning() } - def y = _y + def y: Int = _y def y_= (newValue: Int): Unit = { - if (newValue < bound) _y = newValue else printWarning + if (newValue < bound) _y = newValue else printWarning() } - private def printWarning = println("WARNING: Out of bounds") + private def printWarning(): Unit = println("WARNING: Out of bounds") } val point1 = new Point From 532dbc3f09686cedda3ac3cf8fd90986f5ffbe85 Mon Sep 17 00:00:00 2001 From: Jamie Thompson Date: Mon, 21 Mar 2022 11:51:25 +0100 Subject: [PATCH 0592/1870] enable collection contribute_resources change icons in contribute_resources --- _config.yml | 1 + _contribute_resources/1-documentation.md | 2 +- _contribute_resources/2-bug-fixes.md | 2 +- _contribute_resources/6-compiler-language.md | 2 +- 4 files changed, 4 insertions(+), 3 deletions(-) diff --git a/_config.yml b/_config.yml index ecd8829749..0d58e58a8f 100644 --- a/_config.yml +++ b/_config.yml @@ -20,6 +20,7 @@ scala-212-version: 2.12.15 scala-3-version: 3.1.1 collections: + contribute_resources: style: output: true overviews: diff --git a/_contribute_resources/1-documentation.md b/_contribute_resources/1-documentation.md index b39290a394..431c4e0ab1 100644 --- a/_contribute_resources/1-documentation.md +++ b/_contribute_resources/1-documentation.md @@ -1,6 +1,6 @@ --- title: Documentation link: /contribute/documentation.html -icon: fa fa-file-text +icon: fa fa-book --- [Scaladoc (API)](/contribute/scala-standard-library-api-documentation.html), [docs.scala-lang.org](https://docs.scala-lang.org/contribute.html) and [scala-lang.org](https://github.com/scala/scala-lang). diff --git a/_contribute_resources/2-bug-fixes.md b/_contribute_resources/2-bug-fixes.md index cca6269e06..54e6d2cf9d 100644 --- a/_contribute_resources/2-bug-fixes.md +++ b/_contribute_resources/2-bug-fixes.md @@ -1,6 +1,6 @@ --- title: Bug fixes link: /contribute/guide.html -icon: fa fa-pencil +icon: fa fa-bug --- Issues with the tools, core libraries and compiler. Also you can help us by [reporting bugs](/contribute/bug-reporting-guide.html). diff --git a/_contribute_resources/6-compiler-language.md b/_contribute_resources/6-compiler-language.md index fcfea35d5a..d54e34fac9 100644 --- a/_contribute_resources/6-compiler-language.md +++ b/_contribute_resources/6-compiler-language.md @@ -1,6 +1,6 @@ --- title: Compiler/Language link: /contribute/guide.html#larger-changes-new-features -icon: fa fa-gears +icon: fa fa-cogs --- Larger language features and compiler enhancements including language specification and SIPs. From d9c44ebf1f469c7d8ed2b46c2a38f0940569b6e2 Mon Sep 17 00:00:00 2001 From: Jamie Thompson Date: Mon, 21 Mar 2022 13:13:26 +0100 Subject: [PATCH 0593/1870] prepare for move files --- contribute/bug-reporting-guide.md | 4 ++-- contribute/codereviews.md | 2 +- contribute/corelibs.md | 2 +- contribute/documentation.md | 2 +- contribute/guide.md | 2 +- contribute/hacker-guide.md | 2 +- contribute/index.md | 2 +- contribute/partest-guide.md | 4 ++-- contribute/scala-internals.md | 2 +- contribute/scala-standard-library-api-documentation.md | 2 +- contribute/tools.md | 2 +- 11 files changed, 13 insertions(+), 13 deletions(-) diff --git a/contribute/bug-reporting-guide.md b/contribute/bug-reporting-guide.md index 88317da0ce..d4588de422 100644 --- a/contribute/bug-reporting-guide.md +++ b/contribute/bug-reporting-guide.md @@ -1,8 +1,8 @@ --- -title: Bug Reporting +title: Bug Reporting Guide layout: inner-page-no-masthead -# permalink: /contribute/bug-reporting-guide/ includeTOC: true +permalink: /contribute/bug-reporting-guide.html --- The Scala compiler and standard library bug tracker is located at [https://github.com/scala/bug](https://github.com/scala/bug). Before you submit a bug make sure that it is certainly a bug by following instructions in *Is it a Bug?*. diff --git a/contribute/codereviews.md b/contribute/codereviews.md index 6e0a2592b6..860ba65884 100644 --- a/contribute/codereviews.md +++ b/contribute/codereviews.md @@ -1,8 +1,8 @@ --- title: Code Review Contributions layout: inner-page-no-masthead -# permalink: /contribute/codereviews/ includeTOC: true +permalink: /contribute/codereviews.html --- ## Code Review Contributions diff --git a/contribute/corelibs.md b/contribute/corelibs.md index 6b2cc5d95f..4f10208334 100644 --- a/contribute/corelibs.md +++ b/contribute/corelibs.md @@ -1,8 +1,8 @@ --- title: Core Library Contributions layout: inner-page-no-masthead -# permalink: /contribute/corelibs/ includeTOC: true +permalink: /contribute/corelibs.html --- ## Core Library Contributions diff --git a/contribute/documentation.md b/contribute/documentation.md index 967806de42..b8ea229f93 100644 --- a/contribute/documentation.md +++ b/contribute/documentation.md @@ -1,8 +1,8 @@ --- title: Documentation Contributions layout: inner-page-no-masthead -# permalink: /contribute/documentation/ includeTOC: true +permalink: /contribute/documentation.html --- ## Contributing Documentation to the Scala project diff --git a/contribute/guide.md b/contribute/guide.md index 7e4f375005..c10a5c20c1 100644 --- a/contribute/guide.md +++ b/contribute/guide.md @@ -1,8 +1,8 @@ --- title: Contributing guide layout: inner-page-no-masthead -# permalink: /contribute/guide/ includeTOC: true +permalink: /contribute/guide.html ---
    diff --git a/contribute/hacker-guide.md b/contribute/hacker-guide.md index 302635fae1..990754e3df 100644 --- a/contribute/hacker-guide.md +++ b/contribute/hacker-guide.md @@ -2,8 +2,8 @@ title: Scala hacker guide by: Eugene Burmako layout: inner-page-no-masthead -# permalink: /contribute/hacker-guide/ includeTOC: true +permalink: /contribute/hacker-guide.html ---
    This guide is intended to help you get from an idea of fixing a bug or implementing a new feature into a nightly Scala build, and, ultimately, to a production release of Scala incorporating your idea. diff --git a/contribute/index.md b/contribute/index.md index d78a72e159..d4bc7069a2 100644 --- a/contribute/index.md +++ b/contribute/index.md @@ -1,8 +1,8 @@ --- title: Contribute layout: inner-page-no-masthead -# permalink: /contribute/ includeTOC: true +permalink: /contribute/ --- The Scala programming language is an open source project with a very diff --git a/contribute/partest-guide.md b/contribute/partest-guide.md index e7e10621e1..d55c02e884 100644 --- a/contribute/partest-guide.md +++ b/contribute/partest-guide.md @@ -1,8 +1,8 @@ --- title: Running the Test Suite layout: inner-page-no-masthead -# permalink: /contribute/partest-guide/ includeTOC: true +permalink: /contribute/partest-guide.html --- Partest is a custom parallel testing tool that we use to run the test suite for the Scala compiler and library. Go to the scala project folder from your local checkout and run it via `sbt`, `ant` or standalone as follows. @@ -35,7 +35,7 @@ The test suite can be run by using ant from the command line: Please note the standalone scripts mentioned below were removed in 2.12.2. sbt is the preferred way to run the test suite. -There are launch scripts `partest` and `partest.bat` in the `test` folder of the scala project. To have partest run failing tests only and print details about test failures to the console, you can use +There are launch scripts `partest` and `partest.bat` in the `test` folder of the scala project. To have partest run failing tests only and print details about test failures to the console, you can use ./test/partest --show-diff --show-log --failed diff --git a/contribute/scala-internals.md b/contribute/scala-internals.md index e6fde53a81..b380525088 100644 --- a/contribute/scala-internals.md +++ b/contribute/scala-internals.md @@ -1,8 +1,8 @@ --- title: Scala Internals Mailing List layout: inner-page-no-masthead -permalink: /contribute/scala-internals/ includeTOC: true +permalink: /contribute/scala-internals/ --- ## scala-internals diff --git a/contribute/scala-standard-library-api-documentation.md b/contribute/scala-standard-library-api-documentation.md index 6f3af62b30..2700d2fd11 100644 --- a/contribute/scala-standard-library-api-documentation.md +++ b/contribute/scala-standard-library-api-documentation.md @@ -1,8 +1,8 @@ --- title: Contribute to API Documentation layout: inner-page-no-masthead -# permalink: /contribute/scala-standard-library-api-documentation.html includeTOC: true +permalink: /contribute/scala-standard-library-api-documentation.html --- This page is specific to API documentation contributions – that is, API diff --git a/contribute/tools.md b/contribute/tools.md index 0afd3982d8..a76d0b90bd 100644 --- a/contribute/tools.md +++ b/contribute/tools.md @@ -1,8 +1,8 @@ --- title: IDE and Build Tool Contributions layout: inner-page-no-masthead -# permalink: /contribute/tools/ includeTOC: true +permalink: /contribute/tools.html # Projects list: projects: From 30735654a67e967f41a9c7162b64846f2050f5ae Mon Sep 17 00:00:00 2001 From: Jamie Thompson Date: Mon, 21 Mar 2022 13:14:45 +0100 Subject: [PATCH 0594/1870] move contribute files --- {contribute => _overviews/contribute}/bug-reporting-guide.md | 0 {contribute => _overviews/contribute}/codereviews.md | 0 {contribute => _overviews/contribute}/corelibs.md | 0 {contribute => _overviews/contribute}/documentation.md | 0 {contribute => _overviews/contribute}/guide.md | 0 {contribute => _overviews/contribute}/hacker-guide.md | 0 {contribute => _overviews/contribute}/inclusive-language-guide.md | 0 {contribute => _overviews/contribute}/index.md | 0 {contribute => _overviews/contribute}/partest-guide.md | 0 {contribute => _overviews/contribute}/scala-internals.md | 0 .../contribute}/scala-standard-library-api-documentation.md | 0 {contribute => _overviews/contribute}/tools.md | 0 12 files changed, 0 insertions(+), 0 deletions(-) rename {contribute => _overviews/contribute}/bug-reporting-guide.md (100%) rename {contribute => _overviews/contribute}/codereviews.md (100%) rename {contribute => _overviews/contribute}/corelibs.md (100%) rename {contribute => _overviews/contribute}/documentation.md (100%) rename {contribute => _overviews/contribute}/guide.md (100%) rename {contribute => _overviews/contribute}/hacker-guide.md (100%) rename {contribute => _overviews/contribute}/inclusive-language-guide.md (100%) rename {contribute => _overviews/contribute}/index.md (100%) rename {contribute => _overviews/contribute}/partest-guide.md (100%) rename {contribute => _overviews/contribute}/scala-internals.md (100%) rename {contribute => _overviews/contribute}/scala-standard-library-api-documentation.md (100%) rename {contribute => _overviews/contribute}/tools.md (100%) diff --git a/contribute/bug-reporting-guide.md b/_overviews/contribute/bug-reporting-guide.md similarity index 100% rename from contribute/bug-reporting-guide.md rename to _overviews/contribute/bug-reporting-guide.md diff --git a/contribute/codereviews.md b/_overviews/contribute/codereviews.md similarity index 100% rename from contribute/codereviews.md rename to _overviews/contribute/codereviews.md diff --git a/contribute/corelibs.md b/_overviews/contribute/corelibs.md similarity index 100% rename from contribute/corelibs.md rename to _overviews/contribute/corelibs.md diff --git a/contribute/documentation.md b/_overviews/contribute/documentation.md similarity index 100% rename from contribute/documentation.md rename to _overviews/contribute/documentation.md diff --git a/contribute/guide.md b/_overviews/contribute/guide.md similarity index 100% rename from contribute/guide.md rename to _overviews/contribute/guide.md diff --git a/contribute/hacker-guide.md b/_overviews/contribute/hacker-guide.md similarity index 100% rename from contribute/hacker-guide.md rename to _overviews/contribute/hacker-guide.md diff --git a/contribute/inclusive-language-guide.md b/_overviews/contribute/inclusive-language-guide.md similarity index 100% rename from contribute/inclusive-language-guide.md rename to _overviews/contribute/inclusive-language-guide.md diff --git a/contribute/index.md b/_overviews/contribute/index.md similarity index 100% rename from contribute/index.md rename to _overviews/contribute/index.md diff --git a/contribute/partest-guide.md b/_overviews/contribute/partest-guide.md similarity index 100% rename from contribute/partest-guide.md rename to _overviews/contribute/partest-guide.md diff --git a/contribute/scala-internals.md b/_overviews/contribute/scala-internals.md similarity index 100% rename from contribute/scala-internals.md rename to _overviews/contribute/scala-internals.md diff --git a/contribute/scala-standard-library-api-documentation.md b/_overviews/contribute/scala-standard-library-api-documentation.md similarity index 100% rename from contribute/scala-standard-library-api-documentation.md rename to _overviews/contribute/scala-standard-library-api-documentation.md diff --git a/contribute/tools.md b/_overviews/contribute/tools.md similarity index 100% rename from contribute/tools.md rename to _overviews/contribute/tools.md From db3d07ea0ff961fd5000fe4adf99491b6a01645e Mon Sep 17 00:00:00 2001 From: Jamie Thompson Date: Mon, 21 Mar 2022 13:27:32 +0100 Subject: [PATCH 0595/1870] convert to multipage overview --- _overviews/contribute/bug-reporting-guide.md | 6 ++++-- _overviews/contribute/codereviews.md | 6 ++++-- _overviews/contribute/corelibs.md | 6 ++++-- _overviews/contribute/documentation.md | 6 ++++-- _overviews/contribute/guide.md | 6 ++++-- _overviews/contribute/hacker-guide.md | 6 ++++-- _overviews/contribute/inclusive-language-guide.md | 6 ++++-- _overviews/contribute/index.md | 6 ++++-- _overviews/contribute/partest-guide.md | 6 ++++-- _overviews/contribute/scala-internals.md | 6 ++++-- .../contribute/scala-standard-library-api-documentation.md | 6 ++++-- _overviews/contribute/tools.md | 6 ++++-- 12 files changed, 48 insertions(+), 24 deletions(-) diff --git a/_overviews/contribute/bug-reporting-guide.md b/_overviews/contribute/bug-reporting-guide.md index d4588de422..3e358a30f0 100644 --- a/_overviews/contribute/bug-reporting-guide.md +++ b/_overviews/contribute/bug-reporting-guide.md @@ -1,7 +1,9 @@ --- title: Bug Reporting Guide -layout: inner-page-no-masthead -includeTOC: true +layout: multipage-overview +num: 7 +partof: scala-contribution +overview-name: Contributing to Scala permalink: /contribute/bug-reporting-guide.html --- diff --git a/_overviews/contribute/codereviews.md b/_overviews/contribute/codereviews.md index 860ba65884..5b5a4a4697 100644 --- a/_overviews/contribute/codereviews.md +++ b/_overviews/contribute/codereviews.md @@ -1,7 +1,9 @@ --- title: Code Review Contributions -layout: inner-page-no-masthead -includeTOC: true +layout: multipage-overview +num: 3 +partof: scala-contribution +overview-name: Contributing to Scala permalink: /contribute/codereviews.html --- ## Code Review Contributions diff --git a/_overviews/contribute/corelibs.md b/_overviews/contribute/corelibs.md index 4f10208334..984f8c4f7c 100644 --- a/_overviews/contribute/corelibs.md +++ b/_overviews/contribute/corelibs.md @@ -1,7 +1,9 @@ --- title: Core Library Contributions -layout: inner-page-no-masthead -includeTOC: true +layout: multipage-overview +num: 4 +partof: scala-contribution +overview-name: Contributing to Scala permalink: /contribute/corelibs.html --- ## Core Library Contributions diff --git a/_overviews/contribute/documentation.md b/_overviews/contribute/documentation.md index b8ea229f93..01cd8a5c15 100644 --- a/_overviews/contribute/documentation.md +++ b/_overviews/contribute/documentation.md @@ -1,7 +1,9 @@ --- title: Documentation Contributions -layout: inner-page-no-masthead -includeTOC: true +layout: multipage-overview +num: 5 +partof: scala-contribution +overview-name: Contributing to Scala permalink: /contribute/documentation.html --- ## Contributing Documentation to the Scala project diff --git a/_overviews/contribute/guide.md b/_overviews/contribute/guide.md index c10a5c20c1..7cafd3d8a3 100644 --- a/_overviews/contribute/guide.md +++ b/_overviews/contribute/guide.md @@ -1,7 +1,9 @@ --- title: Contributing guide -layout: inner-page-no-masthead -includeTOC: true +layout: multipage-overview +num: 9 +partof: scala-contribution +overview-name: Contributing to Scala permalink: /contribute/guide.html --- diff --git a/_overviews/contribute/hacker-guide.md b/_overviews/contribute/hacker-guide.md index 990754e3df..df659678cb 100644 --- a/_overviews/contribute/hacker-guide.md +++ b/_overviews/contribute/hacker-guide.md @@ -1,8 +1,10 @@ --- title: Scala hacker guide by: Eugene Burmako -layout: inner-page-no-masthead -includeTOC: true +layout: multipage-overview +num: 11 +partof: scala-contribution +overview-name: Contributing to Scala permalink: /contribute/hacker-guide.html ---
    diff --git a/_overviews/contribute/inclusive-language-guide.md b/_overviews/contribute/inclusive-language-guide.md index 6703532594..d673d57ad8 100644 --- a/_overviews/contribute/inclusive-language-guide.md +++ b/_overviews/contribute/inclusive-language-guide.md @@ -1,7 +1,9 @@ --- title: Inclusive Language Guide -layout: inner-page-no-masthead -includeTOC: true +layout: multipage-overview +num: 2 +partof: scala-contribution +overview-name: Contributing to Scala permalink: /contribute/inclusive-language/ --- diff --git a/_overviews/contribute/index.md b/_overviews/contribute/index.md index d4bc7069a2..ac513b0009 100644 --- a/_overviews/contribute/index.md +++ b/_overviews/contribute/index.md @@ -1,7 +1,9 @@ --- title: Contribute -layout: inner-page-no-masthead -includeTOC: true +layout: multipage-overview +num: 1 +partof: scala-contribution +overview-name: Contributing to Scala permalink: /contribute/ --- diff --git a/_overviews/contribute/partest-guide.md b/_overviews/contribute/partest-guide.md index d55c02e884..8f4dff394b 100644 --- a/_overviews/contribute/partest-guide.md +++ b/_overviews/contribute/partest-guide.md @@ -1,7 +1,9 @@ --- title: Running the Test Suite -layout: inner-page-no-masthead -includeTOC: true +layout: multipage-overview +num: 12 +partof: scala-contribution +overview-name: Contributing to Scala permalink: /contribute/partest-guide.html --- diff --git a/_overviews/contribute/scala-internals.md b/_overviews/contribute/scala-internals.md index b380525088..f52faa5c18 100644 --- a/_overviews/contribute/scala-internals.md +++ b/_overviews/contribute/scala-internals.md @@ -1,7 +1,9 @@ --- title: Scala Internals Mailing List -layout: inner-page-no-masthead -includeTOC: true +layout: multipage-overview +num: 8 +partof: scala-contribution +overview-name: Contributing to Scala permalink: /contribute/scala-internals/ --- diff --git a/_overviews/contribute/scala-standard-library-api-documentation.md b/_overviews/contribute/scala-standard-library-api-documentation.md index 2700d2fd11..97e3d708f9 100644 --- a/_overviews/contribute/scala-standard-library-api-documentation.md +++ b/_overviews/contribute/scala-standard-library-api-documentation.md @@ -1,7 +1,9 @@ --- title: Contribute to API Documentation -layout: inner-page-no-masthead -includeTOC: true +layout: multipage-overview +num: 6 +partof: scala-contribution +overview-name: Contributing to Scala permalink: /contribute/scala-standard-library-api-documentation.html --- diff --git a/_overviews/contribute/tools.md b/_overviews/contribute/tools.md index a76d0b90bd..6df7c454a9 100644 --- a/_overviews/contribute/tools.md +++ b/_overviews/contribute/tools.md @@ -1,7 +1,9 @@ --- title: IDE and Build Tool Contributions -layout: inner-page-no-masthead -includeTOC: true +layout: multipage-overview +num: 10 +partof: scala-contribution +overview-name: Contributing to Scala permalink: /contribute/tools.html # Projects list: From c692ad3ab96c94ea22c9f5e99e0cabcccd76489b Mon Sep 17 00:00:00 2001 From: Jamie Thompson Date: Mon, 21 Mar 2022 13:59:30 +0100 Subject: [PATCH 0596/1870] migrate urls to /overviews/contribute fix broken links --- _contribute_resources/1-documentation.md | 4 +-- _contribute_resources/2-bug-fixes.md | 4 +-- _contribute_resources/3-code-reviews.md | 6 ++-- _contribute_resources/4-core-libraries.md | 2 +- .../5-ide-and-build-tools.md | 2 +- _contribute_resources/6-compiler-language.md | 2 +- _overviews/contribute/bug-reporting-guide.md | 1 - _overviews/contribute/codereviews.md | 7 ++-- _overviews/contribute/corelibs.md | 7 ++-- _overviews/contribute/documentation.md | 11 +++---- _overviews/contribute/guide.md | 33 +++++++++---------- _overviews/contribute/hacker-guide.md | 11 +++---- .../contribute/inclusive-language-guide.md | 3 +- _overviews/contribute/index.md | 9 +++-- _overviews/contribute/partest-guide.md | 1 - _overviews/contribute/scala-internals.md | 1 - ...cala-standard-library-api-documentation.md | 7 ++-- _overviews/contribute/tools.md | 7 ++-- 18 files changed, 53 insertions(+), 65 deletions(-) diff --git a/_contribute_resources/1-documentation.md b/_contribute_resources/1-documentation.md index 431c4e0ab1..3e1b81a7b9 100644 --- a/_contribute_resources/1-documentation.md +++ b/_contribute_resources/1-documentation.md @@ -1,6 +1,6 @@ --- title: Documentation -link: /contribute/documentation.html +link: /overviews/contribute/documentation.html icon: fa fa-book --- -[Scaladoc (API)](/contribute/scala-standard-library-api-documentation.html), [docs.scala-lang.org](https://docs.scala-lang.org/contribute.html) and [scala-lang.org](https://github.com/scala/scala-lang). +[Scaladoc (API)](/overviews/contribute/scala-standard-library-api-documentation.html), [docs.scala-lang.org](/contribute.html) and [scala-lang.org](https://github.com/scala/scala-lang). diff --git a/_contribute_resources/2-bug-fixes.md b/_contribute_resources/2-bug-fixes.md index 54e6d2cf9d..2baf672e5a 100644 --- a/_contribute_resources/2-bug-fixes.md +++ b/_contribute_resources/2-bug-fixes.md @@ -1,6 +1,6 @@ --- title: Bug fixes -link: /contribute/guide.html +link: /overviews/contribute/guide.html icon: fa fa-bug --- -Issues with the tools, core libraries and compiler. Also you can help us by [reporting bugs](/contribute/bug-reporting-guide.html). +Issues with the tools, core libraries and compiler. Also you can help us by [reporting bugs](/overviews/contribute/bug-reporting-guide.html). diff --git a/_contribute_resources/3-code-reviews.md b/_contribute_resources/3-code-reviews.md index 2fc057eb0d..41f6821414 100644 --- a/_contribute_resources/3-code-reviews.md +++ b/_contribute_resources/3-code-reviews.md @@ -1,8 +1,8 @@ --- title: Code Reviews -link: /contribute/codereviews.html +link: /overviews/contribute/codereviews.html icon: fa fa-eye --- -Review pull requests against [scala/scala](https://github.com/scala/scala/pulls), -[scala/scala-lang](https://github.com/scala/scala-lang/pulls), +Review pull requests against [scala/scala](https://github.com/scala/scala/pulls), +[scala/scala-lang](https://github.com/scala/scala-lang/pulls), [scala/docs.scala-lang](https://github.com/scala/docs.scala-lang/pulls) and others. diff --git a/_contribute_resources/4-core-libraries.md b/_contribute_resources/4-core-libraries.md index 06f1018479..fb66a906b8 100644 --- a/_contribute_resources/4-core-libraries.md +++ b/_contribute_resources/4-core-libraries.md @@ -1,6 +1,6 @@ --- title: Core Libraries -link: /contribute/corelibs.html +link: /overviews/contribute/corelibs.html icon: fa fa-clipboard --- Update and expand the capabilities of the core (and associated) Scala libraries. diff --git a/_contribute_resources/5-ide-and-build-tools.md b/_contribute_resources/5-ide-and-build-tools.md index 7202f0d953..2bf2c7d729 100644 --- a/_contribute_resources/5-ide-and-build-tools.md +++ b/_contribute_resources/5-ide-and-build-tools.md @@ -1,6 +1,6 @@ --- title: IDE and Build Tools -link: /contribute/tools.html +link: /overviews/contribute/tools.html icon: fa fa-terminal --- Enhance the Scala tools with features for build tools, IDE plug-ins and other related projects. diff --git a/_contribute_resources/6-compiler-language.md b/_contribute_resources/6-compiler-language.md index d54e34fac9..a7dc618322 100644 --- a/_contribute_resources/6-compiler-language.md +++ b/_contribute_resources/6-compiler-language.md @@ -1,6 +1,6 @@ --- title: Compiler/Language -link: /contribute/guide.html#larger-changes-new-features +link: /overviews/contribute/guide.html#larger-changes-new-features icon: fa fa-cogs --- Larger language features and compiler enhancements including language specification and SIPs. diff --git a/_overviews/contribute/bug-reporting-guide.md b/_overviews/contribute/bug-reporting-guide.md index 3e358a30f0..5cbf0a3f46 100644 --- a/_overviews/contribute/bug-reporting-guide.md +++ b/_overviews/contribute/bug-reporting-guide.md @@ -4,7 +4,6 @@ layout: multipage-overview num: 7 partof: scala-contribution overview-name: Contributing to Scala -permalink: /contribute/bug-reporting-guide.html --- The Scala compiler and standard library bug tracker is located at [https://github.com/scala/bug](https://github.com/scala/bug). Before you submit a bug make sure that it is certainly a bug by following instructions in *Is it a Bug?*. diff --git a/_overviews/contribute/codereviews.md b/_overviews/contribute/codereviews.md index 5b5a4a4697..368bf96793 100644 --- a/_overviews/contribute/codereviews.md +++ b/_overviews/contribute/codereviews.md @@ -4,11 +4,10 @@ layout: multipage-overview num: 3 partof: scala-contribution overview-name: Contributing to Scala -permalink: /contribute/codereviews.html --- ## Code Review Contributions -In addition to [bug fixing](/contribute/guide.html), you can help us review +In addition to [bug fixing](/overviews/contribute/guide.html), you can help us review [waiting pull requests](#pull-requests-awaiting-comment). This is also a good (and recommended) way to get to know the feel of the bug-fixing and submissions process before jumping in with your @@ -17,7 +16,7 @@ own pull requests. ### Review Guidelines -[Code of Conduct reminder]({{ site.baseurl }}/conduct.html) +[Code of Conduct reminder](https://scala-lang.org/conduct.html) * Keep comments on-topic, concise and precise. * Attach comments to particular lines or regions they pertain to whenever possible. @@ -53,4 +52,4 @@ own pull requests.
    -Also note that the [Tools contributions](/contribute/tools.html) page has more projects that will generate pull requests. +Also note that the [Tools contributions](/overviews/contribute/tools.html) page has more projects that will generate pull requests. diff --git a/_overviews/contribute/corelibs.md b/_overviews/contribute/corelibs.md index 984f8c4f7c..6c64a887d7 100644 --- a/_overviews/contribute/corelibs.md +++ b/_overviews/contribute/corelibs.md @@ -4,15 +4,14 @@ layout: multipage-overview num: 4 partof: scala-contribution overview-name: Contributing to Scala -permalink: /contribute/corelibs.html --- ## Core Library Contributions There are several options for contributing to Scala's core libraries. You can: -* Help with [Documentation](/contribute/documentation.html). -* [Report Bugs or Issues](/contribute/bug-reporting-guide.html) against the core libraries. -* [Fix Bugs or Issues](/contribute/guide.html) against the +* Help with [Documentation](/overviews/contribute/documentation.html). +* [Report Bugs or Issues](/overviews/contribute/bug-reporting-guide.html) against the core libraries. +* [Fix Bugs or Issues](/overviews/contribute/guide.html) against the [reported library bugs/issues](https://github.com/scala/bug). ### Significant changes diff --git a/_overviews/contribute/documentation.md b/_overviews/contribute/documentation.md index 01cd8a5c15..7fca82ff53 100644 --- a/_overviews/contribute/documentation.md +++ b/_overviews/contribute/documentation.md @@ -4,7 +4,6 @@ layout: multipage-overview num: 5 partof: scala-contribution overview-name: Contributing to Scala -permalink: /contribute/documentation.html --- ## Contributing Documentation to the Scala project @@ -24,11 +23,11 @@ Thanks The Scala API documentation lives with the scala project source code. There are many ways you can help with improving Scaladoc, including: -* [Log issues for missing scaladoc documentation](/contribute/scala-standard-library-api-documentation.html#contribute-api-documentation-bug-reports) - +* [Log issues for missing scaladoc documentation](/overviews/contribute/scala-standard-library-api-documentation.html#contribute-api-documentation-bug-reports) - Please *follow the issue submission process closely* to help prevent duplicate issues being created. -* [Claim Scaladoc Issues and Provide Documentation](/contribute/scala-standard-library-api-documentation.html) - please claim issues prior to working on a specific scaladoc task to prevent duplication of effort. If you sit on an issue for too long without submitting a pull request, it will revert back to unassigned and you will need to re-claim it. +* [Claim Scaladoc Issues and Provide Documentation](/overviews/contribute/scala-standard-library-api-documentation.html) - please claim issues prior to working on a specific scaladoc task to prevent duplication of effort. If you sit on an issue for too long without submitting a pull request, it will revert back to unassigned and you will need to re-claim it. * You can also just -[submit new Scaladoc](/contribute/scala-standard-library-api-documentation.html) +[submit new Scaladoc](/overviews/contribute/scala-standard-library-api-documentation.html) without creating an issue, but please look to see if there is an issue already submitted for your task and claim it if there is. If not, please post your intention to work on a specific scaladoc task on [Scala Contributors](https://contributors.scala-lang.org/) so that people know what you are doing. ### The Main Scala Documentation Site @@ -45,7 +44,7 @@ without creating an issue, but please look to see if there is an issue already s * SIP (Scala Improvement Process) Proposals and more -Please read [contributing to the docs.scala-lang.org site](https://docs.scala-lang.org/contribute.html) through before embarking on changes. The site uses +Please read [contributing to the docs.scala-lang.org site](/contribute.html) through before embarking on changes. The site uses the [Jekyll](https://jekyllrb.com/) markdown engine so you will need to follow the instructions to get that running as well. ### Updating scala-lang.org @@ -56,4 +55,4 @@ to Scala and related projects) is provided on the main [scala-lang GitHub project](https://github.com/scala/scala-lang) which may be forked to create pull requests. Please read both the -[docs.scala-lang.org contribution](https://docs.scala-lang.org/contribute.html) document and the [scala-lang.org GitHub README](https://github.com/scala/scala-lang#scala-langorg) before embarking on any changes to the Scala language site, as it uses the same Jekyll markdown tool and many of the same conventions as the Scala documentation site. +[docs.scala-lang.org contribution](/contribute.html) document and the [scala-lang.org GitHub README](https://github.com/scala/scala-lang#scala-langorg) before embarking on any changes to the Scala language site, as it uses the same Jekyll markdown tool and many of the same conventions as the Scala documentation site. diff --git a/_overviews/contribute/guide.md b/_overviews/contribute/guide.md index 7cafd3d8a3..0b5b146ffc 100644 --- a/_overviews/contribute/guide.md +++ b/_overviews/contribute/guide.md @@ -4,7 +4,6 @@ layout: multipage-overview num: 9 partof: scala-contribution overview-name: Contributing to Scala -permalink: /contribute/guide.html ---
    @@ -14,18 +13,18 @@ permalink: /contribute/guide.html

    Get a peek into the inners of the Scala compiler.

    -

    Report an issue

    +

    Report an issue

    File a bug report or a feature request.

    -

    Community issues

    +

    Community issues

    Get cracking on some easy to approach issues.

    -

    Hacker guide

    +

    Hacker guide

    Learn to write good code and improve your chances of contributing to the Scala galaxy.

    @@ -56,22 +55,22 @@ unencumbered by copyrights or patents. This is the impatient developer's checklist for the steps to submit a bug-fix pull request to the Scala project. For more information, description and justification for the steps, follow the links in that step. Further specific instructions for the release of Scala you are targeting can be found in the `CONTRIBUTING.md` file for that [GitHub branch](https://github.com/scala/scala) -1. [Select a bug to fix from GitHub](/contribute/#community-tickets), or if you found the bug yourself and want to fix it, [create a GitHub issue](/contribute/bug-reporting-guide.html) (but please -[make sure it's not a duplicate](/contribute/bug-reporting-guide.html#reporting-confirmed-bugs-is-a-sin)). -2. Optional ([but recommended](/contribute/scala-internals/#why-its-a-good-idea)), announce your intention to work on the bug on [Scala Contributors](https://contributors.scala-lang.org/). After all, don't you want to work on a team with -[these friendly people](/contribute/hacker-guide.html#1-connect) - it's one of the perks of contributing. -3. [Fork the Scala repository](/contribute/hacker-guide.html#fork) and clone your fork (if you haven't already). -4. [Create a feature branch](/contribute/hacker-guide.html#branch) to work on: use the branch name `issue/NNNN` where NNNN is the GitHub issue number. -5. [Fix the bug, or implement the new small feature](/contribute/hacker-guide.html#implement), include new tests (yes, for bug fixes too). -6. [Test, rinse](/contribute/hacker-guide.html#test) and [test some more](/contribute/partest-guide.html) until [all the tests pass](/contribute/hacker-guide.html#verify). -7. [Commit your changes](/contribute/hacker-guide.html#commit) to your feature branch in your fork. Please choose your commit message based on the [Git Hygiene](https://github.com/scala/scala#user-content-git-hygiene) section of the Scala project README. +1. [Select a bug to fix from GitHub](/overviews/contribute/index.html#community-tickets), or if you found the bug yourself and want to fix it, [create a GitHub issue](/overviews/contribute/bug-reporting-guide.html) (but please +[make sure it's not a duplicate](/overviews/contribute/bug-reporting-guide.html#reporting-confirmed-bugs-is-a-sin)). +2. Optional ([but recommended](/overviews/contribute/scala-internals.html/#why-its-a-good-idea)), announce your intention to work on the bug on [Scala Contributors](https://contributors.scala-lang.org/). After all, don't you want to work on a team with +[these friendly people](/overviews/contribute/hacker-guide.html#1-connect) - it's one of the perks of contributing. +3. [Fork the Scala repository](/overviews/contribute/hacker-guide.html#fork) and clone your fork (if you haven't already). +4. [Create a feature branch](/overviews/contribute/hacker-guide.html#branch) to work on: use the branch name `issue/NNNN` where NNNN is the GitHub issue number. +5. [Fix the bug, or implement the new small feature](/overviews/contribute/hacker-guide.html#implement), include new tests (yes, for bug fixes too). +6. [Test, rinse](/overviews/contribute/hacker-guide.html#test) and [test some more](/overviews/contribute/partest-guide.html) until [all the tests pass](/overviews/contribute/hacker-guide.html#verify). +7. [Commit your changes](/overviews/contribute/hacker-guide.html#commit) to your feature branch in your fork. Please choose your commit message based on the [Git Hygiene](https://github.com/scala/scala#user-content-git-hygiene) section of the Scala project README. 8. If necessary [re-write git history](https://git-scm.com/book/en/Git-Branching-Rebasing) so that [commits are organized by major steps to the fix/feature]( https://github.com/scala/scala#git-hygiene). For bug fixes, a single commit is requested, for features several commits may be desirable (but each separate commit must compile and pass all tests) -9. [Submit a pull request](./hacker-guide.html#submit). -10. [Work with a reviewer](https://github.com/scala/scala#reviewing) to [get your pull request merged in](/contribute/hacker-guide.html#review). +9. [Submit a pull request](/overviews/contribute/hacker-guide.html#submit). +10. [Work with a reviewer](https://github.com/scala/scala#reviewing) to [get your pull request merged in](/overviews/contribute/hacker-guide.html#review). 11. Celebrate! -Need more information or a little more hand-holding for the first one? We got you covered: take a read through the entire [Hacker Guide](./hacker-guide.html) for an example of implementing a new feature (some of the steps can be skipped for bug fixes, this will be obvious from reading it, but many of the steps here will help with bug fixes too). +Need more information or a little more hand-holding for the first one? We got you covered: take a read through the entire [Hacker Guide](/overviews/contribute/hacker-guide.html) for an example of implementing a new feature (some of the steps can be skipped for bug fixes, this will be obvious from reading it, but many of the steps here will help with bug fixes too). ### Larger Changes, New Features @@ -80,4 +79,4 @@ and on the implementation plan. Announce the change on the [Scala Contributors](https://contributors.scala-lang.org/) mailing list and get developer feedback. For really complex changes, a [Scala Improvement Process (SIP)](https://docs.scala-lang.org/sips/) document might be required, but the first step is always to discuss it on the mailing list and if a SIP is required, that will be discussed on the mailing list. Contributions, big or small, simple or complex, controversial or undisputed, need to materialize as patches against -the Scala project source tree. The [hacker guide](/contribute/hacker-guide.html) will explain how to materialize your idea into a full-fledged pull request against the Scala code base. +the Scala project source tree. The [hacker guide](/overviews/contribute/hacker-guide.html) will explain how to materialize your idea into a full-fledged pull request against the Scala code base. diff --git a/_overviews/contribute/hacker-guide.md b/_overviews/contribute/hacker-guide.md index df659678cb..cb83b6218a 100644 --- a/_overviews/contribute/hacker-guide.md +++ b/_overviews/contribute/hacker-guide.md @@ -5,7 +5,6 @@ layout: multipage-overview num: 11 partof: scala-contribution overview-name: Contributing to Scala -permalink: /contribute/hacker-guide.html ---
    This guide is intended to help you get from an idea of fixing a bug or implementing a new feature into a nightly Scala build, and, ultimately, to a production release of Scala incorporating your idea. @@ -32,7 +31,7 @@ Sometimes it's appealing to hack alone and not to have to interact with others o this might not be the very best idea. There are people in the Scala community who have spent years accumulating knowledge about Scala libraries and internals. They might provide unique insights and, what's even better, direct assistance in their areas, so it is not only advantageous, but recommended to communicate with the community about your new patch. -Typically bug fixes and new features start out as an idea or an experiment posted on one of [our mailing lists]({{ site.baseurl }}/community/index.html#forums) to find out how people feel +Typically bug fixes and new features start out as an idea or an experiment posted on one of [our mailing lists](https://scala-lang.org/community/index.html#forums) to find out how people feel about things you want to implement. People proficient in certain areas of Scala usually monitor mailing lists, so you'll often get some help by simply posting a message. But the most efficient way to connect is to cc your message to one of the people responsible for maintaining the aspect of Scala which you wish to contribute to. @@ -200,7 +199,7 @@ Contributing to the Scala standard library is about the same as working on one o If documentation is necessary for some trait/class/object/method/etc in the Scala standard library, typically maintainers will include inline comments describing their design decisions or rationale for implementing things the way they have, if it is not straightforward. -If you intend on contributing to Scala collections, please make sure you're familiar with the design of the Scala collections library. It can be easy to put an implementation in the wrong location if you are unfamiliar with the collections architecture. There is an excellent and very detailed guide covering [the Architecture of Scala Collections](https://docs.scala-lang.org/overviews/core/architecture-of-scala-collections.html), as well as a larger more general [Scala collections Guide](https://docs.scala-lang.org/overviews/collections/introduction.html) covering the sequential portion of collections. For parallel collections, there also exists a detailed [Scala Parallel Collections Guide](https://docs.scala-lang.org/overviews/parallel-collections/overview.html). +If you intend on contributing to Scala collections, please make sure you're familiar with the design of the Scala collections library. It can be easy to put an implementation in the wrong location if you are unfamiliar with the collections architecture. There is an excellent and very detailed guide covering [the Architecture of Scala Collections](/overviews/core/architecture-of-scala-collections.html), as well as a larger more general [Scala collections Guide](/overviews/collections/introduction.html) covering the sequential portion of collections. For parallel collections, there also exists a detailed [Scala Parallel Collections Guide](/overviews/parallel-collections/overview.html). ##### The Scala Compiler @@ -208,7 +207,7 @@ Documentation about the internal workings of the Scala compiler is scarce, and m * [Compiler internals videos by Martin Odersky](https://www.scala-lang.org/old/node/598.html) are quite dated, but still very useful. In this three-video series Martin explains the general architecture of the compiler, and the basics of the front-end, which has recently become Scala reflection API. -* [Reflection documentation](https://docs.scala-lang.org/overviews/reflection/overview.html) describes fundamental data structures (like `Tree`s, `Symbol`s, and `Types`) that +* [Reflection documentation](/overviews/reflection/overview.html) describes fundamental data structures (like `Tree`s, `Symbol`s, and `Types`) that are used to represent Scala programs and operations defined on then. Since much of the compiler has been factored out and made accessible via the Reflection API, all of the fundamentals needed for reflection are the same for the compiler. * [Reflection and Compilers by Martin Odersky](https://channel9.msdn.com/Events/Lang-NEXT/Lang-NEXT-2012/Reflection-and-Compilers), a talk at Lang.NEXT 2012 in which Martin elaborates on the design of scalac and the architecture of the reflection API. @@ -266,7 +265,7 @@ Adding tests to the test suite is as easy as moving them to the appropriate dire * Code which should compile successfully, but doesn't need to be executed, needs to go into the [“pos” directory](https://github.com/scala/scala/tree/2.12.x/test/files/pos). * Code which should not compile needs to go into the [“neg” directory](https://github.com/scala/scala/tree/2.12.x/test/files/neg). -* Code which should compile and get executed by the test suite needs to go into the [“run” directory](https://github.com/scala/scala/tree/2.12.x/test/files/run) and have a corresponding `.check` file with the expected output. You will get test failures if the content of a `.check` file is different from what the test produces while running. If the change in the output is an expected product of your work, you might not want to change the `.check` file by hand. To make partest change the `.check` file, run it with a `--update-check` flag, like so `./test/partest --update-check path/to/test.scala`. For more information on partest, please refer to its [documentation](https://docs.scala-lang.org/tutorials/partest-guide.html). +* Code which should compile and get executed by the test suite needs to go into the [“run” directory](https://github.com/scala/scala/tree/2.12.x/test/files/run) and have a corresponding `.check` file with the expected output. You will get test failures if the content of a `.check` file is different from what the test produces while running. If the change in the output is an expected product of your work, you might not want to change the `.check` file by hand. To make partest change the `.check` file, run it with a `--update-check` flag, like so `./test/partest --update-check path/to/test.scala`. For more information on partest, please refer to its [documentation](https://github.com/scala/scala-partest). * Everything that can be unit-tested should go to ["junit" directory](https://github.com/scala/scala/tree/2.12.x/test/junit) * Property-based tests go to the ["scalacheck" directory](https://github.com/scala/scala/tree/2.12.x/test/scalacheck) @@ -311,7 +310,7 @@ This means your change is backward or forward binary incompatible with the speci ### Verify -Now to make sure that my fix doesn't break anything I need to run the test suite. The Scala test suite uses [JUnit](https://junit.org/junit4/) and [partest](partest-guide.html), a tool we wrote for testing Scala. +Now to make sure that my fix doesn't break anything I need to run the test suite. The Scala test suite uses [JUnit](https://junit.org/junit4/) and [partest](/overviews/contribute/partest-guide.html), a tool we wrote for testing Scala. Run `sbt test` and `sbt partest` to run all of the JUnit and partest tests, respectively. `partest` (not `sbt partest`) also allows you to run a subset of the tests using wildcards: diff --git a/_overviews/contribute/inclusive-language-guide.md b/_overviews/contribute/inclusive-language-guide.md index d673d57ad8..7f7c428f42 100644 --- a/_overviews/contribute/inclusive-language-guide.md +++ b/_overviews/contribute/inclusive-language-guide.md @@ -4,7 +4,6 @@ layout: multipage-overview num: 2 partof: scala-contribution overview-name: Contributing to Scala -permalink: /contribute/inclusive-language/ --- We are committed to providing a friendly, safe and welcoming environment for @@ -131,4 +130,4 @@ In those cases, we recommend to keep the old names, but document (e.g., in Scala ## See also -* Our [code of conduct](../../conduct/). +* Our [code of conduct](https://scala-lang.org/conduct/). diff --git a/_overviews/contribute/index.md b/_overviews/contribute/index.md index ac513b0009..8b7dad1e83 100644 --- a/_overviews/contribute/index.md +++ b/_overviews/contribute/index.md @@ -4,7 +4,6 @@ layout: multipage-overview num: 1 partof: scala-contribution overview-name: Contributing to Scala -permalink: /contribute/ --- The Scala programming language is an open source project with a very @@ -19,7 +18,7 @@ That depends on what you want to contribute. Below are some getting started reso ### Reporting bugs -See our [bug reporting guide](/contribute/bug-reporting-guide.html) to learn +See our [bug reporting guide](/overviews/contribute/bug-reporting-guide.html) to learn how to efficiently report a bug. ### Contribute @@ -33,8 +32,8 @@ Coordination of contribution efforts takes place on When contributing, please follow: -* The [Scala Code of Conduct](../conduct/) -* The [Inclusive Language Guide](./inclusive-language/) +* The [Scala Code of Conduct](https://scala-lang.org/conduct/) +* The [Inclusive Language Guide](/overviews/contribute/inclusive-language-guide.html) ### Community Tickets @@ -48,7 +47,7 @@ with their own maintainers and community of contributors. Helping out one of these projects is another way to help Scala. Consider lending on a hand on a project you're already using. Or, to find out about other projects, see the -[Libraries and Tools section](/community/#community-libraries-and-tools) +[Libraries and Tools section](https://scala-lang.org/community/#community-libraries-and-tools) on our Community page. ### Scala Community Build diff --git a/_overviews/contribute/partest-guide.md b/_overviews/contribute/partest-guide.md index 8f4dff394b..6fb5a2644b 100644 --- a/_overviews/contribute/partest-guide.md +++ b/_overviews/contribute/partest-guide.md @@ -4,7 +4,6 @@ layout: multipage-overview num: 12 partof: scala-contribution overview-name: Contributing to Scala -permalink: /contribute/partest-guide.html --- Partest is a custom parallel testing tool that we use to run the test suite for the Scala compiler and library. Go to the scala project folder from your local checkout and run it via `sbt`, `ant` or standalone as follows. diff --git a/_overviews/contribute/scala-internals.md b/_overviews/contribute/scala-internals.md index f52faa5c18..82346bcb15 100644 --- a/_overviews/contribute/scala-internals.md +++ b/_overviews/contribute/scala-internals.md @@ -4,7 +4,6 @@ layout: multipage-overview num: 8 partof: scala-contribution overview-name: Contributing to Scala -permalink: /contribute/scala-internals/ --- ## scala-internals diff --git a/_overviews/contribute/scala-standard-library-api-documentation.md b/_overviews/contribute/scala-standard-library-api-documentation.md index 97e3d708f9..977e733528 100644 --- a/_overviews/contribute/scala-standard-library-api-documentation.md +++ b/_overviews/contribute/scala-standard-library-api-documentation.md @@ -4,7 +4,6 @@ layout: multipage-overview num: 6 partof: scala-contribution overview-name: Contributing to Scala -permalink: /contribute/scala-standard-library-api-documentation.html --- This page is specific to API documentation contributions – that is, API @@ -13,8 +12,8 @@ documentation for sometimes referred to as Scaladoc contributions. For contributions to tutorial and guide-style documentation on -[docs.scala-lang.org](https://docs.scala-lang.org), -see the ["doc-site"'s contribution guide](https://docs.scala-lang.org/contribute.html). +[docs.scala-lang.org](/), +see the ["doc-site"'s contribution guide](/contribute.html). *Please note, these instructions cover documentation contributions Scala core libraries only. For other Scala projects please check those projects for the @@ -79,7 +78,7 @@ component so that they show up in the correct issue filters. Please familiarize yourself with the following before contributing new API documentation to save time, effort, mistakes and repetition. -* [Forking the Repo](./hacker-guide.html#2-set-up) - follow the setup steps through +* [Forking the Repo](/overviews/contribute/hacker-guide.html#2-set-up) - follow the setup steps through the Branch section. If providing new documentation related to an existing GitHub issue, use `issue/NNNN` or `ticket/NNNN` as the guide states. If providing API documentation with no associated GitHub issue, use `scaladoc/xxxx` instead. diff --git a/_overviews/contribute/tools.md b/_overviews/contribute/tools.md index 6df7c454a9..b7ae46b9ed 100644 --- a/_overviews/contribute/tools.md +++ b/_overviews/contribute/tools.md @@ -4,7 +4,6 @@ layout: multipage-overview num: 10 partof: scala-contribution overview-name: Contributing to Scala -permalink: /contribute/tools.html # Projects list: projects: @@ -23,7 +22,7 @@ projects: homeLink: https://www.scala-lang.org/api issuesLink: https://github.com/scala/bug/labels/scaladoc readmeLink: https://github.com/scala/scala#welcome - contributingLink: https://scala-lang.org/contribute/guide.html + contributingLink: /overviews/contribute/guide.html - title: Scala IDE description: Interactive build tool. icon: https://avatars2.githubusercontent.com/u/1026788?v=3&s=200 @@ -70,7 +69,7 @@ projectsInNeed: The links below are to a number of Scala build and IDE related projects that are important in the larger Scala space, and which welcome contributions. -Since these tools are in separate projects, they may (and likely will) have their own rules and guidelines for contributing. The [Hacker Guide](/contribute/hacker-guide.html) and [Bug-fixing](/contribute/guide.html) pages will likely have much in the way of related information on how to contribute to these projects, and are recommended reading. You should also check the README.md and (if it's present) CONTRIBUTING.md files from the actual projects before contributing to them. +Since these tools are in separate projects, they may (and likely will) have their own rules and guidelines for contributing. The [Hacker Guide](/overviews/contribute/hacker-guide.html) and [Bug-fixing](/overviews/contribute/guide.html) pages will likely have much in the way of related information on how to contribute to these projects, and are recommended reading. You should also check the README.md and (if it's present) CONTRIBUTING.md files from the actual projects before contributing to them. Typically, issues for these projects will be reported and kept in the GitHub project issue tracker for that project rather than in the Scala bug tracker. @@ -82,7 +81,7 @@ if you would like to help revive them. ### Broken Links? -Stuff changes. Found a broken link or something that needs updating on this page? Please, consider [submitting a documentation pull request](/contribute/documentation.html#updating-scala-langorg) to fix it. +Stuff changes. Found a broken link or something that needs updating on this page? Please, consider [submitting a documentation pull request](/overviews/contribute/documentation.html#updating-scala-langorg) to fix it. ### Projects From 9d9f0968e4635dc5eaf74cc0053b091e22eb2811 Mon Sep 17 00:00:00 2001 From: Antoine Pointeau Date: Mon, 21 Mar 2022 14:04:32 +0100 Subject: [PATCH 0597/1870] Translation for fr/extractor-objects (#2268) --- _fr/tour/extractor-objects.md | 58 +++++++++++++++++++++++++++++++++-- 1 file changed, 56 insertions(+), 2 deletions(-) diff --git a/_fr/tour/extractor-objects.md b/_fr/tour/extractor-objects.md index ac5c1dc013..9ffc529a58 100644 --- a/_fr/tour/extractor-objects.md +++ b/_fr/tour/extractor-objects.md @@ -3,10 +3,64 @@ layout: tour title: Extractor Objects partof: scala-tour -num: 14 +num: 18 language: fr -next-page: generic-classes +next-page: for-comprehensions previous-page: regular-expression-patterns --- + +Un objet extracteur est un objet avec une méthode `unapply`. Tandis que la méthode `apply` ressemble à un constructeur qui prend des arguments et crée un objet, `unapply` prend un object et essaye de retourner ses arguments. Il est utilisé le plus souvent en filtrage par motif (*pattern matching*) ou avec les fonctions partielles. + +```scala mdoc +import scala.util.Random + +object CustomerID { + + def apply(name: String) = s"$name--${Random.nextLong}" + + def unapply(customerID: String): Option[String] = { + val stringArray: Array[String] = customerID.split("--") + if (stringArray.tail.nonEmpty) Some(stringArray.head) else None + } +} + +val customer1ID = CustomerID("Sukyoung") // Sukyoung--23098234908 +customer1ID match { + case CustomerID(name) => println(name) // prints Sukyoung + case _ => println("Could not extract a CustomerID") +} +``` + +La méthode `apply` crée une chaîne de caractères `CustomerID` depuis `name`. La méthode `unapply` fait l'inverse pour retrouver le `name`. Lorsqu'on appelle `CustomerID("Sukyoung")`, c'est un raccourci pour `CustomerID.apply("Sukyoung")`. Lorsqu'on appelle `case CustomerID(name) => println(name)`, on appelle la méthode `unapply` avec `CustomerID.unapply(customer1ID)`. + +Sachant qu'une définition de valeur peut utiliser une décomposition pour introduire une nouvelle variable, un extracteur peut être utilisé pour initialiser la variable, avec la méthode `unapply` pour fournir la valeur. + +```scala mdoc +val customer2ID = CustomerID("Nico") +val CustomerID(name) = customer2ID +println(name) // prints Nico +``` + +C'est équivalent à `val name = CustomerID.unapply(customer2ID).get`. + +```scala mdoc +val CustomerID(name2) = "--asdfasdfasdf" +``` + +S'il n'y a pas de correspondance, une `scala.MatchError` est levée : + +```scala +val CustomerID(name3) = "-asdfasdfasdf" +``` + +Le type de retour de `unapply` doit être choisi comme suit : + +* Si c'est juste un test, retourner un `Boolean`. Par exemple, `case even()`. +* Si cela retourne une seule sous-valeur de type T, retourner un `Option[T]`. +* Si vous souhaitez retourner plusieurs sous-valeurs `T1,...,Tn`, groupez-les dans un tuple optionnel `Option[(T1,...,Tn)]`. + +Parfois, le nombre de valeurs à extraire n'est pas fixe et on souhaiterait retourner un nombre arbitraire de valeurs, en fonction des données d'entrée. Pour ce cas, vous pouvez définir des extracteurs avec la méthode `unapplySeq` qui retourne un `Option[Seq[T]]`. Un exemple commun d'utilisation est la déconstruction d'une liste en utilisant `case List(x, y, z) =>`. Un autre est la décomposition d'une `String` en utilisant une expression régulière `Regex`, comme `case r(name, remainingFields @ _*) =>`. + +Traduit par Antoine Pointeau. \ No newline at end of file From ef8f171b14742544916c206bada7517d7cb99d53 Mon Sep 17 00:00:00 2001 From: Jamie Thompson Date: Mon, 21 Mar 2022 14:32:32 +0100 Subject: [PATCH 0598/1870] modernise the content somewhat --- _contribute_resources/3-code-reviews.md | 1 + _overviews/contribute/bug-reporting-guide.md | 29 +++---- _overviews/contribute/codereviews.md | 47 ++++++----- _overviews/contribute/guide.md | 44 ++++------ _overviews/contribute/index.md | 2 +- _overviews/contribute/scala-internals.md | 84 +++++++++++-------- ...cala-standard-library-api-documentation.md | 9 +- _overviews/contribute/tools.md | 61 +++++--------- 8 files changed, 137 insertions(+), 140 deletions(-) diff --git a/_contribute_resources/3-code-reviews.md b/_contribute_resources/3-code-reviews.md index 41f6821414..e6f15e271c 100644 --- a/_contribute_resources/3-code-reviews.md +++ b/_contribute_resources/3-code-reviews.md @@ -4,5 +4,6 @@ link: /overviews/contribute/codereviews.html icon: fa fa-eye --- Review pull requests against [scala/scala](https://github.com/scala/scala/pulls), +[lampepfl/dotty](https://github.com/lampepfl/dotty/pulls), [scala/scala-lang](https://github.com/scala/scala-lang/pulls), [scala/docs.scala-lang](https://github.com/scala/docs.scala-lang/pulls) and others. diff --git a/_overviews/contribute/bug-reporting-guide.md b/_overviews/contribute/bug-reporting-guide.md index 5cbf0a3f46..9545ecdc53 100644 --- a/_overviews/contribute/bug-reporting-guide.md +++ b/_overviews/contribute/bug-reporting-guide.md @@ -6,7 +6,7 @@ partof: scala-contribution overview-name: Contributing to Scala --- -The Scala compiler and standard library bug tracker is located at [https://github.com/scala/bug](https://github.com/scala/bug). Before you submit a bug make sure that it is certainly a bug by following instructions in *Is it a Bug?*. +The Scala compiler and standard library bug tracker is located at [https://github.com/scala/bug](https://github.com/scala/bug), and for Scala 3, it is located at [github.com/lampepfl/dotty](https://github.com/lampepfl/dotty/issues). Before you submit a bug make sure that it is certainly a bug by following instructions in *Is it a Bug?*. ## Is it a Bug? @@ -22,7 +22,6 @@ If your issue is related to any of the following external projects, make sure to - [Akka](https://doc.akka.io/docs/akka/current/project/issue-tracking.html) - [Play!](https://github.com/playframework/Play20/issues) - [Slick](https://github.com/slick/slick/issues) - - [Scala IDE](https://scala-ide-portfolio.assembla.com/spaces/scala-ide/support/tickets) - [sbt](https://github.com/sbt/sbt/issues) The following are generally considered to be bugs: @@ -53,10 +52,10 @@ In general, if you find yourself stuck on any of these steps, asking on [Scala C - For compiler bugs use the [Compiler Category](https://contributors.scala-lang.org/c/compiler). * Examples of exceptions reported by the compiler which usually are not bugs: - 1. `StackOverflowError` is typically not a bug unless the stacktrace involves the internal packages of the compiler (like `scala.tools.nsc...`). Try to increase the Java stack size (`-Xss`), in most of the cases it helps. + 1. `StackOverflowError` is typically not a bug unless the stacktrace involves the internal packages of the compiler (like `scala.tools.nsc...`, or `dotty.tools.dotc...`). Try to increase the Java stack size (`-Xss`), in most of the cases it helps. 2. `AbstractMethodError` can occur when you did not recompile all the necessary Scala files (build tools, like `sbt`, can prevent that from happening) or you are mixing external libraries compiled for different Scala versions (for example one uses `2.10.x` and the other `2.11.x`). -## Reporting Confirmed Bugs is a Sin +## Please Check Before Reporting a Bug Before reporting your bug, make sure to check the issue tracker for other similar bugs. The exception name or a compiler phase are the best keywords to search for. If you are experiencing unexpected behavior search for method/class names where it happens. Your issue might already be reported, and a workaround might already be available for you take advantage of. If your issue *is* reported, be sure to add your test case as a comment if it is different from any of the existing ones. @@ -68,7 +67,7 @@ If you cannot find your issue in the issue tracker, create a new bug. The detail Please make sure to fill in as many fields as possible. Make sure you've indicated the following: - 1. **Exact Scala version** that you are using. For example, `2.10.1` or `2.11.0-RC`. If the bug happens in multiple versions indicate all of them. + 1. **Exact Scala version** that you are using. For example, `2.13.8` or `3.1.2-RC1`. If the bug happens in multiple versions indicate all of them. 2. **The component** that is affected by the bug. For example, the Standard Library, Scaladoc, etc. 3. **Labels** related to your issue. For example, if you think your issue is related to the typechecker, and if you have successfully minimized your issue, label your bug as "typechecker" and "minimized". Issue tracker will suggest names for existing labels as you type them so try not to create duplicates. 4. **Running environment**. Are you running on Linux? Windows? What JVM version are you using? @@ -78,12 +77,14 @@ In order for us to quickly triage the bug that you've found, it's important that ### Description In the description of your issue, be as detailed as you can. Bug reports which have the following information included are typically understood, triaged, and fixed very quickly: - - 1. Include a test case (minimized if possible) enabling us to reproduce the problematic behavior. Include your test case (and output) in proper formatting `{code}` blocks: - - {code}Here you put your classes{code} - - 2. The expected output. - 3. The actual output, including the stacktrace. - 4. Related discussion on the mailing lists, if applicable. - 5. If you have already looked into the issue provide interesting insights or proposals for fixing the issue. +1. Include a test case (minimized if possible) enabling us to reproduce the problematic behavior. Include your test +case (and output) in properly formatted code blocks: +~~~ +```scala +List(1, 2, 3).map(x => x + 1) +``` +~~~ +2. The expected output. +3. The actual output, including the stacktrace. +4. Related discussion on the mailing lists, if applicable. +5. If you have already looked into the issue provide interesting insights or proposals for fixing the issue. diff --git a/_overviews/contribute/codereviews.md b/_overviews/contribute/codereviews.md index 368bf96793..e7dea2acea 100644 --- a/_overviews/contribute/codereviews.md +++ b/_overviews/contribute/codereviews.md @@ -29,27 +29,32 @@ own pull requests. ## Pull Requests Awaiting Comment
    -
    -
    -

    scala/scala

    -

    Scala bug fixes and changes in the language, core libs and included tools.

    -
    -
    -

    scala/scala.github.com

    -

    Scala documentation site.

    -
    -
    - -
    -
    -

    scala/scala-lang

    -

    The Scala language web site.

    -
    -
    -

    All Scala GitHub Projects

    -

    For other PRs, follow the scala project from here.

    -
    -
    +
    +
    +

    lampepfl/dotty

    +

    Scala 3 bug fixes and changes in the language, core libs and included tools.

    +
    +
    +

    scala/scala

    +

    Scala 2 bug fixes and changes in the language, core libs and included tools.

    +
    +
    +
    +
    +

    scala/scala-lang

    +

    The Scala language web site.

    +
    +
    +

    scala/docs.scala-lang.org

    +

    Scala documentation site.

    +
    +
    +
    +
    +

    All Scala GitHub Projects

    +

    For other PRs, follow the scala project from here.

    +
    +
    Also note that the [Tools contributions](/overviews/contribute/tools.html) page has more projects that will generate pull requests. diff --git a/_overviews/contribute/guide.md b/_overviews/contribute/guide.md index 0b5b146ffc..5acc188a27 100644 --- a/_overviews/contribute/guide.md +++ b/_overviews/contribute/guide.md @@ -6,29 +6,13 @@ partof: scala-contribution overview-name: Contributing to Scala --- -
    -
    -
    -

    Scala Contributors

    -

    Get a peek into the inners of the Scala compiler.

    -
    -
    -

    Report an issue

    -

    File a bug report or a feature request.

    -
    -
    - -
    -
    -

    Community issues

    -

    Get cracking on some easy to approach issues.

    -
    -
    -

    Hacker guide

    -

    Learn to write good code and improve your chances of contributing to the Scala galaxy.

    -
    -
    -
    +| **Shortcut** | **Description** | +|----------------------------------------|-----------------| +| [Scala Contributors][contrib-forum] | Get a peek into the inners of the Scala compiler. | +| [Report an Issue][bug-reporting-guide] | File a bug report or a feature request. | +| [Community Issues][community-tickets] | Get cracking on some easy to approach issues. | +| [Scala 2 Hacker's Guide][hackers] | Learn to write good code and improve your chances of contributing to the Scala galaxy. | +| [Scala 3 Contributing Guide][scala3-hackers] | Walkthrough contributing to the Scala 3 compiler, along with a guide to compiler internals. | @@ -52,11 +36,13 @@ which allows us to ensure that all code submitted to the project is unencumbered by copyrights or patents. ### Bug-fix Check List +> Originally these steps cover the [Scala 2 compiler](https://github.com/scala/scala), but they also are relevant to +> the [Scala 3 compiler](https://github.com/lampepfl/dotty). This is the impatient developer's checklist for the steps to submit a bug-fix pull request to the Scala project. For more information, description and justification for the steps, follow the links in that step. Further specific instructions for the release of Scala you are targeting can be found in the `CONTRIBUTING.md` file for that [GitHub branch](https://github.com/scala/scala) 1. [Select a bug to fix from GitHub](/overviews/contribute/index.html#community-tickets), or if you found the bug yourself and want to fix it, [create a GitHub issue](/overviews/contribute/bug-reporting-guide.html) (but please -[make sure it's not a duplicate](/overviews/contribute/bug-reporting-guide.html#reporting-confirmed-bugs-is-a-sin)). +[make sure it's not a duplicate](/overviews/contribute/bug-reporting-guide.html#please-check-before-reporting-a-bug)). 2. Optional ([but recommended](/overviews/contribute/scala-internals.html/#why-its-a-good-idea)), announce your intention to work on the bug on [Scala Contributors](https://contributors.scala-lang.org/). After all, don't you want to work on a team with [these friendly people](/overviews/contribute/hacker-guide.html#1-connect) - it's one of the perks of contributing. 3. [Fork the Scala repository](/overviews/contribute/hacker-guide.html#fork) and clone your fork (if you haven't already). @@ -70,7 +56,7 @@ https://github.com/scala/scala#git-hygiene). For bug fixes, a single commit is r 10. [Work with a reviewer](https://github.com/scala/scala#reviewing) to [get your pull request merged in](/overviews/contribute/hacker-guide.html#review). 11. Celebrate! -Need more information or a little more hand-holding for the first one? We got you covered: take a read through the entire [Hacker Guide](/overviews/contribute/hacker-guide.html) for an example of implementing a new feature (some of the steps can be skipped for bug fixes, this will be obvious from reading it, but many of the steps here will help with bug fixes too). +Need more information or a little more hand-holding for the first one? We got you covered: take a read through the entire [Hacker Guide][hackers] (or the [equivalent Scala 3 Contributing Guide][scala3-hackers]) for an example of implementing a new feature (some of the steps can be skipped for bug fixes, this will be obvious from reading it, but many of the steps here will help with bug fixes too). ### Larger Changes, New Features @@ -79,4 +65,10 @@ and on the implementation plan. Announce the change on the [Scala Contributors](https://contributors.scala-lang.org/) mailing list and get developer feedback. For really complex changes, a [Scala Improvement Process (SIP)](https://docs.scala-lang.org/sips/) document might be required, but the first step is always to discuss it on the mailing list and if a SIP is required, that will be discussed on the mailing list. Contributions, big or small, simple or complex, controversial or undisputed, need to materialize as patches against -the Scala project source tree. The [hacker guide](/overviews/contribute/hacker-guide.html) will explain how to materialize your idea into a full-fledged pull request against the Scala code base. +the Scala project source tree. The hacker's guides ([Scala 2][hackers], or [Scala 3][scala3-hackers]) will explain how to materialize your idea into a full-fledged pull request against the Scala code base. + +[hackers]: /overviews/contribute/hacker-guide.html +[community-tickets]: /overviews/contribute/index.html#community-tickets +[bug-reporting-guide]: /overviews/contribute/bug-reporting-guide.html +[scala3-hackers]: {% link _overviews/scala3-contribution/procedures-intro.md %} +[contrib-forum]: https://contributors.scala-lang.org/ diff --git a/_overviews/contribute/index.md b/_overviews/contribute/index.md index 8b7dad1e83..b89f04803a 100644 --- a/_overviews/contribute/index.md +++ b/_overviews/contribute/index.md @@ -37,7 +37,7 @@ When contributing, please follow: ### Community Tickets -All issues can be found in the [Scala bug tracker](https://github.com/scala/bug). Most issues are labeled +All issues can be found in the [Scala bug tracker](https://github.com/scala/bug), or the [Scala 3 issue tracker](https://github.com/lampepfl/dotty/issues). Most issues are labeled to make it easier to find issues you are interested in. ### Tools and Libraries diff --git a/_overviews/contribute/scala-internals.md b/_overviews/contribute/scala-internals.md index 82346bcb15..ac5be2fd85 100644 --- a/_overviews/contribute/scala-internals.md +++ b/_overviews/contribute/scala-internals.md @@ -1,47 +1,63 @@ --- -title: Scala Internals Mailing List +title: Scala Contributors Forum layout: multipage-overview num: 8 partof: scala-contribution overview-name: Contributing to Scala --- -## scala-internals - -The [scala-internals mailing list](https://groups.google.com/d/forum/scala-internals) is where technical and logistical discussions concerning bugs, bug fixes, documentation, improvements, new features and other contributor related topics occur. - -### Coordinating on scala-internals - -Prior to commencing on contribution work on larger changes to the Scala project, it is recommended (but not required) that you make a post on scala-internals announcing your intention. It's a great time to invite any help, advice or ask any questions you might have. It's also a great place to meet peers, one of whom will probably be reviewing your contribution at some point. For smaller bug fixes or documentation changes where the risk of effort duplication is minimal, you can skip this post. - -To help subscribers on the scala-internals list to sort through the postings, we request that the following topic labels are applied when you start a new post please: - -| Label | Topics | -|-----------|-------------------------------------------------------| -| [docs] | Documentation, e.g. docs.scala-lang.org, API (scaladoc), etc. | -| [issues] | Bug reporting/fixing | -| [tools] | Tools including sbt, IDE plugins, testing, scaladoc generator, etc. | -| [libs] | Core libraries, extension libraries | -| [compiler] | Scala compiler discussions/features/issues | -| [admin] | Administrative/coordination topics | - -So, to talk about this list (an admin activity primarily) one might use: - -`[admin] more suggested labels for topic differentiation.` - -as a title, which then shows up on the mailing lists as - -`[scala-internals] [admin] more suggested labels for topic differentiation.` +The [Scala Contributors Forum][scala-contributors] is where discussions about the Scala ecosystem +occur, from the perspectives of core compiler, documentation and library contributors. It features updates from the +Scala Center, along with technical and logistical discussions concerning bugs, bug fixes, documentation, improvements, +new features and other contributor related topics. + +> The now legacy [scala-internals mailing list](https://groups.google.com/d/forum/scala-internals) used to fulfil this +> purpose, but has since expanded to encompass more topics in the new [forum][scala-contributors]. + +## Coordinating on Scala Contributors + +Prior to commencing on contribution work on larger changes to the Scala project, it is recommended (but not required) +that you make a post on [Scala Contributors][scala-contributors] announcing your intention. +It's a great time to invite any help, advice or ask any questions you might have. It's also a great place to meet peers, +one of whom will probably be reviewing your contribution at some point. +For smaller bug fixes or documentation changes where the risk of effort duplication is minimal, you can skip this post. + +To help users to sort through the posts, we request that the following categories are applied when you start a +new post please: + +| Category | Topics | +|-----------------------------|---------------------------------------------------------------------| +| `Documentation` | Documentation, e.g. docs.scala-lang.org, API (scaladoc), etc. | +| `Compiler` | Bug reporting/fixing, Scala compiler discussions/issues | +| `Tooling` | Tools including sbt, IDE plugins, testing, scaladoc generator, etc. | +| `Scala Standard Library` | Core libraries | +| `Scala Platform` | Extension libraries | +| `Language Design` | Scala language feature discussions / informal proposals | +| `Scala Improvement Process` | Scala language feature formal proposals | +| `Meta Discourse` | Administrative/coordination topics | +| `Community` | Discussions about events, community organising | ### Why It's a Good Idea -While it is optional to announce your intentions/work items on scala-internals before starting, it is recommended and a smart thing to do for a number of reasons: +While it is optional to announce your intentions/work items on [Scala Contributors][scala-contributors] before starting, it is recommended thing to do for a number of reasons: * To attempt to cut down on duplicate effort (i.e. to avoid two people working on the same bug at the same time without coordinating effort). * Related to the above: to allow the compiler team and core committers to warn of or smooth over potential merge conflicts between separate bugs that might affect the same code. -* Potentially someone has already thought about or even worked on that issue or a related one, and has valuable insight that might save you time (including warnings about what you might find and may want to avoid - dead ends that have already been explored). -* You might find a group of impassioned individuals want to volunteer to help you, since you got there first with your post it's up to you to decide if you want help or not. -* Posting could start a dialog with a potential reviewer, smoothing the latter, merge stages of the issue. -* There are a lot of nice people waiting to talk to you on scala-internals, you might be surprised how valuable and pleasant you find the experience of talking to them. - -If all of this has not convinced you then, please, go ahead and work on contributions anyway. It *is* less important to post to scala-internals first for small, self contained bugs than it is for larger issues or features, and not having posted first will not be a reason for your PR to be rejected, it just might be a rougher review/merge process than if you had posted first. It's your choice. +* Potentially someone has already thought about or even worked on that issue or a related one, and has valuable insight +that might save you time (including warnings about what you might find and may want to avoid - perhaps one option +already tried lead to no benefit). +* You might find a group of impassioned individuals who want to volunteer and help you. You will have the momentum since +you posted first, so then it's up to you to decide if you want their help or not. +* Posting could start a dialog with a potential reviewer, smoothing the later stages of your contribution before +merging your changes. +* There are a lot of nice people waiting to talk to you on [Scala Contributors][scala-contributors], you might be +surprised how valuable and pleasant you find the experience of talking to them. + +Even if you do not wish to post on [Scala Contributors][scala-contributors], please feel welcome to make contributions +anyway, as posting to the forum is *not* criteria for it to be accepted. For smaller, self-contained bugs it is +especially less important to make a post, however larger issues or features take more time to consider accepting them. +For large contributions we strongly recommend that you do to notify of your intention, which will help you determine if +there is large community support for your change, making it more likely that your large contribution will accepted, +before you spend a long time implementing it. + +[scala-contributors]: https://contributors.scala-lang.org diff --git a/_overviews/contribute/scala-standard-library-api-documentation.md b/_overviews/contribute/scala-standard-library-api-documentation.md index 977e733528..ba59855392 100644 --- a/_overviews/contribute/scala-standard-library-api-documentation.md +++ b/_overviews/contribute/scala-standard-library-api-documentation.md @@ -43,7 +43,8 @@ and identify missing, incorrect or inadequate documentation. A good place to sta package objects for important packages (these often get overlooked for documentation and are a good place for API overviews). -If you find an issue, please log it in the [Scala bug tracker](https://github.com/scala/bug) +If you find an issue, please log it in the [Scala bug tracker](https://github.com/scala/bug), +(or else the [Scala 3 issue tracker](https://github.com/lampepfl/dotty/issues) for Scala 3 library additions) **after making sure it is not already logged as an issue**. To help with disambiguation, please use the following format for issue title: @@ -112,10 +113,10 @@ PR is merged in smoothly: Scala code is likely to flag as mis-spelled sometimes, but any written language should be checked. If you can also use a grammar checker, even better. We *will* ask for spelling and grammar to be corrected before acceptance. -* You **must** also run `ant docs`, fix any problems and check the formatting and +* You **must** also run `sbt doc`, fix any problems and check the formatting and layout of your changes. Again, corrections will be required if formatting or - layout are inadequate. After running `ant docs` the generated documents can be - found under the `build/scaladoc/` folders (probably in the `library` folder + layout are inadequate. After running `sbt doc` the generated documents can be + found under the `build/scaladoc/` folders (probably in the `library` subdirectory but maybe under the others depending on what section of the Scala source you are working on). * All of these steps are required to save time for both the reviewers and diff --git a/_overviews/contribute/tools.md b/_overviews/contribute/tools.md index b7ae46b9ed..4ce5a3be0a 100644 --- a/_overviews/contribute/tools.md +++ b/_overviews/contribute/tools.md @@ -8,8 +8,8 @@ overview-name: Contributing to Scala # Projects list: projects: - title: sbt - description: Interactive build tool. - icon: https://www.scala-sbt.org/assets/typesafe_sbt_svg.svg + description: The interactive build tool. + icon: https://www.scala-sbt.org/assets/sbt-logo.svg link: https://github.com/sbt/sbt homeLink: https://www.scala-sbt.org/ issuesLink: https://github.com/sbt/sbt#issues-and-pull-requests @@ -23,57 +23,26 @@ projects: issuesLink: https://github.com/scala/bug/labels/scaladoc readmeLink: https://github.com/scala/scala#welcome contributingLink: /overviews/contribute/guide.html - - title: Scala IDE - description: Interactive build tool. - icon: https://avatars2.githubusercontent.com/u/1026788?v=3&s=200 - link: https://github.com/scala-ide/scala-ide - homeLink: http://scala-ide.org/ - issuesLink: https://scala-ide-portfolio.assembla.com/spaces/scala-ide/support/tickets - readmeLink: https://github.com/scala-ide/scala-ide/blob/master/README.md - contributingLink: https://github.com/scala-ide/scala-ide/blob/master/CONTRIBUTING.md - - title: DBuild - description: Multi-project build tool. - icon: https://avatars3.githubusercontent.com/u/784923?v=3&s=200 - link: https://github.com/lightbend/dbuild - homeLink: https://lightbend.github.io/dbuild - issuesLink: https://github.com/lightbend/dbuild/issues - readmeLink: https://github.com/lightbend/dbuild/blob/master/README.md - contributingLink: https://github.com/lightbend/dbuild/blob/master/README.md#get-involved - title: Partest - description: Scala Compiler/Library Testing + description: Scala Compiler/Library Testing (Contribute through scala/scala) icon: https://avatars1.githubusercontent.com/u/57059?v=3&s=200 - link: https://github.com/scala/scala-partest - homeLink: https://docs.scala-lang.org/tutorials/partest-guide.html - issuesLink: https://github.com/scala/scala-partest/issues - readmeLink: https://github.com/scala/scala-partest/blob/1.1.x/README.md + link: https://github.com/scala/scala + homeLink: https://github.com/scala/scala + issuesLink: https://github.com/scala/scala/issues + readmeLink: https://github.com/scala/scala/blob/2.13.x/CONTRIBUTING.md#partest contributingLink: - - title: Scoverage - description: Scala code coverage tool - icon: https://avatars1.githubusercontent.com/u/5998302?v=3&s=200 - link: https://github.com/scoverage/scalac-scoverage-plugin - homeLink: http://scoverage.org/ - issuesLink: https://github.com/scoverage/scalac-scoverage-plugin/issues - readmeLink: https://github.com/scoverage/scalac-scoverage-plugin/blob/master/README.md - contributingLink: https://groups.google.com/forum/#!forum/scala-code-coverage-tool projectsInNeed: - - title: Scalariform - description: Scala source code formatter - icon: /resources/img/white-line.png - link: https://github.com/mdr/scalariform - homeLink: https://github.com/mdr/scalariform/wiki/Command-line-tool - issuesLink: https://github.com/mdr/scalariform/issues - readmeLink: https://github.com/mdr/scalariform/blob/master/README.rst --- ## Contributing to IDE and Build Tools The links below are to a number of Scala build and IDE related projects that are important in the larger Scala space, and which welcome contributions. -Since these tools are in separate projects, they may (and likely will) have their own rules and guidelines for contributing. The [Hacker Guide](/overviews/contribute/hacker-guide.html) and [Bug-fixing](/overviews/contribute/guide.html) pages will likely have much in the way of related information on how to contribute to these projects, and are recommended reading. You should also check the README.md and (if it's present) CONTRIBUTING.md files from the actual projects before contributing to them. +Since these tools are in separate projects, they may (and likely will) have their own rules and guidelines for contributing. You should also check the `README.md` and (if it's present) `CONTRIBUTING.md` files from the actual projects before contributing to them. Typically, issues for these projects will be reported and kept in the GitHub project issue tracker for that project rather than in the Scala bug tracker. -Many of these projects have a chat room on Discord or Gitter (usually linked from their README or CONTRIBUTING files) which is a great place to discuss proposed work before starting. +Many of these projects have a chat room on Discord or Gitter (usually linked from their `README.md` or `CONTRIBUTING.md` files) which is a great place to discuss proposed work before starting. There are some projects in this section that are in [particular need](#projects-in-particular-need) so please check those out @@ -85,10 +54,22 @@ Stuff changes. Found a broken link or something that needs updating on this page ### Projects +{% if page.projects.size > 0 %} {% include contributions-projects-list.html collection=page.projects %} +{% else %} +There are no projects. +{% endif %} ### Projects in Particular Need +{% if page.projectsInNeed.size > 0 %} + The following projects are important to the Scala community but are particularly in need of contributors to continue their development. {% include contributions-projects-list.html collection=page.projectsInNeed %} + +{% else %} + +There are no projects in particular need. + +{% endif %} From b32fe5627023d8c45d20a1fcf20c20ae3e70e7b0 Mon Sep 17 00:00:00 2001 From: Jamie Thompson Date: Mon, 21 Mar 2022 14:47:11 +0100 Subject: [PATCH 0599/1870] add new page - Add New Guides/Tutorials --- README.md | 2 +- _contribute_resources/1-documentation.md | 2 +- _overviews/contribute/add-guides.md | 221 ++++++++++++++++++ _overviews/contribute/bug-reporting-guide.md | 2 +- _overviews/contribute/documentation.md | 4 +- _overviews/contribute/guide.md | 2 +- _overviews/contribute/hacker-guide.md | 2 +- _overviews/contribute/partest-guide.md | 2 +- _overviews/contribute/scala-internals.md | 2 +- ...cala-standard-library-api-documentation.md | 2 +- _overviews/contribute/tools.md | 2 +- contribute.md | 179 +------------- 12 files changed, 237 insertions(+), 185 deletions(-) create mode 100644 _overviews/contribute/add-guides.md diff --git a/README.md b/README.md index a6283b2386..ee37fe58d4 100644 --- a/README.md +++ b/README.md @@ -27,7 +27,7 @@ For more details on the Docker option, see [this issue](https://github.com/scala ## Contributing ## -Please have a look at [https://docs.scala-lang.org/contribute.html](https://docs.scala-lang.org/contribute.html) before making a contribution. +Please have a look at [Add New Guides/Tutorials](https://docs.scala-lang.org/overviews/contribute/add-guides.html) before making a contribution. This document gives an overview of the type of documentation contained within the Scala Documentation repository and the repository's structure. Small changes, or corrected typos will generally be pulled in right away. Large changes, like the addition of new documents, or the rewriting of diff --git a/_contribute_resources/1-documentation.md b/_contribute_resources/1-documentation.md index 3e1b81a7b9..7515ff7519 100644 --- a/_contribute_resources/1-documentation.md +++ b/_contribute_resources/1-documentation.md @@ -3,4 +3,4 @@ title: Documentation link: /overviews/contribute/documentation.html icon: fa fa-book --- -[Scaladoc (API)](/overviews/contribute/scala-standard-library-api-documentation.html), [docs.scala-lang.org](/contribute.html) and [scala-lang.org](https://github.com/scala/scala-lang). +[Scaladoc (API)](/overviews/contribute/scala-standard-library-api-documentation.html), [docs.scala-lang.org](/overviews/contribute/add-guides.html) and [scala-lang.org](https://github.com/scala/scala-lang). diff --git a/_overviews/contribute/add-guides.md b/_overviews/contribute/add-guides.md new file mode 100644 index 0000000000..c8f5e42f0c --- /dev/null +++ b/_overviews/contribute/add-guides.md @@ -0,0 +1,221 @@ +--- +title: Add New Guides/Tutorials +layout: multipage-overview +num: 7 +partof: scala-contribution +overview-name: Contributing to Scala +--- + +## Why Contribute New Learning Material? + +As [Heather Miller writes](/contribute.html), contributing to [docs.scala-lang.org](https://docs.scala-lang.org) is +critical to making Scala accessible to newcomers, experience programmers, and anyone who is curious. +It is also a fantastic way to contribute for anyone who is comfortable using Scala, but maybe does not want to get +involved with complex tools like the compiler. + +## Architecture + +This documentation website is backed by an open-source [github repository](https://github.com/scala/docs.scala-lang), +and is always contribution-ready. + +### Content + +Currently, the _types_ of documentation supported in this repository are: + +- **Guides/Overviews**: Definitive guides/overviews of specific language features. Often long, detailed documents, + often produced by members of the Scala team. An example is the excellent [Collections][collections-overview] overview. +- **Tutorials**: Bite-size, example-rich, and concise articles meant to get a developer up to speed quickly. +- **Cheatsheets**: Quick reference of Scala syntax and behaviors. + +### Implementation + +The website is statically generated from [Markdown](https://en.wikipedia.org/wiki/Markdown) source using +[Jekyll](https://github.com/mojombo/jekyll), and hosted on [GitHub Pages](https://pages.github.com/). +This workflow was chosen so as to make it as easy as possible for core committers and the community alike +to produce HTML documentation, and as easy as possible to publish it in a central location. + +The markdown syntax being used supports [Maruku](https://github.com/bhollis/maruku) extensions, and has automatic +syntax highlighting, without the need for any tags. + +Additionally [mdoc](https://github.com/scalameta/mdoc) is used during pull requests to validate Scala code blocks. +To use this feature you must use the backtick notation as documented by mdoc. Note that only validation is done. +The output files from mdoc are not used in the building of the tutorial. Use `mdoc` or `mdoc:fail` for your code blocks. + +## Submitting Docs + +For one to contribute a document, one must simply +[fork](https://help.github.com/articles/fork-a-repo/) the +[repo](https://github.com/scala/docs.scala-lang), write their article in +[Markdown](https://daringfireball.net/projects/markdown/syntax) (example below), and submit a pull request. That's it. +Likely after some edits and discussion, your document will be made live +on [docs.scala-lang.org](https://docs.scala-lang.org). + + --- + layout: overview + title: My Awesome Title + --- + + ## An h2 Header in Markdown + + And a paragraph, with a [link](https://www.scala-lang.org). + +One can contribute code in a markdown document by either + - indenting it by 4 spaces + - surrounding by triple backticks, as shown below + - in-line by putting backticks around it, e.g. `def foo`. + + ```scala + println("hello") + ``` + +Everything else is automatically generated for you; tables of contents, and most index pages. And of course, the +styling is already taken care of for you. + +### Criteria for Docs to be Accepted + +The goal of this documentation repository is to be tighter and more organized than other community-driven documentation platforms, like wikis. As such, any document pulled in for inclusion on +[docs.scala-lang.org](https://docs.scala-lang.org) must: + +- **"fit in"** to the repository ( _i.e.,_ it should not be a complete duplicate of another article), +- **be polished** it must be thorough, complete, correct, organized, and "article-like" (personal programming notes +don't quite fit.) +- **be maintained** if the document might require revisions from time to time, be prepared to keep it up to date, or +nominate someone to take ownership. + +If you have something you're thinking about contributing, or that you're thinking about writing in order to contribute +-- we'd love to consider it! Please don't hesitate to use GitHub issues and pull requests and the +\#scala-contributors room [on Discord](https://discord.com/invite/scala) for any questions, concerns, +clarifications, etc. + +## Document Templates + +> **Note:** These templates will soon change slightly as a result of necessary refactoring. + +### Guides/Overviews + +A guide or an overview that can be logically placed on **one** page must be placed in the directory +`_overviews/RELEVANT-CATEGORY/_posts` with the file name in the format `YYYY-MM-dd-title-separated-by-dashes.md`, +and header: + + --- + layout: overview + title: YOUR TITLE + --- + +The rest of the document should, of course, be written in [Markdown](https://en.wikipedia.org/wiki/Markdown). + +At the moment, `RELEVANT-CATEGORY` corresponds to only a single category, "core," because we are currently focusing on +building up documentation of core libraries. However, expect more categories here in the future. + +If your document consists of **multiple** pages, like the [Collections][collections-overview] overview, an ordering +must be specified, by numbering documents in their logical order with `num`, and a name must be assigned to the +collection of pages using `partof`. For example, the following header might be used for a document in the collections +overview: + + --- + layout: overview + title: YOUR TITLE + + partof: collections + num: 10 + --- + +A **single** document in the collection must contain a tag in the header, `outof`, that indicates the total number of +documents in the large overview. Putting it on the last page in the overview is often best: + + --- + layout: overview + title: YOUR TITLE + + partof: collections + num: 15 + outof: 15 + --- + +Index pages, such as [docs.scala-lang.org/overviews/index.html](https://docs.scala-lang.org/overviews/index.html) are +generated, by reading data from a configuration file, such as `_data/overviews.yml`, so your overview should be +placed into a category there. + +### Tutorials + +At the moment, tutorials are written the same as Guides/Overviews, except that their link must be added to +the metadata of `/tutorials.md`. e.g. for the [Scala With Maven][scala-with-maven] tutorial, the +metadata of `/tutorials.md` looks like + + --- + layout: inner-page-parent + title: Tutorials + + tutorials: + ... + - title: "Scala with Maven" + url: "/tutorials/scala-with-maven.html" + description: "Create a Scala project with Maven." + icon: code + --- + +For a single-page tutorial, the typical directory to place them in is `_overviews/tutorials`. + +### Cheatsheets + +For now, cheatsheets are assumed to be in the form of tables. To contribute a cheatsheet, one must simply produce their +cheatsheet as a Markdown table, with the following header: + + --- + layout: cheatsheet + title: YOUR TITLE + by: YOUR NAME + about: SOME TEXT ABOUT THE CHEAT SHEET. + --- + +### Code blocks + +The site build process uses [mdoc](https://scalameta.org/mdoc/) to typecheck +code snippets in markdown. This is a great way to ensure the code snippets that +you're including typecheck and are valid. Here are a few quick types to get +started. + +To get started, add `mdoc` after `scala` when you are creating a +code block. The `mdoc` modifier here will make sure that `mdoc` runs the code +snippet and ensures that it's valid. + + ```scala mdoc + val a = 1 + ``` +If you have a snippet that you expect to fail, you can also account for this by +using `mdoc:fail` for a compile error `mdoc:crash` for a runtime-error. + + ```scala mdoc:fail + val b: String = 3 // won't compile + ``` +Keep in mind that a single file is all compiled as a single unit, so you can't +redefine a variable that was defined above in another code snippet. _However_ +there are a couple ways to get around this. Firstly, you can use the `mdoc:nest` +modifier with will wrap the snippet in a `scala.Predef.locally{...}`. This will +essentially "hide" the snippet from the others. Another way around this is to +use the `mdoc:reset` modifier, which _resets_ and forgets about everything up +above. Here is an example using the various modifiers. + + ```scala mdoc + import java.time.Instant + + def now() = Instant.now() + object Foo {} + ``` + + ```scala mdoc:nest + case class Foo(a: Int) // conflicts with Foo above, but it's nested so it's fine + ``` + + ```scala mdoc + val a = s"The time is ${now()}" // still have access to the now method from above + ``` + ```scala mdoc:reset + case class Foo(a: String) // forget the previous Foo's and start fresh + ``` + ```scala mdoc + val myFoo = Foo("hi") // now we only have access to the last Foo + ``` + +[collections-overview]: {% link _overviews/collections-2.13/introduction.md %} +[scala-with-maven]: {% link _overviews/tutorials/scala-with-maven.md %} diff --git a/_overviews/contribute/bug-reporting-guide.md b/_overviews/contribute/bug-reporting-guide.md index 9545ecdc53..ac6df525a5 100644 --- a/_overviews/contribute/bug-reporting-guide.md +++ b/_overviews/contribute/bug-reporting-guide.md @@ -1,7 +1,7 @@ --- title: Bug Reporting Guide layout: multipage-overview -num: 7 +num: 8 partof: scala-contribution overview-name: Contributing to Scala --- diff --git a/_overviews/contribute/documentation.md b/_overviews/contribute/documentation.md index 7fca82ff53..417f9b234a 100644 --- a/_overviews/contribute/documentation.md +++ b/_overviews/contribute/documentation.md @@ -44,7 +44,7 @@ without creating an issue, but please look to see if there is an issue already s * SIP (Scala Improvement Process) Proposals and more -Please read [contributing to the docs.scala-lang.org site](/contribute.html) through before embarking on changes. The site uses +Please read [Add New Guides/Tutorials](/overviews/contribute/add-guides.html) through before embarking on changes. The site uses the [Jekyll](https://jekyllrb.com/) markdown engine so you will need to follow the instructions to get that running as well. ### Updating scala-lang.org @@ -55,4 +55,4 @@ to Scala and related projects) is provided on the main [scala-lang GitHub project](https://github.com/scala/scala-lang) which may be forked to create pull requests. Please read both the -[docs.scala-lang.org contribution](/contribute.html) document and the [scala-lang.org GitHub README](https://github.com/scala/scala-lang#scala-langorg) before embarking on any changes to the Scala language site, as it uses the same Jekyll markdown tool and many of the same conventions as the Scala documentation site. +[Add New Guides/Tutorials](/overviews/contribute/add-guides.html) document and the [scala-lang.org GitHub README](https://github.com/scala/scala-lang#scala-langorg) before embarking on any changes to the Scala language site, as it uses the same Jekyll markdown tool and many of the same conventions as the Scala documentation site. diff --git a/_overviews/contribute/guide.md b/_overviews/contribute/guide.md index 5acc188a27..802e3c387c 100644 --- a/_overviews/contribute/guide.md +++ b/_overviews/contribute/guide.md @@ -1,7 +1,7 @@ --- title: Contributing guide layout: multipage-overview -num: 9 +num: 10 partof: scala-contribution overview-name: Contributing to Scala --- diff --git a/_overviews/contribute/hacker-guide.md b/_overviews/contribute/hacker-guide.md index cb83b6218a..f342c98040 100644 --- a/_overviews/contribute/hacker-guide.md +++ b/_overviews/contribute/hacker-guide.md @@ -2,7 +2,7 @@ title: Scala hacker guide by: Eugene Burmako layout: multipage-overview -num: 11 +num: 12 partof: scala-contribution overview-name: Contributing to Scala --- diff --git a/_overviews/contribute/partest-guide.md b/_overviews/contribute/partest-guide.md index 6fb5a2644b..548eb8d5e6 100644 --- a/_overviews/contribute/partest-guide.md +++ b/_overviews/contribute/partest-guide.md @@ -1,7 +1,7 @@ --- title: Running the Test Suite layout: multipage-overview -num: 12 +num: 13 partof: scala-contribution overview-name: Contributing to Scala --- diff --git a/_overviews/contribute/scala-internals.md b/_overviews/contribute/scala-internals.md index ac5be2fd85..5f391947fa 100644 --- a/_overviews/contribute/scala-internals.md +++ b/_overviews/contribute/scala-internals.md @@ -1,7 +1,7 @@ --- title: Scala Contributors Forum layout: multipage-overview -num: 8 +num: 9 partof: scala-contribution overview-name: Contributing to Scala --- diff --git a/_overviews/contribute/scala-standard-library-api-documentation.md b/_overviews/contribute/scala-standard-library-api-documentation.md index ba59855392..99f1bb16e0 100644 --- a/_overviews/contribute/scala-standard-library-api-documentation.md +++ b/_overviews/contribute/scala-standard-library-api-documentation.md @@ -13,7 +13,7 @@ sometimes referred to as Scaladoc contributions. For contributions to tutorial and guide-style documentation on [docs.scala-lang.org](/), -see the ["doc-site"'s contribution guide](/contribute.html). +see [Add New Guides/Tutorials](/overviews/contribute/add-guides.html). *Please note, these instructions cover documentation contributions Scala core libraries only. For other Scala projects please check those projects for the diff --git a/_overviews/contribute/tools.md b/_overviews/contribute/tools.md index 4ce5a3be0a..875160ca96 100644 --- a/_overviews/contribute/tools.md +++ b/_overviews/contribute/tools.md @@ -1,7 +1,7 @@ --- title: IDE and Build Tool Contributions layout: multipage-overview -num: 10 +num: 11 partof: scala-contribution overview-name: Contributing to Scala diff --git a/contribute.md b/contribute.md index 1abb5e539c..4a7d38faec 100644 --- a/contribute.md +++ b/contribute.md @@ -1,9 +1,9 @@ --- -layout: contribute -title: Contribute +layout: singlepage-overview +title: Why Contribute to docs.scala-lang.org? --- -###### Heather Miller +###### A note from Heather Miller ## A Place to Build Documentation Together @@ -21,175 +21,6 @@ If we want Scala to be accessible to more programmers, clear, easy-to-find docum If you're interested in contributing to the Scala project in general, I argue that one of the most meaningful ways that you can, is to help us improve this transfer of information- let's make it easier and faster for people to _get_ core concepts, and to answer their own questions so they can progress to _Scala-proficient_ quickly. Each line that you contribute has the potential to affect the entire Scala community as a whole-- current, and future. -## About docs.scala-lang.org +## How Can I Contribute? -### Content - -Currently, the _types_ of documentation supported in this repository are: - -- **Guides/Overviews**: Definitive guides/overviews of specific language features. Often long, detailed documents, often produced by members of the Scala team. An example is the excellent [Collections]({{ site.baseurl }}/overviews/collections-2.13/introduction.html) overview. -- **Tutorials**: Bite-size, example-rich, and concise articles meant to get a developer up to speed quickly. -- **Cheatsheets**: Quick reference of Scala syntax and behaviors. - -### Implementation - -This documentation repository is open-source, it lives in [github repository](https://github.com/scala/docs.scala-lang), and is always contribution-ready. - -It's statically generated from [Markdown](https://en.wikipedia.org/wiki/Markdown) source using [Jekyll](https://github.com/mojombo/jekyll), and hosted on [GitHub Pages](https://pages.github.com/). This workflow was chosen so as to make it as easy as possible for core committers and the community alike to produce HTML documentation, and as easy as possible to publish it in a central location. - -The markdown syntax being used supports [Maruku](https://github.com/bhollis/maruku) extensions, and has automatic syntax highlighting, without the need for any tags. - -Additionally [mdoc](https://github.com/scalameta/mdoc) is used during pull requests to validate Scala code blocks. To use this feature you must use the backtick notation as documented by mdoc. Note that only validation is done. The output files from mdoc are not used in the building of the tutorial. Use `mdoc` or `mdoc:fail` for your code blocks. - -## Submitting Docs - -For one to contribute a document, one must simply -[fork](https://help.github.com/articles/fork-a-repo/) the -[repo](https://github.com/scala/docs.scala-lang), write their article in -[Markdown](https://daringfireball.net/projects/markdown/syntax) (example below), and submit a pull request. That's it. Likely after some edits and discussion, your document will be made live on [docs.scala-lang.org](https://docs.scala-lang.org). - - --- - layout: overview - title: My Awesome Title - --- - - ## An h2 Header in Markdown - - And a paragraph, with a [link](https://www.scala-lang.org). - - One can contribute code by indenting it 4 spaces, or in-line by putting backticks around it like so, `def foo` - -Everything else is automatically generated for you; tables of contents, and most index pages. And of course, the styling is already taken care of for you. - -### Criteria for Docs to be Accepted - -The goal of this documentation repository is to be tighter and more organized than other community-driven documentation platforms, like wikis. As such, any document pulled in for inclusion on [https://docs.scala-lang.org](https://docs.scala-lang.org) must: - -- **"fit in"** to the repository ( _i.e.,_ it should not be a complete duplicate of another article), -- **be polished** it must be thorough, complete, correct, organized, and "article-like" (personal programming notes don't quite fit.) -- **be maintained** if the document might require revisions from time to time, it should come with an owner - -If you have something you're thinking about contributing, or that you're thinking about writing in order to contribute-- we'd love to consider it! Please don't hesitate to use GitHub issues and pull requests and the \#scala-contributors room [on Discord](https://discord.com/invite/scala) for any questions, concerns, clarifications, etc. - -## Document Templates - -
    -

    Note: These templates will soon change slightly as a result of necessary refactoring.

    -
    - -### Guides/Overviews - -A guide or an overview that can be logically placed on **one** page must be placed in the directory `overviews/RELEVANT-CATEGORY/_posts` with the file name in the format `YYYY-MM-dd-title-separated-by-dashes.md`, and header: - - --- - layout: overview - title: YOUR TITLE - --- - -The rest of the document should, of course, be written in [Markdown](https://en.wikipedia.org/wiki/Markdown). - -At the moment, `RELEVANT-CATEGORY` corresponds to only a single category, "core," because we are currently focusing on building up documentation of core libraries. However, expect more categories here in the future. - -If your document consists of **multiple** pages, like the [Collections]({{ site.baseurl }}/overviews/collections-2.13/introduction.html) overview, an ordering must be specified, by numbering documents in their logical order with `num`, and a name must be assigned to the collection of pages using `partof`. For example, the following header might be used for a document in the collections overview: - - --- - layout: overview - title: YOUR TITLE - - partof: collections - num: 10 - --- - -A **single** document in the collection must contain a tag in the header, `outof`, that indicates the total number of documents in the large overview. Putting it on the last page in the overview is often best: - - --- - layout: overview - title: YOUR TITLE - - partof: collections - num: 15 - outof: 15 - --- - -Index pages, such as [https://docs.scala-lang.org/overviews/index.html](https://docs.scala-lang.org/overviews/index.html) are automatically generated, assuming documents are properly placed under the correct `RELEVANT-CATEGORY`. So, simply drop your document into the correct folder, and you're done. - -### Tutorials - -At the moment, a tutorial that can be logically placed on **one** page must be placed in the directory `tutorials/` with the file name in the format `title-separated-by-dashes.md`. For the moment, single-page tutorials use the same layout as single-page overviews: - - --- - layout: overview - title: YOUR TITLE - --- - -If you have a **multiple-page** tutorial, like in the case of multiple-page overviews, you must both specify an ordering for your document, and a name must be assigned to the collection of tutorial pages. For example, the following header is used for the [Tour of Scala]({{ site.baseurl }}/tour/tour-of-scala.html) series of tutorial articles: - - --- - layout: inner-page-no-masthead - title: YOUR TITLE - - tutorial: scala-tour - num: 4 - --- - -At the moment, only indexes for multiple-page tutorials are automatically generated. - -### Cheatsheets - -For now, cheatsheets are assumed to be in the form of tables. To contribute a cheatsheet, one must simply produce their cheatsheet as a Markdown table, with the following header: - - --- - layout: cheatsheet - title: YOUR TITLE - by: YOUR NAME - about: SOME TEXT ABOUT THE CHEAT SHEET. - --- - -### Code blocks - -The site build process uses [mdoc](https://scalameta.org/mdoc/) to typecheck -code snippets in markdown. This is a great way to ensure the code snippets that -you're including typecheck and are valid. Here are a few quick types to get -started. - -To get started, you can simply add `mdoc` behind `scala` when you are creating a -code block. The `mdoc` modifier here will make sure that `mdoc` runs the code -snippet and ensures that it's valid. - - ```scala mdoc - val a = 1 - ``` -If you have a snippet that you expect to fail, you can also account for this by -using `mdoc:fail` for a compile error `mdoc:crash` for a runtime-error. - - ```scala mdoc:fail - val b: String = 3 // won't compile - ``` -Keep in mind that a single file is all compiled as a single unit, so you can't -redefine a variable that was defined above in another code snippet. _However_ -there are a couple ways to get around this. Firstly, you can use the `mdoc:nest` -modifier with will wrap the snippet in a `scala.Predef.locally{...}`. This will -essentially "hide" the snippet from the others. Another way around this is to -use the `mdoc:reset` modifier, which _resets_ and forgets about everything up -above. Here is an example using the various modifiers. - - ```scala mdoc - import java.time.Instant - - def now() = Instant.now() - object Foo {} - ``` - - ```scala mdoc:nest - case class Foo(a: Int) // conflicts with Foo above, but it's nested so it's fine - ``` - - ```scala mdoc - val a = s"The time is ${now()}" // still have access to the now method from above - ``` - ```scala mdoc:reset - case class Foo(a: String) // forget the previous Foo's and start fresh - ``` - ```scala mdoc - val myFoo = Foo("hi") // now we only have access to the last Foo - ``` +Please read: [Add New Guides/Tutorials](/overviews/contribute/add-guides.html) From 4b34e7fa4a4a5a972026e91cc3daa76451f3489d Mon Sep 17 00:00:00 2001 From: Jamie Thompson Date: Mon, 21 Mar 2022 15:19:19 +0100 Subject: [PATCH 0600/1870] integrate guide with the site --- _data/doc-nav-header.yml | 2 ++ _data/nav-header.yml | 7 ++++++- _includes/site-header.html | 2 +- _ja/scala3/contribute-to-docs.md | 4 ++-- _ja/scala3/new-in-scala3.md | 2 +- index.md | 6 +++++- scala3/contribute-to-docs.md | 4 ++-- scala3/guides.md | 2 +- scala3/index.md | 2 +- scala3/new-in-scala3.md | 2 +- 10 files changed, 22 insertions(+), 11 deletions(-) diff --git a/_data/doc-nav-header.yml b/_data/doc-nav-header.yml index a96fdb3d42..9f45227579 100644 --- a/_data/doc-nav-header.yml +++ b/_data/doc-nav-header.yml @@ -35,6 +35,8 @@ url: "/tutorials/FAQ/index.html" - title: Language Specification url: http://scala-lang.org/files/archive/spec/2.13/ + - title: Contribution Guide + url: "/overviews/contribute/" - title: Style Guide url: "/style/index.html" - title: Cheatsheet diff --git a/_data/nav-header.yml b/_data/nav-header.yml index 26bd280020..a9d2f9ab38 100644 --- a/_data/nav-header.yml +++ b/_data/nav-header.yml @@ -1,12 +1,17 @@ - title: Documentation url: "/" + can-highlight: true - title: Download url: https://www.scala-lang.org/download/ + can-highlight: true - title: Community url: https://www.scala-lang.org/community/ + can-highlight: true - title: Libraries url: https://index.scala-lang.org + can-highlight: true - title: Contribute - url: https://www.scala-lang.org/contribute/ + url: /overviews/contribute/ - title: Blog url: https://www.scala-lang.org/blog/ + can-highlight: true diff --git a/_includes/site-header.html b/_includes/site-header.html index 31f2bc2a38..70f1cb6840 100644 --- a/_includes/site-header.html +++ b/_includes/site-header.html @@ -10,7 +10,7 @@ diff --git a/_ja/scala3/contribute-to-docs.md b/_ja/scala3/contribute-to-docs.md index 2902ff1d2a..c13b4b0904 100644 --- a/_ja/scala3/contribute-to-docs.md +++ b/_ja/scala3/contribute-to-docs.md @@ -45,8 +45,8 @@ Scala 3 の高品質なドキュメンテーションを作るためのいくつ - [Source](https://github.com/scala/docs.scala-lang/tree/main/_overviews/scala3-migration) - [Issues](https://github.com/scalacenter/docs.scala-lang/issues) -## Scala 3 Contribution Guide -[Scala 3 Contribution Guide](/scala3/guides/contribution/contribution-intro.html) +## Scala 3 Contributing Guide +[Scala 3 Contributing Guide](/scala3/guides/contribution/contribution-intro.html) Scala 3 コンパイラとライブラリへの貢献と内部に関する包括的な概要が含まれています - [Source](https://github.com/scala/docs.scala-lang/tree/main/_overviews/scala3-contribution) diff --git a/_ja/scala3/new-in-scala3.md b/_ja/scala3/new-in-scala3.md index eea8ee14ca..8e69859268 100644 --- a/_ja/scala3/new-in-scala3.md +++ b/_ja/scala3/new-in-scala3.md @@ -13,7 +13,7 @@ Scala 3 は Scala 2 から大幅な改善が行われ、さまざまな新機能 - [Syntax Summary][syntax-summary] では Scala 3 で新しく追加されたシンタックスを解説している。 - [Language Reference][reference] を見ればScala 2 と Scala 3 の変更点を詳しく確認できる。 - Scala 2 から Scala 3 への移行を考えている方は[Migration Guide][migration] を参照。 -- [Contribution Guide][contribution] は、問題を修正するためのガイドを含め、コンパイラーをさらに深く掘り下げます。 +- [Scala 3 Contributing Guide][contribution] は、問題を修正するためのガイドを含め、コンパイラーをさらに深く掘り下げます。 ## What's new in Scala 3 Scala 3 は Scala 2 を徹底的に見直して再設計されている。核心部分で、型システムの多くの面が変更されより原理原則に基づいたものになった。この変更によって新機能(ユニオン型)が使えるようになったことにくわえて、なにより型システムがさらに使いやすくなった。 例えば、[型推論][type-inference] や overload resolution が改善された. diff --git a/index.md b/index.md index 7e778ec83c..aacc00e221 100644 --- a/index.md +++ b/index.md @@ -40,7 +40,7 @@ scala3-sections: description: "The Scala 3 language reference." icon: "fa fa-book" link: /scala3/reference/overview.html - - title: "Contribution Guide" + - title: "Scala 3 Contributing Guide" description: "Guide to the Scala 3 Compiler and fixing an issue" icon: "fa fa-cogs" link: /scala3/guides/contribution/contribution-intro.html @@ -118,4 +118,8 @@ scala2-sections: description: "The Scala Improvement Process. Language & compiler evolution." icon: "fa fa-cogs" link: /sips/index.html + - title: "Contributing to Scala" + description: "The Complete Guide to Contributing to the Scala Project" + icon: "fa fa-cogs" + link: /overviews/contribute/ --- diff --git a/scala3/contribute-to-docs.md b/scala3/contribute-to-docs.md index 5a2a336440..d39ba71ec4 100644 --- a/scala3/contribute-to-docs.md +++ b/scala3/contribute-to-docs.md @@ -45,8 +45,8 @@ a tour presenting the migration tools, and detailed migration guides. - [Source](https://github.com/scala/docs.scala-lang/tree/main/_overviews/scala3-migration) - [Issues](https://github.com/scala/docs.scala-lang/issues) -## Scala 3 Contribution Guide -The [Scala 3 Contribution Guide](/scala3/guides/contribution/contribution-intro.html) +## Scala 3 Contributing Guide +The [Scala 3 Contributing Guide](/scala3/guides/contribution/contribution-intro.html) contains a comprehensive overview over contribution to and internals of the Scala 3 compiler and libraries - [Source](https://github.com/scala/docs.scala-lang/tree/main/_overviews/scala3-contribution) diff --git a/scala3/guides.md b/scala3/guides.md index 812cedb611..26110b10ba 100644 --- a/scala3/guides.md +++ b/scala3/guides.md @@ -18,7 +18,7 @@ guides: icon: birthday-cake url: "/scala3/guides/tasty-overview.html" description: "An overview over the TASTy format aimed at end-users of the Scala language." - - title: "Contribution Guide" + - title: "Scala 3 Contributing Guide" by: Jamie Thompson, Anatolii Kmetiuk icon: cogs url: "/scala3/guides/contribution/contribution-intro.html" diff --git a/scala3/index.md b/scala3/index.md index 7c741fd931..a34c19a1ca 100644 --- a/scala3/index.md +++ b/scala3/index.md @@ -40,7 +40,7 @@ sections: description: "The Scala 3 language reference." icon: "fa fa-book" link: /scala3/reference/overview.html - - title: "Contribution Guide" + - title: "Scala 3 Contributing Guide" description: "Guide to the Scala 3 Compiler and fixing an issue" icon: "fa fa-cogs" link: /scala3/guides/contribution/contribution-intro.html diff --git a/scala3/new-in-scala3.md b/scala3/new-in-scala3.md index 9a1e9da872..af6d6111c1 100644 --- a/scala3/new-in-scala3.md +++ b/scala3/new-in-scala3.md @@ -11,7 +11,7 @@ changes. If you want to dig deeper, there are a few references at your disposal: - The [Syntax Summary][syntax-summary] provides you with a formal description of the new syntax. - The [Language Reference][reference] gives a detailed description of the changes from Scala 2 to Scala 3. - The [Migration Guide][migration] provides you with all of the information necessary to move from Scala 2 to Scala 3. -- The [Contribution Guide][contribution] dives deeper into the compiler, including a guide to fix issues. +- The [Scala 3 Contributing Guide][contribution] dives deeper into the compiler, including a guide to fix issues. ## What's new in Scala 3 Scala 3 is a complete overhaul of the Scala language. At its core, many aspects From aa00e9cd6626ada8738267b9fb8a50f5378dfe0c Mon Sep 17 00:00:00 2001 From: Seth Tisue Date: Mon, 21 Mar 2022 12:17:23 -0500 Subject: [PATCH 0601/1870] update status of JDK 8 also change AdoptOpenJDK->Temurin also move some GraalVM text to a more appropriate location --- _overviews/jdk-compatibility/overview.md | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/_overviews/jdk-compatibility/overview.md b/_overviews/jdk-compatibility/overview.md index 9eb850a77f..c00fd2f05f 100644 --- a/_overviews/jdk-compatibility/overview.md +++ b/_overviews/jdk-compatibility/overview.md @@ -26,13 +26,11 @@ Lightbend offers [commercial support](https://www.lightbend.com/lightbend-platfo ## Running versus compiling -JDK 8, 11, and 17 are all good choices both for *compiling* and *running* Scala code. +JDK 8, 11, and 17 are all reasonable choices both for *compiling* and *running* Scala code. Since the JVM is normally backwards compatible, it is usually safe to use a newer JVM for *running* your code than the one it was compiled on, especially if you are not using JVM features designated "experimental" or "unsafe". -If you compile on JDK 11+ but have users on an older JDK version, additional care is needed to avoid using APIs and features that don't exist in 8. Therefore, *compiling* on 8 may be the safest choice in this scenario. (Some Scala developers use JDK 11 or 17 for their daily work, but do release builds on JDK 8.) - -Additionally, you can also run your Scala application on GraalVM which is a JVM. GraalVM performs well on the Scala benchmarks, and it benefits from GraalVM runtime and runs faster too. +JDK 8 remains in use at many shops (as of early 2022), but usage is declining and some projects are dropping support. If you compile on JDK 11+ but want to allow your users to stay on 8, additional care is needed to avoid using APIs and features that don't exist in 8. (For this reason, some Scala developers use JDK 11 or 17 for their daily work but do release builds on JDK 8.) ## Long Term Support (LTS) versions @@ -50,9 +48,9 @@ In almost every case, you're free to use the JDK and JVM of your choice. JDK 8 users typically use the Oracle JDK or some flavor of OpenJDK. -Most JDK 11+ users are using either OpenJDK or GraalVM which runs in the context of OpenJDK. +Most JDK 11+ users are using OpenJDK, or GraalVM which runs in the context of OpenJDK. GraalVM performs well on the Scala benchmarks, and it benefits from GraalVM runtime and runs faster too. -OpenJDK comes in various flavors, offered by different providers. We build and test Scala using [AdoptOpenJDK](https://adoptopenjdk.net) in particular, but the differences are unlikely to matter to most users. +OpenJDK comes in various flavors, offered by different providers. We build and test Scala using [Temurin](https://adoptium.net) primarily, but the differences are unlikely to matter to most users. ## JDK 11 compatibility notes From 302bfbff1dc497bd07acaf9c5596ec94f8d50aa0 Mon Sep 17 00:00:00 2001 From: Jamie Thompson Date: Tue, 22 Mar 2022 16:00:44 +0100 Subject: [PATCH 0602/1870] revert to /contribute/ urls --- README.md | 2 +- _config.yml | 8 +++++ _contribute_resources/1-documentation.md | 4 +-- _contribute_resources/2-bug-fixes.md | 4 +-- _contribute_resources/3-code-reviews.md | 2 +- _contribute_resources/4-core-libraries.md | 2 +- .../5-ide-and-build-tools.md | 2 +- _contribute_resources/6-compiler-language.md | 2 +- _data/doc-nav-header.yml | 2 +- _data/nav-header.yml | 2 +- _overviews/contribute/add-guides.md | 3 -- _overviews/contribute/bug-reporting-guide.md | 3 -- _overviews/contribute/codereviews.md | 7 ++--- _overviews/contribute/corelibs.md | 9 ++---- _overviews/contribute/documentation.md | 13 +++----- _overviews/contribute/guide.md | 31 +++++++++---------- _overviews/contribute/hacker-guide.md | 5 +-- .../contribute/inclusive-language-guide.md | 3 -- _overviews/contribute/index.md | 7 ++--- _overviews/contribute/partest-guide.md | 3 -- _overviews/contribute/scala-internals.md | 3 -- ...cala-standard-library-api-documentation.md | 7 ++--- _overviews/contribute/tools.md | 7 ++--- contribute.md | 2 +- index.md | 2 +- 25 files changed, 52 insertions(+), 83 deletions(-) diff --git a/README.md b/README.md index ee37fe58d4..fe377e9f6b 100644 --- a/README.md +++ b/README.md @@ -27,7 +27,7 @@ For more details on the Docker option, see [this issue](https://github.com/scala ## Contributing ## -Please have a look at [Add New Guides/Tutorials](https://docs.scala-lang.org/overviews/contribute/add-guides.html) before making a contribution. +Please have a look at [Add New Guides/Tutorials](https://docs.scala-lang.org/contribute/add-guides.html) before making a contribution. This document gives an overview of the type of documentation contained within the Scala Documentation repository and the repository's structure. Small changes, or corrected typos will generally be pulled in right away. Large changes, like the addition of new documents, or the rewriting of diff --git a/_config.yml b/_config.yml index 0d58e58a8f..43f6dfd536 100644 --- a/_config.yml +++ b/_config.yml @@ -105,6 +105,14 @@ defaults: overview-name: "Scala 3 — Book" layout: multipage-overview permalink: "/scala3/book/:title.html" + - + scope: + path: "_overviews/contribute" + values: + partof: scala-contribution + overview-name: Contributing to Scala + layout: multipage-overview + permalink: "/contribute/:title.html" - scope: path: "_overviews/scala3-migration" diff --git a/_contribute_resources/1-documentation.md b/_contribute_resources/1-documentation.md index 7515ff7519..474bea075f 100644 --- a/_contribute_resources/1-documentation.md +++ b/_contribute_resources/1-documentation.md @@ -1,6 +1,6 @@ --- title: Documentation -link: /overviews/contribute/documentation.html +link: /contribute/documentation.html icon: fa fa-book --- -[Scaladoc (API)](/overviews/contribute/scala-standard-library-api-documentation.html), [docs.scala-lang.org](/overviews/contribute/add-guides.html) and [scala-lang.org](https://github.com/scala/scala-lang). +[Scaladoc (API)](/contribute/scala-standard-library-api-documentation.html), [docs.scala-lang.org](/contribute/add-guides.html) and [scala-lang.org](https://github.com/scala/scala-lang). diff --git a/_contribute_resources/2-bug-fixes.md b/_contribute_resources/2-bug-fixes.md index 2baf672e5a..54e6d2cf9d 100644 --- a/_contribute_resources/2-bug-fixes.md +++ b/_contribute_resources/2-bug-fixes.md @@ -1,6 +1,6 @@ --- title: Bug fixes -link: /overviews/contribute/guide.html +link: /contribute/guide.html icon: fa fa-bug --- -Issues with the tools, core libraries and compiler. Also you can help us by [reporting bugs](/overviews/contribute/bug-reporting-guide.html). +Issues with the tools, core libraries and compiler. Also you can help us by [reporting bugs](/contribute/bug-reporting-guide.html). diff --git a/_contribute_resources/3-code-reviews.md b/_contribute_resources/3-code-reviews.md index e6f15e271c..e03305beb5 100644 --- a/_contribute_resources/3-code-reviews.md +++ b/_contribute_resources/3-code-reviews.md @@ -1,6 +1,6 @@ --- title: Code Reviews -link: /overviews/contribute/codereviews.html +link: /contribute/codereviews.html icon: fa fa-eye --- Review pull requests against [scala/scala](https://github.com/scala/scala/pulls), diff --git a/_contribute_resources/4-core-libraries.md b/_contribute_resources/4-core-libraries.md index fb66a906b8..06f1018479 100644 --- a/_contribute_resources/4-core-libraries.md +++ b/_contribute_resources/4-core-libraries.md @@ -1,6 +1,6 @@ --- title: Core Libraries -link: /overviews/contribute/corelibs.html +link: /contribute/corelibs.html icon: fa fa-clipboard --- Update and expand the capabilities of the core (and associated) Scala libraries. diff --git a/_contribute_resources/5-ide-and-build-tools.md b/_contribute_resources/5-ide-and-build-tools.md index 2bf2c7d729..7202f0d953 100644 --- a/_contribute_resources/5-ide-and-build-tools.md +++ b/_contribute_resources/5-ide-and-build-tools.md @@ -1,6 +1,6 @@ --- title: IDE and Build Tools -link: /overviews/contribute/tools.html +link: /contribute/tools.html icon: fa fa-terminal --- Enhance the Scala tools with features for build tools, IDE plug-ins and other related projects. diff --git a/_contribute_resources/6-compiler-language.md b/_contribute_resources/6-compiler-language.md index a7dc618322..d54e34fac9 100644 --- a/_contribute_resources/6-compiler-language.md +++ b/_contribute_resources/6-compiler-language.md @@ -1,6 +1,6 @@ --- title: Compiler/Language -link: /overviews/contribute/guide.html#larger-changes-new-features +link: /contribute/guide.html#larger-changes-new-features icon: fa fa-cogs --- Larger language features and compiler enhancements including language specification and SIPs. diff --git a/_data/doc-nav-header.yml b/_data/doc-nav-header.yml index 9f45227579..52b66be1da 100644 --- a/_data/doc-nav-header.yml +++ b/_data/doc-nav-header.yml @@ -36,7 +36,7 @@ - title: Language Specification url: http://scala-lang.org/files/archive/spec/2.13/ - title: Contribution Guide - url: "/overviews/contribute/" + url: "/contribute/" - title: Style Guide url: "/style/index.html" - title: Cheatsheet diff --git a/_data/nav-header.yml b/_data/nav-header.yml index a9d2f9ab38..03621e6d64 100644 --- a/_data/nav-header.yml +++ b/_data/nav-header.yml @@ -11,7 +11,7 @@ url: https://index.scala-lang.org can-highlight: true - title: Contribute - url: /overviews/contribute/ + url: /contribute/ - title: Blog url: https://www.scala-lang.org/blog/ can-highlight: true diff --git a/_overviews/contribute/add-guides.md b/_overviews/contribute/add-guides.md index c8f5e42f0c..8e638021d2 100644 --- a/_overviews/contribute/add-guides.md +++ b/_overviews/contribute/add-guides.md @@ -1,9 +1,6 @@ --- title: Add New Guides/Tutorials -layout: multipage-overview num: 7 -partof: scala-contribution -overview-name: Contributing to Scala --- ## Why Contribute New Learning Material? diff --git a/_overviews/contribute/bug-reporting-guide.md b/_overviews/contribute/bug-reporting-guide.md index ac6df525a5..e2637ccd09 100644 --- a/_overviews/contribute/bug-reporting-guide.md +++ b/_overviews/contribute/bug-reporting-guide.md @@ -1,9 +1,6 @@ --- title: Bug Reporting Guide -layout: multipage-overview num: 8 -partof: scala-contribution -overview-name: Contributing to Scala --- The Scala compiler and standard library bug tracker is located at [https://github.com/scala/bug](https://github.com/scala/bug), and for Scala 3, it is located at [github.com/lampepfl/dotty](https://github.com/lampepfl/dotty/issues). Before you submit a bug make sure that it is certainly a bug by following instructions in *Is it a Bug?*. diff --git a/_overviews/contribute/codereviews.md b/_overviews/contribute/codereviews.md index e7dea2acea..6325fcde6c 100644 --- a/_overviews/contribute/codereviews.md +++ b/_overviews/contribute/codereviews.md @@ -1,13 +1,10 @@ --- title: Code Review Contributions -layout: multipage-overview num: 3 -partof: scala-contribution -overview-name: Contributing to Scala --- ## Code Review Contributions -In addition to [bug fixing](/overviews/contribute/guide.html), you can help us review +In addition to [bug fixing](/contribute/guide.html), you can help us review [waiting pull requests](#pull-requests-awaiting-comment). This is also a good (and recommended) way to get to know the feel of the bug-fixing and submissions process before jumping in with your @@ -57,4 +54,4 @@ own pull requests. -Also note that the [Tools contributions](/overviews/contribute/tools.html) page has more projects that will generate pull requests. +Also note that the [Tools contributions](/contribute/tools.html) page has more projects that will generate pull requests. diff --git a/_overviews/contribute/corelibs.md b/_overviews/contribute/corelibs.md index 6c64a887d7..3ee05e6c13 100644 --- a/_overviews/contribute/corelibs.md +++ b/_overviews/contribute/corelibs.md @@ -1,17 +1,14 @@ --- title: Core Library Contributions -layout: multipage-overview num: 4 -partof: scala-contribution -overview-name: Contributing to Scala --- ## Core Library Contributions There are several options for contributing to Scala's core libraries. You can: -* Help with [Documentation](/overviews/contribute/documentation.html). -* [Report Bugs or Issues](/overviews/contribute/bug-reporting-guide.html) against the core libraries. -* [Fix Bugs or Issues](/overviews/contribute/guide.html) against the +* Help with [Documentation](/contribute/documentation.html). +* [Report Bugs or Issues](/contribute/bug-reporting-guide.html) against the core libraries. +* [Fix Bugs or Issues](/contribute/guide.html) against the [reported library bugs/issues](https://github.com/scala/bug). ### Significant changes diff --git a/_overviews/contribute/documentation.md b/_overviews/contribute/documentation.md index 417f9b234a..3d3311dbce 100644 --- a/_overviews/contribute/documentation.md +++ b/_overviews/contribute/documentation.md @@ -1,9 +1,6 @@ --- title: Documentation Contributions -layout: multipage-overview num: 5 -partof: scala-contribution -overview-name: Contributing to Scala --- ## Contributing Documentation to the Scala project @@ -23,11 +20,11 @@ Thanks The Scala API documentation lives with the scala project source code. There are many ways you can help with improving Scaladoc, including: -* [Log issues for missing scaladoc documentation](/overviews/contribute/scala-standard-library-api-documentation.html#contribute-api-documentation-bug-reports) - +* [Log issues for missing scaladoc documentation](/contribute/scala-standard-library-api-documentation.html#contribute-api-documentation-bug-reports) - Please *follow the issue submission process closely* to help prevent duplicate issues being created. -* [Claim Scaladoc Issues and Provide Documentation](/overviews/contribute/scala-standard-library-api-documentation.html) - please claim issues prior to working on a specific scaladoc task to prevent duplication of effort. If you sit on an issue for too long without submitting a pull request, it will revert back to unassigned and you will need to re-claim it. +* [Claim Scaladoc Issues and Provide Documentation](/contribute/scala-standard-library-api-documentation.html) - please claim issues prior to working on a specific scaladoc task to prevent duplication of effort. If you sit on an issue for too long without submitting a pull request, it will revert back to unassigned and you will need to re-claim it. * You can also just -[submit new Scaladoc](/overviews/contribute/scala-standard-library-api-documentation.html) +[submit new Scaladoc](/contribute/scala-standard-library-api-documentation.html) without creating an issue, but please look to see if there is an issue already submitted for your task and claim it if there is. If not, please post your intention to work on a specific scaladoc task on [Scala Contributors](https://contributors.scala-lang.org/) so that people know what you are doing. ### The Main Scala Documentation Site @@ -44,7 +41,7 @@ without creating an issue, but please look to see if there is an issue already s * SIP (Scala Improvement Process) Proposals and more -Please read [Add New Guides/Tutorials](/overviews/contribute/add-guides.html) through before embarking on changes. The site uses +Please read [Add New Guides/Tutorials](/contribute/add-guides.html) through before embarking on changes. The site uses the [Jekyll](https://jekyllrb.com/) markdown engine so you will need to follow the instructions to get that running as well. ### Updating scala-lang.org @@ -55,4 +52,4 @@ to Scala and related projects) is provided on the main [scala-lang GitHub project](https://github.com/scala/scala-lang) which may be forked to create pull requests. Please read both the -[Add New Guides/Tutorials](/overviews/contribute/add-guides.html) document and the [scala-lang.org GitHub README](https://github.com/scala/scala-lang#scala-langorg) before embarking on any changes to the Scala language site, as it uses the same Jekyll markdown tool and many of the same conventions as the Scala documentation site. +[Add New Guides/Tutorials](/contribute/add-guides.html) document and the [scala-lang.org GitHub README](https://github.com/scala/scala-lang#scala-langorg) before embarking on any changes to the Scala language site, as it uses the same Jekyll markdown tool and many of the same conventions as the Scala documentation site. diff --git a/_overviews/contribute/guide.md b/_overviews/contribute/guide.md index 802e3c387c..70d470d454 100644 --- a/_overviews/contribute/guide.md +++ b/_overviews/contribute/guide.md @@ -1,9 +1,6 @@ --- title: Contributing guide -layout: multipage-overview num: 10 -partof: scala-contribution -overview-name: Contributing to Scala --- | **Shortcut** | **Description** | @@ -41,19 +38,19 @@ unencumbered by copyrights or patents. This is the impatient developer's checklist for the steps to submit a bug-fix pull request to the Scala project. For more information, description and justification for the steps, follow the links in that step. Further specific instructions for the release of Scala you are targeting can be found in the `CONTRIBUTING.md` file for that [GitHub branch](https://github.com/scala/scala) -1. [Select a bug to fix from GitHub](/overviews/contribute/index.html#community-tickets), or if you found the bug yourself and want to fix it, [create a GitHub issue](/overviews/contribute/bug-reporting-guide.html) (but please -[make sure it's not a duplicate](/overviews/contribute/bug-reporting-guide.html#please-check-before-reporting-a-bug)). -2. Optional ([but recommended](/overviews/contribute/scala-internals.html/#why-its-a-good-idea)), announce your intention to work on the bug on [Scala Contributors](https://contributors.scala-lang.org/). After all, don't you want to work on a team with -[these friendly people](/overviews/contribute/hacker-guide.html#1-connect) - it's one of the perks of contributing. -3. [Fork the Scala repository](/overviews/contribute/hacker-guide.html#fork) and clone your fork (if you haven't already). -4. [Create a feature branch](/overviews/contribute/hacker-guide.html#branch) to work on: use the branch name `issue/NNNN` where NNNN is the GitHub issue number. -5. [Fix the bug, or implement the new small feature](/overviews/contribute/hacker-guide.html#implement), include new tests (yes, for bug fixes too). -6. [Test, rinse](/overviews/contribute/hacker-guide.html#test) and [test some more](/overviews/contribute/partest-guide.html) until [all the tests pass](/overviews/contribute/hacker-guide.html#verify). -7. [Commit your changes](/overviews/contribute/hacker-guide.html#commit) to your feature branch in your fork. Please choose your commit message based on the [Git Hygiene](https://github.com/scala/scala#user-content-git-hygiene) section of the Scala project README. +1. [Select a bug to fix from GitHub](/contribute/index.html#community-tickets), or if you found the bug yourself and want to fix it, [create a GitHub issue](/contribute/bug-reporting-guide.html) (but please +[make sure it's not a duplicate](/contribute/bug-reporting-guide.html#please-check-before-reporting-a-bug)). +2. Optional ([but recommended](/contribute/scala-internals.html/#why-its-a-good-idea)), announce your intention to work on the bug on [Scala Contributors](https://contributors.scala-lang.org/). After all, don't you want to work on a team with +[these friendly people](/contribute/hacker-guide.html#1-connect) - it's one of the perks of contributing. +3. [Fork the Scala repository](/contribute/hacker-guide.html#fork) and clone your fork (if you haven't already). +4. [Create a feature branch](/contribute/hacker-guide.html#branch) to work on: use the branch name `issue/NNNN` where NNNN is the GitHub issue number. +5. [Fix the bug, or implement the new small feature](/contribute/hacker-guide.html#implement), include new tests (yes, for bug fixes too). +6. [Test, rinse](/contribute/hacker-guide.html#test) and [test some more](/contribute/partest-guide.html) until [all the tests pass](/contribute/hacker-guide.html#verify). +7. [Commit your changes](/contribute/hacker-guide.html#commit) to your feature branch in your fork. Please choose your commit message based on the [Git Hygiene](https://github.com/scala/scala#user-content-git-hygiene) section of the Scala project README. 8. If necessary [re-write git history](https://git-scm.com/book/en/Git-Branching-Rebasing) so that [commits are organized by major steps to the fix/feature]( https://github.com/scala/scala#git-hygiene). For bug fixes, a single commit is requested, for features several commits may be desirable (but each separate commit must compile and pass all tests) -9. [Submit a pull request](/overviews/contribute/hacker-guide.html#submit). -10. [Work with a reviewer](https://github.com/scala/scala#reviewing) to [get your pull request merged in](/overviews/contribute/hacker-guide.html#review). +9. [Submit a pull request](/contribute/hacker-guide.html#submit). +10. [Work with a reviewer](https://github.com/scala/scala#reviewing) to [get your pull request merged in](/contribute/hacker-guide.html#review). 11. Celebrate! Need more information or a little more hand-holding for the first one? We got you covered: take a read through the entire [Hacker Guide][hackers] (or the [equivalent Scala 3 Contributing Guide][scala3-hackers]) for an example of implementing a new feature (some of the steps can be skipped for bug fixes, this will be obvious from reading it, but many of the steps here will help with bug fixes too). @@ -67,8 +64,8 @@ on the [Scala Contributors](https://contributors.scala-lang.org/) mailing list a Contributions, big or small, simple or complex, controversial or undisputed, need to materialize as patches against the Scala project source tree. The hacker's guides ([Scala 2][hackers], or [Scala 3][scala3-hackers]) will explain how to materialize your idea into a full-fledged pull request against the Scala code base. -[hackers]: /overviews/contribute/hacker-guide.html -[community-tickets]: /overviews/contribute/index.html#community-tickets -[bug-reporting-guide]: /overviews/contribute/bug-reporting-guide.html +[hackers]: /contribute/hacker-guide.html +[community-tickets]: /contribute/index.html#community-tickets +[bug-reporting-guide]: /contribute/bug-reporting-guide.html [scala3-hackers]: {% link _overviews/scala3-contribution/procedures-intro.md %} [contrib-forum]: https://contributors.scala-lang.org/ diff --git a/_overviews/contribute/hacker-guide.md b/_overviews/contribute/hacker-guide.md index f342c98040..f9db614056 100644 --- a/_overviews/contribute/hacker-guide.md +++ b/_overviews/contribute/hacker-guide.md @@ -1,10 +1,7 @@ --- title: Scala hacker guide by: Eugene Burmako -layout: multipage-overview num: 12 -partof: scala-contribution -overview-name: Contributing to Scala ---
    This guide is intended to help you get from an idea of fixing a bug or implementing a new feature into a nightly Scala build, and, ultimately, to a production release of Scala incorporating your idea. @@ -310,7 +307,7 @@ This means your change is backward or forward binary incompatible with the speci ### Verify -Now to make sure that my fix doesn't break anything I need to run the test suite. The Scala test suite uses [JUnit](https://junit.org/junit4/) and [partest](/overviews/contribute/partest-guide.html), a tool we wrote for testing Scala. +Now to make sure that my fix doesn't break anything I need to run the test suite. The Scala test suite uses [JUnit](https://junit.org/junit4/) and [partest](/contribute/partest-guide.html), a tool we wrote for testing Scala. Run `sbt test` and `sbt partest` to run all of the JUnit and partest tests, respectively. `partest` (not `sbt partest`) also allows you to run a subset of the tests using wildcards: diff --git a/_overviews/contribute/inclusive-language-guide.md b/_overviews/contribute/inclusive-language-guide.md index 7f7c428f42..375d988158 100644 --- a/_overviews/contribute/inclusive-language-guide.md +++ b/_overviews/contribute/inclusive-language-guide.md @@ -1,9 +1,6 @@ --- title: Inclusive Language Guide -layout: multipage-overview num: 2 -partof: scala-contribution -overview-name: Contributing to Scala --- We are committed to providing a friendly, safe and welcoming environment for diff --git a/_overviews/contribute/index.md b/_overviews/contribute/index.md index b89f04803a..eb0596d802 100644 --- a/_overviews/contribute/index.md +++ b/_overviews/contribute/index.md @@ -1,9 +1,6 @@ --- title: Contribute -layout: multipage-overview num: 1 -partof: scala-contribution -overview-name: Contributing to Scala --- The Scala programming language is an open source project with a very @@ -18,7 +15,7 @@ That depends on what you want to contribute. Below are some getting started reso ### Reporting bugs -See our [bug reporting guide](/overviews/contribute/bug-reporting-guide.html) to learn +See our [bug reporting guide](/contribute/bug-reporting-guide.html) to learn how to efficiently report a bug. ### Contribute @@ -33,7 +30,7 @@ Coordination of contribution efforts takes place on When contributing, please follow: * The [Scala Code of Conduct](https://scala-lang.org/conduct/) -* The [Inclusive Language Guide](/overviews/contribute/inclusive-language-guide.html) +* The [Inclusive Language Guide](/contribute/inclusive-language-guide.html) ### Community Tickets diff --git a/_overviews/contribute/partest-guide.md b/_overviews/contribute/partest-guide.md index 548eb8d5e6..c3e6980b06 100644 --- a/_overviews/contribute/partest-guide.md +++ b/_overviews/contribute/partest-guide.md @@ -1,9 +1,6 @@ --- title: Running the Test Suite -layout: multipage-overview num: 13 -partof: scala-contribution -overview-name: Contributing to Scala --- Partest is a custom parallel testing tool that we use to run the test suite for the Scala compiler and library. Go to the scala project folder from your local checkout and run it via `sbt`, `ant` or standalone as follows. diff --git a/_overviews/contribute/scala-internals.md b/_overviews/contribute/scala-internals.md index 5f391947fa..f3b1de54de 100644 --- a/_overviews/contribute/scala-internals.md +++ b/_overviews/contribute/scala-internals.md @@ -1,9 +1,6 @@ --- title: Scala Contributors Forum -layout: multipage-overview num: 9 -partof: scala-contribution -overview-name: Contributing to Scala --- The [Scala Contributors Forum][scala-contributors] is where discussions about the Scala ecosystem diff --git a/_overviews/contribute/scala-standard-library-api-documentation.md b/_overviews/contribute/scala-standard-library-api-documentation.md index 99f1bb16e0..606407f886 100644 --- a/_overviews/contribute/scala-standard-library-api-documentation.md +++ b/_overviews/contribute/scala-standard-library-api-documentation.md @@ -1,9 +1,6 @@ --- title: Contribute to API Documentation -layout: multipage-overview num: 6 -partof: scala-contribution -overview-name: Contributing to Scala --- This page is specific to API documentation contributions – that is, API @@ -13,7 +10,7 @@ sometimes referred to as Scaladoc contributions. For contributions to tutorial and guide-style documentation on [docs.scala-lang.org](/), -see [Add New Guides/Tutorials](/overviews/contribute/add-guides.html). +see [Add New Guides/Tutorials](/contribute/add-guides.html). *Please note, these instructions cover documentation contributions Scala core libraries only. For other Scala projects please check those projects for the @@ -79,7 +76,7 @@ component so that they show up in the correct issue filters. Please familiarize yourself with the following before contributing new API documentation to save time, effort, mistakes and repetition. -* [Forking the Repo](/overviews/contribute/hacker-guide.html#2-set-up) - follow the setup steps through +* [Forking the Repo](/contribute/hacker-guide.html#2-set-up) - follow the setup steps through the Branch section. If providing new documentation related to an existing GitHub issue, use `issue/NNNN` or `ticket/NNNN` as the guide states. If providing API documentation with no associated GitHub issue, use `scaladoc/xxxx` instead. diff --git a/_overviews/contribute/tools.md b/_overviews/contribute/tools.md index 875160ca96..68cee7796f 100644 --- a/_overviews/contribute/tools.md +++ b/_overviews/contribute/tools.md @@ -1,9 +1,6 @@ --- title: IDE and Build Tool Contributions -layout: multipage-overview num: 11 -partof: scala-contribution -overview-name: Contributing to Scala # Projects list: projects: @@ -22,7 +19,7 @@ projects: homeLink: https://www.scala-lang.org/api issuesLink: https://github.com/scala/bug/labels/scaladoc readmeLink: https://github.com/scala/scala#welcome - contributingLink: /overviews/contribute/guide.html + contributingLink: /contribute/guide.html - title: Partest description: Scala Compiler/Library Testing (Contribute through scala/scala) icon: https://avatars1.githubusercontent.com/u/57059?v=3&s=200 @@ -50,7 +47,7 @@ if you would like to help revive them. ### Broken Links? -Stuff changes. Found a broken link or something that needs updating on this page? Please, consider [submitting a documentation pull request](/overviews/contribute/documentation.html#updating-scala-langorg) to fix it. +Stuff changes. Found a broken link or something that needs updating on this page? Please, consider [submitting a documentation pull request](/contribute/documentation.html#updating-scala-langorg) to fix it. ### Projects diff --git a/contribute.md b/contribute.md index 4a7d38faec..02a8e4b8d7 100644 --- a/contribute.md +++ b/contribute.md @@ -23,4 +23,4 @@ If you're interested in contributing to the Scala project in general, I argue th ## How Can I Contribute? -Please read: [Add New Guides/Tutorials](/overviews/contribute/add-guides.html) +Please read: [Add New Guides/Tutorials](/contribute/add-guides.html) diff --git a/index.md b/index.md index aacc00e221..5790ce8b7c 100644 --- a/index.md +++ b/index.md @@ -121,5 +121,5 @@ scala2-sections: - title: "Contributing to Scala" description: "The Complete Guide to Contributing to the Scala Project" icon: "fa fa-cogs" - link: /overviews/contribute/ + link: /contribute/ --- From 573e494856dd4138c155d7e6dbb7492b2e21ad28 Mon Sep 17 00:00:00 2001 From: Jamie Thompson Date: Tue, 22 Mar 2022 16:59:40 +0100 Subject: [PATCH 0603/1870] use jekyll link tag to render internal links --- _contribute_resources/1-documentation.md | 5 ++- _contribute_resources/2-bug-fixes.md | 4 +- _includes/column-list-of-items.html | 2 +- _overviews/contribute/add-guides.md | 11 +++-- _overviews/contribute/bug-reporting-guide.md | 4 +- _overviews/contribute/codereviews.md | 7 ++- _overviews/contribute/corelibs.md | 10 +++-- _overviews/contribute/documentation.md | 17 +++++--- _overviews/contribute/guide.md | 43 ++++++++++++------- _overviews/contribute/hacker-guide.md | 12 ++++-- _overviews/contribute/index.md | 7 ++- ...cala-standard-library-api-documentation.md | 16 ++++--- 12 files changed, 94 insertions(+), 44 deletions(-) diff --git a/_contribute_resources/1-documentation.md b/_contribute_resources/1-documentation.md index 474bea075f..1f42a6e20b 100644 --- a/_contribute_resources/1-documentation.md +++ b/_contribute_resources/1-documentation.md @@ -3,4 +3,7 @@ title: Documentation link: /contribute/documentation.html icon: fa fa-book --- -[Scaladoc (API)](/contribute/scala-standard-library-api-documentation.html), [docs.scala-lang.org](/contribute/add-guides.html) and [scala-lang.org](https://github.com/scala/scala-lang). +[Scaladoc (API)][scala-standard-library-api-documentation], [docs.scala-lang.org][add-guides] and [scala-lang.org](https://github.com/scala/scala-lang). + +[add-guides]: {% link _overviews/contribute/add-guides.md %} +[scala-standard-library-api-documentation]: {% link _overviews/contribute/scala-standard-library-api-documentation.md %} diff --git a/_contribute_resources/2-bug-fixes.md b/_contribute_resources/2-bug-fixes.md index 54e6d2cf9d..7026e7e15b 100644 --- a/_contribute_resources/2-bug-fixes.md +++ b/_contribute_resources/2-bug-fixes.md @@ -3,4 +3,6 @@ title: Bug fixes link: /contribute/guide.html icon: fa fa-bug --- -Issues with the tools, core libraries and compiler. Also you can help us by [reporting bugs](/contribute/bug-reporting-guide.html). +Issues with the tools, core libraries and compiler. Also you can help us by [reporting bugs][bug-reporting-guide]. + +[bug-reporting-guide]: {% link _overviews/contribute/bug-reporting-guide.md %} diff --git a/_includes/column-list-of-items.html b/_includes/column-list-of-items.html index eb9e1600be..2ce303e678 100644 --- a/_includes/column-list-of-items.html +++ b/_includes/column-list-of-items.html @@ -15,4 +15,4 @@

    {{item.title}}

    {% endfor %} - \ No newline at end of file + diff --git a/_overviews/contribute/add-guides.md b/_overviews/contribute/add-guides.md index 8e638021d2..96091fb311 100644 --- a/_overviews/contribute/add-guides.md +++ b/_overviews/contribute/add-guides.md @@ -5,7 +5,7 @@ num: 7 ## Why Contribute New Learning Material? -As [Heather Miller writes](/contribute.html), contributing to [docs.scala-lang.org](https://docs.scala-lang.org) is +As [Heather Miller writes][why-contribute], contributing to [docs.scala-lang.org][home] is critical to making Scala accessible to newcomers, experience programmers, and anyone who is curious. It is also a fantastic way to contribute for anyone who is comfortable using Scala, but maybe does not want to get involved with complex tools like the compiler. @@ -45,7 +45,7 @@ For one to contribute a document, one must simply [repo](https://github.com/scala/docs.scala-lang), write their article in [Markdown](https://daringfireball.net/projects/markdown/syntax) (example below), and submit a pull request. That's it. Likely after some edits and discussion, your document will be made live -on [docs.scala-lang.org](https://docs.scala-lang.org). +on [docs.scala-lang.org][home]. --- layout: overview @@ -71,7 +71,7 @@ styling is already taken care of for you. ### Criteria for Docs to be Accepted The goal of this documentation repository is to be tighter and more organized than other community-driven documentation platforms, like wikis. As such, any document pulled in for inclusion on -[docs.scala-lang.org](https://docs.scala-lang.org) must: +[docs.scala-lang.org][home] must: - **"fit in"** to the repository ( _i.e.,_ it should not be a complete duplicate of another article), - **be polished** it must be thorough, complete, correct, organized, and "article-like" (personal programming notes @@ -129,7 +129,7 @@ documents in the large overview. Putting it on the last page in the overview is outof: 15 --- -Index pages, such as [docs.scala-lang.org/overviews/index.html](https://docs.scala-lang.org/overviews/index.html) are +Index pages, such as [docs.scala-lang.org/overviews/index.html][overviews-index] are generated, by reading data from a configuration file, such as `_data/overviews.yml`, so your overview should be placed into a category there. @@ -216,3 +216,6 @@ above. Here is an example using the various modifiers. [collections-overview]: {% link _overviews/collections-2.13/introduction.md %} [scala-with-maven]: {% link _overviews/tutorials/scala-with-maven.md %} +[why-contribute]: {% link contribute.md %} +[home]: {% link index.md %} +[overviews-index]: {% link _overviews/index.md %} diff --git a/_overviews/contribute/bug-reporting-guide.md b/_overviews/contribute/bug-reporting-guide.md index e2637ccd09..91858d589c 100644 --- a/_overviews/contribute/bug-reporting-guide.md +++ b/_overviews/contribute/bug-reporting-guide.md @@ -41,7 +41,7 @@ If you have a code snippet that is resulting in bytecode which you believe is be 5. If you want to file an improvement in the issue tracker please discuss it first on one of the mailing lists. They offer much bigger audience than issue tracker. The latter is not suitable for long discussions. -* Keep in mind that the behavior you are witnessing could be intended. Good formal resources for verifying whether or not the language behavior is intended is either in the [Scala Improvement Proposal Documents](https://docs.scala-lang.org/sips/) or in the [Scala Language Specification](https://www.scala-lang.org/files/archive/spec/2.13/). If in doubt, you may always ask on the [Community Category](https://contributors.scala-lang.org/c/community) or [Stack Overflow](https://stackoverflow.com/questions/tagged/scala). +* Keep in mind that the behavior you are witnessing could be intended. Good formal resources for verifying whether or not the language behavior is intended is either in the [Scala Improvement Proposal Documents][sips] or in the [Scala Language Specification](https://www.scala-lang.org/files/archive/spec/2.13/). If in doubt, you may always ask on the [Community Category](https://contributors.scala-lang.org/c/community) or [Stack Overflow](https://stackoverflow.com/questions/tagged/scala). In general, if you find yourself stuck on any of these steps, asking on [Scala Contributors](https://contributors.scala-lang.org/) can be helpful: @@ -85,3 +85,5 @@ List(1, 2, 3).map(x => x + 1) 3. The actual output, including the stacktrace. 4. Related discussion on the mailing lists, if applicable. 5. If you have already looked into the issue provide interesting insights or proposals for fixing the issue. + +[sips]: {% link _sips/index.md %} diff --git a/_overviews/contribute/codereviews.md b/_overviews/contribute/codereviews.md index 6325fcde6c..be8e66ba46 100644 --- a/_overviews/contribute/codereviews.md +++ b/_overviews/contribute/codereviews.md @@ -4,7 +4,7 @@ num: 3 --- ## Code Review Contributions -In addition to [bug fixing](/contribute/guide.html), you can help us review +In addition to [bug fixing][bug-fixing], you can help us review [waiting pull requests](#pull-requests-awaiting-comment). This is also a good (and recommended) way to get to know the feel of the bug-fixing and submissions process before jumping in with your @@ -54,4 +54,7 @@ own pull requests. -Also note that the [Tools contributions](/contribute/tools.html) page has more projects that will generate pull requests. +Also note that the [Tools contributions][tools] page has more projects that will generate pull requests. + +[bug-fixing]: {% link _overviews/contribute/guide.md %} +[tools]: {% link _overviews/contribute/tools.md %} diff --git a/_overviews/contribute/corelibs.md b/_overviews/contribute/corelibs.md index 3ee05e6c13..1eb2f840b0 100644 --- a/_overviews/contribute/corelibs.md +++ b/_overviews/contribute/corelibs.md @@ -6,12 +6,16 @@ num: 4 There are several options for contributing to Scala's core libraries. You can: -* Help with [Documentation](/contribute/documentation.html). -* [Report Bugs or Issues](/contribute/bug-reporting-guide.html) against the core libraries. -* [Fix Bugs or Issues](/contribute/guide.html) against the +* Help with [Documentation][documentation]. +* [Report Bugs or Issues][bug-reporting-guide] against the core libraries. +* [Fix Bugs or Issues][guide] against the [reported library bugs/issues](https://github.com/scala/bug). ### Significant changes For significant new functionality or a whole new API to be considered for inclusion in the core Scala distribution, please take into account [https://github.com/scala/scala-dev/issues/661] before doing so. + +[documentation]: {% link _overviews/contribute/documentation.md %} +[bug-reporting-guide]: {% link _overviews/contribute/bug-reporting-guide.md %} +[guide]: {% link _overviews/contribute/guide.md %} diff --git a/_overviews/contribute/documentation.md b/_overviews/contribute/documentation.md index 3d3311dbce..9bd4597b36 100644 --- a/_overviews/contribute/documentation.md +++ b/_overviews/contribute/documentation.md @@ -20,16 +20,16 @@ Thanks The Scala API documentation lives with the scala project source code. There are many ways you can help with improving Scaladoc, including: -* [Log issues for missing scaladoc documentation](/contribute/scala-standard-library-api-documentation.html#contribute-api-documentation-bug-reports) - +* [Log issues for missing scaladoc documentation][report-api-doc-bugs] - Please *follow the issue submission process closely* to help prevent duplicate issues being created. -* [Claim Scaladoc Issues and Provide Documentation](/contribute/scala-standard-library-api-documentation.html) - please claim issues prior to working on a specific scaladoc task to prevent duplication of effort. If you sit on an issue for too long without submitting a pull request, it will revert back to unassigned and you will need to re-claim it. +* [Claim Scaladoc Issues and Provide Documentation][scala-standard-library-api-documentation] - please claim issues prior to working on a specific scaladoc task to prevent duplication of effort. If you sit on an issue for too long without submitting a pull request, it will revert back to unassigned and you will need to re-claim it. * You can also just -[submit new Scaladoc](/contribute/scala-standard-library-api-documentation.html) +[submit new Scaladoc][scala-standard-library-api-documentation] without creating an issue, but please look to see if there is an issue already submitted for your task and claim it if there is. If not, please post your intention to work on a specific scaladoc task on [Scala Contributors](https://contributors.scala-lang.org/) so that people know what you are doing. ### The Main Scala Documentation Site -[docs.scala-lang.org](https://docs.scala-lang.org/) houses the primary source of written, non-API documentation for Scala. It's a GitHub project that you can fork and submit pull requests from. It includes: +[docs.scala-lang.org][home] houses the primary source of written, non-API documentation for Scala. It's a GitHub project that you can fork and submit pull requests from. It includes: * Overviews * Tutorials @@ -41,7 +41,7 @@ without creating an issue, but please look to see if there is an issue already s * SIP (Scala Improvement Process) Proposals and more -Please read [Add New Guides/Tutorials](/contribute/add-guides.html) through before embarking on changes. The site uses +Please read [Add New Guides/Tutorials][add-guides] through before embarking on changes. The site uses the [Jekyll](https://jekyllrb.com/) markdown engine so you will need to follow the instructions to get that running as well. ### Updating scala-lang.org @@ -52,4 +52,9 @@ to Scala and related projects) is provided on the main [scala-lang GitHub project](https://github.com/scala/scala-lang) which may be forked to create pull requests. Please read both the -[Add New Guides/Tutorials](/contribute/add-guides.html) document and the [scala-lang.org GitHub README](https://github.com/scala/scala-lang#scala-langorg) before embarking on any changes to the Scala language site, as it uses the same Jekyll markdown tool and many of the same conventions as the Scala documentation site. +[Add New Guides/Tutorials][add-guides] document and the [scala-lang.org GitHub README](https://github.com/scala/scala-lang#scala-langorg) before embarking on any changes to the Scala language site, as it uses the same Jekyll markdown tool and many of the same conventions as the Scala documentation site. + +[report-api-doc-bugs]: {% link _overviews/contribute/scala-standard-library-api-documentation.md %}#contribute-api-documentation-bug-reports +[scala-standard-library-api-documentation]: {% link _overviews/contribute/scala-standard-library-api-documentation.md %} +[home]: {% link index.md %} +[add-guides]: {% link _overviews/contribute/add-guides.md %} diff --git a/_overviews/contribute/guide.md b/_overviews/contribute/guide.md index 70d470d454..472d2d41ab 100644 --- a/_overviews/contribute/guide.md +++ b/_overviews/contribute/guide.md @@ -38,19 +38,19 @@ unencumbered by copyrights or patents. This is the impatient developer's checklist for the steps to submit a bug-fix pull request to the Scala project. For more information, description and justification for the steps, follow the links in that step. Further specific instructions for the release of Scala you are targeting can be found in the `CONTRIBUTING.md` file for that [GitHub branch](https://github.com/scala/scala) -1. [Select a bug to fix from GitHub](/contribute/index.html#community-tickets), or if you found the bug yourself and want to fix it, [create a GitHub issue](/contribute/bug-reporting-guide.html) (but please -[make sure it's not a duplicate](/contribute/bug-reporting-guide.html#please-check-before-reporting-a-bug)). -2. Optional ([but recommended](/contribute/scala-internals.html/#why-its-a-good-idea)), announce your intention to work on the bug on [Scala Contributors](https://contributors.scala-lang.org/). After all, don't you want to work on a team with -[these friendly people](/contribute/hacker-guide.html#1-connect) - it's one of the perks of contributing. -3. [Fork the Scala repository](/contribute/hacker-guide.html#fork) and clone your fork (if you haven't already). -4. [Create a feature branch](/contribute/hacker-guide.html#branch) to work on: use the branch name `issue/NNNN` where NNNN is the GitHub issue number. -5. [Fix the bug, or implement the new small feature](/contribute/hacker-guide.html#implement), include new tests (yes, for bug fixes too). -6. [Test, rinse](/contribute/hacker-guide.html#test) and [test some more](/contribute/partest-guide.html) until [all the tests pass](/contribute/hacker-guide.html#verify). -7. [Commit your changes](/contribute/hacker-guide.html#commit) to your feature branch in your fork. Please choose your commit message based on the [Git Hygiene](https://github.com/scala/scala#user-content-git-hygiene) section of the Scala project README. +1. [Select a bug to fix from GitHub][community-tickets], or if you found the bug yourself and want to fix it, [create a GitHub issue][bug-reporting-guide] (but please +[make sure it's not a duplicate][bug-report-check-dupes]). +2. Optional ([but recommended][why-its-a-good-idea]), announce your intention to work on the bug on [Scala Contributors](https://contributors.scala-lang.org/). After all, don't you want to work on a team with +[these friendly people][hackers-connect] - it's one of the perks of contributing. +3. [Fork the Scala repository][hackers-fork] and clone your fork (if you haven't already). +4. [Create a feature branch][hackers-branch] to work on: use the branch name `issue/NNNN` where NNNN is the GitHub issue number. +5. [Fix the bug, or implement the new small feature][hackers-implement], include new tests (yes, for bug fixes too). +6. [Test, rinse][hackers-test] and [test some more][partest-guide] until [all the tests pass][hackers-verify]. +7. [Commit your changes][hackers-commit] to your feature branch in your fork. Please choose your commit message based on the [Git Hygiene](https://github.com/scala/scala#user-content-git-hygiene) section of the Scala project README. 8. If necessary [re-write git history](https://git-scm.com/book/en/Git-Branching-Rebasing) so that [commits are organized by major steps to the fix/feature]( https://github.com/scala/scala#git-hygiene). For bug fixes, a single commit is requested, for features several commits may be desirable (but each separate commit must compile and pass all tests) -9. [Submit a pull request](/contribute/hacker-guide.html#submit). -10. [Work with a reviewer](https://github.com/scala/scala#reviewing) to [get your pull request merged in](/contribute/hacker-guide.html#review). +9. [Submit a pull request][hackers-submit]. +10. [Work with a reviewer](https://github.com/scala/scala#reviewing) to [get your pull request merged in][hackers-review]. 11. Celebrate! Need more information or a little more hand-holding for the first one? We got you covered: take a read through the entire [Hacker Guide][hackers] (or the [equivalent Scala 3 Contributing Guide][scala3-hackers]) for an example of implementing a new feature (some of the steps can be skipped for bug fixes, this will be obvious from reading it, but many of the steps here will help with bug fixes too). @@ -59,13 +59,26 @@ Need more information or a little more hand-holding for the first one? We got yo For larger, more ambitious changes (e.g. new language features), the first step to making a change is to discuss it with the community at large, to make sure everyone agrees on the idea and on the implementation plan. Announce the change -on the [Scala Contributors](https://contributors.scala-lang.org/) mailing list and get developer feedback. For really complex changes, a [Scala Improvement Process (SIP)](https://docs.scala-lang.org/sips/) document might be required, but the first step is always to discuss it on the mailing list and if a SIP is required, that will be discussed on the mailing list. +on the [Scala Contributors](https://contributors.scala-lang.org/) mailing list and get developer feedback. For really complex changes, a [Scala Improvement Process (SIP)][sips] document might be required, but the first step is always to discuss it on the mailing list and if a SIP is required, that will be discussed on the mailing list. Contributions, big or small, simple or complex, controversial or undisputed, need to materialize as patches against the Scala project source tree. The hacker's guides ([Scala 2][hackers], or [Scala 3][scala3-hackers]) will explain how to materialize your idea into a full-fledged pull request against the Scala code base. -[hackers]: /contribute/hacker-guide.html -[community-tickets]: /contribute/index.html#community-tickets -[bug-reporting-guide]: /contribute/bug-reporting-guide.html +[hackers]: {% link _overviews/contribute/hacker-guide.md %} +[community-tickets]: {% link _overviews/contribute/index.md %}#community-tickets +[bug-reporting-guide]: {% link _overviews/contribute/bug-reporting-guide.md %} +[bug-report-check-dupes]: {% link _overviews/contribute/bug-reporting-guide.md %}#please-check-before-reporting-a-bug [scala3-hackers]: {% link _overviews/scala3-contribution/procedures-intro.md %} [contrib-forum]: https://contributors.scala-lang.org/ +[why-its-a-good-idea]: {% link _overviews/contribute/scala-internals.md %}#why-its-a-good-idea +[hackers-connect]: {% link _overviews/contribute/hacker-guide.md %}#1-connect +[hackers-fork]: {% link _overviews/contribute/hacker-guide.md %}#fork +[hackers-branch]: {% link _overviews/contribute/hacker-guide.md %}#branch +[hackers-implement]: {% link _overviews/contribute/hacker-guide.md %}#implement +[hackers-test]: {% link _overviews/contribute/hacker-guide.md %}#test +[hackers-verify]: {% link _overviews/contribute/hacker-guide.md %}#verify +[hackers-commit]: {% link _overviews/contribute/hacker-guide.md %}#commit +[hackers-submit]: {% link _overviews/contribute/hacker-guide.md %}#submit +[hackers-review]: {% link _overviews/contribute/hacker-guide.md %}#review +[partest-guide]: {% link _overviews/contribute/partest-guide.md %} +[sips]: {% link _sips/index.md %} diff --git a/_overviews/contribute/hacker-guide.md b/_overviews/contribute/hacker-guide.md index f9db614056..92181003fa 100644 --- a/_overviews/contribute/hacker-guide.md +++ b/_overviews/contribute/hacker-guide.md @@ -196,7 +196,7 @@ Contributing to the Scala standard library is about the same as working on one o If documentation is necessary for some trait/class/object/method/etc in the Scala standard library, typically maintainers will include inline comments describing their design decisions or rationale for implementing things the way they have, if it is not straightforward. -If you intend on contributing to Scala collections, please make sure you're familiar with the design of the Scala collections library. It can be easy to put an implementation in the wrong location if you are unfamiliar with the collections architecture. There is an excellent and very detailed guide covering [the Architecture of Scala Collections](/overviews/core/architecture-of-scala-collections.html), as well as a larger more general [Scala collections Guide](/overviews/collections/introduction.html) covering the sequential portion of collections. For parallel collections, there also exists a detailed [Scala Parallel Collections Guide](/overviews/parallel-collections/overview.html). +If you intend on contributing to Scala collections, please make sure you're familiar with the design of the Scala collections library. It can be easy to put an implementation in the wrong location if you are unfamiliar with the collections architecture. There is an excellent and very detailed guide covering [the Architecture of Scala Collections][collections-arch], as well as a larger more general [Scala collections Guide][collections-intro] covering the sequential portion of collections. For parallel collections, there also exists a detailed [Scala Parallel Collections Guide][collections-par]. ##### The Scala Compiler @@ -204,7 +204,7 @@ Documentation about the internal workings of the Scala compiler is scarce, and m * [Compiler internals videos by Martin Odersky](https://www.scala-lang.org/old/node/598.html) are quite dated, but still very useful. In this three-video series Martin explains the general architecture of the compiler, and the basics of the front-end, which has recently become Scala reflection API. -* [Reflection documentation](/overviews/reflection/overview.html) describes fundamental data structures (like `Tree`s, `Symbol`s, and `Types`) that +* [Reflection documentation][reflect-overview] describes fundamental data structures (like `Tree`s, `Symbol`s, and `Types`) that are used to represent Scala programs and operations defined on then. Since much of the compiler has been factored out and made accessible via the Reflection API, all of the fundamentals needed for reflection are the same for the compiler. * [Reflection and Compilers by Martin Odersky](https://channel9.msdn.com/Events/Lang-NEXT/Lang-NEXT-2012/Reflection-and-Compilers), a talk at Lang.NEXT 2012 in which Martin elaborates on the design of scalac and the architecture of the reflection API. @@ -307,7 +307,7 @@ This means your change is backward or forward binary incompatible with the speci ### Verify -Now to make sure that my fix doesn't break anything I need to run the test suite. The Scala test suite uses [JUnit](https://junit.org/junit4/) and [partest](/contribute/partest-guide.html), a tool we wrote for testing Scala. +Now to make sure that my fix doesn't break anything I need to run the test suite. The Scala test suite uses [JUnit](https://junit.org/junit4/) and [partest][partest-guide], a tool we wrote for testing Scala. Run `sbt test` and `sbt partest` to run all of the JUnit and partest tests, respectively. `partest` (not `sbt partest`) also allows you to run a subset of the tests using wildcards: @@ -378,3 +378,9 @@ workflow) and be ready to elaborate and adjust your patch if necessary. In this After your reviewer is happy with your code (usually signaled by a LGTM — “Looks good to me”), your job is done. Note that there can be a gap between a successful review and the merge, because not every reviewer has merge rights. In that case, someone else from the team will pick up your pull request and merge it. So don't be confused if your reviewer says “LGTM”, but your code doesn't get merged immediately. + +[collections-arch]: {% link _overviews/core/architecture-of-scala-collections.md %} +[collections-intro]: {% link _overviews/collections/introduction.md %} +[collections-par]: {% link _overviews/parallel-collections/overview.md %} +[reflect-overview]: {% link _overviews/reflection/overview.md %} +[partest-guide]: {% link _overviews/contribute/partest-guide.md %} diff --git a/_overviews/contribute/index.md b/_overviews/contribute/index.md index eb0596d802..4e94334061 100644 --- a/_overviews/contribute/index.md +++ b/_overviews/contribute/index.md @@ -15,7 +15,7 @@ That depends on what you want to contribute. Below are some getting started reso ### Reporting bugs -See our [bug reporting guide](/contribute/bug-reporting-guide.html) to learn +See our [bug reporting guide][bug-reporting-guide] to learn how to efficiently report a bug. ### Contribute @@ -30,7 +30,7 @@ Coordination of contribution efforts takes place on When contributing, please follow: * The [Scala Code of Conduct](https://scala-lang.org/conduct/) -* The [Inclusive Language Guide](/contribute/inclusive-language-guide.html) +* The [Inclusive Language Guide][inclusive-language-guide] ### Community Tickets @@ -63,3 +63,6 @@ open-source Scala library or tool, please visit the [community build documentation](https://github.com/scala/community-build/wiki) for guidelines on what projects are suitable for the community build and how projects can be added. + +[bug-reporting-guide]: {% link _overviews/contribute/bug-reporting-guide.md %} +[inclusive-language-guide]: {% link _overviews/contribute/inclusive-language-guide.md %} diff --git a/_overviews/contribute/scala-standard-library-api-documentation.md b/_overviews/contribute/scala-standard-library-api-documentation.md index 606407f886..c1303e8b18 100644 --- a/_overviews/contribute/scala-standard-library-api-documentation.md +++ b/_overviews/contribute/scala-standard-library-api-documentation.md @@ -9,8 +9,8 @@ documentation for sometimes referred to as Scaladoc contributions. For contributions to tutorial and guide-style documentation on -[docs.scala-lang.org](/), -see [Add New Guides/Tutorials](/contribute/add-guides.html). +[docs.scala-lang.org][home], +see [Add New Guides/Tutorials][add-guides]. *Please note, these instructions cover documentation contributions Scala core libraries only. For other Scala projects please check those projects for the @@ -76,13 +76,13 @@ component so that they show up in the correct issue filters. Please familiarize yourself with the following before contributing new API documentation to save time, effort, mistakes and repetition. -* [Forking the Repo](/contribute/hacker-guide.html#2-set-up) - follow the setup steps through +* [Forking the Repo][hackers-setup] - follow the setup steps through the Branch section. If providing new documentation related to an existing GitHub issue, use `issue/NNNN` or `ticket/NNNN` as the guide states. If providing API documentation with no associated GitHub issue, use `scaladoc/xxxx` instead. -* [Scaladoc for library authors](https://docs.scala-lang.org/overviews/scaladoc/for-library-authors.html) +* [Scaladoc for library authors][scaladoc-lib-authors] covers the use of scaladoc tags, markdown and other features. -* [Scaladoc's interface](https://docs.scala-lang.org/overviews/scaladoc/interface.html) +* [Scaladoc's interface][scaladoc-interface] covers all of the features of Scaladoc's interface, e.g. switching between companions, browsing package object documentation, searching, token searches and so on. @@ -121,3 +121,9 @@ PR is merged in smoothly: as smooth and streamlined as possible. Thanks for helping us improve the Scaladoc API documentation! + +[home]: {% link index.md %} +[add-guides]: {% link _overviews/contribute/add-guides.md %} +[hackers-setup]: {% link _overviews/contribute/hacker-guide.md %}#2-set-up +[scaladoc-lib-authors]: {% link _overviews/scaladoc/for-library-authors.md %} +[scaladoc-interface]: {% link _overviews/scaladoc/interface.md %} From 7de6290af5657b4a02373222452f25daca0fe0c8 Mon Sep 17 00:00:00 2001 From: Jamie Thompson Date: Wed, 23 Mar 2022 18:01:50 +0100 Subject: [PATCH 0604/1870] add back Scoverage as a project in need --- _overviews/contribute/tools.md | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/_overviews/contribute/tools.md b/_overviews/contribute/tools.md index 68cee7796f..77115d03ab 100644 --- a/_overviews/contribute/tools.md +++ b/_overviews/contribute/tools.md @@ -30,6 +30,14 @@ projects: contributingLink: projectsInNeed: + - title: Scoverage + description: Scala code coverage tool + icon: https://avatars1.githubusercontent.com/u/5998302?v=3&s=200 + link: https://github.com/scoverage/scalac-scoverage-plugin + homeLink: http://scoverage.org/ + issuesLink: https://github.com/scoverage/scalac-scoverage-plugin/issues + readmeLink: https://github.com/scoverage/scalac-scoverage-plugin/blob/master/README.md + contributingLink: https://groups.google.com/forum/#!forum/scala-code-coverage-tool --- ## Contributing to IDE and Build Tools From e2a41dc6ad52aad13d3e07acc1971c3cbc859344 Mon Sep 17 00:00:00 2001 From: Jamie Thompson Date: Wed, 23 Mar 2022 19:41:21 +0100 Subject: [PATCH 0605/1870] use more accessible language in Add New Guides/Tutorials - also switch some code blocks to explicit html so that mdoc code blocks are not escaped. --- _overviews/contribute/add-guides.md | 204 +++++++++++++++++----------- 1 file changed, 126 insertions(+), 78 deletions(-) diff --git a/_overviews/contribute/add-guides.md b/_overviews/contribute/add-guides.md index 96091fb311..ed8b0d36c7 100644 --- a/_overviews/contribute/add-guides.md +++ b/_overviews/contribute/add-guides.md @@ -19,8 +19,11 @@ and is always contribution-ready. Currently, the _types_ of documentation supported in this repository are: -- **Guides/Overviews**: Definitive guides/overviews of specific language features. Often long, detailed documents, - often produced by members of the Scala team. An example is the excellent [Collections][collections-overview] overview. +- **Guides/Overviews/Books**: Definitive guides/overviews of specific language features. Often long, detailed documents, + often produced by members of the Scala team. An example is the [Collections][collections-overview] overview. +- **References**: The canonical reference for language features, written by members of the Scala team. + These provide the exact specification to understand more subtle aspects of the language. An example is the + [Scala 3 reference][scala-3-reference]. - **Tutorials**: Bite-size, example-rich, and concise articles meant to get a developer up to speed quickly. - **Cheatsheets**: Quick reference of Scala syntax and behaviors. @@ -28,27 +31,29 @@ Currently, the _types_ of documentation supported in this repository are: The website is statically generated from [Markdown](https://en.wikipedia.org/wiki/Markdown) source using [Jekyll](https://github.com/mojombo/jekyll), and hosted on [GitHub Pages](https://pages.github.com/). -This workflow was chosen so as to make it as easy as possible for core committers and the community alike -to produce HTML documentation, and as easy as possible to publish it in a central location. +This workflow was chosen to help contributors to focus on writing helpful content, rather than on configuration and +boilerplate. It also aids publishing a static site in a central location. The markdown syntax being used supports [Maruku](https://github.com/bhollis/maruku) extensions, and has automatic syntax highlighting, without the need for any tags. Additionally [mdoc](https://github.com/scalameta/mdoc) is used during pull requests to validate Scala code blocks. -To use this feature you must use the backtick notation as documented by mdoc. Note that only validation is done. -The output files from mdoc are not used in the building of the tutorial. Use `mdoc` or `mdoc:fail` for your code blocks. +To use this feature you must use the backtick notation as documented by mdoc, +[see here](#code-blocks) for an example. + +**Note:** only validation of code is done by mdoc, and no extra output is generated. ## Submitting Docs -For one to contribute a document, one must simply +For you to contribute a document, first [fork](https://help.github.com/articles/fork-a-repo/) the -[repo](https://github.com/scala/docs.scala-lang), write their article in -[Markdown](https://daringfireball.net/projects/markdown/syntax) (example below), and submit a pull request. That's it. +[repo](https://github.com/scala/docs.scala-lang), then write your article in +[Markdown](https://daringfireball.net/projects/markdown/syntax) (example below), and finally submit a pull request. Likely after some edits and discussion, your document will be made live on [docs.scala-lang.org][home]. --- - layout: overview + layout: singlepage-overview title: My Awesome Title --- @@ -56,32 +61,41 @@ on [docs.scala-lang.org][home]. And a paragraph, with a [link](https://www.scala-lang.org). -One can contribute code in a markdown document by either - - indenting it by 4 spaces - - surrounding by triple backticks, as shown below - - in-line by putting backticks around it, e.g. `def foo`. +You can contribute code in a markdown document by either +- in-line by putting backticks around it, +- surrounding by triple backticks, +- or indenting it by 4 spaces, e.g.: + +~~~ +inline example: `val x = 23` + +block example: +```scala +println("hello") +``` + +indented example: - ```scala - println("hello") - ``` + case class Foo(x: Int) +~~~ -Everything else is automatically generated for you; tables of contents, and most index pages. And of course, the -styling is already taken care of for you. +Tables of contents will be automatically generated in a sidebar for your document, and syntax highlighting +is provided. ### Criteria for Docs to be Accepted -The goal of this documentation repository is to be tighter and more organized than other community-driven documentation platforms, like wikis. As such, any document pulled in for inclusion on -[docs.scala-lang.org][home] must: +The goal of this documentation repository is to be highly curated, rather than the approach by other community-driven +documentation platforms, like wikis. Therefore, to be included on [docs.scala-lang.org][home], a document must: - **"fit in"** to the repository ( _i.e.,_ it should not be a complete duplicate of another article), -- **be polished** it must be thorough, complete, correct, organized, and "article-like" (personal programming notes -don't quite fit.) -- **be maintained** if the document might require revisions from time to time, be prepared to keep it up to date, or +- **be polished**, i.e. it must be thorough, complete, correct, and organized; written as an article to be understood + by many users. +- **be maintained**, if the document might require revisions from time to time, be prepared to keep it up to date, or nominate someone to take ownership. If you have something you're thinking about contributing, or that you're thinking about writing in order to contribute -- we'd love to consider it! Please don't hesitate to use GitHub issues and pull requests and the -\#scala-contributors room [on Discord](https://discord.com/invite/scala) for any questions, concerns, +`#scala-contributors` room [on Discord](https://discord.com/invite/scala) for any questions, concerns, clarifications, etc. ## Document Templates @@ -90,38 +104,36 @@ clarifications, etc. ### Guides/Overviews -A guide or an overview that can be logically placed on **one** page must be placed in the directory -`_overviews/RELEVANT-CATEGORY/_posts` with the file name in the format `YYYY-MM-dd-title-separated-by-dashes.md`, -and header: +A guide or an overview that can be logically placed on **one** markdown page should be placed in the directory +`_overviews/RELEVANT-CATEGORY/`. It should have the header: --- - layout: overview + layout: singlepage-overview title: YOUR TITLE --- -The rest of the document should, of course, be written in [Markdown](https://en.wikipedia.org/wiki/Markdown). +The rest of the document will be written in [Markdown](https://en.wikipedia.org/wiki/Markdown) syntax. -At the moment, `RELEVANT-CATEGORY` corresponds to only a single category, "core," because we are currently focusing on -building up documentation of core libraries. However, expect more categories here in the future. +You may substitute `RELEVANT-CATEGORY` for any directory that is related, or create a new one if one is not suitable. -If your document consists of **multiple** pages, like the [Collections][collections-overview] overview, an ordering -must be specified, by numbering documents in their logical order with `num`, and a name must be assigned to the -collection of pages using `partof`. For example, the following header might be used for a document in the collections -overview: +If your guide/overview consists of **multiple** pages, like the [Collections][collections-overview] overview, +an ordering must be specified, by numbering documents in their logical order with the `num` tag in the header, +and a name must be assigned to the collection of pages using the `partof` tag. +For example, the following header might be used for a document in the collections overview: --- - layout: overview + layout: multipage-overview title: YOUR TITLE partof: collections num: 10 --- -A **single** document in the collection must contain a tag in the header, `outof`, that indicates the total number of -documents in the large overview. Putting it on the last page in the overview is often best: +**At least one** document in the collection must contain a tag in the header, `outof`, that indicates the total number +of documents in the large overview. Putting it on the last page in the overview is often best: --- - layout: overview + layout: multipage-overview title: YOUR TITLE partof: collections @@ -130,14 +142,18 @@ documents in the large overview. Putting it on the last page in the overview is --- Index pages, such as [docs.scala-lang.org/overviews/index.html][overviews-index] are -generated, by reading data from a configuration file, such as `_data/overviews.yml`, so your overview should be +generated by reading data from a configuration file, such as `_data/overviews.yml`, so your overview should be placed into a category there. ### Tutorials -At the moment, tutorials are written the same as Guides/Overviews, except that their link must be added to -the metadata of `/tutorials.md`. e.g. for the [Scala With Maven][scala-with-maven] tutorial, the -metadata of `/tutorials.md` looks like +Tutorials are different to guides, they should be written in a much more concise, task-oriented style, +usually on a single page. + +Similar to guides, tutorials also use the same markdown header. + +Once the tutorial is written, to aid user navigation their link must be added to +the metadata of `/tutorials.md`. e.g. it could look like --- layout: inner-page-parent @@ -145,18 +161,33 @@ metadata of `/tutorials.md` looks like tutorials: ... - - title: "Scala with Maven" - url: "/tutorials/scala-with-maven.html" - description: "Create a Scala project with Maven." - icon: code + - title: My New Tutorial + url: "/tutorials/my-new-tutorial.html" + description: "Learn How To Do This Specific Task" + icon: code --- -For a single-page tutorial, the typical directory to place them in is `_overviews/tutorials`. +You must also add the tutorial to the drop down list in the navigation bar. To do this, add an extra entry to +`_data/doc-nav-header.yml`. i.e. + + --- + - title: Getting Started + url: "/getting-started/index.html" + - title: Learn + ... + - title: Tutorials + url: "#" + submenu: + ... + - title: My New Tutorial + url: "/tutorials/my-new-tutorial.html" + ... + --- ### Cheatsheets -For now, cheatsheets are assumed to be in the form of tables. To contribute a cheatsheet, one must simply produce their -cheatsheet as a Markdown table, with the following header: +Cheatsheets have a special layout, and the content is expected to be a markdown table. To contribute a cheatsheet, +you should use the following format: --- layout: cheatsheet @@ -164,27 +195,37 @@ cheatsheet as a Markdown table, with the following header: by: YOUR NAME about: SOME TEXT ABOUT THE CHEAT SHEET. --- + | Title A | Title B | + |---------|---------| + | content | more | ### Code blocks The site build process uses [mdoc](https://scalameta.org/mdoc/) to typecheck code snippets in markdown. This is a great way to ensure the code snippets that -you're including typecheck and are valid. Here are a few quick types to get -started. +you're including typecheck and are valid. Here are a few quick tips to get +started: -To get started, add `mdoc` after `scala` when you are creating a +First, add `mdoc` after `scala` when you are creating a code block. The `mdoc` modifier here will make sure that `mdoc` runs the code snippet and ensures that it's valid. - ```scala mdoc - val a = 1 - ``` +
    +
    +
    +            ```scala mdoc
    +val a = 1
    +```
    +
    + If you have a snippet that you expect to fail, you can also account for this by using `mdoc:fail` for a compile error `mdoc:crash` for a runtime-error. - ```scala mdoc:fail - val b: String = 3 // won't compile - ``` +
    ```scala mdoc:fail
    +val b: String = 3 // won't compile
    +```
    +
    + Keep in mind that a single file is all compiled as a single unit, so you can't redefine a variable that was defined above in another code snippet. _However_ there are a couple ways to get around this. Firstly, you can use the `mdoc:nest` @@ -193,29 +234,36 @@ essentially "hide" the snippet from the others. Another way around this is to use the `mdoc:reset` modifier, which _resets_ and forgets about everything up above. Here is an example using the various modifiers. - ```scala mdoc - import java.time.Instant +
    ```scala mdoc
    +import java.time.Instant
    +
    +def now() = Instant.now()
    +object Foo {}
    +```
    +
    + +
    ```scala mdoc:nest
    +case class Foo(a: Int) // conflicts with Foo above, but it's nested so it's fine
    +```
    +
    - def now() = Instant.now() - object Foo {} - ``` +
    ```scala mdoc
    +val a = s"The time is ${now()}" // still have access to the now method from above
    +```
    +
    - ```scala mdoc:nest - case class Foo(a: Int) // conflicts with Foo above, but it's nested so it's fine - ``` +
    ```scala mdoc:reset
    +case class Foo(a: String) // forget the previous Foo's and start fresh
    +```
    +
    - ```scala mdoc - val a = s"The time is ${now()}" // still have access to the now method from above - ``` - ```scala mdoc:reset - case class Foo(a: String) // forget the previous Foo's and start fresh - ``` - ```scala mdoc - val myFoo = Foo("hi") // now we only have access to the last Foo - ``` +
    ```scala mdoc
    +val myFoo = Foo("hi") // now we only have access to the last Foo
    +```
    +
    [collections-overview]: {% link _overviews/collections-2.13/introduction.md %} -[scala-with-maven]: {% link _overviews/tutorials/scala-with-maven.md %} [why-contribute]: {% link contribute.md %} [home]: {% link index.md %} [overviews-index]: {% link _overviews/index.md %} +[scala-3-reference]: https://docs.scala-lang.org/scala3/reference/overview.html From d8e9d2ebc889dc4b7e5a22530596bc9b6d7f24aa Mon Sep 17 00:00:00 2001 From: Jamie Thompson Date: Wed, 23 Mar 2022 19:58:56 +0100 Subject: [PATCH 0606/1870] enhance contribute intro --- _contribute_resources/1-documentation.md | 4 +++- _overviews/contribute/index.md | 6 +++--- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/_contribute_resources/1-documentation.md b/_contribute_resources/1-documentation.md index 1f42a6e20b..e11b539e16 100644 --- a/_contribute_resources/1-documentation.md +++ b/_contribute_resources/1-documentation.md @@ -3,7 +3,9 @@ title: Documentation link: /contribute/documentation.html icon: fa fa-book --- -[Scaladoc (API)][scala-standard-library-api-documentation], [docs.scala-lang.org][add-guides] and [scala-lang.org](https://github.com/scala/scala-lang). +[Library API docs][scala-standard-library-api-documentation], [new guides][add-guides] on [docs.scala-lang.org][home], and help +with [scala-lang.org](https://github.com/scala/scala-lang). [add-guides]: {% link _overviews/contribute/add-guides.md %} [scala-standard-library-api-documentation]: {% link _overviews/contribute/scala-standard-library-api-documentation.md %} +[home]: {% link index.md %} diff --git a/_overviews/contribute/index.md b/_overviews/contribute/index.md index 4e94334061..da197e233e 100644 --- a/_overviews/contribute/index.md +++ b/_overviews/contribute/index.md @@ -1,16 +1,16 @@ --- -title: Contribute +title: Introduction num: 1 --- +### Why You Should Contribute To Scala The Scala programming language is an open source project with a very diverse community, where people from all over the world contribute their work, with everyone benefiting from friendly help and advice, and kindly helping others in return. So why not join the Scala community and help everyone make things better? -## How to help? - +**What Can I Do?** That depends on what you want to contribute. Below are some getting started resources for different contribution domains. Please read all of the documentation and follow all the links from the topic pages below before attempting to contribute, as many of the questions you have will already be answered. ### Reporting bugs From 7282312e59bc4a38a1bf508e01ad7342cea386c9 Mon Sep 17 00:00:00 2001 From: Florian3k <24961583+Florian3k@users.noreply.github.com> Date: Sat, 26 Mar 2022 13:07:21 +0100 Subject: [PATCH 0607/1870] Remove dangling opening brace --- _overviews/scala3-book/fp-functional-error-handling.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/_overviews/scala3-book/fp-functional-error-handling.md b/_overviews/scala3-book/fp-functional-error-handling.md index d56dfff3a6..41410e5cf1 100644 --- a/_overviews/scala3-book/fp-functional-error-handling.md +++ b/_overviews/scala3-book/fp-functional-error-handling.md @@ -137,7 +137,7 @@ val stringA = "1" val stringB = "2" val stringC = "3" -val y = for { +val y = for a <- makeInt(stringA) b <- makeInt(stringB) c <- makeInt(stringC) From 7a3468bec81c9382d37a10e6d2be5c928d4000db Mon Sep 17 00:00:00 2001 From: Som Snytt Date: Sat, 26 Mar 2022 16:56:46 -0700 Subject: [PATCH 0608/1870] Give Nth advice --- _overviews/core/collections-migration-213.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/_overviews/core/collections-migration-213.md b/_overviews/core/collections-migration-213.md index 68c5247774..114da1f632 100644 --- a/_overviews/core/collections-migration-213.md +++ b/_overviews/core/collections-migration-213.md @@ -15,6 +15,8 @@ The most important changes in the Scala 2.13 collections library are: - Transformation methods no longer have an implicit `CanBuildFrom` parameter. This makes the library easier to understand (in source code, Scaladoc, and IDE code completion). It also makes compiling user code more efficient. - The type hierarchy is simplified. `Traversable` no longer exists, only `Iterable`. - The `to[Collection]` method was replaced by the `to(Collection)` method. + - The `toC` methods are strict by convention and yield the default collection type where applicable. For example, `Iterator.continually(42).take(10).toSeq` produces a `List[Int]` and without the limit would not. + - `toIterable` is deprecated wherever defined. For `Iterator`, in particular, prefer `to[LazyList]`. - Views have been vastly simplified and work reliably now. They no longer extend their corresponding collection type, for example, an `IndexedSeqView` no longer extends `IndexedSeq`. - `collection.breakOut` no longer exists, use `.view` and `.to(Collection)` instead. - Immutable hash sets and hash maps have a new implementation (`ChampHashSet` and `ChampHashMap`, based on the ["CHAMP" encoding](https://michael.steindorfer.name/publications/oopsla15.pdf)). From f874fe30c3d6c2b68483281ceadcc51b5620f301 Mon Sep 17 00:00:00 2001 From: som-snytt Date: Sat, 26 Mar 2022 18:35:24 -0700 Subject: [PATCH 0609/1870] Relax it's private --- _tour/classes.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/_tour/classes.md b/_tour/classes.md index ee3dc33703..0bda77c78e 100644 --- a/_tour/classes.md +++ b/_tour/classes.md @@ -86,7 +86,7 @@ class Point { if (newValue < bound) _y = newValue else printWarning() } - private def printWarning(): Unit = println("WARNING: Out of bounds") + private def printWarning() = println("WARNING: Out of bounds") } val point1 = new Point From e6f52d94d532d7f6d8a07d8e5bac6a46ef11cf30 Mon Sep 17 00:00:00 2001 From: Som Snytt Date: Sat, 26 Mar 2022 22:14:41 -0700 Subject: [PATCH 0610/1870] Lower bound in tour includes dangers --- _tour/lower-type-bounds.md | 32 +++++++++++++++++++++++--------- 1 file changed, 23 insertions(+), 9 deletions(-) diff --git a/_tour/lower-type-bounds.md b/_tour/lower-type-bounds.md index a1cdb9648f..548ffb733b 100644 --- a/_tour/lower-type-bounds.md +++ b/_tour/lower-type-bounds.md @@ -42,26 +42,40 @@ trait Node[+B] { def prepend[U >: B](elem: U): Node[U] } -case class ListNode[+B](h: B, t: Node[B]) extends Node[B] { +case class ListNode[+B](head: B, tail: Node[B]) extends Node[B] { def prepend[U >: B](elem: U): ListNode[U] = ListNode(elem, this) - def head: B = h - def tail: Node[B] = t } -case class Nil[+B]() extends Node[B] { - def prepend[U >: B](elem: U): ListNode[U] = ListNode(elem, this) +object Nil extends Node[Nothing] { + def prepend[U >: Nothing](elem: U): ListNode[U] = ListNode(elem, this) } ``` +We have also simplified `ListNode` to leverage its `case class` fields, and `Nil` to be a singleton object; it is a "node of nothing" because it does not hold an element. The type parameter for `Node` is `B` to suggest we want to store birds at each node. + Now we can do the following: ```scala mdoc trait Bird case class AfricanSwallow() extends Bird case class EuropeanSwallow() extends Bird +val africanSwallows: Node[AfricanSwallow] = ListNode[AfricanSwallow](AfricanSwallow(), Nil) +val swallowsFromAntarctica: Node[Bird] = Nil -val africanSwallowList = ListNode[AfricanSwallow](AfricanSwallow(), Nil()) -val birdList: Node[Bird] = africanSwallowList -birdList.prepend(EuropeanSwallow()) +// assign swallows to birds +val birds: Node[Bird] = africanSwallows + +// add a swallow to birds +val moreBirds = birds.prepend(EuropeanSwallow()) + +// add disparate swallows together to get birds +val allBirds = africanSwallows.prepend(EuropeanSwallow()) + +// but this is a mistake! adding a Node to birds widens the type arg too much. -Xlint will warn! +val error = moreBirds.prepend(swallowsFromAntarctica) ``` -The `Node[Bird]` can be assigned the `africanSwallowList` but then accept `EuropeanSwallow`s. +The covariant type parameter allows `birds` to get the value of `africanSwallows`. + +The type bound on the type parameter for `prepend` allows adding different varieties of swallows and getting a wider type: instead of `Node[AfricanSwallow]`, we get a `Node[Bird]`. + +The canary in the coal mine is `-Xlint`, which will warn if the type arg is widened too much. From e2f00f6c39981cdbeeaf5688b9f374904e403574 Mon Sep 17 00:00:00 2001 From: Julien Richard-Foy Date: Tue, 29 Mar 2022 18:10:06 +0200 Subject: [PATCH 0611/1870] Add parentheses to hello method definition Fixes #2357 --- _overviews/scala3-book/taste-hello-world.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/_overviews/scala3-book/taste-hello-world.md b/_overviews/scala3-book/taste-hello-world.md index 7acf47e20e..110d55ba91 100644 --- a/_overviews/scala3-book/taste-hello-world.md +++ b/_overviews/scala3-book/taste-hello-world.md @@ -12,7 +12,7 @@ A Scala 3 “Hello, world!” example goes as follows. First, put this code in a file named _Hello.scala_: ```scala -@main def hello = println("Hello, world!") +@main def hello() = println("Hello, world!") ``` In this code, `hello` is a method. From 4895a4b7cc34c786937d1ef5c198bce66ab8777c Mon Sep 17 00:00:00 2001 From: som-snytt Date: Tue, 29 Mar 2022 09:49:23 -0700 Subject: [PATCH 0612/1870] Fix brackets Co-authored-by: Julien Richard-Foy --- _overviews/core/collections-migration-213.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/_overviews/core/collections-migration-213.md b/_overviews/core/collections-migration-213.md index 114da1f632..5eb05536ee 100644 --- a/_overviews/core/collections-migration-213.md +++ b/_overviews/core/collections-migration-213.md @@ -16,7 +16,7 @@ The most important changes in the Scala 2.13 collections library are: - The type hierarchy is simplified. `Traversable` no longer exists, only `Iterable`. - The `to[Collection]` method was replaced by the `to(Collection)` method. - The `toC` methods are strict by convention and yield the default collection type where applicable. For example, `Iterator.continually(42).take(10).toSeq` produces a `List[Int]` and without the limit would not. - - `toIterable` is deprecated wherever defined. For `Iterator`, in particular, prefer `to[LazyList]`. + - `toIterable` is deprecated wherever defined. For `Iterator`, in particular, prefer `to(LazyList)`. - Views have been vastly simplified and work reliably now. They no longer extend their corresponding collection type, for example, an `IndexedSeqView` no longer extends `IndexedSeq`. - `collection.breakOut` no longer exists, use `.view` and `.to(Collection)` instead. - Immutable hash sets and hash maps have a new implementation (`ChampHashSet` and `ChampHashMap`, based on the ["CHAMP" encoding](https://michael.steindorfer.name/publications/oopsla15.pdf)). From add60f3231771d2132441cacfc9ec8815f711211 Mon Sep 17 00:00:00 2001 From: Jamie Thompson Date: Wed, 30 Mar 2022 16:26:08 +0200 Subject: [PATCH 0613/1870] final proof read --- _overviews/contribute/add-guides.md | 29 +++---- _overviews/contribute/bug-reporting-guide.md | 13 +-- _overviews/contribute/corelibs.md | 2 +- _overviews/contribute/documentation.md | 6 +- _overviews/contribute/guide.md | 2 +- _overviews/contribute/hacker-guide.md | 81 ++++++++++--------- _overviews/contribute/partest-guide.md | 14 +++- ...cala-standard-library-api-documentation.md | 35 ++++---- 8 files changed, 89 insertions(+), 93 deletions(-) diff --git a/_overviews/contribute/add-guides.md b/_overviews/contribute/add-guides.md index ed8b0d36c7..bbb43a9686 100644 --- a/_overviews/contribute/add-guides.md +++ b/_overviews/contribute/add-guides.md @@ -6,7 +6,7 @@ num: 7 ## Why Contribute New Learning Material? As [Heather Miller writes][why-contribute], contributing to [docs.scala-lang.org][home] is -critical to making Scala accessible to newcomers, experience programmers, and anyone who is curious. +critical to making Scala accessible to newcomers, experienced programmers, and anyone who is curious. It is also a fantastic way to contribute for anyone who is comfortable using Scala, but maybe does not want to get involved with complex tools like the compiler. @@ -45,7 +45,7 @@ To use this feature you must use the backtick notation as documented by mdoc, ## Submitting Docs -For you to contribute a document, first +To contribute a new document, you should first [fork](https://help.github.com/articles/fork-a-repo/) the [repo](https://github.com/scala/docs.scala-lang), then write your article in [Markdown](https://daringfireball.net/projects/markdown/syntax) (example below), and finally submit a pull request. @@ -87,7 +87,7 @@ is provided. The goal of this documentation repository is to be highly curated, rather than the approach by other community-driven documentation platforms, like wikis. Therefore, to be included on [docs.scala-lang.org][home], a document must: -- **"fit in"** to the repository ( _i.e.,_ it should not be a complete duplicate of another article), +- **"fit in"** to the repository (_i.e.,_ it should not be a complete duplicate of another article), - **be polished**, i.e. it must be thorough, complete, correct, and organized; written as an article to be understood by many users. - **be maintained**, if the document might require revisions from time to time, be prepared to keep it up to date, or @@ -100,8 +100,6 @@ clarifications, etc. ## Document Templates -> **Note:** These templates will soon change slightly as a result of necessary refactoring. - ### Guides/Overviews A guide or an overview that can be logically placed on **one** markdown page should be placed in the directory @@ -215,16 +213,14 @@ snippet and ensures that it's valid.
                 ```scala mdoc
     val a = 1
    -```
    -
    +```
    If you have a snippet that you expect to fail, you can also account for this by using `mdoc:fail` for a compile error `mdoc:crash` for a runtime-error.
    ```scala mdoc:fail
     val b: String = 3 // won't compile
    -```
    -
    +``` Keep in mind that a single file is all compiled as a single unit, so you can't redefine a variable that was defined above in another code snippet. _However_ @@ -239,28 +235,23 @@ above. Here is an example using the various modifiers. def now() = Instant.now() object Foo {} -``` - +```
    ```scala mdoc:nest
     case class Foo(a: Int) // conflicts with Foo above, but it's nested so it's fine
    -```
    -
    +```
    ```scala mdoc
     val a = s"The time is ${now()}" // still have access to the now method from above
    -```
    -
    +```
    ```scala mdoc:reset
     case class Foo(a: String) // forget the previous Foo's and start fresh
    -```
    -
    +```
    ```scala mdoc
     val myFoo = Foo("hi") // now we only have access to the last Foo
    -```
    -
    +``` [collections-overview]: {% link _overviews/collections-2.13/introduction.md %} [why-contribute]: {% link contribute.md %} diff --git a/_overviews/contribute/bug-reporting-guide.md b/_overviews/contribute/bug-reporting-guide.md index 91858d589c..6830c18ab9 100644 --- a/_overviews/contribute/bug-reporting-guide.md +++ b/_overviews/contribute/bug-reporting-guide.md @@ -3,7 +3,8 @@ title: Bug Reporting Guide num: 8 --- -The Scala compiler and standard library bug tracker is located at [https://github.com/scala/bug](https://github.com/scala/bug), and for Scala 3, it is located at [github.com/lampepfl/dotty](https://github.com/lampepfl/dotty/issues). Before you submit a bug make sure that it is certainly a bug by following instructions in *Is it a Bug?*. +The Scala compiler and standard library bug tracker is located at [https://github.com/scala/bug](https://github.com/scala/bug), and for Scala 3, it is located at [github.com/lampepfl/dotty](https://github.com/lampepfl/dotty/issues). Before you submit a bug make sure that it is certainly a bug by following instructions +in [Is it a Bug?](#is-it-a-bug). ## Is it a Bug? @@ -11,7 +12,7 @@ The first step in identifying a bug is to identify which component of the Scala - **Library** bugs typically manifest themselves as run-time exceptions, or as *unexpected*/*unintuitive* behavior of Scala Standard Library methods. - **Compiler** errors are manifested as compile time exceptions, unexpected behavior of your code at run time, or invalid behavior of the type system. - - **Reflection** are bugs that appear in the ‘scala.reflect’ package. For the *reflection* bugs , the same rules apply as for the *library* bugs. + - **Reflection** are bugs that appear in the `scala.reflect` package. For the *reflection* bugs, the same rules apply as for the *library* bugs. - **Scaladoc** bugs are manifested as a logical problems in the information it presents (that is, the displayed information is incorrect, such as an incorrect subclassing relationship), or incorrect behavior of the user interface. If you'd like to suggest a change in the content of the documentation, please submit a pull request (possible to do in the browser using GitHub, which is easier and faster than filing a bug). Please file a bug about the content of documentation only if you cannot provide a suggestion for its fix. If your issue is related to any of the following external projects, make sure to use its appropriate issue tracker: @@ -31,13 +32,13 @@ If you have a code snippet that is resulting in bytecode which you believe is be * Make sure you minimize your problem. To correctly minimize the problem follow the following instructions: - 1. Gradually take apart the offensive code snippet until you believe you have the simplest representation of your problem. + 1. Gradually remove parts from the original failing code snippet until you believe you have the simplest representation of your problem. - 2. Ensure that you have decoupled your code snippet from any library that could be introducing the offensive behavior. One way to achieve this is to try to recompile the offensive code snippet in isolation, outside of the context of any complex build environment. If your code depends on some strictly Java library and source code is available for it, make sure that the latter is also minimized. + 2. Ensure that you have decoupled your code snippet from any library that could be introducing the incorrect behavior. One way to achieve this is to try to recompile the offending code snippet in isolation, outside of the context of any complex build environment. If your code depends on some strictly Java library and source code is available for it, make sure that the latter is also minimized. 3. Make sure you are compiling your project from a clean slate. Your problem could be related to separate compilation, which is difficult to detect without a clean build with new `.class` files. - 4. If you have encountered a bug while building your code in the IDE, then please reproduce it on the command line. The same rule applies for build tools like `sbt` or `ant`. + 4. If you have encountered a bug while building your code in the IDE, then please reproduce it on the command line. The same rule applies for build tools like **sbt** or **Mill**. 5. If you want to file an improvement in the issue tracker please discuss it first on one of the mailing lists. They offer much bigger audience than issue tracker. The latter is not suitable for long discussions. @@ -69,7 +70,7 @@ Please make sure to fill in as many fields as possible. Make sure you've indicat 3. **Labels** related to your issue. For example, if you think your issue is related to the typechecker, and if you have successfully minimized your issue, label your bug as "typechecker" and "minimized". Issue tracker will suggest names for existing labels as you type them so try not to create duplicates. 4. **Running environment**. Are you running on Linux? Windows? What JVM version are you using? -In order for us to quickly triage the bug that you've found, it's important that the code snippet which produces the observed issue is as minimized as possible. For advice on minimizing your code snippet, please see the appropriate subsection of the above (Is it a Bug?). +In order for us to quickly triage the bug that you've found, it's important that the code snippet which produces the observed issue is as minimized as possible. For advice on minimizing your code snippet, please see the appropriate subsection of the above ([Is it a Bug?](#is-it-a-bug)). ### Description diff --git a/_overviews/contribute/corelibs.md b/_overviews/contribute/corelibs.md index 1eb2f840b0..4fcab907a2 100644 --- a/_overviews/contribute/corelibs.md +++ b/_overviews/contribute/corelibs.md @@ -14,7 +14,7 @@ There are several options for contributing to Scala's core libraries. You can: ### Significant changes For significant new functionality or a whole new API to be considered for inclusion in the core Scala distribution, -please take into account [https://github.com/scala/scala-dev/issues/661] before doing so. +please take into account [scala/scala-dev#661](https://github.com/scala/scala-dev/issues/661) before doing so. [documentation]: {% link _overviews/contribute/documentation.md %} [bug-reporting-guide]: {% link _overviews/contribute/bug-reporting-guide.md %} diff --git a/_overviews/contribute/documentation.md b/_overviews/contribute/documentation.md index 9bd4597b36..bd93b7fbd3 100644 --- a/_overviews/contribute/documentation.md +++ b/_overviews/contribute/documentation.md @@ -7,10 +7,10 @@ num: 5 There are several ways you can help out with the improvement of Scala documentation. These include: * API Documentation in Scaladoc -* Guides, Overviews, Tutorials, Cheat Sheets and more on the docs.scala-lang.org site -* Updating scala-lang.org +* Guides, Overviews, Tutorials, Cheat Sheets and more on the [docs.scala-lang.org][home] site +* Updating [scala-lang.org](https://scala-lang.org) -Please read this page, and the pages linked from this one, fully before contributing documentation. Many of the questions you have will be answered in these resources. If you have a question that isn't answered, feel free to ask on the [Scala Contributors](https://contributors.scala-lang.org/) mailing list and then, please, submit a pull request with updated documentation reflecting that answer. +Please read this page, and the pages linked from this one, fully before contributing documentation. Many frequently asked questions will be answered in these resources. If you have a question that isn't answered, feel free to ask on the [Scala Contributors](https://contributors.scala-lang.org/) forum and then, please, submit a pull request with updated documentation reflecting that answer. **General requirements** for documentation submissions include spell-checking all written language, ensuring code samples compile and run correctly, correct grammar, and clean formatting/layout of the documentation. diff --git a/_overviews/contribute/guide.md b/_overviews/contribute/guide.md index 472d2d41ab..33330f511d 100644 --- a/_overviews/contribute/guide.md +++ b/_overviews/contribute/guide.md @@ -18,7 +18,7 @@ num: 10 Just to name a few common reasons: * contributing a patch is the best way to make sure your desired changes will be available in the next Scala version -* Scala is written in Scala, so going through the source code and patching it will improve your Scala-fu +* Scala is written in Scala, so going through the source code and patching it will improve your knowledge of Scala. * last but not least, it only takes a few accepted commits to make it into the [Scala Contributor Hall of Fame](https://github.com/scala/scala/contributors). The main Scala project consists of the standard Scala library, the Scala reflection and macros library, diff --git a/_overviews/contribute/hacker-guide.md b/_overviews/contribute/hacker-guide.md index 92181003fa..2a70714f53 100644 --- a/_overviews/contribute/hacker-guide.md +++ b/_overviews/contribute/hacker-guide.md @@ -1,5 +1,5 @@ --- -title: Scala hacker guide +title: Scala 2 Hacker's Guide by: Eugene Burmako num: 12 --- @@ -18,26 +18,27 @@ Though, there's an annoying issue which you occasionally stumble upon: the formatting string interpolator `f` [does not support](https://github.com/scala/bug/issues/6725) new line tokens `%n`. -One approach would be to go the mailing list, request that the bug be fixed, and then to wait indefinitely for the fix arrive. Another approach would be to instead patch Scala oneself, and to submit the fix to the Scala repository in hopes that it might make it into a subsequent release. +One approach would be to go the [Scala 2 bug tracker](https://github.com/scala/bug), request that the bug be fixed, and then to wait indefinitely for the fix arrive. Another approach would be to instead patch Scala yourself, and to submit the fix to the Scala repository in hopes that it might make it into a subsequent release. **_Of note_**: There are several types of releases/builds. Nightly builds are produced every night at a fixed time. Minor releases happen once every few months. Major releases typically happen once per year. ## 1. Connect -Sometimes it's appealing to hack alone and not to have to interact with others out of fear, or out of comfort. However, in the context a big project such as Scala, -this might not be the very best idea. There are people in the Scala community who have spent years accumulating knowledge about Scala libraries and internals. They might provide +Sometimes it's appealing to hack alone and not to have to interact with others. However, in the context a big project such as Scala, there might be better ways. There are people in the Scala community who have spent years accumulating knowledge about Scala libraries and internals. They might provide unique insights and, what's even better, direct assistance in their areas, so it is not only advantageous, but recommended to communicate with the community about your new patch. -Typically bug fixes and new features start out as an idea or an experiment posted on one of [our mailing lists](https://scala-lang.org/community/index.html#forums) to find out how people feel -about things you want to implement. People proficient in certain areas of Scala usually monitor mailing lists, so you'll often get some help -by simply posting a message. But the most efficient way to connect is to cc your message to one of the people responsible for maintaining the aspect of Scala which you wish to contribute to. +Typically bug fixes and new features start out as an idea or an experiment posted on one of [our forums](https://scala-lang.org/community/index.html#forums) to find out how people feel +about things you want to implement. People proficient in certain areas of Scala usually monitor forums and discussion rooms, so you'll often get some help by posting a message. +But the most efficient way to connect is to mention in your message one of the people responsible for maintaining the aspect of Scala which you wish to contribute to. A list of language features/libraries along with their maintainer's full names and GitHub usernames is [in the Scala repo README](https://github.com/scala/scala#get-in-touch). In our running example, since Martin is the person who submitted the string interpolation Scala Improvement Proposal and implemented this language feature for Scala 2.10.0, he might be interested in learning of new bugfixes to that feature. -As alluded to earlier, one must also choose an appropriate mailing list. Typically, one would use the [Scala Contributors](https://contributors.scala-lang.org/) mailing list, as it is devoted to discussions about the core internal design and implementation of the Scala system. However, since this issue has been discussed previously on the scala-user mailing list, -in this example, we post to the [the scala-user mailing list](https://groups.google.com/group/scala-user) about our issue. +As alluded to earlier, one must also choose an appropriate avenue to discuss the issue. Typically, one would use the [Scala Contributor's Forum][contrib-forum], as there are post categories devoted to discussions about the core internal design and implementation of the Scala system. + +In this example, the issue was previously discussed on the (now unused) scala-user mailing list, at the time, +we would have posted to the [the (now unused) scala-user mailing list](https://groups.google.com/group/scala-user) about our issue: Posting to scala-user Response from Martin @@ -86,10 +87,11 @@ Before you start making changes, always create your own branch. Never work on th the changes you plan on making. Use a prefix that describes the nature of your change. There are essentially two kinds of changes: bug fixes and new features. -* For bug fixes, use `issue/NNNN` or `ticket/NNNN` for bug NNNN from the [Scala bug tracker](https://github.com/scala/bug). -* For new feature use `topic/XXX` for feature XXX. Use feature names that make sense in the context of the whole Scala project and not just to you personally. For example, if you work on diagrams in Scaladoc, use `topic/scaladoc-diagrams` instead of just `topic/diagrams` would be a good branch name. +* For bug fixes, use `issue/NNNN` or `ticket/NNNN` for bug `NNNN` from the [Scala bug tracker](https://github.com/scala/bug). +* For new feature use `topic/XXX` for feature `XXX`. Use feature names that make sense in the context of the whole Scala project and not just to you personally. For example, if you work on diagrams in Scaladoc, use `topic/scaladoc-diagrams` instead of just `topic/diagrams` would be a good branch name. -Since in our example, we're going to fix an existing bug [6725](https://github.com/scala/bug/issues/6725), we'll create a branch named `ticket/6725`. +Since in our example, we're going to fix an existing bug +[scala/bug#6725](https://github.com/scala/bug/issues/6725), we'll create a branch named `ticket/6725`. 16:39 ~/Projects/scala (master)$ git checkout -b ticket/6725 Switched to a new branch 'ticket/6725' @@ -102,13 +104,13 @@ The next step after cloning your fork is setting up your machine to build Scala. You need the following tools: -* A Java SDK. The baseline version is 6 for 2.11.x and 8 for 2.12.x. It's possible to use a later SDK for local development, but the continuous integration builds will verify against the baseline version. +* A Java JDK. The baseline version is `8` for 2.13.x and higher. It's possible to use a higher JDK version for local development, but the continuous integration builds will verify against the baseline version. * `sbt`, an interactive build tool commonly used in Scala projects. Acquiring sbt manually is not necessary -- the recommended approach is to download the [sbt-extras runner script](https://github.com/paulp/sbt-extras/blob/master/sbt) and use it in place of `sbt`. The script will download and run the correct version of sbt when run from the Scala repository's root directory. * `curl` -- the build uses `curl` in the `pull-binary-libs.sh` script to download bootstrap libs. -OS X and Linux builds should work. Windows is supported, but it might have issues. Please report to the [Scala bug tracker](https://github.com/scala/bug) if you encounter any. +macOS and Linux builds should work. Windows is supported, but it might have issues. Please report to the [Scala 2 bug tracker](https://github.com/scala/bug) if you encounter any. -Building Scala is as easy as running `sbt dist/mkPack` in the root of your cloned repository. In general, it's much more efficient to enter the `sbt` shell once and run the various tasks from there, instead of running each task by launching `sbt some-task` on your command prompt. +Building Scala can be done with a single command `sbt dist/mkPack`, from the root of your cloned repository. In general, it's much more efficient to enter the `sbt` shell once and run the various tasks from there, instead of running each task by launching `sbt some-task` on your command prompt. Be prepared to wait for a while -- a full "clean" build takes 5+ minutes depending on your machine (longer on older machines with less memory). On a recent laptop, incremental builds usually complete within 10-30 seconds. @@ -116,16 +118,13 @@ Be prepared to wait for a while -- a full "clean" build takes 5+ minutes dependi There's no single editor of choice for working with Scala sources, as there are trade-offs associated with each available tool. -Both Eclipse and IntelliJ IDEA have Scala plugins, which are known to work with our codebase. -Both of those Scala plugins provide navigation, refactoring, error reporting functionality, and integrated debugging. -See [the Scala README](https://github.com/scala/scala#ide-setup) for instructions on using Eclipse and IntelliJ IDEA with the Scala repository. +IntelliJ IDEA has a Scala plugin, which is known to work with our codebase. Alternatively you can use Visual Studio Code with the [Metals IDE extension](https://marketplace.visualstudio.com/items?itemName=scalameta.metals). +Both of these Scala IDE solutions provide navigation, refactoring, error reporting functionality, and integrated debugging. +See [the Scala README](https://github.com/scala/scala#ide-setup) for instructions on using either IntelliJ IDEA or Metals with the Scala repository. -There also exist lighter-weight editors such as Emacs, Sublime or jEdit which are faster and much less memory/compute-intensive to run, while -lacking semantic services and debugging. To address this shortcoming, they can integrate with ENSIME, -a helper program, which hosts a resident Scala compiler providing some of the features implemented in traditional IDEs. However despite -having significantly matured over the last year, support for our particular code base is still being improved, and is not as mature as for Eclipse and IntelliJ. +Other alternative editors exist, such as Atom, Emacs, Sublime Text or jEdit. These are faster and much less memory/compute-intensive to run, but lack semantic services and debugging. -Due to the immense variability in personal preference between IDE/editor experience, it's difficult to recommend a particular tool, and your choice should boil down to your personal preferences. +We recognise that there exist preferences towards specific IDE/editor experiences, so ultimately we recommend that your choice be your personal preference. ## 3. Hack @@ -156,7 +155,7 @@ Now, implement your bugfix or new feature! Here are also some tips & tricks that have proven useful in Scala development: * After building your working copy with the `compile` sbt task, there's no need to leave the comfort of your sbt shell to try it out: the REPL is available as the `scala` task, and you can also run the compiler using the `scalac` task. If you prefer to run the REPL outside sbt, you can generate the scripts in `build/quick/bin` using the `dist/mkQuick` task. -* The sbt workflow is also great for debugging, as you can simply create a remote debugging session in your favorite IDE, and then activate the JVM options for the next time you run the `scala` or `scalac` tasks using: +* The sbt workflow is also great for debugging, as you can create a remote debugging session in your favorite IDE, and then activate the JVM options for the next time you run the `scala` or `scalac` tasks using: ``` > set javaOptions in compiler := List("-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=8002") @@ -167,9 +166,8 @@ Listening for transport dt_socket at address: 8002 * Also see [the Scala README](https://github.com/scala/scala#incremental-compilation) for tips on speeding up compile times. * If after introducing changes or updating your clone, you get `AbstractMethodError` or other linkage exceptions, try the `clean` task and building again. -* Don't underestimate the power of `print`. When starting with Scala, I spent a lot of time in the debugger trying to figure out how - things work. However later I found out that print-based debugging is often more effective than jumping around. While it might be obvious - to some, I'd like to explicitly mention that it's also useful to print stack traces to understand the flow of execution. When working with `Trees`, you might want to use `showRaw` to get the `AST` representation. +* Don't underestimate the power of using `println` to print debug information. When starting with Scala, I spent a lot of time in the debugger trying to figure out how + things work. However later I found out that print-based debugging is often more effective than jumping around. It's also useful to print stack traces to understand the flow of execution, for example what code executed before some action occurred. When working with `Trees`, you might want to use `showRaw` to get the `AST` representation. * You can publish your newly-built scala version locally using the `publishLocal` task in sbt. * It's convenient to enable the following local settings to speed up your workflow (put these in `local.sbt` in your working copy): @@ -184,33 +182,33 @@ testOptions in IntegrationTest in LocalProject("test") ++= Seq(Tests.Argument("- // antStyle := true ``` -* Adding a macro to the `Predef` object is a pretty involved task. Due to bootstrapping, you cannot just throw a macro into it. For this reason, the process is more involved. You might want to follow the way `StringContext.f` itself is added. In short, you need to define your macro under `src/compiler/scala/tools/reflect/` and provide no implementation in `Predef` (`def fn = macro ???`). Now you have to set up the wiring. Add the name of your macro to `src/reflect/scala/reflect/internal/StdNames.scala`, add the needed links to it to `src/reflect/scala/reflect/internal/Definitions.scala`, and finally specify the bindings in `src/compiler/scala/tools/reflect/FastTrack.scala`. [Here's](https://github.com/folone/scala/commit/59536ea833ca16c985339727baed5d70e577b0fe) an example of adding a macro. +* Adding a macro to the `Predef` object is a pretty involved task. Due to bootstrapping, it makes it more complex to add a macro. For this reason, the process is more involved. It could be useful to replicate the way `StringContext.f` itself is added. In short, you need to define your macro under `src/compiler/scala/tools/reflect/` and provide no implementation in `Predef` (it will look like `def fn = macro ???`). Now you have to set up the wiring. Add the name of your macro to `src/reflect/scala/reflect/internal/StdNames.scala`, add the needed links to it to `src/reflect/scala/reflect/internal/Definitions.scala`, and finally specify the bindings in `src/compiler/scala/tools/reflect/FastTrack.scala`. [Here's](https://github.com/folone/scala/commit/59536ea833ca16c985339727baed5d70e577b0fe) an example of adding a macro. -### Documentation +### Where to Find Documentation -There are several areas that one could contribute to -- there is the Scala library, the Scala compiler, and other tools such as Scaladoc. Each area has varying amounts of documentation. +The separate projects under Scala have varying amounts of documentation: ##### The Scala Library -Contributing to the Scala standard library is about the same as working on one of your own libraries. Beyond the Scala collections hierarchy, there are no complex internals or architectures to have to worry about. Just make sure that you code in a "don't-repeat-yourself" (DRY) style, obeying the "boy scout principle" (i.e. make sure you've left the code cleaner than you found it). +Contributing to the Scala standard library is about the same as working on one of your own libraries. If documentation is necessary for some trait/class/object/method/etc in the Scala standard library, typically maintainers will include inline comments describing their design decisions or rationale for implementing things the way they have, if it is not straightforward. -If you intend on contributing to Scala collections, please make sure you're familiar with the design of the Scala collections library. It can be easy to put an implementation in the wrong location if you are unfamiliar with the collections architecture. There is an excellent and very detailed guide covering [the Architecture of Scala Collections][collections-arch], as well as a larger more general [Scala collections Guide][collections-intro] covering the sequential portion of collections. For parallel collections, there also exists a detailed [Scala Parallel Collections Guide][collections-par]. +The Scala collections framework, part of the Scala standard library, is more complex. You should become familiar +with its architecture, which is documented in [the Architecture of Scala Collections][collections-arch]. +The [Scala Collections Guide][collections-intro] is more general, covering the synchronous portion of collections. For parallel collections, there also exists a detailed [Scala Parallel Collections Guide][collections-par]. ##### The Scala Compiler -Documentation about the internal workings of the Scala compiler is scarce, and most of the knowledge is passed around by email ([Scala Contributors](https://contributors.scala-lang.org/) mailing list), ticket, or word of mouth. However the situation is steadily improving. Here are the resources that might help: +Documentation about the internal workings of the Scala compiler is scarce, and most of the knowledge is passed around by forum ([Scala Contributors](https://contributors.scala-lang.org/) forum), chat-rooms (see `#scala-contributors` on [Discord][discord-contrib]), ticket, or word of mouth. However the situation is steadily improving. Here are the resources that might help: * [Compiler internals videos by Martin Odersky](https://www.scala-lang.org/old/node/598.html) are quite dated, but still very useful. In this three-video - series Martin explains the general architecture of the compiler, and the basics of the front-end, which has recently become Scala reflection API. + series Martin explains the general architecture of the compiler, and the basics of the front-end, which later became the `scala-reflect` module's API. * [Reflection documentation][reflect-overview] describes fundamental data structures (like `Tree`s, `Symbol`s, and `Types`) that - are used to represent Scala programs and operations defined on then. Since much of the compiler has been factored out and made accessible via the Reflection API, all of the fundamentals needed for reflection are the same for the compiler. -* [Reflection and Compilers by Martin Odersky](https://channel9.msdn.com/Events/Lang-NEXT/Lang-NEXT-2012/Reflection-and-Compilers), a talk - at Lang.NEXT 2012 in which Martin elaborates on the design of scalac and the architecture of the reflection API. + are used to represent Scala programs and operations defined on then. Since much of the compiler has been factored out and made accessible via the `scala-reflect` module, all of the fundamentals needed for reflection are the same for the compiler. * [Scala compiler corner](https://lampwww.epfl.ch/~magarcia/ScalaCompilerCornerReloaded/) contains extensive documentation about most of the post-typer phases (i.e. the backend) in the Scala compiler. -* [Scala Contributors](https://contributors.scala-lang.org/), a mailing list which hosts discussions about the core +* [Scala Contributors](https://contributors.scala-lang.org/), a forum which hosts discussions about the core internal design and implementation of the Scala system. ##### Other Projects @@ -303,7 +301,7 @@ Here are some more testing tips: ... Finished: FAILURE -This means your change is backward or forward binary incompatible with the specified version (the check is performed by the [migration manager](https://github.com/typesafehub/migration-manager)). The error message is actually saying what you need to add to `bincompat-backward.whitelist.conf` or `bincompat-forward.whitelist.conf` to make the error go away. If you are getting this on an internal/experimental api, it should be safe to add suggested sections to the config. Otherwise, you might want to target a newer version of scala for this change. +This means your change is backward or forward binary incompatible with the specified version (the check is performed by the [migration manager](https://github.com/typesafehub/migration-manager)). The error message is actually saying what you need to modify `project/MimaFilters.scala` to make the error go away. If you are getting this on an internal/experimental api, it should be safe to add suggested sections to the config. Otherwise, you might want to target a newer version of scala for this change. ### Verify @@ -380,7 +378,10 @@ Note that there can be a gap between a successful review and the merge, because So don't be confused if your reviewer says “LGTM”, but your code doesn't get merged immediately. [collections-arch]: {% link _overviews/core/architecture-of-scala-collections.md %} -[collections-intro]: {% link _overviews/collections/introduction.md %} +[collections-intro]: {% link _overviews/collections-2.13/introduction.md %} [collections-par]: {% link _overviews/parallel-collections/overview.md %} [reflect-overview]: {% link _overviews/reflection/overview.md %} [partest-guide]: {% link _overviews/contribute/partest-guide.md %} +[documentation]: {% link _overviews/contribute/documentation.md %} +[contrib-forum]: https://contributors.scala-lang.org/ +[discord-contrib]: https://discord.com/invite/scala diff --git a/_overviews/contribute/partest-guide.md b/_overviews/contribute/partest-guide.md index c3e6980b06..c8eb5cbf02 100644 --- a/_overviews/contribute/partest-guide.md +++ b/_overviews/contribute/partest-guide.md @@ -9,21 +9,27 @@ Partest is a custom parallel testing tool that we use to run the test suite for The test suite can be run from the sbt console with: - > partest +``` +sbt:root> partest +``` You can get a summary of the usage by running `partest --help`. If you would like to run particular tests pass the test paths as arguments - > partest test/files/pos/bounds.scala test/scaladoc/run/diagrams-base.scala +``` +sbt:root> partest test/files/pos/bounds.scala test/scaladoc/run/diagrams-base.scala +``` To run only the Scaladoc tests use `--srcpath` with the location of the tests - > partest --srcpath scaladoc +``` +sbt:root> partest --srcpath scaladoc +``` ## Using ant -Please note support for ant was removed on the 2.12 branch. +> Please note support for ant was removed on the 2.12 branch. The test suite can be run by using ant from the command line: diff --git a/_overviews/contribute/scala-standard-library-api-documentation.md b/_overviews/contribute/scala-standard-library-api-documentation.md index c1303e8b18..a6c812b7e4 100644 --- a/_overviews/contribute/scala-standard-library-api-documentation.md +++ b/_overviews/contribute/scala-standard-library-api-documentation.md @@ -21,16 +21,14 @@ contribution steps and guidelines. Thank you.* Since API documentation is located in Scala source code files, the process for contributing API documentation is similar to that of contributing bug-fixes to the Scala code base, but without the requirement that there be an issue filed on GitHub -first. When forking/branching, just use a `scaladoc/xxxx` branch name, where xxxx is a +first. When forking/branching, it would help to use a `scaladoc/xxxx` branch name, where `xxxx` is a descriptive, but short branch name (e.g. `scaladoc/future-object`). -However, if an issue *does* exist, please use `issue/NNNN`, where NNNN is the ticket number, +However, if an issue *does* exist, please use `issue/NNNN`, where `NNNN` is the ticket number, instead. -If you would like to assist us by helping us find missing documentation and -submitting bug reports for existing documentation, -[please read the following section](#contribute-api-documentation-bug-reports). -If you want to contribute new API documentation, -[jump down to the next section](#contribute-new-api-documentation). +If you would like to assist us, you can +[report missing/incorrect API documentation](#contribute-api-documentation-bug-reports), or +[contribute new API documentation](#contribute-new-api-documentation). ## Contribute API Documentation Bug Reports @@ -45,8 +43,8 @@ If you find an issue, please log it in the [Scala bug tracker](https://github.co **after making sure it is not already logged as an issue**. To help with disambiguation, please use the following format for issue title: -* Use an action describing the work required. E.g. Add, Document, Correct, Remove -* Use the full package, class/trait/object name (or state package object if +* Use an action describing the work required, e.g. **Add**, **Document**, **Correct**, **Remove**. +* Use the full package, class/trait/object/enum name (or state package object if that is the case). * Extremely short description of what to do. * More detail can (and should) go into the issue description, including a short @@ -60,10 +58,10 @@ Here is an example of the title and description for an example API documentation and the description: -`The methods on the Future companion object are critical` -`for using Futures effectively without blocking. Provide code` -`examples of how methods like sequence, transform, fold and` -`firstCompletedOf should be used.` +> The methods on the `Future` companion object are critical +> for using Futures effectively without blocking. Provide code +> examples of how methods like `sequence`, `transform`, `fold` and +> `firstCompletedOf` should be used. In addition to following these conventions, please add `documentation` and `community` labels to the issue, and put them in the `Documentation and API` @@ -93,9 +91,8 @@ new API documentation to save time, effort, mistakes and repetition. the whole document though, and pay close attention to the title and commit message formats, noting *present tense*, *length limits* and that it must merge cleanly. Remember that the title of the pull request will become the commit - message when merged. **Also**, be sure to assign one or more reviewers to the PR, list of - reviewers is at the bottom of this document, but the quick version is to add - `Review by @heathermiller` or `Review by @dickwall` **in the pull request comments**. + message when merged. **Also**, be sure to assign one or more reviewers to the PR, if this is + not possible for you, you could mention a user in **in the pull request comments**. ### Extra Requirements for Scaladoc Documentation Commits @@ -106,9 +103,9 @@ PR is merged in smoothly: * Any and all code examples provided should *be correct, compile and run* as expected (ensure this in the REPL or your IDE). * Spelling must be checked for all written language *and* code examples where - possible. Most editors have some spell checking feature available. Obviously - Scala code is likely to flag as mis-spelled sometimes, but any written language - should be checked. If you can also use a grammar checker, even better. We + possible. Most editors have some spell checking feature available. Scala code + itself is permitted to not pass a spell-checker, however any written language + should be checked. If you can also use a grammar checker, it will help. We *will* ask for spelling and grammar to be corrected before acceptance. * You **must** also run `sbt doc`, fix any problems and check the formatting and layout of your changes. Again, corrections will be required if formatting or From 8c3c443440ea72588a6bf8f35aeebfcad8ce464c Mon Sep 17 00:00:00 2001 From: Jamie Thompson Date: Wed, 30 Mar 2022 17:00:52 +0200 Subject: [PATCH 0614/1870] remove contribute from nav bar --- _data/nav-header.yml | 7 ------- _includes/site-header.html | 2 +- 2 files changed, 1 insertion(+), 8 deletions(-) diff --git a/_data/nav-header.yml b/_data/nav-header.yml index 03621e6d64..b04b23ca78 100644 --- a/_data/nav-header.yml +++ b/_data/nav-header.yml @@ -1,17 +1,10 @@ - title: Documentation url: "/" - can-highlight: true - title: Download url: https://www.scala-lang.org/download/ - can-highlight: true - title: Community url: https://www.scala-lang.org/community/ - can-highlight: true - title: Libraries url: https://index.scala-lang.org - can-highlight: true -- title: Contribute - url: /contribute/ - title: Blog url: https://www.scala-lang.org/blog/ - can-highlight: true diff --git a/_includes/site-header.html b/_includes/site-header.html index 70f1cb6840..d2583b913f 100644 --- a/_includes/site-header.html +++ b/_includes/site-header.html @@ -10,7 +10,7 @@ From e99b6c664acc165fe48ee8307139c3cebb4a0173 Mon Sep 17 00:00:00 2001 From: Julien Richard-Foy Date: Wed, 30 Mar 2022 18:21:18 +0200 Subject: [PATCH 0615/1870] Recommend using the Scala Improvement Process category only instead of cross-posting on two categories. --- _sips/sip-submission.md | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/_sips/sip-submission.md b/_sips/sip-submission.md index e2efb5ec2a..4d9ae53a40 100644 --- a/_sips/sip-submission.md +++ b/_sips/sip-submission.md @@ -53,11 +53,10 @@ There are four major steps in the SIP process: Before submitting a SIP, it is required that you perform necessary preparations: -Discuss your idea on the [Scala Contributors Page](https://contributors.scala-lang.org/) (currently, we suggest -cross-posting on -[Scala Improvement Process](https://contributors.scala-lang.org/c/sip) and -[Language Design](https://contributors.scala-lang.org/c/language-design). This -may change in the future.) Create a topic that starts with “Pre-SIP” and briefly +Discuss your idea on the [Scala Contributors Page](https://contributors.scala-lang.org/) (we suggest +posting in the category +[Scala Improvement Process](https://contributors.scala-lang.org/c/sip)). +Create a topic that starts with “Pre-SIP” and briefly describe what you would like to change and why you think it’s a good idea. Proposing your ideas on the mailing list is not an optional step. For every From 640c86c471fcaed944350565e9094d90ef1b4a2e Mon Sep 17 00:00:00 2001 From: Som Snytt Date: Thu, 31 Mar 2022 00:53:26 -0700 Subject: [PATCH 0616/1870] Simplify example and minimize diff --- _tour/lower-type-bounds.md | 40 ++++++++++++++------------------------ 1 file changed, 15 insertions(+), 25 deletions(-) diff --git a/_tour/lower-type-bounds.md b/_tour/lower-type-bounds.md index 548ffb733b..9f5cd53b89 100644 --- a/_tour/lower-type-bounds.md +++ b/_tour/lower-type-bounds.md @@ -16,42 +16,32 @@ While [upper type bounds](upper-type-bounds.html) limit a type to a subtype of a Here is an example where this is useful: ```scala mdoc:fail -trait Node[+B] { - def prepend(elem: B): Node[B] +trait List[+B] { + def prepend(elem: B): NonEmptyList[B] = NonEmptyList(elem, this) } -case class ListNode[+B](h: B, t: Node[B]) extends Node[B] { - def prepend(elem: B): ListNode[B] = ListNode(elem, this) - def head: B = h - def tail: Node[B] = t -} +case class NonEmptyList[+B](head: B, tail: List[B]) extends List[B] -case class Nil[+B]() extends Node[B] { - def prepend(elem: B): ListNode[B] = ListNode(elem, this) -} +object Nil extends List[Nothing] ``` -This program implements a singly-linked list. `Nil` represents an empty element (i.e. an empty list). `class ListNode` is a node which contains an element of type `B` (`head`) and a reference to the rest of the list (`tail`). The `class Node` and its subtypes are covariant because we have `+B`. +This program implements a singly-linked list. `Nil` represents an empty list with no elements. `class NonEmptyList` is a node which contains an element of type `B` (`head`) and a reference to the rest of the list (`tail`). The `trait List` and its subtypes are covariant because we have `+B`. However, this program does _not_ compile because the parameter `elem` in `prepend` is of type `B`, which we declared *co*variant. This doesn't work because functions are *contra*variant in their parameter types and *co*variant in their result types. To fix this, we need to flip the variance of the type of the parameter `elem` in `prepend`. We do this by introducing a new type parameter `U` that has `B` as a lower type bound. ```scala mdoc -trait Node[+B] { - def prepend[U >: B](elem: U): Node[U] +trait List[+B] { + def prepend[U >: B](elem: U): NonEmptyList[U] = NonEmptyList(elem, this) } -case class ListNode[+B](head: B, tail: Node[B]) extends Node[B] { - def prepend[U >: B](elem: U): ListNode[U] = ListNode(elem, this) -} +case class NonEmptyList[+B](head: B, tail: List[B]) extends List[B] -object Nil extends Node[Nothing] { - def prepend[U >: Nothing](elem: U): ListNode[U] = ListNode(elem, this) -} +object Nil extends List[Nothing] ``` -We have also simplified `ListNode` to leverage its `case class` fields, and `Nil` to be a singleton object; it is a "node of nothing" because it does not hold an element. The type parameter for `Node` is `B` to suggest we want to store birds at each node. +The type parameter for `List` is `B` to suggest we want to keep lists of birds. Now we can do the following: ```scala mdoc @@ -59,11 +49,11 @@ trait Bird case class AfricanSwallow() extends Bird case class EuropeanSwallow() extends Bird -val africanSwallows: Node[AfricanSwallow] = ListNode[AfricanSwallow](AfricanSwallow(), Nil) -val swallowsFromAntarctica: Node[Bird] = Nil +val africanSwallows: List[AfricanSwallow] = Nil.prepend(AfricanSwallow()) +val swallowsFromAntarctica: List[Bird] = Nil // assign swallows to birds -val birds: Node[Bird] = africanSwallows +val birds: List[Bird] = africanSwallows // add a swallow to birds val moreBirds = birds.prepend(EuropeanSwallow()) @@ -71,11 +61,11 @@ val moreBirds = birds.prepend(EuropeanSwallow()) // add disparate swallows together to get birds val allBirds = africanSwallows.prepend(EuropeanSwallow()) -// but this is a mistake! adding a Node to birds widens the type arg too much. -Xlint will warn! +// but this is a mistake! adding a list of birds widens the type arg too much. -Xlint will warn! val error = moreBirds.prepend(swallowsFromAntarctica) ``` The covariant type parameter allows `birds` to get the value of `africanSwallows`. -The type bound on the type parameter for `prepend` allows adding different varieties of swallows and getting a wider type: instead of `Node[AfricanSwallow]`, we get a `Node[Bird]`. +The type bound on the type parameter for `prepend` allows adding different varieties of swallows and getting a wider type: instead of `List[AfricanSwallow]`, we get a `List[Bird]`. The canary in the coal mine is `-Xlint`, which will warn if the type arg is widened too much. From 0bd08091e2cbccdd3d1f9fdeaa49911ba14fdcaa Mon Sep 17 00:00:00 2001 From: Andrea Mucciarelli Date: Thu, 31 Mar 2022 09:56:08 +0200 Subject: [PATCH 0617/1870] Getting started - sbt track - italian translations (#2239) Co-authored-by: Dale Wijnand --- ...-with-scala-and-sbt-on-the-command-line.md | 79 ++++++++++++++ ...ting-scala-with-sbt-on-the-command-line.md | 101 ++++++++++++++++++ 2 files changed, 180 insertions(+) create mode 100644 _it/getting-started/sbt-track/getting-started-with-scala-and-sbt-on-the-command-line.md create mode 100644 _it/getting-started/sbt-track/testing-scala-with-sbt-on-the-command-line.md diff --git a/_it/getting-started/sbt-track/getting-started-with-scala-and-sbt-on-the-command-line.md b/_it/getting-started/sbt-track/getting-started-with-scala-and-sbt-on-the-command-line.md new file mode 100644 index 0000000000..0de0347ca5 --- /dev/null +++ b/_it/getting-started/sbt-track/getting-started-with-scala-and-sbt-on-the-command-line.md @@ -0,0 +1,79 @@ +--- +title: Primi passi su scala e sbt con la linea di comando +layout: singlepage-overview +partof: getting-started-with-scala-and-sbt-on-the-command-line +language: it +disqus: true +next-page: /it/testing-scala-with-sbt-on-the-command-line +--- + +In questo tutorial si vedrà come creare un progetto Scala a partire da un template, che può essere usato come punto di partenza anche per progettti personali. +Lo strumento utilizzato per tale scopo è [sbt](https://www.scala-sbt.org/1.x/docs/index.html), che è lo standard di build per Scala. +sbt permette di compilare, eseguire e testare i tuoi progetti, ma permette di svolgere anche altri compiti. +Si presuppone una conoscenza dell'uso della linea di comando. + +## Installazione +1. Assicurarsi di avere la Java 8 JDK (conosciuta anche come 1.8) installata + * Per verificarlo, eseguire `javac -version` da linea di comando e controllare che nell'output sia riportato + `javac 1.8.___` + * Se non si possiede la versione 1.8 o superiore, installarla seguendo [queste indicazioni](https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html) +1. Installare sbt + * [Mac](https://www.scala-sbt.org/1.x/docs/Installing-sbt-on-Mac.html) + * [Windows](https://www.scala-sbt.org/1.x/docs/Installing-sbt-on-Windows.html) + * [Linux](https://www.scala-sbt.org/1.x/docs/Installing-sbt-on-Linux.html) + +## Creare il progetto +1. Eseguire il comando `cd` specificando una cartella vuota per spostarsi in essa. +1. Eseguire il comando `sbt new scala/hello-world.g8`. Questo effettuerà una pull del template 'hello-world' da GitHub. + Si occuperà inoltre di creare la cartella `target`, che per ora può essere ignorata. +1. Quando richiesto verrà richiesto il nome dell'applicazione, indicare `hello-world`. In questo modo verrà creato un progetto chiamato "hello-world". +1. Osserviamo cosa è stato generato una volta eseguiti i passaggi sopra riportati: + +``` +- hello-world + - project (sbt usa questa cartella per installare e gestire plugins e dipendenze) + - build.properties + - src + - main + - scala (Tutto il codice scala che viene scritto dovrà andare qui) + - Main.scala (Entry point dell'applicazione) <-- per ora è tutto ciò che ci servirà + - build.sbt (il file di definizione della build interpretato da sbt) +``` + +Una volta che verrà buildato il progetto, sbt creerà diverse cartelle `target` per i file generati. Possono essere ignorate per lo scopo di questo tutorial. + +## Eseguire il progetto +1. `cd` nella cartella `hello-world`. +1. Lanciare il comando `sbt`. Questo aprirà la console di sbt. +1. Eseguire `~run`. Il carattere `~` è opzionale. Indica ad sbt di eseguirsi ad ogni salvataggio di un file, permettendo un ciclo di modifica, esecuzione e debug più veloce. sbt genererà anche una cartella chiamata `target` che può essere ignorata. + +## Modificare il codice +1. Aprire il file `src/main/scala/Main.scala` in un qualsiasi editor di testo. +1. Modificare "Hello, World!" in "Hello, New York!" +1. Se non è stato interrotto il comando sbt, dovrebbe ora apparire "Hello, New York!" sulla console. +1. Si può continuare a modificare il file, e le modifiche dovrebbero apparire a schermo se non vengono riportati errori. + +## Aggiungere una dipendenza +Vediamo ora come utilizzare librerie pubblicate da terzi per aggiungere ulteriori funzionalità alle nostre applicazioni. + +1. Aprire il file `build.sbt` con un qualsiasi editor di testo e aggiungere la seguente riga: + +``` +libraryDependencies += "org.scala-lang.modules" %% "scala-parser-combinators" % "1.1.2" +``` +`libraryDependencies` è un set (un tipo di collection in scala), e utilizzando il simbolo `+=`, +si sta aggiungendo la dipendenza [scala-parser-combinators](https://github.com/scala/scala-parser-combinators) al set di dipendenze che sbt fetcherà quando verà inizializzato. +Una volta eseguito questo passaggio, sarà possibile importare classi, object ed altro da scala-parser-combinators tramite una semplice istruzione di import. + +Ulteriori librerie pubblicate possono essere trovate sul sito +[Scaladex](https://index.scala-lang.org/), dove è possibile copiare le informazioni delle dipendenze cercate nel file `build.sbt`. + +## Next steps + +Si consiglia di continuare al tutorial successivo della serie _getting started with sbt_ , ed imparare a [testare il codice Scala con sbt tramite linea di comando](testing-scala-with-sbt-on-the-command-line.html). + +**oppure** + +- Continuare ad imparare Scala online e in maniera interattiva su + [Scala Exercises](https://www.scala-exercises.org/scala_tutorial). +- Imparare le feature di Scala tramite articoli più concisi su [Tour of Scala]({{ site.baseurl }}/tour/tour-of-scala.html). \ No newline at end of file diff --git a/_it/getting-started/sbt-track/testing-scala-with-sbt-on-the-command-line.md b/_it/getting-started/sbt-track/testing-scala-with-sbt-on-the-command-line.md new file mode 100644 index 0000000000..cac6f0953a --- /dev/null +++ b/_it/getting-started/sbt-track/testing-scala-with-sbt-on-the-command-line.md @@ -0,0 +1,101 @@ +--- +title: Testare scala con sbt da linea di comando +layout: singlepage-overview +partof: testing-scala-with-sbt-on-the-command-line +language: it +disqus: true +previous-page: /it/getting-started-with-scala-and-sbt-on-the-command-line +--- + +Ci sono diverse librerie e modalità per testare il codice Scala, ma in questo tutorial verrà mostrato come eseguire il testing usando [AnyFunSuite](https://www.scalatest.org/scaladoc/3.2.2/org/scalatest/funsuite/AnyFunSuite.html) del framework ScalaTest. +Si assume che si sappia [creare un progetto Scala con sbt](getting-started-with-scala-and-sbt-on-the-command-line.html). + +## Setup +1. Da linea di comando, creare una nuova directory in una posizione a propria scelta. +1. `cd` nella cartella appena creata ed eseguire `sbt new scala/scalatest-example.g8` +1. Quando richiesto, rinominare il progetto come `ScalaTestTutorial`. +1. Il progetto avrà già in se la libreria ScalaTest come dipendenza indicata nel file `build.sbt`. +1. `cd` nel progetto ed eseguire `sbt test`. Questo eseguirà la test suite +`CubeCalculatorTest` con un unico test chiamato `CubeCalculator.cube`. + +``` +sbt test +[info] Loading global plugins from /Users/username/.sbt/0.13/plugins +[info] Loading project definition from /Users/username/workspace/sandbox/my-something-project/project +[info] Set current project to scalatest-example (in build file:/Users/username/workspace/sandbox/my-something-project/) +[info] CubeCalculatorTest: +[info] - CubeCalculator.cube +[info] Run completed in 267 milliseconds. +[info] Total number of tests run: 1 +[info] Suites: completed 1, aborted 0 +[info] Tests: succeeded 1, failed 0, canceled 0, ignored 0, pending 0 +[info] All tests passed. +[success] Total time: 1 s, completed Feb 2, 2017 7:37:31 PM +``` + +## Comprendere i test +1. In qualsiasi editor di testo aprire i seguenti due file: + * `src/main/scala/CubeCalculator.scala` + * `src/test/scala/CubeCalculatorTest.scala` +1. Nel file `CubeCalculator.scala`, è riportata la definizione della funzione `cube`. +1. Nel file `CubeCalculatorTest.scala`, è presente una classe chiamata allo stesso modo dell'oggetto che stiamo testando. + +``` + import org.scalatest.funsuite.AnyFunSuite + + class CubeCalculatorTest extends AnyFunSuite { + test("CubeCalculator.cube") { + assert(CubeCalculator.cube(3) === 27) + } + } +``` + +Analizziamo ogni riga di codice. + +* `class CubeCalculatorTest` significa che stiamo testando l'oggetto `CubeCalculator` +* `extends AnyFunSuite` ci permette di utilizzare la funzionalità della classe AnyFunSuite, come ad esempio la funzione `test` +* `test` è una funzione proveniente da AnyFunSuite che raccoglie i risultati delle asserzioni all'interno del corpo della funzione. +* `"CubeCalculator.cube"` è il nome del test. Può essere chiamato in qualsiasi modo, ma la convenzione è "NomeClasse.nomeMetodo". +* `assert` prende una condizione booleana e stabilisce se il test è superato o no. +* `CubeCalculator.cube(3) === 27` controlla se l'output della funzione `cube` sia realmente 27. +Il simbolo `===` è parte di ScalaTest e restituisce messaggi di errore comprensibili. + +## Aggiungere un altro test case +1. Aggiungere un altro blocco di testo contenente il proprio enunciato `assert` che verificherà il cubo di `0`. + + ``` + import org.scalatest.funsuite.AnyFunSuite + + class CubeCalculatorTest extends AnyFunSuite { + test("CubeCalculator.cube 3 should be 27") { + assert(CubeCalculator.cube(3) === 27) + } + + test("CubeCalculator.cube 0 should be 0") { + assert(CubeCalculator.cube(0) === 0) + } + } + ``` + +1. Lanciare `sbt test` nuovamente e controllare i risultati. + + ``` + sbt test + [info] Loading project definition from C:\projects\scalaPlayground\scalatestpractice\project + [info] Loading settings for project root from build.sbt ... + [info] Set current project to scalatest-example (in build file:/C:/projects/scalaPlayground/scalatestpractice/) + [info] Compiling 1 Scala source to C:\projects\scalaPlayground\scalatestpractice\target\scala-2.13\test-classes ... + [info] CubeCalculatorTest: + [info] - CubeCalculator.cube 3 should be 27 + [info] - CubeCalculator.cube 0 should be 0 + [info] Run completed in 257 milliseconds. + [info] Total number of tests run: 2 + [info] Suites: completed 1, aborted 0 + [info] Tests: succeeded 2, failed 0, canceled 0, ignored 0, pending 0 + [info] All tests passed. + [success] Total time: 3 s, completed Dec 4, 2019 10:34:04 PM + ``` + +## Conclusioni +In questo tutorial è stato mostrato una delle modalità per testare il codice Scala. Per saperne di più su FunSuite si può consultare [il sito ufficiale](https://www.scalatest.org/getting_started_with_fun_suite). +Si possono anche consultare altri framework di testing come [ScalaCheck](https://www.scalacheck.org/) e [Specs2](https://etorreborre.github.io/specs2/). From 100ba0eb73d497874afc0e7c3c3a07c2b9405e4e Mon Sep 17 00:00:00 2001 From: Ondrej Lhotak Date: Thu, 31 Mar 2022 11:07:03 +0200 Subject: [PATCH 0618/1870] add instructions for viewing contents of .tasty files to Tasty Overview --- scala3/guides/tasty-overview.md | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/scala3/guides/tasty-overview.md b/scala3/guides/tasty-overview.md index 11d0fa3608..1bf643bebd 100644 --- a/scala3/guides/tasty-overview.md +++ b/scala3/guides/tasty-overview.md @@ -52,6 +52,13 @@ $ scalac | Hello.scala | -> | Hello.tasty | -> | Hello.class | information) ``` +You can view the contents of a _.tasty_ file in a human-readable form by running the compiler on it with the `-print-tasty` flag. +You can also view the contents decompiled in a form similar to Scala source code using the `-decompile` flag. +```bash +$ scalac -print-tasty hello.tasty +$ scalac -decompile hello.tasty +``` + ### The issue with _.class_ files Because of issues such as [type erasure][erasure], _.class_ files are actually an incomplete representation of your code. From 6d41790cd92819c3f645342eb8bfd5d779294032 Mon Sep 17 00:00:00 2001 From: Jamie Thompson Date: Thu, 31 Mar 2022 11:30:57 +0200 Subject: [PATCH 0619/1870] Add scastie, rename top links --- _data/nav-header.yml | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/_data/nav-header.yml b/_data/nav-header.yml index b04b23ca78..eeaa88291c 100644 --- a/_data/nav-header.yml +++ b/_data/nav-header.yml @@ -1,10 +1,12 @@ -- title: Documentation +- title: Learn url: "/" -- title: Download +- title: Install url: https://www.scala-lang.org/download/ +- title: Playground + url: https://scastie.scala-lang.org +- title: Find A Library + url: https://index.scala-lang.org - title: Community url: https://www.scala-lang.org/community/ -- title: Libraries - url: https://index.scala-lang.org - title: Blog url: https://www.scala-lang.org/blog/ From f69fb47e4ad56bc419efbcb6ca8739555728635a Mon Sep 17 00:00:00 2001 From: Som Snytt Date: Thu, 31 Mar 2022 04:34:41 -0700 Subject: [PATCH 0620/1870] Normalize type param and add clarity per review --- _tour/lower-type-bounds.md | 31 ++++++++++++++++--------------- 1 file changed, 16 insertions(+), 15 deletions(-) diff --git a/_tour/lower-type-bounds.md b/_tour/lower-type-bounds.md index 9f5cd53b89..f4191b425b 100644 --- a/_tour/lower-type-bounds.md +++ b/_tour/lower-type-bounds.md @@ -16,33 +16,30 @@ While [upper type bounds](upper-type-bounds.html) limit a type to a subtype of a Here is an example where this is useful: ```scala mdoc:fail -trait List[+B] { - def prepend(elem: B): NonEmptyList[B] = NonEmptyList(elem, this) +trait List[+A] { + def prepend(elem: A): NonEmptyList[A] = NonEmptyList(elem, this) } -case class NonEmptyList[+B](head: B, tail: List[B]) extends List[B] +case class NonEmptyList[+A](head: A, tail: List[A]) extends List[A] object Nil extends List[Nothing] ``` -This program implements a singly-linked list. `Nil` represents an empty list with no elements. `class NonEmptyList` is a node which contains an element of type `B` (`head`) and a reference to the rest of the list (`tail`). The `trait List` and its subtypes are covariant because we have `+B`. +This program implements a singly-linked list. `Nil` represents an empty list with no elements. `class NonEmptyList` is a node which contains an element of type `A` (`head`) and a reference to the rest of the list (`tail`). The `trait List` and its subtypes are covariant because we have `+A`. -However, this program does _not_ compile because the parameter `elem` in `prepend` is of type `B`, which we declared *co*variant. This doesn't work because functions are *contra*variant in their parameter types and *co*variant in their result types. +However, this program does _not_ compile because the parameter `elem` in `prepend` is of type `A`, which we declared *co*variant. This doesn't work because functions are *contra*variant in their parameter types and *co*variant in their result types. -To fix this, we need to flip the variance of the type of the parameter `elem` in `prepend`. We do this by introducing a new type parameter `U` that has `B` as a lower type bound. +To fix this, we need to flip the variance of the type of the parameter `elem` in `prepend`. We do this by introducing a new type parameter `B` that has `A` as a lower type bound. ```scala mdoc -trait List[+B] { - def prepend[U >: B](elem: U): NonEmptyList[U] = NonEmptyList(elem, this) +trait List[+A] { + def prepend[B >: A](elem: B): NonEmptyList[B] = NonEmptyList(elem, this) } -case class NonEmptyList[+B](head: B, tail: List[B]) extends List[B] +case class NonEmptyList[+A](head: A, tail: List[A]) extends List[A] object Nil extends List[Nothing] ``` - -The type parameter for `List` is `B` to suggest we want to keep lists of birds. - Now we can do the following: ```scala mdoc trait Bird @@ -51,21 +48,25 @@ case class EuropeanSwallow() extends Bird val africanSwallows: List[AfricanSwallow] = Nil.prepend(AfricanSwallow()) val swallowsFromAntarctica: List[Bird] = Nil +val someBird: Bird = EuropeanSwallow() // assign swallows to birds val birds: List[Bird] = africanSwallows +// add some bird to swallows, `B` is `Bird` +val someBirds = africanSwallows.prepend(someBird) + // add a swallow to birds val moreBirds = birds.prepend(EuropeanSwallow()) -// add disparate swallows together to get birds +// add disparate swallows together, `B` is `Bird` because that is the supertype common to both swallows val allBirds = africanSwallows.prepend(EuropeanSwallow()) // but this is a mistake! adding a list of birds widens the type arg too much. -Xlint will warn! -val error = moreBirds.prepend(swallowsFromAntarctica) +val error = moreBirds.prepend(swallowsFromAntarctica) // List[Object] ``` The covariant type parameter allows `birds` to get the value of `africanSwallows`. The type bound on the type parameter for `prepend` allows adding different varieties of swallows and getting a wider type: instead of `List[AfricanSwallow]`, we get a `List[Bird]`. -The canary in the coal mine is `-Xlint`, which will warn if the type arg is widened too much. +Use `-Xlint` to warn if the inferred type arg is widened too much. From 9821a64394baf44857099a69a95dca605b7e1ad3 Mon Sep 17 00:00:00 2001 From: Lixiang Ao Date: Fri, 1 Apr 2022 15:18:59 -0700 Subject: [PATCH 0621/1870] Remove deprecated methods As of 2.13.4, the following methods have been deprecated: - append(elems: A*): ArrayBuffer.this.type - prepend(elems: A*): ArrayBuffer.this.type - trimStart(n: Int): Unit - trimEnd(n: Int): Unit Affected examples are updated in this pr. --- _overviews/scala-book/arraybuffer-examples.md | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/_overviews/scala-book/arraybuffer-examples.md b/_overviews/scala-book/arraybuffer-examples.md index 8d4dd8ef53..381b593e49 100644 --- a/_overviews/scala-book/arraybuffer-examples.md +++ b/_overviews/scala-book/arraybuffer-examples.md @@ -114,24 +114,22 @@ As a brief overview, here are several methods you can use with an `ArrayBuffer`: ```scala val a = ArrayBuffer(1, 2, 3) // ArrayBuffer(1, 2, 3) a.append(4) // ArrayBuffer(1, 2, 3, 4) -a.append(5, 6) // ArrayBuffer(1, 2, 3, 4, 5, 6) -a.appendAll(Seq(7,8)) // ArrayBuffer(1, 2, 3, 4, 5, 6, 7, 8) +a.appendAll(Seq(5, 6)) // ArrayBuffer(1, 2, 3, 4, 5, 6) a.clear // ArrayBuffer() val a = ArrayBuffer(9, 10) // ArrayBuffer(9, 10) a.insert(0, 8) // ArrayBuffer(8, 9, 10) a.insertAll(0, Vector(4, 5, 6, 7)) // ArrayBuffer(4, 5, 6, 7, 8, 9, 10) a.prepend(3) // ArrayBuffer(3, 4, 5, 6, 7, 8, 9, 10) -a.prepend(1, 2) // ArrayBuffer(1, 2, 3, 4, 5, 6, 7, 8, 9, 10) -a.prependAll(Array(0)) // ArrayBuffer(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10) +a.prependAll(Array(0, 1, 2)) // ArrayBuffer(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10) val a = ArrayBuffer.range('a', 'h') // ArrayBuffer(a, b, c, d, e, f, g) a.remove(0) // ArrayBuffer(b, c, d, e, f, g) a.remove(2, 3) // ArrayBuffer(b, c, g) val a = ArrayBuffer.range('a', 'h') // ArrayBuffer(a, b, c, d, e, f, g) -a.trimStart(2) // ArrayBuffer(c, d, e, f, g) -a.trimEnd(2) // ArrayBuffer(c, d, e) +a.dropInPlace(2) // ArrayBuffer(c, d, e, f, g) +a.dropRightInPlace(2) // ArrayBuffer(c, d, e) ``` From f7afc59478816fbfaf4c1991d22fc4d1f900daa5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=81ukasz=20Krenski?= Date: Sun, 3 Apr 2022 18:39:02 +0200 Subject: [PATCH 0622/1870] Fix 2.13 -Xsource:3 flag in incompatibility table --- _overviews/scala3-migration/incompatibility-table.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/_overviews/scala3-migration/incompatibility-table.md b/_overviews/scala3-migration/incompatibility-table.md index 36e156a868..e699addbfe 100644 --- a/_overviews/scala3-migration/incompatibility-table.md +++ b/_overviews/scala3-migration/incompatibility-table.md @@ -19,7 +19,7 @@ Each incompatibility is described by: - The existence of a Scalafix rule that can fix it > #### Scala 2.13 deprecations and feature warnings -> Run the 2.13 compilation with `-source:3` to locate those incompatibilities in the code. +> Run the 2.13 compilation with `-Xsource:3` to locate those incompatibilities in the code. > #### Scala 3 migration versus Scalafix rewrites > The Scala 3 migration mode comes out-of-the-box. From a9de797f1d0cc5957221d13406038606a28cdd65 Mon Sep 17 00:00:00 2001 From: Florian CUNY Date: Mon, 4 Apr 2022 15:05:55 +0200 Subject: [PATCH 0623/1870] fixed typo --- _overviews/scala-book/pure-functions.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/_overviews/scala-book/pure-functions.md b/_overviews/scala-book/pure-functions.md index e753d67ce4..97c6ef6fb9 100644 --- a/_overviews/scala-book/pure-functions.md +++ b/_overviews/scala-book/pure-functions.md @@ -49,7 +49,7 @@ Conversely, the following functions are *impure* because they violate the defini The `foreach` method on collections classes is impure because it’s only used for its side effects, such as printing to STDOUT. ->A great hint that `foreach` is impure is that it’s method signature declares that it returns the type `Unit`. Because it returns nothing, logically the only reason you ever call it is to achieve some side effect. Similarly, *any* method that returns `Unit` is going to be an impure function. +>A great hint that `foreach` is impure is that its method signature declares that it returns the type `Unit`. Because it returns nothing, logically the only reason you ever call it is to achieve some side effect. Similarly, *any* method that returns `Unit` is going to be an impure function. Date and time related methods like `getDayOfWeek`, `getHour`, and `getMinute` are all impure because their output depends on something other than their input parameters. Their results rely on some form of hidden I/O, *hidden input* in these examples. From 180b9088915462d575813bc2644e598fb2f00348 Mon Sep 17 00:00:00 2001 From: Jason Pickens Date: Wed, 6 Apr 2022 08:02:06 +1200 Subject: [PATCH 0624/1870] Remove strikethrough from rewrite steps example (#2356) --- _overviews/scala3-migration/tooling-syntax-rewriting.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/_overviews/scala3-migration/tooling-syntax-rewriting.md b/_overviews/scala3-migration/tooling-syntax-rewriting.md index 976e3c097e..bbe246aa1e 100644 --- a/_overviews/scala3-migration/tooling-syntax-rewriting.md +++ b/_overviews/scala3-migration/tooling-syntax-rewriting.md @@ -86,7 +86,7 @@ We will be able to move it to new syntax automatically in two steps: first by us > The `-indent` option does not work on the classic control structures. > So make sure to run the two steps in the correct order. -> Unfortunately, the compiler is not able to apply both steps at the same time: `-indent -new-syntax -rewrite`. +> Unfortunately, the compiler is not able to apply both steps at the same time: `-indent -new-syntax -rewrite`. ### New Control Structures From 3841483fd8a4c2e64fc021db1eca8d42a264f0ff Mon Sep 17 00:00:00 2001 From: Artem Korsakov Date: Sat, 9 Apr 2022 10:26:48 +0300 Subject: [PATCH 0625/1870] Fix error in `given` definition We can see in the [reference](https://docs.scala-lang.org/scala3/reference/contextual/givens.html) that the right `given` definition is: ``` given intMonthConverter: MonthConverter[Int] with ``` --- _overviews/scala3-book/packaging-imports.md | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/_overviews/scala3-book/packaging-imports.md b/_overviews/scala3-book/packaging-imports.md index 07450f72f8..3ae2e7c318 100644 --- a/_overviews/scala3-book/packaging-imports.md +++ b/_overviews/scala3-book/packaging-imports.md @@ -354,20 +354,19 @@ object MonthConversions: trait MonthConverter[A]: def convert(a: A): String - given intMonthConverter as MonthConverter[Int]: + given intMonthConverter: MonthConverter[Int] with def convert(i: Int): String = i match case 1 => "January" case 2 => "February" // more cases here ... - given stringMonthConverter as MonthConverter[String]: + given stringMonthConverter: MonthConverter[String] with def convert(s: String): String = s match case "jan" => "January" case "feb" => "February" // more cases here ... -} ``` To import those givens into the current scope, use these two `import` statements: From 519639583aa576680692632a85d94cf1b4118ddb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=A2=A6=E5=A2=83=E8=BF=B7=E7=A6=BB?= Date: Mon, 11 Apr 2022 20:13:10 +0800 Subject: [PATCH 0626/1870] add zn-cn --- _zh-cn/scala3/new-in-scala3.md | 128 +++++++++++++++++++++++++++++++++ scala3/new-in-scala3.md | 2 +- 2 files changed, 129 insertions(+), 1 deletion(-) create mode 100644 _zh-cn/scala3/new-in-scala3.md diff --git a/_zh-cn/scala3/new-in-scala3.md b/_zh-cn/scala3/new-in-scala3.md new file mode 100644 index 0000000000..28b458c8d5 --- /dev/null +++ b/_zh-cn/scala3/new-in-scala3.md @@ -0,0 +1,128 @@ +--- +layout: singlepage-overview +title: New in Scala 3 +scala3: true +--- + +令人振奋的新版 Scala 3 带来了许多改进和新功能。在这里,我们为你提供最重要的变更的快速概述。如果你想深入挖掘,还有一些参考资料供你使用。 + +- [Scala 3 Book]({% link _overviews/scala3-book/introduction.md %}) 面向刚接触 Scala 语言的开发人员。 +- [Syntax Summary][syntax-summary] 为您提供了新语法的正式描述。 +- [Language Reference][reference] 对 Scala 2 到 Scala 3 的变化做了详细说明。 +- [Migration Guide][migration] 为你提供了从 Scala 2 迁移到 Scala 3 的所有必要信息。 +- [Scala 3 Contributing Guide][contribution] Scala 3 贡献指南,更深入地探讨了编译器,包括修复问题的指南。 + +## What's new in Scala 3 +Scala 3 是对 Scala 语言的一次彻底改造。在其核心部分,类型系统的许多方面都被改变了,变得更有原则性。虽然这也带来了令人兴奋的新功能(比如联合类型),但首先意味着类型系统变得(甚至)不那么碍事了,例如[类型推断][type-inference]和 overload resolution 都得到了很大的改善。 + +### 新的和闪亮的:语法 + +除了许多(小的)清理,Scala 3 的语法还提供了以下改进: + +- 用于控制结构的新“quiet”语法,如 `if`、`while` 和 `for` 。 ([new control syntax][syntax-control]) +- `new` 关键字是可选的 (_aka_ [creator applications][creator]) +- [Optional braces][syntax-indentation]:可选的大括号,支持不受干扰、缩进敏感的编程风格 +- [类型级通配符][syntax-wildcard] 从 `_` 更改为 `?`。 +- implicit(和它们的语法)已被[大量修订][implicits]。 + +### Opinionated: Contextual Abstractions +Scala的一个基本核心概念是(在某种程度上仍然是)为用户提供一小部分强大的功能,这些功能可以被组合成巨大的(有时甚至是不可预见的)表达能力。例如,_implicit_ 的特性被用来模拟上下文抽象、表达类型级计算、模拟类型类、执行隐式强制、编码扩展方法等等。从这些用例中学习,Scala 3 采取了一种略微不同的方法,专注于 __意图__ 而非 __机制__。Scala 3 没有提供一个非常强大的功能,而是提供了多个定制的语言功能,让程序员直接表达他们的意图。 + +- **Abtracting over contextual information**. [Using clauses][contextual-using] 允许程序员对调用上下文中的信息进行抽象,这些信息应该以隐式方式传递。作为对 Scala 2 implicits 的改进,可以按类型指定`using`子句,从而将函数签名从从未显式引用的术语变量名中解放出来。 + +- **Providing Type-class instances**. [Given instances][contextual-givens] 允许程序员定义某个类型的 _规范值_ 。这使得使用类型类的编程更加简单,而不会泄露实现细节。 + +- **Retroactively extending classes**. 在 Scala 2 中,扩展方法必须使用隐式转换或隐式类进行编码。相比之下,在 Scala 3 中,[extension methods][contextual-extension]现在直接内置于语言中,从而产生更好的错误消息和改进的类型推断。 + +- **Viewing one type as another**. 隐式转换已经被重新[设计][contextual-conversions]为类型类转`Conversion`的实例。 + +- **Higher-order contextual abstractions**. [context functions][contextual-functions]的 _全新_ 功能使上下文抽象成为一流的公民。它们是库作者的一个重要工具,允许表达简洁的特定领域语言。 + +- **Actionable feedback from the compiler**. 如果一个隐式参数不能被编译器解决,它现在提供了可能解决这个问题的[import suggestions](https://www.scala-lang.org/blog/2020/05/05/scala-3-import-suggestions.html)。 + +### Say What You Mean: 类型系统改进 +除了极大地改进了类型推断,Scala 3 类型系统还提供了许多新的功能,还为你提供了强大的工具来静态地表达类型中的不变量。 + +- **Enumerations**. [枚举][enums]已经被重新设计,以便与样例类很好地融合,并形成表达[代数数据类型][enums-adts]的新标准。 + +- **Opaque Types**. 将实现细节隐藏在[opaque type aliases][types-opaque]的别名后面,而不需要在性能上付出代价! Opaque types 取代了值类,并允许你建立一个抽象的屏障,而不会造成额外的装箱开销。 + +- **Intersection and union types**. 将类型系统建立在新的基础上,导致了新的类型系统功能的引入:[intersection types][types-intersection]的实例,如`A & B`,既是`A`的实例,也是`B`的实例;[union types][types-union]的实例,如`A | B`,是`A`或`B`的实例。这两种结构都允许程序员在继承层次结构之外灵活地表达类型约束。 + +- **Dependent function types**. Scala 2 已经允许返回类型依赖于(值)参数。在 Scala 3 中,现在可以对这种模式进行抽象,表达[dependent function types][types-dependent]。在类型`F = (e: Entry) => e.Key`中,结果类型取决于参数。 + +- **Polymorphic function types**. 与 dependent function types 一样,Scala 2 支持拥有类型参数的方法,但不允许程序员对这些方法进行抽象。在 Scala 3 中,像`[A] => List[A] => List[A]`这样的[polymorphic function types][types-polymorphic]可以抽象出除值参数外还接受 _类型参数_ 的函数。 + +- **Type lambdas**. 在 Scala 2 中需要用[编译器插件](https://github.com/typelevel/kind-projector)来表达的东西,现在在 Scala 3 中是第一类的功能:类型lambdas是类型级别的函数,可以作为(高等类型的)类型参数传递,而不需要辅助类型定义。 + +- **Match types**. Scala 3 提供了对[matching on types][types-match]的直接支持,而不是使用隐式解析对类型级别的计算进行编码。将类型级计算整合到类型检查器中,可以改进错误信息,并消除对复杂编码的需求。 + +### 重新设想的:面向对象的编程 + +Scala 一直处于函数式编程和面向对象编程的前沿 -- 而 Scala 3 在这两个方向上都推动了边界的发展! 上述类型系统的变化和上下文抽象的重新设计使得 _函数式编程_ 比以前更容易。同时,以下的新特性使结构良好的 _面向对象设计_ 成为可能,并支持最佳实践。 + +- **Pass it on**. Trait 更接近于 class,现在也可以接受[参数][oo-trait-parameters],使其作为模块化软件分解的工具更加强大。 + +- **Plan for extension**. 在面向对象的设计中,扩展那些不打算扩展的类是一个长期存在的问题。为了解决这个问题,[open classes][oo-open]要求库设计者 _明确地_ 将类标记为 open(开放的)。 + +- **Hide implementation details**. 实施行为的实用性traits有时不应该是推断类型的一部分。在 Scala 3 中,这些traits可以被标记为[transparent][oo-transparent],(在推断类型中)向用户隐藏继承性。 + +- **Composition over inheritance**. 这句话经常被引用,但实现起来却很繁琐。Scala 3 的[export clauses][oo-export]则不然:与imports对应,export clauses 允许用户为对象的选定成员定义别名。 + +- **No more NPEs**. Scala 3 比以往任何时候都更安全:[explicit null][oo-explicit-null]将`null`移出了类型层次结构,帮助你静态地捕捉错误;[safe initialization][oo-safe-init]的额外检查可以检测对未初始化对象的访问。 + +### Batteries Included: 元编程 +Scala 2 中的宏只是一个实验性的功能,而 Scala 3 则为元编程提供了强大的工具库。[宏教程]({% link _overviews/scala3-macros/tutorial/index.md %})中包含了关于不同设施的详细信息。特别是,Scala 3 为元编程提供了以下功能: + +作为基本的起点,[inline feature][meta-inline]允许在编译时减少数值和方法。这个简单的功能已经涵盖了许多使用情况,同时也为更高级的功能提供了入口。 + +- **Inline**. [inline feature][meta-inline]允许在编译时减少数值和方法。这个简单的功能已经涵盖了许多使用情况,同时也为更高级的功能提供了入口。 +- **Compile-time operations**. 包[`scala.compiletime`][meta-compiletime]中包含了额外的功能,可以用来实现内联方法。 +- **Quoted code blocks**. Scala 3为代码增加了[quasi-quotation][meta-quotes]的新功能,这为构建和分析代码提供了方便的高级接口。构建加一加一的代码就像`'{ 1 + 1 }`一样简单。 +- **Reflection API**. 对于更高级的用例,[quotes.reflect][meta-reflection]提供了更详细的控制来检查和生成程序树。 + + +如果你想进一步了解 Scala 3 中的元编程,我们邀请你参加我们的[教程][meta-tutorial]。 + +[enums]: {{ site.scala3ref }}/enums/enums.html +[enums-adts]: {{ site.scala3ref }}/enums/adts.html + +[types-intersection]: {{ site.scala3ref }}/new-types/intersection-types.html +[types-union]: {{ site.scala3ref }}/new-types/union-types.html +[types-dependent]: {{ site.scala3ref }}/new-types/dependent-function-types.html +[types-lambdas]: {{ site.scala3ref }}/new-types/type-lambdas.html +[types-polymorphic]: {{ site.scala3ref }}/new-types/polymorphic-function-types.html +[types-match]: {{ site.scala3ref }}/new-types/match-types.html +[types-opaque]: {{ site.scala3ref }}/other-new-features/opaques.html + +[type-inference]: {{ site.scala3ref }}/changed-features/type-inference.html +[overload-resolution]: {{ site.scala3ref }}/changed-features/overload-resolution.html +[reference]: {{ site.scala3ref }}/overview.html +[creator]: {{ site.scala3ref }}/other-new-features/creator-applications.html +[migration]: {% link _overviews/scala3-migration/compatibility-intro.md %} +[contribution]: {% link _overviews/scala3-contribution/contribution-intro.md %} + +[implicits]: {{ site.scala3ref }}/contextual.html +[contextual-using]: {{ site.scala3ref }}/contextual/using-clauses.html +[contextual-givens]: {{ site.scala3ref }}/contextual/givens.html +[contextual-extension]: {{ site.scala3ref }}/contextual/extension-methods.html +[contextual-conversions]: {{ site.scala3ref }}/contextual/conversions.html +[contextual-functions]: {{ site.scala3ref }}/contextual/context-functions.html + +[syntax-summary]: {{ site.scala3ref }}/syntax.html +[syntax-control]: {{ site.scala3ref }}/other-new-features/control-syntax.html +[syntax-indentation]: {{ site.scala3ref }}/other-new-features/indentation.html +[syntax-wildcard]: {{ site.scala3ref }}/changed-features/wildcards.html + +[meta-tutorial]: {% link _overviews/scala3-macros/tutorial/index.md %} +[meta-inline]: {% link _overviews/scala3-macros/tutorial/inline.md %} +[meta-compiletime]: {% link _overviews/scala3-macros/tutorial/compiletime.md %} +[meta-quotes]: {% link _overviews/scala3-macros/tutorial/quotes.md %} +[meta-reflection]: {% link _overviews/scala3-macros/tutorial/reflection.md %} + +[oo-explicit-null]: {{ site.scala3ref }}/other-new-features/explicit-nulls.html +[oo-safe-init]: {{ site.scala3ref }}/other-new-features/safe-initialization.html +[oo-trait-parameters]: {{ site.scala3ref }}/other-new-features/trait-parameters.html +[oo-open]: {{ site.scala3ref }}/other-new-features/open-classes.html +[oo-transparent]: {{ site.scala3ref }}/other-new-features/transparent-traits.html +[oo-export]: {{ site.scala3ref }}/other-new-features/export.html diff --git a/scala3/new-in-scala3.md b/scala3/new-in-scala3.md index af6d6111c1..5b30d76158 100644 --- a/scala3/new-in-scala3.md +++ b/scala3/new-in-scala3.md @@ -1,7 +1,7 @@ --- layout: singlepage-overview title: New in Scala 3 -languages: ["ja"] +languages: ["ja","zh-cn"] --- The exciting new version of Scala 3 brings many improvements and new features. Here we provide you with a quick overview of the most important From afcaefc6d26c42d36da3bbad2d1ef81244b01a48 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=A2=A6=E5=A2=83=E8=BF=B7=E7=A6=BB?= Date: Mon, 11 Apr 2022 20:25:45 +0800 Subject: [PATCH 0627/1870] fix --- _zh-cn/scala3/new-in-scala3.md | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/_zh-cn/scala3/new-in-scala3.md b/_zh-cn/scala3/new-in-scala3.md index 28b458c8d5..472f66331f 100644 --- a/_zh-cn/scala3/new-in-scala3.md +++ b/_zh-cn/scala3/new-in-scala3.md @@ -17,7 +17,7 @@ Scala 3 是对 Scala 语言的一次彻底改造。在其核心部分,类型 ### 新的和闪亮的:语法 -除了许多(小的)清理,Scala 3 的语法还提供了以下改进: +除了许多(小的)清理工作,Scala 3 的语法还提供了以下改进: - 用于控制结构的新“quiet”语法,如 `if`、`while` 和 `for` 。 ([new control syntax][syntax-control]) - `new` 关键字是可选的 (_aka_ [creator applications][creator]) @@ -34,9 +34,9 @@ Scala的一个基本核心概念是(在某种程度上仍然是)为用户提 - **Retroactively extending classes**. 在 Scala 2 中,扩展方法必须使用隐式转换或隐式类进行编码。相比之下,在 Scala 3 中,[extension methods][contextual-extension]现在直接内置于语言中,从而产生更好的错误消息和改进的类型推断。 -- **Viewing one type as another**. 隐式转换已经被重新[设计][contextual-conversions]为类型类转`Conversion`的实例。 +- **Viewing one type as another**. [隐式转换][contextual-conversions]已经被重新设计为类型类`Conversion`的实例。 -- **Higher-order contextual abstractions**. [context functions][contextual-functions]的 _全新_ 功能使上下文抽象成为一流的公民。它们是库作者的一个重要工具,允许表达简洁的特定领域语言。 +- **Higher-order contextual abstractions**. [context functions][contextual-functions]的 _全新_ 功能使上下文抽象成为一流的公民。它们是库开发人员的一个重要工具,允许表达简洁的特定领域语言。 - **Actionable feedback from the compiler**. 如果一个隐式参数不能被编译器解决,它现在提供了可能解决这个问题的[import suggestions](https://www.scala-lang.org/blog/2020/05/05/scala-3-import-suggestions.html)。 @@ -74,15 +74,13 @@ Scala 一直处于函数式编程和面向对象编程的前沿 -- 而 Scala 3 ### Batteries Included: 元编程 Scala 2 中的宏只是一个实验性的功能,而 Scala 3 则为元编程提供了强大的工具库。[宏教程]({% link _overviews/scala3-macros/tutorial/index.md %})中包含了关于不同设施的详细信息。特别是,Scala 3 为元编程提供了以下功能: -作为基本的起点,[inline feature][meta-inline]允许在编译时减少数值和方法。这个简单的功能已经涵盖了许多使用情况,同时也为更高级的功能提供了入口。 - - **Inline**. [inline feature][meta-inline]允许在编译时减少数值和方法。这个简单的功能已经涵盖了许多使用情况,同时也为更高级的功能提供了入口。 - **Compile-time operations**. 包[`scala.compiletime`][meta-compiletime]中包含了额外的功能,可以用来实现内联方法。 - **Quoted code blocks**. Scala 3为代码增加了[quasi-quotation][meta-quotes]的新功能,这为构建和分析代码提供了方便的高级接口。构建加一加一的代码就像`'{ 1 + 1 }`一样简单。 - **Reflection API**. 对于更高级的用例,[quotes.reflect][meta-reflection]提供了更详细的控制来检查和生成程序树。 -如果你想进一步了解 Scala 3 中的元编程,我们邀请你参加我们的[教程][meta-tutorial]。 +如果你想进一步了解 Scala 3 中的元编程,我们邀请你参加[教程][meta-tutorial]。 [enums]: {{ site.scala3ref }}/enums/enums.html [enums-adts]: {{ site.scala3ref }}/enums/adts.html From 9109395ffc43c7168daf02d0b328aca7c116ec39 Mon Sep 17 00:00:00 2001 From: Gord Currie <1119730+gordcurrie@users.noreply.github.com> Date: Mon, 11 Apr 2022 09:04:42 -0500 Subject: [PATCH 0628/1870] Update implicit casting example (#2370) --- _overviews/scala3-book/first-look-at-types.md | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/_overviews/scala3-book/first-look-at-types.md b/_overviews/scala3-book/first-look-at-types.md index c62e2cc9dd..85c3214ad9 100644 --- a/_overviews/scala3-book/first-look-at-types.md +++ b/_overviews/scala3-book/first-look-at-types.md @@ -238,20 +238,19 @@ Value types can be cast in the following way: For example: ```scala -val x: Long = 987654321 -val y: Float = x // 9.8765434E8 (note that some precision is lost in this case) +val b: Byte = 127 +val i: Int = b // 127 val face: Char = '☺' val number: Int = face // 9786 ``` -Casting is unidirectional. -This will not compile: +You can only cast to a type if there is no loss of information. Otherwise, you need to be explicit about the cast: -``` +```scala val x: Long = 987654321 -val y: Float = x // 9.8765434E8 -val z: Long = y // Does not conform +val y: Float = x.toFloat // 9.8765434E8 (note that `.toFloat` is required because the cast results in percision loss) +val z: Long = y // Error ``` You can also cast a reference type to a subtype. From 10c29916a9bfebaa979209d9421ff6d2a43d8e08 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 12 Apr 2022 10:15:06 +0000 Subject: [PATCH 0629/1870] Bump nokogiri from 1.13.3 to 1.13.4 Bumps [nokogiri](https://github.com/sparklemotion/nokogiri) from 1.13.3 to 1.13.4. - [Release notes](https://github.com/sparklemotion/nokogiri/releases) - [Changelog](https://github.com/sparklemotion/nokogiri/blob/v1.13.4/CHANGELOG.md) - [Commits](https://github.com/sparklemotion/nokogiri/compare/v1.13.3...v1.13.4) --- updated-dependencies: - dependency-name: nokogiri dependency-type: indirect ... Signed-off-by: dependabot[bot] --- Gemfile.lock | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Gemfile.lock b/Gemfile.lock index 5b52d7697a..3c6f6b8d12 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -55,7 +55,7 @@ GEM rb-inotify (~> 0.9, >= 0.9.10) mercenary (0.3.6) mini_portile2 (2.8.0) - nokogiri (1.13.3) + nokogiri (1.13.4) mini_portile2 (~> 2.8.0) racc (~> 1.4) nokogumbo (2.0.2) From b9926e655a75be592d5fae52ca894e0490901692 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pawe=C5=82=20Marks?= Date: Tue, 12 Apr 2022 15:46:45 +0200 Subject: [PATCH 0630/1870] Update Scala version to 3.1.2 --- _config.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/_config.yml b/_config.yml index 43f6dfd536..accb4b5df1 100644 --- a/_config.yml +++ b/_config.yml @@ -17,7 +17,7 @@ keywords: scala-version: 2.13.8 scala-212-version: 2.12.15 -scala-3-version: 3.1.1 +scala-3-version: 3.1.2 collections: contribute_resources: From 10abafb233f9b2877585e4316cf30ab308bd7449 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pawe=C5=82=20Marks?= Date: Tue, 12 Apr 2022 15:50:34 +0200 Subject: [PATCH 0631/1870] Add entry for the documentation --- api/all.md | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/api/all.md b/api/all.md index ea55e544d9..33566543b6 100644 --- a/api/all.md +++ b/api/all.md @@ -6,8 +6,8 @@ includeTOC: true ## Latest releases -* Scala 3.1.1 - * [Library API](https://www.scala-lang.org/api/3.1.1/) +* Scala 3.1.2 + * [Library API](https://www.scala-lang.org/api/3.1.2/) * Scala 2.13.8 * [Library API](https://www.scala-lang.org/api/2.13.8/) * [Compiler API](https://www.scala-lang.org/api/2.13.8/scala-compiler/scala/) @@ -60,6 +60,8 @@ https://scala-ci.typesafe.com/artifactory/scala-integration/org/scala-lang/ ## Previous releases +* Scala 3.1.1 + * [Library API](https://www.scala-lang.org/api/3.1.1/) * Scala 3.1.0 * [Library API](https://www.scala-lang.org/api/3.1.0/) * Scala 3.0.2 From 496e82cc9e0515c68f7359425728da91d8953a62 Mon Sep 17 00:00:00 2001 From: Jochen Schneider Date: Fri, 15 Apr 2022 18:37:06 +0200 Subject: [PATCH 0632/1870] Example variable typo --- _overviews/collections-2.13/maps.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/_overviews/collections-2.13/maps.md b/_overviews/collections-2.13/maps.md index 3a27586614..8dff664b27 100644 --- a/_overviews/collections-2.13/maps.md +++ b/_overviews/collections-2.13/maps.md @@ -62,7 +62,7 @@ Mutable maps support in addition the operations summarized in the following tabl | WHAT IT IS | WHAT IT DOES | | ------ | ------ | | **Additions and Updates:**| | -| `ms(k) = v` |(Or, written out, `ms.update(x, v)`). Adds mapping from key `k` to value `v` to map ms as a side effect, overwriting any previous mapping of `k`.| +| `ms(k) = v` |(Or, written out, `ms.update(k, v)`). Adds mapping from key `k` to value `v` to map ms as a side effect, overwriting any previous mapping of `k`.| | `ms.addOne(k -> v)`
    or `ms += (k -> v)` |Adds mapping from key `k` to value `v` to map `ms` as a side effect and returns `ms` itself.| | `ms addAll xvs`
    or `ms ++= kvs` |Adds all mappings in `kvs` to `ms` as a side effect and returns `ms` itself.| | `ms.put(k, v)` |Adds mapping from key `k` to value `v` to `ms` and returns any value previously associated with `k` as an option.| From 86724d38cd620fff0568b1b6399e047f81de24ec Mon Sep 17 00:00:00 2001 From: Philippus Date: Sat, 16 Apr 2022 10:56:08 +0200 Subject: [PATCH 0633/1870] Update scalatest to 3.2.11 in scala book --- _overviews/scala-book/sbt-scalatest-bdd.md | 4 ++-- _overviews/scala-book/sbt-scalatest-tdd.md | 16 ++++++++-------- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/_overviews/scala-book/sbt-scalatest-bdd.md b/_overviews/scala-book/sbt-scalatest-bdd.md index ee20a8490e..5117bbc0fc 100644 --- a/_overviews/scala-book/sbt-scalatest-bdd.md +++ b/_overviews/scala-book/sbt-scalatest-bdd.md @@ -70,7 +70,7 @@ class MathUtilsSpec extends FunSpec { As you can see, this is a very different-looking style than the TDD tests in the previous lesson. If you’ve never used a BDD style of testing before, a main idea is that the tests should be relatively easy to read for one of the “domain experts” who work with the programmers to create the application. A few notes about this code: -- It uses the `FunSpec` class where the TDD tests used `FunSuite` +- It uses the `AnyFunSpec` class where the TDD tests used `AnyFunSuite` - A set of tests begins with `describe` - Each test begins with `it`. The idea is that the test should read like, “It should do XYZ...,” where “it” is the `double` function - This example also shows how to mark a test as “pending” @@ -96,7 +96,7 @@ With those files in place you can again run `sbt test`. The important part of th [info] Suites: completed 2, aborted 0 [info] Tests: succeeded 4, failed 0, canceled 0, ignored 0, pending 1 [info] All tests passed. -[success] Total time: 4 s, completed Jan 6, 2018 4:58:23 PM +[success] Total time: 4 s ```` A few notes about that output: diff --git a/_overviews/scala-book/sbt-scalatest-tdd.md b/_overviews/scala-book/sbt-scalatest-tdd.md index 7214566a09..a0c61da35c 100644 --- a/_overviews/scala-book/sbt-scalatest-tdd.md +++ b/_overviews/scala-book/sbt-scalatest-tdd.md @@ -39,7 +39,7 @@ version := "1.0" scalaVersion := "{{site.scala-version}}" libraryDependencies += - "org.scalatest" %% "scalatest" % "3.0.8" % Test + "org.scalatest" %% "scalatest" % "3.2.11" % Test ``` @@ -47,7 +47,7 @@ The first three lines of this file are essentially the same as the first example ```scala libraryDependencies += - "org.scalatest" %% "scalatest" % "3.0.8" % Test + "org.scalatest" %% "scalatest" % "3.2.11" % Test ``` >The ScalaTest documentation has always been good, and you can always find the up to date information on what those lines should look like on the [Installing ScalaTest](http://www.scalatest.org/install) page. @@ -85,8 +85,8 @@ There isn’t much that can go wrong with that source code, but it provides a si [warn] consider launching sbt without any commands, or explicitly passing 'shell' ... ... -[info] Compiling 1 Scala source to /Users/al/Projects/Scala/HelloScalaTest/target/scala-2.12/classes... -[info] Running simpletest.Hello +[info] compiling 1 Scala source to /Users/al/Projects/Scala/HelloScalaTest/target/scala-2.13/classes... +[info] running simpletest.Hello Hello Alvin Alexander [success] Total time: 4 s ```` @@ -108,9 +108,9 @@ Next, create a file named *HelloTests.scala* in that directory with the followin ```scala package simpletest -import org.scalatest.FunSuite +import org.scalatest.funsuite.AnyFunSuite -class HelloTests extends FunSuite { +class HelloTests extends AnyFunSuite { // test 1 test("the name is set correctly in constructor") { @@ -130,7 +130,7 @@ class HelloTests extends FunSuite { This file demonstrates the ScalaTest `FunSuite` approach. A few important points: -- Your class should extend `FunSuite` +- Your class should extend `AnyFunSuite` - You create tests as shown, by giving each `test` a unique name - At the end of each test you should call `assert` to test that a condition has been satisfied @@ -140,7 +140,7 @@ Now you can run these tests with the `sbt test` command. Skipping the first few ```` > sbt test -[info] Set current project to HelloScalaTest (in build file:/Users/al/Projects/Scala/HelloScalaTest/) +[info] set current project to HelloScalaTest (in build file:/Users/al/Projects/Scala/HelloScalaTest/) [info] HelloTests: [info] - the name is set correctly in constructor [info] - a Person's name can be changed From 9ac6061ceacad3e7a8906abe49e6a8f2504ac2f4 Mon Sep 17 00:00:00 2001 From: Philippus Date: Sat, 16 Apr 2022 10:56:35 +0200 Subject: [PATCH 0634/1870] Update scalatest to 3.2.11 in IntelliJ example --- .../testing-scala-in-intellij-with-scalatest.md | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/_getting-started/intellij-track/testing-scala-in-intellij-with-scalatest.md b/_getting-started/intellij-track/testing-scala-in-intellij-with-scalatest.md index 77d0b3341a..fb34580984 100644 --- a/_getting-started/intellij-track/testing-scala-in-intellij-with-scalatest.md +++ b/_getting-started/intellij-track/testing-scala-in-intellij-with-scalatest.md @@ -20,15 +20,15 @@ This assumes you know [how to build a project in IntelliJ](building-a-scala-proj 1. Add the ScalaTest dependency: 1. Add the ScalaTest dependency to your `build.sbt` file: ``` - libraryDependencies += "org.scalatest" %% "scalatest" % "3.0.8" % Test + libraryDependencies += "org.scalatest" %% "scalatest" % "3.2.11" % Test ``` 1. If you get a notification "build.sbt was changed", select **auto-import**. 1. These two actions will cause `sbt` to download the ScalaTest library. - 1. Wait for the `sbt` sync to finish; otherwise, `FunSuite` and `test()` will be + 1. Wait for the `sbt` sync to finish; otherwise, `AnyFunSuite` and `test()` will be unrecognized. 1. On the project pane on the left, expand `src` => `main`. 1. Right-click on `scala` and select **New** => **Scala class**. -1. Call it `CubeCalculator`, change the **Kind** to `object`, and click **OK**. +1. Call it `CubeCalculator`, change the **Kind** to `object`, and hit enter or double click on `object`. 1. Replace the code with the following: ``` object CubeCalculator extends App { @@ -41,12 +41,12 @@ This assumes you know [how to build a project in IntelliJ](building-a-scala-proj ## Creating a test 1. On the project pane on the left, expand `src` => `test`. 1. Right-click on `scala` and select **New** => **Scala class**. -1. Name the class `CubeCalculatorTest` and click **OK**. +1. Name the class `CubeCalculatorTest` and hit enter or double click on `class`. 1. Replace the code with the following: ``` - import org.scalatest.FunSuite + import org.scalatest.funsuite.AnyFunSuite - class CubeCalculatorTest extends FunSuite { + class CubeCalculatorTest extends AnyFunSuite { test("CubeCalculator.cube") { assert(CubeCalculator.cube(3) === 27) } @@ -60,9 +60,9 @@ This assumes you know [how to build a project in IntelliJ](building-a-scala-proj Let's go over this line by line: * `class CubeCalculatorTest` means we are testing the object `CubeCalculator` -* `extends FunSuite` lets us use functionality of ScalaTest's FunSuite class +* `extends AnyFunSuite` lets us use functionality of ScalaTest's AnyFunSuite class such as the `test` function -* `test` is function that comes from the FunSuite library that collects +* `test` is a function that comes from the FunSuite library that collects results from assertions within the function body. * `"CubeCalculator.cube"` is a name for the test. You can call it anything but one convention is "ClassName.methodName". From 533d497ffc5c11e24f3efb5dbf67b387a4872083 Mon Sep 17 00:00:00 2001 From: Philippus Date: Sat, 16 Apr 2022 14:18:31 +0200 Subject: [PATCH 0635/1870] Drop references to Discourse comments --- _ja/tour/abstract-type-members.md | 4 ---- _ja/tour/annotations.md | 5 ----- _ja/tour/automatic-closures.md | 3 --- _ja/tour/basics.md | 5 ----- _ja/tour/by-name-parameters.md | 5 ----- _ja/tour/case-classes.md | 5 ----- _ja/tour/classes.md | 5 ----- _ja/tour/compound-types.md | 5 ----- _ja/tour/default-parameter-values.md | 5 ----- _ja/tour/extractor-objects.md | 5 ----- _ja/tour/for-comprehensions.md | 5 ----- _ja/tour/generic-classes.md | 5 ----- _ja/tour/higher-order-functions.md | 5 ----- _ja/tour/implicit-conversions.md | 5 ----- _ja/tour/implicit-parameters.md | 5 ----- _ja/tour/inner-classes.md | 5 ----- _ja/tour/lower-type-bounds.md | 5 ----- _ja/tour/mixin-class-composition.md | 5 ----- _ja/tour/multiple-parameter-lists.md | 5 ----- _ja/tour/named-arguments.md | 5 ----- _ja/tour/nested-functions.md | 5 ----- _ja/tour/operators.md | 5 ----- _ja/tour/package-objects.md | 4 ---- _ja/tour/packages-and-imports.md | 4 ---- _ja/tour/pattern-matching.md | 6 ------ _ja/tour/polymorphic-methods.md | 6 ------ _ja/tour/regular-expression-patterns.md | 6 ------ _ja/tour/self-types.md | 5 ----- _ja/tour/singleton-objects.md | 5 ----- _ja/tour/tour-of-scala.md | 6 ------ _ja/tour/traits.md | 5 ----- _ja/tour/tuples.md | 5 ----- _ja/tour/type-inference.md | 4 ---- _ja/tour/unified-types.md | 5 ----- _ja/tour/upper-type-bounds.md | 4 ---- _ja/tour/variances.md | 5 ----- _ja/tutorials/scala-for-java-programmers.md | 3 --- _overviews/scala-book/abstract-classes.md | 1 - _overviews/scala-book/anonymous-functions.md | 1 - _overviews/scala-book/arraybuffer-examples.md | 1 - _overviews/scala-book/built-in-types.md | 1 - _overviews/scala-book/case-classes.md | 1 - _overviews/scala-book/case-objects.md | 1 - _overviews/scala-book/classes-aux-constructors.md | 1 - _overviews/scala-book/classes.md | 1 - _overviews/scala-book/collections-101.md | 1 - _overviews/scala-book/collections-maps.md | 1 - _overviews/scala-book/collections-methods.md | 1 - _overviews/scala-book/command-line-io.md | 1 - _overviews/scala-book/companion-objects.md | 1 - _overviews/scala-book/concurrency-signpost.md | 1 - _overviews/scala-book/constructors-default-values.md | 1 - _overviews/scala-book/control-structures.md | 1 - _overviews/scala-book/enumerations-pizza-class.md | 1 - _overviews/scala-book/for-expressions.md | 1 - _overviews/scala-book/for-loops.md | 1 - _overviews/scala-book/functional-error-handling.md | 1 - _overviews/scala-book/functional-programming.md | 1 - _overviews/scala-book/futures.md | 1 - _overviews/scala-book/hello-world-1.md | 1 - _overviews/scala-book/hello-world-2.md | 1 - _overviews/scala-book/if-then-else-construct.md | 1 - _overviews/scala-book/list-class.md | 1 - _overviews/scala-book/map-class.md | 1 - _overviews/scala-book/match-expressions.md | 1 - _overviews/scala-book/methods-first-look.md | 1 - _overviews/scala-book/misc.md | 1 - _overviews/scala-book/no-null-values.md | 1 - _overviews/scala-book/oop-pizza-example.md | 1 - _overviews/scala-book/passing-functions-around.md | 1 - _overviews/scala-book/preliminaries.md | 1 - _overviews/scala-book/prelude-taste-of-scala.md | 1 - _overviews/scala-book/pure-functions.md | 1 - _overviews/scala-book/sbt-scalatest-bdd.md | 1 - _overviews/scala-book/sbt-scalatest-intro.md | 1 - _overviews/scala-book/sbt-scalatest-tdd.md | 1 - _overviews/scala-book/scala-build-tool-sbt.md | 1 - _overviews/scala-book/scala-features.md | 1 - _overviews/scala-book/scala-repl.md | 1 - _overviews/scala-book/set-class.md | 1 - _overviews/scala-book/traits-abstract-mixins.md | 1 - _overviews/scala-book/traits-interfaces.md | 1 - _overviews/scala-book/traits-intro.md | 1 - _overviews/scala-book/try-catch-finally.md | 1 - _overviews/scala-book/tuples.md | 1 - _overviews/scala-book/two-notes-about-strings.md | 1 - _overviews/scala-book/two-types-variables.md | 1 - _overviews/scala-book/type-is-optional.md | 1 - _overviews/scala-book/vector-class.md | 1 - _overviews/scala-book/where-next.md | 1 - _overviews/scaladoc/contribute.md | 5 ----- _overviews/scaladoc/generate.md | 5 ----- _ru/overviews/collections-2.13/arrays.md | 5 ----- .../concrete-immutable-collection-classes.md | 6 ------ .../collections-2.13/concrete-mutable-collection-classes.md | 6 ------ .../conversions-between-java-and-scala-collections.md | 6 ------ .../collections-2.13/creating-collections-from-scratch.md | 6 ------ _ru/overviews/collections-2.13/equality.md | 6 ------ _ru/overviews/collections-2.13/introduction.md | 6 ------ _ru/overviews/collections-2.13/iterators.md | 6 ------ _ru/overviews/collections-2.13/maps.md | 6 ------ _ru/overviews/collections-2.13/overview.md | 6 ------ .../collections-2.13/performance-characteristics.md | 6 ------ _ru/overviews/collections-2.13/seqs.md | 6 ------ _ru/overviews/collections-2.13/sets.md | 6 ------ _ru/overviews/collections-2.13/strings.md | 6 ------ _ru/overviews/collections-2.13/trait-iterable.md | 6 ------ _ru/overviews/collections-2.13/views.md | 6 ------ _ru/overviews/collections/introduction.md | 5 ----- _ru/overviews/parallel-collections/architecture.md | 3 --- .../parallel-collections/concrete-parallel-collections.md | 4 ---- _ru/overviews/parallel-collections/configuration.md | 4 ---- _ru/overviews/parallel-collections/conversions.md | 4 ---- _ru/overviews/parallel-collections/ctries.md | 4 ---- .../parallel-collections/custom-parallel-collections.md | 4 ---- _ru/overviews/parallel-collections/overview.md | 4 ---- _ru/overviews/parallel-collections/performance.md | 4 ---- _ru/tour/abstract-type-members.md | 4 ---- _ru/tour/annotations.md | 5 ----- _ru/tour/automatic-closures.md | 2 -- _ru/tour/basics.md | 5 ----- _ru/tour/by-name-parameters.md | 5 ----- _ru/tour/case-classes.md | 5 ----- _ru/tour/classes.md | 5 ----- _ru/tour/compound-types.md | 5 ----- _ru/tour/default-parameter-values.md | 5 ----- _ru/tour/extractor-objects.md | 5 ----- _ru/tour/for-comprehensions.md | 5 ----- _ru/tour/generic-classes.md | 5 ----- _ru/tour/higher-order-functions.md | 5 ----- _ru/tour/implicit-conversions.md | 5 ----- _ru/tour/implicit-parameters.md | 5 ----- _ru/tour/inner-classes.md | 5 ----- _ru/tour/lower-type-bounds.md | 5 ----- _ru/tour/mixin-class-composition.md | 5 ----- _ru/tour/multiple-parameter-lists.md | 5 ----- _ru/tour/named-arguments.md | 5 ----- _ru/tour/nested-functions.md | 5 ----- _ru/tour/operators.md | 5 ----- _ru/tour/package-objects.md | 4 ---- _ru/tour/packages-and-imports.md | 4 ---- _ru/tour/pattern-matching.md | 5 ----- _ru/tour/polymorphic-methods.md | 5 ----- _ru/tour/regular-expression-patterns.md | 5 ----- _ru/tour/self-types.md | 5 ----- _ru/tour/singleton-objects.md | 4 ---- _ru/tour/tour-of-scala.md | 4 ---- _ru/tour/traits.md | 5 ----- _ru/tour/tuples.md | 5 ----- _ru/tour/type-inference.md | 4 ---- _ru/tour/unified-types.md | 5 ----- _ru/tour/upper-type-bounds.md | 4 ---- _ru/tour/variances.md | 5 ----- 153 files changed, 544 deletions(-) diff --git a/_ja/tour/abstract-type-members.md b/_ja/tour/abstract-type-members.md index 2f480833bf..af08eb5c2b 100644 --- a/_ja/tour/abstract-type-members.md +++ b/_ja/tour/abstract-type-members.md @@ -2,16 +2,12 @@ layout: tour title: 抽象型メンバー language: ja - -discourse: true - partof: scala-tour num: 23 next-page: compound-types previous-page: inner-classes topics: abstract type members prerequisite-knowledge: variance, upper-type-bound - --- トレイトや抽象クラスのような抽象型は抽象型メンバーを持つことができます。 diff --git a/_ja/tour/annotations.md b/_ja/tour/annotations.md index d0fad2e82a..90545140fc 100644 --- a/_ja/tour/annotations.md +++ b/_ja/tour/annotations.md @@ -2,15 +2,10 @@ layout: tour title: アノテーション language: ja - -discourse: true - partof: scala-tour - num: 32 next-page: packages-and-imports previous-page: by-name-parameters - --- アノテーションはメタ情報と定義を関連づけます。例えば、メソッドの前のアノテーション`@deprecated`はメソッドが使われたらコンパイラに警告を出力させます。 diff --git a/_ja/tour/automatic-closures.md b/_ja/tour/automatic-closures.md index 3b38e98178..0ba4911aa2 100644 --- a/_ja/tour/automatic-closures.md +++ b/_ja/tour/automatic-closures.md @@ -2,9 +2,6 @@ layout: tour title: 型依存クロージャの自動構築 language: ja - -discourse: true - partof: scala-tour --- diff --git a/_ja/tour/basics.md b/_ja/tour/basics.md index b2b06317bb..09c7033f3a 100644 --- a/_ja/tour/basics.md +++ b/_ja/tour/basics.md @@ -2,15 +2,10 @@ layout: tour title: 基本 language: ja - -discourse: true - partof: scala-tour - num: 2 next-page: unified-types previous-page: tour-of-scala - --- このページでは、Scalaの基本を取り扱います。 diff --git a/_ja/tour/by-name-parameters.md b/_ja/tour/by-name-parameters.md index c3494f5634..b88f6dd617 100644 --- a/_ja/tour/by-name-parameters.md +++ b/_ja/tour/by-name-parameters.md @@ -2,15 +2,10 @@ layout: tour title: 名前渡しパラメータ language: ja - -discourse: true - partof: scala-tour - num: 31 next-page: annotations previous-page: operators - --- *名前渡しのパラメータ*は使用された時に評価されます。それらは*値渡しパラメータ*とは対照的です。名前渡しのパラメータを作るには、単純に`=>`を型の前につけます。 diff --git a/_ja/tour/case-classes.md b/_ja/tour/case-classes.md index 65cce59c9b..2015b843c1 100644 --- a/_ja/tour/case-classes.md +++ b/_ja/tour/case-classes.md @@ -2,16 +2,11 @@ layout: tour title: ケースクラス language: ja - -discourse: true - partof: scala-tour - num: 11 next-page: pattern-matching previous-page: multiple-parameter-lists prerequisite-knowledge: classes, basics, mutability - --- ケースクラスはこれから論じるいくつかの差異はあるものの普通のクラスと似ています。 diff --git a/_ja/tour/classes.md b/_ja/tour/classes.md index e594b4ea37..74bd6c6997 100644 --- a/_ja/tour/classes.md +++ b/_ja/tour/classes.md @@ -2,17 +2,12 @@ layout: tour title: クラス language: ja - -discourse: true - partof: scala-tour - num: 4 next-page: traits previous-page: unified-types topics: classes prerequisite-knowledge: no-return-keyword, type-declaration-syntax, string-interpolation, procedures - --- Scalaにおけるクラスはオブジェクトを作るための設計図です。 diff --git a/_ja/tour/compound-types.md b/_ja/tour/compound-types.md index 60be4af3c3..2137ecc432 100644 --- a/_ja/tour/compound-types.md +++ b/_ja/tour/compound-types.md @@ -2,15 +2,10 @@ layout: tour title: 複合型 language: ja - -discourse: true - partof: scala-tour - num: 24 next-page: self-types previous-page: abstract-type-members - --- ときどき、あるオブジェクトの型が、複数の他の型のサブタイプであると表現する必要が生じます。 Scalaでは、これは*複合型*を用いて表現できます。複合型とはオブジェクトの型同士を重ねることです。 diff --git a/_ja/tour/default-parameter-values.md b/_ja/tour/default-parameter-values.md index 1e03cebe50..499f543566 100644 --- a/_ja/tour/default-parameter-values.md +++ b/_ja/tour/default-parameter-values.md @@ -2,16 +2,11 @@ layout: tour title: デフォルト引数 language: ja - -discourse: true - partof: scala-tour - num: 33 next-page: named-arguments previous-page: annotations prerequisite-knowledge: named-arguments, function syntax - --- Scalaはパラメータのデフォルト値を与えることができ、呼び出す側はこれらのパラメータを省略できます。 diff --git a/_ja/tour/extractor-objects.md b/_ja/tour/extractor-objects.md index ba4603a3fa..6dac1d2209 100644 --- a/_ja/tour/extractor-objects.md +++ b/_ja/tour/extractor-objects.md @@ -2,15 +2,10 @@ layout: tour title: 抽出子オブジェクト language: ja - -discourse: true - partof: scala-tour - num: 16 next-page: for-comprehensions previous-page: regular-expression-patterns - --- 抽出子オブジェクトは`unapply`メソッドを持つオブジェクトです。 diff --git a/_ja/tour/for-comprehensions.md b/_ja/tour/for-comprehensions.md index c673135b2b..1600904350 100644 --- a/_ja/tour/for-comprehensions.md +++ b/_ja/tour/for-comprehensions.md @@ -2,15 +2,10 @@ layout: tour title: for内包表記 language: ja - -discourse: true - partof: scala-tour - num: 17 next-page: generic-classes previous-page: extractor-objects - --- Scalaは*シーケンス内包表記*を表現するための軽量な記法を提供します。 diff --git a/_ja/tour/generic-classes.md b/_ja/tour/generic-classes.md index 2de82cc5ce..ad944b8b39 100644 --- a/_ja/tour/generic-classes.md +++ b/_ja/tour/generic-classes.md @@ -2,16 +2,11 @@ layout: tour title: ジェネリッククラス language: ja - -discourse: true - partof: scala-tour - num: 18 next-page: variances previous-page: for-comprehensions assumed-knowledge: classes unified-types - --- ジェネリッククラスはパラメータとして型を1つ受け取るクラスです。それらはコレクションクラスで特に役立ちます。 diff --git a/_ja/tour/higher-order-functions.md b/_ja/tour/higher-order-functions.md index 1740d1ba3d..773ca7170b 100644 --- a/_ja/tour/higher-order-functions.md +++ b/_ja/tour/higher-order-functions.md @@ -2,15 +2,10 @@ layout: tour title: 高階関数 language: ja - -discourse: true - partof: scala-tour - num: 8 next-page: nested-functions previous-page: mixin-class-composition - --- 高階関数は他の関数をパラメーターとして受け取る、もしくは結果として関数を返します。 diff --git a/_ja/tour/implicit-conversions.md b/_ja/tour/implicit-conversions.md index 8ee5a23069..d4de2375f3 100644 --- a/_ja/tour/implicit-conversions.md +++ b/_ja/tour/implicit-conversions.md @@ -2,15 +2,10 @@ layout: tour title: 暗黙の変換 language: ja - -discourse: true - partof: scala-tour - num: 27 next-page: polymorphic-methods previous-page: implicit-parameters - --- 型`S`から型`T`への暗黙の変換は`S => T`という型のimplicit値や、その型に一致するimplicitメソッドで定義されます。 diff --git a/_ja/tour/implicit-parameters.md b/_ja/tour/implicit-parameters.md index 30ff6028df..db43cd76fc 100644 --- a/_ja/tour/implicit-parameters.md +++ b/_ja/tour/implicit-parameters.md @@ -2,15 +2,10 @@ layout: tour title: 暗黙のパラメータ language: ja - -discourse: true - partof: scala-tour - num: 26 next-page: implicit-conversions previous-page: self-types - --- メソッドは _暗黙の_ パラメータのリストを持つことができ、パラメータリストの先頭には _implicit_ キーワードで印をつけます。 diff --git a/_ja/tour/inner-classes.md b/_ja/tour/inner-classes.md index 5d38b1f1f6..2bc8ecf450 100644 --- a/_ja/tour/inner-classes.md +++ b/_ja/tour/inner-classes.md @@ -2,15 +2,10 @@ layout: tour title: 内部クラス language: ja - -discourse: true - partof: scala-tour - num: 22 next-page: abstract-type-members previous-page: lower-type-bounds - --- Scalaではクラスが他のクラスをメンバーとして保持することが可能です。 diff --git a/_ja/tour/lower-type-bounds.md b/_ja/tour/lower-type-bounds.md index 62a15447d3..e72a3773f8 100644 --- a/_ja/tour/lower-type-bounds.md +++ b/_ja/tour/lower-type-bounds.md @@ -2,16 +2,11 @@ layout: tour title: 下限型境界 language: ja - -discourse: true - partof: scala-tour - num: 21 next-page: inner-classes previous-page: upper-type-bounds prerequisite-knowledge: upper-type-bounds, generics, variance - --- [上限型境界](upper-type-bounds.html) は型を別の型のサブタイプに制限しますが、*下限型境界*は型が別の型のスーパータイプであることを宣言します。表現`B >: A`はパラメータ`B`または抽象型`B`が型`A`のスーパータイプであることを表します。ほとんどのケースで`A`はそのクラスの型パラメータであり、`B`はメソッドの型パラメータになります。 diff --git a/_ja/tour/mixin-class-composition.md b/_ja/tour/mixin-class-composition.md index 8b4e26067e..f95ab54cb9 100644 --- a/_ja/tour/mixin-class-composition.md +++ b/_ja/tour/mixin-class-composition.md @@ -2,16 +2,11 @@ layout: tour title: ミックスインを用いたクラス合成 language: ja - -discourse: true - partof: scala-tour - num: 7 next-page: higher-order-functions previous-page: tuples prerequisite-knowledge: inheritance, traits, abstract-classes, unified-types - --- ミックスインはクラスを構成するのに使われるトレイトです。 diff --git a/_ja/tour/multiple-parameter-lists.md b/_ja/tour/multiple-parameter-lists.md index ff267531b8..c9b70ec998 100644 --- a/_ja/tour/multiple-parameter-lists.md +++ b/_ja/tour/multiple-parameter-lists.md @@ -2,15 +2,10 @@ layout: tour title: 複数パラメータリスト(カリー化) language: ja - -discourse: true - partof: scala-tour - num: 10 next-page: case-classes previous-page: nested-functions - --- メソッドは複数のパラメータリストを持てます。 diff --git a/_ja/tour/named-arguments.md b/_ja/tour/named-arguments.md index 8ce70335a9..88bc231fda 100644 --- a/_ja/tour/named-arguments.md +++ b/_ja/tour/named-arguments.md @@ -2,16 +2,11 @@ layout: tour title: 名前付き引数 language: ja - -discourse: true - partof: scala-tour - num: 34 next-page: packages-and-imports previous-page: default-parameter-values prerequisite-knowledge: function-syntax - --- メソッドを呼ぶ時、以下のように引数にパラメータ名でラベル付が可能です。 diff --git a/_ja/tour/nested-functions.md b/_ja/tour/nested-functions.md index 9701e421cc..9fa581bc3e 100644 --- a/_ja/tour/nested-functions.md +++ b/_ja/tour/nested-functions.md @@ -2,15 +2,10 @@ layout: tour title: ネストしたメソッド language: ja - -discourse: true - partof: scala-tour - num: 9 next-page: multiple-parameter-lists previous-page: higher-order-functions - --- Scalaではメソッドの定義をネストする(_訳注:入れ子にする_)ことができます。 diff --git a/_ja/tour/operators.md b/_ja/tour/operators.md index 7df5800aa1..398790b4e0 100644 --- a/_ja/tour/operators.md +++ b/_ja/tour/operators.md @@ -2,16 +2,11 @@ layout: tour title: 演算子 language: ja - -discourse: true - partof: scala-tour - num: 30 next-page: by-name-parameters previous-page: type-inference prerequisite-knowledge: case-classes - --- Scalaでは演算子はメソッドです。パラメータを1つだけ持つメソッドであれば*中置演算子*として使えます。例えば、`+`はドット記法で呼び出せます。 diff --git a/_ja/tour/package-objects.md b/_ja/tour/package-objects.md index 755935d3ef..f2ed9b1d89 100644 --- a/_ja/tour/package-objects.md +++ b/_ja/tour/package-objects.md @@ -2,11 +2,7 @@ layout: tour title: パッケージオブジェクト language: ja - -discourse: true - partof: scala-tour - num: 36 previous-page: packages-and-imports --- diff --git a/_ja/tour/packages-and-imports.md b/_ja/tour/packages-and-imports.md index 8e44239b05..4e94731644 100644 --- a/_ja/tour/packages-and-imports.md +++ b/_ja/tour/packages-and-imports.md @@ -2,11 +2,7 @@ layout: tour title: パッケージとインポート language: ja - -discourse: true - partof: scala-tour - num: 35 previous-page: named-arguments next-page: package-objects diff --git a/_ja/tour/pattern-matching.md b/_ja/tour/pattern-matching.md index 9e1f5d9692..23c997ca91 100644 --- a/_ja/tour/pattern-matching.md +++ b/_ja/tour/pattern-matching.md @@ -2,17 +2,11 @@ layout: tour title: パターンマッチング language: ja - -discourse: true - partof: scala-tour - num: 12 - next-page: singleton-objects previous-page: case-classes prerequisite-knowledge: case-classes, string-interpolation, subtyping - --- パターンマッチングは値をパターンに照合するための仕組みです。 diff --git a/_ja/tour/polymorphic-methods.md b/_ja/tour/polymorphic-methods.md index 6143ef2612..4bab5f63bd 100644 --- a/_ja/tour/polymorphic-methods.md +++ b/_ja/tour/polymorphic-methods.md @@ -2,17 +2,11 @@ layout: tour title: ポリモーフィックメソッド language: ja - -discourse: true - partof: scala-tour - num: 28 - next-page: type-inference previous-page: implicit-conversions prerequisite-knowledge: unified-types - --- Scalaのメソッドは値と同様に型によってパラメータ化することができます。構文はジェネリッククラスの構文と似ています。 diff --git a/_ja/tour/regular-expression-patterns.md b/_ja/tour/regular-expression-patterns.md index 05882529c0..79cf565c9f 100644 --- a/_ja/tour/regular-expression-patterns.md +++ b/_ja/tour/regular-expression-patterns.md @@ -2,16 +2,10 @@ layout: tour title: 正規表現パターン language: ja - -discourse: true - partof: scala-tour - num: 15 - next-page: extractor-objects previous-page: singleton-objects - --- 正規表現はデータの中からパターン(またはその欠如)を探すために使うことができる文字列です。 どんな文字列も`.r`メソッドを使うことで、正規表現に変換できます。 diff --git a/_ja/tour/self-types.md b/_ja/tour/self-types.md index cb585dc09e..7ffa6745ec 100644 --- a/_ja/tour/self-types.md +++ b/_ja/tour/self-types.md @@ -2,17 +2,12 @@ layout: tour title: 自分型 language: ja - -discourse: true - partof: scala-tour - num: 25 next-page: implicit-parameters previous-page: compound-types topics: self-types prerequisite-knowledge: nested-classes, mixin-class-composition - --- 自分型は、直接継承していなくてもトレイトが他のトレイトにミックスインされていることを宣言する方法です。 これにより依存先のメンバーをimportなしで利用できます。 diff --git a/_ja/tour/singleton-objects.md b/_ja/tour/singleton-objects.md index 69ce1aeede..0414291909 100644 --- a/_ja/tour/singleton-objects.md +++ b/_ja/tour/singleton-objects.md @@ -2,13 +2,8 @@ layout: tour title: シングルトンオブジェクト language: ja - -discourse: true - partof: scala-tour - num: 13 - next-page: regular-expression-patterns previous-page: pattern-matching prerequisite-knowledge: classes, methods, private-methods, packages, option diff --git a/_ja/tour/tour-of-scala.md b/_ja/tour/tour-of-scala.md index ff2d026686..9e5d2b9860 100644 --- a/_ja/tour/tour-of-scala.md +++ b/_ja/tour/tour-of-scala.md @@ -2,15 +2,9 @@ layout: tour title: 前書き language: ja - -discourse: true - partof: scala-tour - num: 1 - next-page: basics - --- ## ようこそツアーへ diff --git a/_ja/tour/traits.md b/_ja/tour/traits.md index 81b7dc7046..1738b0fc0d 100644 --- a/_ja/tour/traits.md +++ b/_ja/tour/traits.md @@ -2,17 +2,12 @@ layout: tour title: トレイト language: ja - -discourse: true - partof: scala-tour - num: 5 next-page: tuples previous-page: classes topics: traits prerequisite-knowledge: expressions, classes, generics, objects, companion-objects - --- トレイトはクラス間でインターフェースとフィールドを共有するために使います。それらはJava 8のインターフェースと似ています。 diff --git a/_ja/tour/tuples.md b/_ja/tour/tuples.md index 7729138914..e3c2f1e0f7 100644 --- a/_ja/tour/tuples.md +++ b/_ja/tour/tuples.md @@ -2,16 +2,11 @@ layout: tour title: タプル language: ja - -discourse: true - partof: scala-tour - num: 6 next-page: mixin-class-composition previous-page: traits topics: tuples - --- Scalaではタプルは決まった数の要素を含む値であり、各要素はそれぞれの型を持ちます。 diff --git a/_ja/tour/type-inference.md b/_ja/tour/type-inference.md index 2db0e440b9..5973da20a2 100644 --- a/_ja/tour/type-inference.md +++ b/_ja/tour/type-inference.md @@ -2,11 +2,7 @@ layout: tour title: 型推論 language: ja - -discourse: true - partof: scala-tour - num: 29 next-page: operators previous-page: polymorphic-methods diff --git a/_ja/tour/unified-types.md b/_ja/tour/unified-types.md index 8f9710b62a..a12895c677 100644 --- a/_ja/tour/unified-types.md +++ b/_ja/tour/unified-types.md @@ -2,16 +2,11 @@ layout: tour title: 統合された型 language: ja - -discourse: true - partof: scala-tour - num: 3 next-page: classes previous-page: basics prerequisite-knowledge: classes, basics - --- Scalaでは数値や関数を含め、全ての値は型を持ちます。 以下の図は型階層の一部を説明しています。 diff --git a/_ja/tour/upper-type-bounds.md b/_ja/tour/upper-type-bounds.md index 7d8ac4df9a..8dfe6ca8ac 100644 --- a/_ja/tour/upper-type-bounds.md +++ b/_ja/tour/upper-type-bounds.md @@ -2,15 +2,11 @@ layout: tour title: 上限型境界 language: ja - -discourse: true - partof: scala-tour categories: tour num: 20 next-page: lower-type-bounds previous-page: variances - --- Scalaでは [型パラメータ](generic-classes.html)と[抽象型メンバー](abstract-type-members.html) は型境界による制約をかけることができます。 diff --git a/_ja/tour/variances.md b/_ja/tour/variances.md index c7eb10304e..314f8c2e48 100644 --- a/_ja/tour/variances.md +++ b/_ja/tour/variances.md @@ -2,15 +2,10 @@ layout: tour title: 変位指定 language: ja - -discourse: true - partof: scala-tour - num: 19 next-page: upper-type-bounds previous-page: generic-classes - --- 変位指定は複合型の間の継承関係とそれらの型パラメータ間の継承関係の相関です。 diff --git a/_ja/tutorials/scala-for-java-programmers.md b/_ja/tutorials/scala-for-java-programmers.md index b49113ff72..a2076100b1 100644 --- a/_ja/tutorials/scala-for-java-programmers.md +++ b/_ja/tutorials/scala-for-java-programmers.md @@ -1,10 +1,7 @@ --- layout: singlepage-overview title: JavaプログラマーのためのScalaチュートリアル - partof: scala-for-java-programmers - -discourse: false language: ja --- diff --git a/_overviews/scala-book/abstract-classes.md b/_overviews/scala-book/abstract-classes.md index a5ec3b96fa..ed8dc3b147 100644 --- a/_overviews/scala-book/abstract-classes.md +++ b/_overviews/scala-book/abstract-classes.md @@ -5,7 +5,6 @@ title: Abstract Classes description: This page shows how to use abstract classes, including when and why you should use abstract classes. partof: scala_book overview-name: Scala Book -discourse: true num: 27 outof: 54 previous-page: traits-abstract-mixins diff --git a/_overviews/scala-book/anonymous-functions.md b/_overviews/scala-book/anonymous-functions.md index bbd7bc8d8d..de9c9ebd14 100644 --- a/_overviews/scala-book/anonymous-functions.md +++ b/_overviews/scala-book/anonymous-functions.md @@ -5,7 +5,6 @@ title: Anonymous Functions description: This page shows how to use anonymous functions in Scala, including examples with the List class 'map' and 'filter' functions. partof: scala_book overview-name: Scala Book -discourse: true num: 34 outof: 54 previous-page: set-class diff --git a/_overviews/scala-book/arraybuffer-examples.md b/_overviews/scala-book/arraybuffer-examples.md index 8d4dd8ef53..1f0206e58f 100644 --- a/_overviews/scala-book/arraybuffer-examples.md +++ b/_overviews/scala-book/arraybuffer-examples.md @@ -5,7 +5,6 @@ title: The ArrayBuffer Class description: This page provides examples of how to use the Scala ArrayBuffer class, including adding and removing elements. partof: scala_book overview-name: Scala Book -discourse: true num: 29 outof: 54 previous-page: collections-101 diff --git a/_overviews/scala-book/built-in-types.md b/_overviews/scala-book/built-in-types.md index 209b1b8f0b..1567d13970 100644 --- a/_overviews/scala-book/built-in-types.md +++ b/_overviews/scala-book/built-in-types.md @@ -5,7 +5,6 @@ title: A Few Built-In Types description: A brief introduction to Scala's built-in types. partof: scala_book overview-name: Scala Book -discourse: true num: 10 outof: 54 previous-page: type-is-optional diff --git a/_overviews/scala-book/case-classes.md b/_overviews/scala-book/case-classes.md index 8722d4c5ae..33db4a9a7f 100644 --- a/_overviews/scala-book/case-classes.md +++ b/_overviews/scala-book/case-classes.md @@ -5,7 +5,6 @@ title: Case Classes description: This lesson provides an introduction to 'case classes' in Scala. partof: scala_book overview-name: Scala Book -discourse: true num: 49 outof: 54 previous-page: companion-objects diff --git a/_overviews/scala-book/case-objects.md b/_overviews/scala-book/case-objects.md index 1b7426f12a..ca6a5f155a 100644 --- a/_overviews/scala-book/case-objects.md +++ b/_overviews/scala-book/case-objects.md @@ -5,7 +5,6 @@ title: Case Objects description: This lesson introduces Scala 'case objects', which are used to create singletons with a few additional features. partof: scala_book overview-name: Scala Book -discourse: true num: 50 outof: 54 previous-page: case-classes diff --git a/_overviews/scala-book/classes-aux-constructors.md b/_overviews/scala-book/classes-aux-constructors.md index a66a4b4d80..d3af412a53 100644 --- a/_overviews/scala-book/classes-aux-constructors.md +++ b/_overviews/scala-book/classes-aux-constructors.md @@ -5,7 +5,6 @@ title: Auxiliary Class Constructors description: This page shows how to write auxiliary Scala class constructors, including several examples of the syntax. partof: scala_book overview-name: Scala Book -discourse: true num: 20 outof: 54 previous-page: classes diff --git a/_overviews/scala-book/classes.md b/_overviews/scala-book/classes.md index bc4fe65b66..c4861bc7c2 100644 --- a/_overviews/scala-book/classes.md +++ b/_overviews/scala-book/classes.md @@ -5,7 +5,6 @@ title: Scala Classes description: This page shows examples of how to create Scala classes, including the basic Scala class constructor. partof: scala_book overview-name: Scala Book -discourse: true num: 19 outof: 54 previous-page: try-catch-finally diff --git a/_overviews/scala-book/collections-101.md b/_overviews/scala-book/collections-101.md index 6df136b528..b98a72d116 100644 --- a/_overviews/scala-book/collections-101.md +++ b/_overviews/scala-book/collections-101.md @@ -5,7 +5,6 @@ title: Scala Collections description: This page provides an introduction to the Scala collections classes, including Vector, List, ArrayBuffer, Map, Set, and more. partof: scala_book overview-name: Scala Book -discourse: true num: 28 outof: 54 previous-page: abstract-classes diff --git a/_overviews/scala-book/collections-maps.md b/_overviews/scala-book/collections-maps.md index 95e890bbc3..84a9f065c4 100644 --- a/_overviews/scala-book/collections-maps.md +++ b/_overviews/scala-book/collections-maps.md @@ -5,7 +5,6 @@ title: Common Map Methods description: This page shows examples of the most common methods that are available on Scala Maps. partof: scala_book overview-name: Scala Book -discourse: true num: 36 outof: 54 previous-page: collections-methods diff --git a/_overviews/scala-book/collections-methods.md b/_overviews/scala-book/collections-methods.md index 7bd8d9a15a..e888179940 100644 --- a/_overviews/scala-book/collections-methods.md +++ b/_overviews/scala-book/collections-methods.md @@ -5,7 +5,6 @@ title: Common Sequence Methods description: This page shows examples of the most common methods that are available on the Scala sequences (collections classes). partof: scala_book overview-name: Scala Book -discourse: true num: 35 outof: 54 previous-page: anonymous-functions diff --git a/_overviews/scala-book/command-line-io.md b/_overviews/scala-book/command-line-io.md index ffb35f698e..14bf2901af 100644 --- a/_overviews/scala-book/command-line-io.md +++ b/_overviews/scala-book/command-line-io.md @@ -5,7 +5,6 @@ title: Command-Line I/O description: An introduction to command-line I/O in Scala. partof: scala_book overview-name: Scala Book -discourse: true num: 12 outof: 54 previous-page: two-notes-about-strings diff --git a/_overviews/scala-book/companion-objects.md b/_overviews/scala-book/companion-objects.md index 6babb21eb9..f024a8a2d5 100644 --- a/_overviews/scala-book/companion-objects.md +++ b/_overviews/scala-book/companion-objects.md @@ -5,7 +5,6 @@ title: Companion Objects description: This lesson provides an introduction to 'companion objects' in Scala, including writing 'apply' and 'unapply' methods. partof: scala_book overview-name: Scala Book -discourse: true num: 48 outof: 54 previous-page: no-null-values diff --git a/_overviews/scala-book/concurrency-signpost.md b/_overviews/scala-book/concurrency-signpost.md index 1629700299..d3435c4ede 100644 --- a/_overviews/scala-book/concurrency-signpost.md +++ b/_overviews/scala-book/concurrency-signpost.md @@ -5,7 +5,6 @@ title: Concurrency description: An introduction to concurrency in Scala. partof: scala_book overview-name: Scala Book -discourse: true num: 52 outof: 54 previous-page: functional-error-handling diff --git a/_overviews/scala-book/constructors-default-values.md b/_overviews/scala-book/constructors-default-values.md index aa4429305e..b54da93584 100644 --- a/_overviews/scala-book/constructors-default-values.md +++ b/_overviews/scala-book/constructors-default-values.md @@ -5,7 +5,6 @@ title: Supplying Default Values for Constructor Parameters description: This page shows how to provide default values for Scala constructor parameters, with several examples. partof: scala_book overview-name: Scala Book -discourse: true num: 21 outof: 54 previous-page: classes-aux-constructors diff --git a/_overviews/scala-book/control-structures.md b/_overviews/scala-book/control-structures.md index 813a05face..9d21b18eb3 100644 --- a/_overviews/scala-book/control-structures.md +++ b/_overviews/scala-book/control-structures.md @@ -5,7 +5,6 @@ title: Control Structures description: This page provides an introduction to Scala's control structures, including if/then/else, for loops, try/catch/finally, etc. partof: scala_book overview-name: Scala Book -discourse: true num: 13 outof: 54 previous-page: command-line-io diff --git a/_overviews/scala-book/enumerations-pizza-class.md b/_overviews/scala-book/enumerations-pizza-class.md index 31625129f0..d4052378bb 100644 --- a/_overviews/scala-book/enumerations-pizza-class.md +++ b/_overviews/scala-book/enumerations-pizza-class.md @@ -5,7 +5,6 @@ title: Enumerations (and a Complete Pizza Class) description: This page introduces Scala enumerations, and further shows how to create a complete OOP 'Pizza' class that uses those enumerations. partof: scala_book overview-name: Scala Book -discourse: true num: 23 outof: 54 previous-page: methods-first-look diff --git a/_overviews/scala-book/for-expressions.md b/_overviews/scala-book/for-expressions.md index 7977777872..4cd666ef42 100644 --- a/_overviews/scala-book/for-expressions.md +++ b/_overviews/scala-book/for-expressions.md @@ -5,7 +5,6 @@ title: for Expressions description: This page shows how to use Scala 'for' expressions (also known as 'for-expressions'), including examples of how to use it with the 'yield' keyword. partof: scala_book overview-name: Scala Book -discourse: true num: 16 outof: 54 previous-page: for-loops diff --git a/_overviews/scala-book/for-loops.md b/_overviews/scala-book/for-loops.md index 5eef6cc279..ef382270f2 100644 --- a/_overviews/scala-book/for-loops.md +++ b/_overviews/scala-book/for-loops.md @@ -5,7 +5,6 @@ title: for Loops description: This page provides an introduction to the Scala 'for' loop, including how to iterate over Scala collections. partof: scala_book overview-name: Scala Book -discourse: true num: 15 outof: 54 previous-page: if-then-else-construct diff --git a/_overviews/scala-book/functional-error-handling.md b/_overviews/scala-book/functional-error-handling.md index 00a448ccc0..8e779a2bc2 100644 --- a/_overviews/scala-book/functional-error-handling.md +++ b/_overviews/scala-book/functional-error-handling.md @@ -5,7 +5,6 @@ title: Functional Error Handling in Scala description: This lesson takes a look at error handling with functional programming in Scala. partof: scala_book overview-name: Scala Book -discourse: true num: 51 outof: 54 previous-page: case-objects diff --git a/_overviews/scala-book/functional-programming.md b/_overviews/scala-book/functional-programming.md index aa0581cf87..dee9cc4533 100644 --- a/_overviews/scala-book/functional-programming.md +++ b/_overviews/scala-book/functional-programming.md @@ -5,7 +5,6 @@ title: Functional Programming description: This lesson begins a second on 'An introduction to functional programming in Scala'. partof: scala_book overview-name: Scala Book -discourse: true num: 44 outof: 54 previous-page: sbt-scalatest-bdd diff --git a/_overviews/scala-book/futures.md b/_overviews/scala-book/futures.md index 9324b0ddf9..e585ff2819 100644 --- a/_overviews/scala-book/futures.md +++ b/_overviews/scala-book/futures.md @@ -5,7 +5,6 @@ title: Scala Futures description: This page provides an introduction to Futures in Scala, including Future callback methods. partof: scala_book overview-name: Scala Book -discourse: true num: 53 outof: 54 previous-page: concurrency-signpost diff --git a/_overviews/scala-book/hello-world-1.md b/_overviews/scala-book/hello-world-1.md index c9793a2376..28aa21f19b 100644 --- a/_overviews/scala-book/hello-world-1.md +++ b/_overviews/scala-book/hello-world-1.md @@ -5,7 +5,6 @@ title: Hello, World description: This page shares a Scala 'Hello, world' example. partof: scala_book overview-name: Scala Book -discourse: true num: 5 outof: 54 previous-page: scala-features diff --git a/_overviews/scala-book/hello-world-2.md b/_overviews/scala-book/hello-world-2.md index d07b7da00f..76d1bf053c 100644 --- a/_overviews/scala-book/hello-world-2.md +++ b/_overviews/scala-book/hello-world-2.md @@ -5,7 +5,6 @@ title: Hello, World - Version 2 description: This is a second Scala 'Hello, World' example. partof: scala_book overview-name: Scala Book -discourse: true num: 6 outof: 54 previous-page: hello-world-1 diff --git a/_overviews/scala-book/if-then-else-construct.md b/_overviews/scala-book/if-then-else-construct.md index 6fd09ef879..bd720f758a 100644 --- a/_overviews/scala-book/if-then-else-construct.md +++ b/_overviews/scala-book/if-then-else-construct.md @@ -5,7 +5,6 @@ title: The if/then/else Construct description: This page demonstrates Scala's if/then/else construct, including several examples you can try in the REPL. partof: scala_book overview-name: Scala Book -discourse: true num: 14 outof: 54 previous-page: control-structures diff --git a/_overviews/scala-book/list-class.md b/_overviews/scala-book/list-class.md index 1a606afc98..0e4e324e89 100644 --- a/_overviews/scala-book/list-class.md +++ b/_overviews/scala-book/list-class.md @@ -5,7 +5,6 @@ title: The List Class description: This page provides examples of the Scala List class, including how to add and remove elements from a List. partof: scala_book overview-name: Scala Book -discourse: true num: 30 outof: 54 previous-page: arraybuffer-examples diff --git a/_overviews/scala-book/map-class.md b/_overviews/scala-book/map-class.md index 4a7d48db98..34f0824fae 100644 --- a/_overviews/scala-book/map-class.md +++ b/_overviews/scala-book/map-class.md @@ -5,7 +5,6 @@ title: The Map Class description: This page provides examples of the Scala 'Map' class, including how to add and remove elements from a Map, and iterate over Map elements. partof: scala_book overview-name: Scala Book -discourse: true num: 32 outof: 54 previous-page: vector-class diff --git a/_overviews/scala-book/match-expressions.md b/_overviews/scala-book/match-expressions.md index 4b54dfb35c..60cc0d92ae 100644 --- a/_overviews/scala-book/match-expressions.md +++ b/_overviews/scala-book/match-expressions.md @@ -5,7 +5,6 @@ title: match Expressions description: This page shows examples of the Scala 'match' expression, including how to write match/case expressions. partof: scala_book overview-name: Scala Book -discourse: true num: 17 outof: 54 previous-page: for-expressions diff --git a/_overviews/scala-book/methods-first-look.md b/_overviews/scala-book/methods-first-look.md index 7e10bdfd77..348c66f56f 100644 --- a/_overviews/scala-book/methods-first-look.md +++ b/_overviews/scala-book/methods-first-look.md @@ -5,7 +5,6 @@ title: A First Look at Scala Methods description: This page provides a first look at how to write Scala methods, including how to test them in the REPL. partof: scala_book overview-name: Scala Book -discourse: true num: 22 outof: 54 previous-page: constructors-default-values diff --git a/_overviews/scala-book/misc.md b/_overviews/scala-book/misc.md index 61c19bd1b2..07f511305c 100644 --- a/_overviews/scala-book/misc.md +++ b/_overviews/scala-book/misc.md @@ -5,7 +5,6 @@ title: A Few Miscellaneous Items description: A few miscellaneous items about Scala partof: scala_book overview-name: Scala Book -discourse: true num: 37 outof: 54 previous-page: collections-maps diff --git a/_overviews/scala-book/no-null-values.md b/_overviews/scala-book/no-null-values.md index 757fc62670..194348c246 100644 --- a/_overviews/scala-book/no-null-values.md +++ b/_overviews/scala-book/no-null-values.md @@ -5,7 +5,6 @@ title: No Null Values description: This lesson demonstrates the Scala Option, Some, and None classes, including how to use them instead of null values. partof: scala_book overview-name: Scala Book -discourse: true num: 47 outof: 54 previous-page: passing-functions-around diff --git a/_overviews/scala-book/oop-pizza-example.md b/_overviews/scala-book/oop-pizza-example.md index 7d50686e71..c70df45e3f 100644 --- a/_overviews/scala-book/oop-pizza-example.md +++ b/_overviews/scala-book/oop-pizza-example.md @@ -5,7 +5,6 @@ title: An OOP Example description: This lesson shares an example of some OOP-style classes for a pizza restaurant order entry system, including Pizza, Topping, and Order classes. partof: scala_book overview-name: Scala Book -discourse: true num: 39 outof: 54 previous-page: tuples diff --git a/_overviews/scala-book/passing-functions-around.md b/_overviews/scala-book/passing-functions-around.md index 2700ea06c7..80c6cd2f2b 100644 --- a/_overviews/scala-book/passing-functions-around.md +++ b/_overviews/scala-book/passing-functions-around.md @@ -5,7 +5,6 @@ title: Passing Functions Around description: Like a good functional programming language, Scala lets you use functions just like other variables, including passing them into other functions. partof: scala_book overview-name: Scala Book -discourse: true num: 46 outof: 54 previous-page: pure-functions diff --git a/_overviews/scala-book/preliminaries.md b/_overviews/scala-book/preliminaries.md index e8057e37d9..ac3af5ea33 100644 --- a/_overviews/scala-book/preliminaries.md +++ b/_overviews/scala-book/preliminaries.md @@ -5,7 +5,6 @@ title: Preliminaries description: A few things to know about getting started with Scala. partof: scala_book overview-name: Scala Book -discourse: true num: 3 outof: 54 previous-page: prelude-taste-of-scala diff --git a/_overviews/scala-book/prelude-taste-of-scala.md b/_overviews/scala-book/prelude-taste-of-scala.md index 1317561825..aba0111219 100644 --- a/_overviews/scala-book/prelude-taste-of-scala.md +++ b/_overviews/scala-book/prelude-taste-of-scala.md @@ -5,7 +5,6 @@ title: Prelude꞉ A Taste of Scala description: This page shares a Taste Of Scala example, quickly covering Scala's main features. partof: scala_book overview-name: Scala Book -discourse: true num: 2 outof: 54 previous-page: introduction diff --git a/_overviews/scala-book/pure-functions.md b/_overviews/scala-book/pure-functions.md index 97c6ef6fb9..5bbb4f50c2 100644 --- a/_overviews/scala-book/pure-functions.md +++ b/_overviews/scala-book/pure-functions.md @@ -5,7 +5,6 @@ title: Pure Functions description: This lesson provides an introduction to writing pure functions in Scala. partof: scala_book overview-name: Scala Book -discourse: true num: 45 outof: 54 previous-page: functional-programming diff --git a/_overviews/scala-book/sbt-scalatest-bdd.md b/_overviews/scala-book/sbt-scalatest-bdd.md index ee20a8490e..6bb134abdb 100644 --- a/_overviews/scala-book/sbt-scalatest-bdd.md +++ b/_overviews/scala-book/sbt-scalatest-bdd.md @@ -5,7 +5,6 @@ title: Writing BDD Style Tests with ScalaTest and sbt description: This lesson shows how to write ScalaTest unit tests with sbt in a behavior-driven development (TDD) style. partof: scala_book overview-name: Scala Book -discourse: true num: 43 outof: 54 previous-page: sbt-scalatest-tdd diff --git a/_overviews/scala-book/sbt-scalatest-intro.md b/_overviews/scala-book/sbt-scalatest-intro.md index bf40ba8c6c..e7f8d20bed 100644 --- a/_overviews/scala-book/sbt-scalatest-intro.md +++ b/_overviews/scala-book/sbt-scalatest-intro.md @@ -5,7 +5,6 @@ title: sbt and ScalaTest description: In this lesson we'll start to introduce sbt and ScalaTest, two tools commonly used on Scala projects. partof: scala_book overview-name: Scala Book -discourse: true num: 40 outof: 54 previous-page: oop-pizza-example diff --git a/_overviews/scala-book/sbt-scalatest-tdd.md b/_overviews/scala-book/sbt-scalatest-tdd.md index 7214566a09..724d9c1728 100644 --- a/_overviews/scala-book/sbt-scalatest-tdd.md +++ b/_overviews/scala-book/sbt-scalatest-tdd.md @@ -5,7 +5,6 @@ title: Using ScalaTest with sbt description: This lesson shows how to write ScalaTest unit tests with sbt in a test-driven development (TDD) style. partof: scala_book overview-name: Scala Book -discourse: true num: 42 outof: 54 previous-page: scala-build-tool-sbt diff --git a/_overviews/scala-book/scala-build-tool-sbt.md b/_overviews/scala-book/scala-build-tool-sbt.md index 8986433976..aefb28ecea 100644 --- a/_overviews/scala-book/scala-build-tool-sbt.md +++ b/_overviews/scala-book/scala-build-tool-sbt.md @@ -5,7 +5,6 @@ title: The most used scala build tool (sbt) description: This page provides an introduction to the Scala Build Tool, sbt, including a simple 'Hello, world' project. partof: scala_book overview-name: Scala Book -discourse: true num: 41 outof: 54 previous-page: sbt-scalatest-intro diff --git a/_overviews/scala-book/scala-features.md b/_overviews/scala-book/scala-features.md index eee55bd089..c7d7387d4a 100644 --- a/_overviews/scala-book/scala-features.md +++ b/_overviews/scala-book/scala-features.md @@ -5,7 +5,6 @@ title: Scala Features description: TODO partof: scala_book overview-name: Scala Book -discourse: true num: 4 outof: 54 previous-page: preliminaries diff --git a/_overviews/scala-book/scala-repl.md b/_overviews/scala-book/scala-repl.md index c1ced1f219..062ca12b7f 100644 --- a/_overviews/scala-book/scala-repl.md +++ b/_overviews/scala-book/scala-repl.md @@ -5,7 +5,6 @@ title: The Scala REPL description: This page shares an introduction to the Scala REPL. partof: scala_book overview-name: Scala Book -discourse: true num: 7 outof: 54 previous-page: hello-world-2 diff --git a/_overviews/scala-book/set-class.md b/_overviews/scala-book/set-class.md index 55fefb31d0..dc69cb2ae4 100644 --- a/_overviews/scala-book/set-class.md +++ b/_overviews/scala-book/set-class.md @@ -5,7 +5,6 @@ title: The Set Class description: This page provides examples of the Scala 'Set' class, including how to add and remove elements from a Set, and iterate over Set elements. partof: scala_book overview-name: Scala Book -discourse: true num: 33 outof: 54 previous-page: map-class diff --git a/_overviews/scala-book/traits-abstract-mixins.md b/_overviews/scala-book/traits-abstract-mixins.md index eeecb67aee..db3ab56d63 100644 --- a/_overviews/scala-book/traits-abstract-mixins.md +++ b/_overviews/scala-book/traits-abstract-mixins.md @@ -5,7 +5,6 @@ title: Using Scala Traits Like Abstract Classes description: This page shows how to use Scala traits just like abstract classes in Java, with examples of concrete and abstract methods. partof: scala_book overview-name: Scala Book -discourse: true num: 26 outof: 54 previous-page: traits-interfaces diff --git a/_overviews/scala-book/traits-interfaces.md b/_overviews/scala-book/traits-interfaces.md index a10ed18a61..f422f158bc 100644 --- a/_overviews/scala-book/traits-interfaces.md +++ b/_overviews/scala-book/traits-interfaces.md @@ -5,7 +5,6 @@ title: Using Scala Traits as Interfaces description: This page shows how to use Scala traits just like Java interfaces, including several examples. partof: scala_book overview-name: Scala Book -discourse: true num: 25 outof: 54 previous-page: traits-intro diff --git a/_overviews/scala-book/traits-intro.md b/_overviews/scala-book/traits-intro.md index a6d1db0f26..75656b4a64 100644 --- a/_overviews/scala-book/traits-intro.md +++ b/_overviews/scala-book/traits-intro.md @@ -5,7 +5,6 @@ title: Scala Traits and Abstract Classes description: An introduction to Scala traits and abstract classes. partof: scala_book overview-name: Scala Book -discourse: true num: 24 outof: 54 previous-page: enumerations-pizza-class diff --git a/_overviews/scala-book/try-catch-finally.md b/_overviews/scala-book/try-catch-finally.md index 5dee7890a4..607bf3fc0b 100644 --- a/_overviews/scala-book/try-catch-finally.md +++ b/_overviews/scala-book/try-catch-finally.md @@ -5,7 +5,6 @@ title: try/catch/finally Expressions description: This page shows how to use Scala's try/catch/finally construct, including several complete examples. partof: scala_book overview-name: Scala Book -discourse: true num: 18 outof: 54 previous-page: match-expressions diff --git a/_overviews/scala-book/tuples.md b/_overviews/scala-book/tuples.md index c2eb8e4225..568037274b 100644 --- a/_overviews/scala-book/tuples.md +++ b/_overviews/scala-book/tuples.md @@ -5,7 +5,6 @@ title: Tuples description: This page is an introduction to the Scala 'tuple' data type, showing examples of how to use tuples in your Scala code. partof: scala_book overview-name: Scala Book -discourse: true num: 38 outof: 54 previous-page: misc diff --git a/_overviews/scala-book/two-notes-about-strings.md b/_overviews/scala-book/two-notes-about-strings.md index fdcbd7a29a..dea6f3e643 100644 --- a/_overviews/scala-book/two-notes-about-strings.md +++ b/_overviews/scala-book/two-notes-about-strings.md @@ -5,7 +5,6 @@ title: Two Notes About Strings description: This page shares two important notes about strings in Scala. partof: scala_book overview-name: Scala Book -discourse: true num: 11 outof: 54 previous-page: built-in-types diff --git a/_overviews/scala-book/two-types-variables.md b/_overviews/scala-book/two-types-variables.md index 678c89dc3d..f369c66a87 100644 --- a/_overviews/scala-book/two-types-variables.md +++ b/_overviews/scala-book/two-types-variables.md @@ -5,7 +5,6 @@ title: Two Types of Variables description: Scala has two types of variables, val and var. partof: scala_book overview-name: Scala Book -discourse: true num: 8 outof: 54 previous-page: scala-repl diff --git a/_overviews/scala-book/type-is-optional.md b/_overviews/scala-book/type-is-optional.md index 3b21654433..0d8b0a1c93 100644 --- a/_overviews/scala-book/type-is-optional.md +++ b/_overviews/scala-book/type-is-optional.md @@ -5,7 +5,6 @@ title: The Type is Optional description: A note about explicit and implicit data type declarations in Scala. partof: scala_book overview-name: Scala Book -discourse: true num: 9 outof: 54 previous-page: two-types-variables diff --git a/_overviews/scala-book/vector-class.md b/_overviews/scala-book/vector-class.md index 15981e7904..1c17c9183c 100644 --- a/_overviews/scala-book/vector-class.md +++ b/_overviews/scala-book/vector-class.md @@ -5,7 +5,6 @@ title: The Vector Class description: This page provides examples of the Scala 'Vector' class, including how to add and remove elements from a Vector. partof: scala_book overview-name: Scala Book -discourse: true num: 31 outof: 54 previous-page: list-class diff --git a/_overviews/scala-book/where-next.md b/_overviews/scala-book/where-next.md index 4b045d7182..6bce221a97 100644 --- a/_overviews/scala-book/where-next.md +++ b/_overviews/scala-book/where-next.md @@ -5,7 +5,6 @@ title: Where To Go Next description: Where to go next after reading the Scala Book partof: scala_book overview-name: Scala Book -discourse: true num: 54 outof: 54 previous-page: futures diff --git a/_overviews/scaladoc/contribute.md b/_overviews/scaladoc/contribute.md index dc0af2ce57..0d8999574a 100644 --- a/_overviews/scaladoc/contribute.md +++ b/_overviews/scaladoc/contribute.md @@ -1,14 +1,9 @@ --- layout: multipage-overview title: Contributing to Scaladoc - -discourse: true - partof: scaladoc overview-name: Scaladoc - num: 5 - permalink: /overviews/scaladoc/:title.html --- diff --git a/_overviews/scaladoc/generate.md b/_overviews/scaladoc/generate.md index 98c0942ffe..0fbd38d533 100644 --- a/_overviews/scaladoc/generate.md +++ b/_overviews/scaladoc/generate.md @@ -1,14 +1,9 @@ --- layout: multipage-overview title: Generating Scaladoc - -discourse: true - partof: scaladoc overview-name: Scaladoc - num: 4 - permalink: /overviews/scaladoc/:title.html --- diff --git a/_ru/overviews/collections-2.13/arrays.md b/_ru/overviews/collections-2.13/arrays.md index 7e71da1027..dba3fb4e08 100644 --- a/_ru/overviews/collections-2.13/arrays.md +++ b/_ru/overviews/collections-2.13/arrays.md @@ -1,17 +1,12 @@ --- layout: multipage-overview title: Массивы - -discourse: true - partof: collections-213 overview-name: Collections - num: 10 previous-page: concrete-mutable-collection-classes next-page: strings language: ru - --- [Массивы](https://www.scala-lang.org/api/{{ site.scala-version }}/scala/Array.html) особый вид коллекций в Scala. diff --git a/_ru/overviews/collections-2.13/concrete-immutable-collection-classes.md b/_ru/overviews/collections-2.13/concrete-immutable-collection-classes.md index 6da8bcc3e1..0c6a672ae0 100644 --- a/_ru/overviews/collections-2.13/concrete-immutable-collection-classes.md +++ b/_ru/overviews/collections-2.13/concrete-immutable-collection-classes.md @@ -1,18 +1,12 @@ --- layout: multipage-overview title: Реализации Неизменяемых Коллекций - -discourse: true - partof: collections-213 overview-name: Collections - previous-page: maps next-page: concrete-mutable-collection-classes - num: 8 language: ru - --- Scala предлагает множество конечных реализаций неизменяемых коллекций. Они отличаются реализуемыми трейтами (мапы (map), множества(set), последовательности(seq)), они могут быть бесконечными, и различаются производительностью операций. Вот некоторые из наиболее распространенных неизменяемых типов коллекций, используемых в Scala. diff --git a/_ru/overviews/collections-2.13/concrete-mutable-collection-classes.md b/_ru/overviews/collections-2.13/concrete-mutable-collection-classes.md index 7152037ce9..a65910b05a 100644 --- a/_ru/overviews/collections-2.13/concrete-mutable-collection-classes.md +++ b/_ru/overviews/collections-2.13/concrete-mutable-collection-classes.md @@ -1,18 +1,12 @@ --- layout: multipage-overview title: Реализации Изменяемых Коллекций - -discourse: true - partof: collections-213 overview-name: Collections - num: 9 previous-page: concrete-immutable-collection-classes next-page: arrays - language: ru - --- Вы уже успели увидеть наиболее часто используемые неизменяемые типы коллекции, которые есть в стандартной библиотеке Scala. Настало время посмотреть на изменяемые (mutable) типы коллекции. diff --git a/_ru/overviews/collections-2.13/conversions-between-java-and-scala-collections.md b/_ru/overviews/collections-2.13/conversions-between-java-and-scala-collections.md index 2471e0121f..0320c0c59d 100644 --- a/_ru/overviews/collections-2.13/conversions-between-java-and-scala-collections.md +++ b/_ru/overviews/collections-2.13/conversions-between-java-and-scala-collections.md @@ -1,17 +1,11 @@ --- layout: multipage-overview title: Преобразования между Java и Scala коллекциями - -discourse: true - partof: collections-213 overview-name: Collections - num: 17 previous-page: creating-collections-from-scratch - language: ru - --- Как и в Scala, в Java есть богатая библиотека коллекций. Между ними много общего. Например, обе библиотеки предоставляют итераторы, итерируемые сущности, множества, мапы и списки. Но есть и серьезные различия. В частности, библиотека Scala фокусируют больше внимания на неизменяемых коллекциях, предоставляя больше возможностей для преобразования исходной коллекции в новую. diff --git a/_ru/overviews/collections-2.13/creating-collections-from-scratch.md b/_ru/overviews/collections-2.13/creating-collections-from-scratch.md index 1eacea990f..25c9cb21cf 100644 --- a/_ru/overviews/collections-2.13/creating-collections-from-scratch.md +++ b/_ru/overviews/collections-2.13/creating-collections-from-scratch.md @@ -1,18 +1,12 @@ --- layout: multipage-overview title: Создание коллекций с нуля - -discourse: true - partof: collections-213 overview-name: Collections - num: 16 previous-page: iterators next-page: conversions-between-java-and-scala-collections - language: ru - --- У вас есть синтаксис `List(1, 2, 3)` для создания списка из трех целых чисел и `Map('A' -> 1, 'C' -> 2)` для создания мапы с двумя элементами. На самом деле, это универсальная функциональность коллекций Scala. Можно получить любую коллекцию написав ее название и указав следом список элементов в круглых скобках. В результате получится новая коллекция с заданными элементами. Вот еще несколько примеров: diff --git a/_ru/overviews/collections-2.13/equality.md b/_ru/overviews/collections-2.13/equality.md index 5908d1ca2b..179ae0bd71 100644 --- a/_ru/overviews/collections-2.13/equality.md +++ b/_ru/overviews/collections-2.13/equality.md @@ -1,18 +1,12 @@ --- layout: multipage-overview title: Равенство - -discourse: true - partof: collections-213 overview-name: Collections - num: 13 previous-page: performance-characteristics next-page: views - language: ru - --- Коллекций придерживаются единого подхода к определению равенства и получению хэшей. Идея состоит, во-первых, в том, чтобы разделить коллекции на группы: множества, мапы и последовательности. Коллекции в разных группах всегда различаются. Например, `Set(1,2,3)` неравнозначен списку `List(1,2,3)`, хотя они содержат одни и те же элементы. С другой стороны, в рамках одной и той же группы коллекции равны тогда и только тогда, когда они имеют одинаковые элементы (для последовательностей: одни и те же элементы в одном порядке). Например `List(1, 2, 3) == Vector(1, 2, 3)`, и `HashSet(1, 2) == TreeSet(2, 1)`. diff --git a/_ru/overviews/collections-2.13/introduction.md b/_ru/overviews/collections-2.13/introduction.md index c965ef979e..e97c142eb8 100644 --- a/_ru/overviews/collections-2.13/introduction.md +++ b/_ru/overviews/collections-2.13/introduction.md @@ -1,17 +1,11 @@ --- layout: multipage-overview title: Введение - -discourse: true - partof: collections-213 overview-name: Collections - num: 1 next-page: overview - language: ru - --- **Martin Odersky и Lex Spoon** diff --git a/_ru/overviews/collections-2.13/iterators.md b/_ru/overviews/collections-2.13/iterators.md index ee7c02c50d..a74e0bc860 100644 --- a/_ru/overviews/collections-2.13/iterators.md +++ b/_ru/overviews/collections-2.13/iterators.md @@ -1,18 +1,12 @@ --- layout: multipage-overview title: Итераторы - -discourse: true - partof: collections-213 overview-name: Collections - num: 15 previous-page: views next-page: creating-collections-from-scratch - language: ru - --- Итератор (Iterator) - это не коллекция, а скорее способ поочередного доступа к элементам коллекции. Есть две основные операции у итератора - это `next` и `hasNext`. Вызов метода `it.next()` на итераторе `it` вернет следующий элемент и изменит его состояние. Повторный вызов `next` на том же итераторе выведит следующий элемент идущий после ранее возвращённого. Если больше нет элементов для возврата, вызов команды `next` кинет исключение `NoSuchElementException`. Вы можете узнать, есть ли еще элементы для возврата с помощью метода `hasNext` у [Итератора](https://www.scala-lang.org/api/{{ site.scala-version }}/scala/collection/Iterator.html). diff --git a/_ru/overviews/collections-2.13/maps.md b/_ru/overviews/collections-2.13/maps.md index 18cfc11245..a3d93834fd 100644 --- a/_ru/overviews/collections-2.13/maps.md +++ b/_ru/overviews/collections-2.13/maps.md @@ -1,18 +1,12 @@ --- layout: multipage-overview title: Мапы - -discourse: true - partof: collections-213 overview-name: Collections - num: 7 previous-page: sets next-page: concrete-immutable-collection-classes - language: ru - --- [Map](https://www.scala-lang.org/api/current/scala/collection/Map.html) это [Iterable](https://www.scala-lang.org/api/current/scala/collection/Iterable.html) состоящее из пар ключ значение (также называемых _связкой_ или _ассоциативным массивом_). diff --git a/_ru/overviews/collections-2.13/overview.md b/_ru/overviews/collections-2.13/overview.md index b0fe21b1cd..361d8f5551 100644 --- a/_ru/overviews/collections-2.13/overview.md +++ b/_ru/overviews/collections-2.13/overview.md @@ -1,18 +1,12 @@ --- layout: multipage-overview title: Изменяемые и Неизменяемые Коллекции - -discourse: true - partof: collections-213 overview-name: Collections - num: 2 previous-page: introduction next-page: trait-iterable - language: ru - --- В коллекциях Scala постоянно проводят различие между неизменяемыми и изменяемыми коллекциями. _Изменяемые_ (mutable) коллекции могут быть изменены или дополнены. Это означает, что вы можете изменять, добавлять или удалять её элементы. _Неизменяемые_ (Immutable) коллекции, напротив, никогда не меняются. У них есть операции, имитирующие добавления, удаления или обновления, но эти операции каждый раз будут возвращать новую коллекцию и оставлять старую коллекцию без изменений. diff --git a/_ru/overviews/collections-2.13/performance-characteristics.md b/_ru/overviews/collections-2.13/performance-characteristics.md index 526a74a2b2..eb63206c02 100644 --- a/_ru/overviews/collections-2.13/performance-characteristics.md +++ b/_ru/overviews/collections-2.13/performance-characteristics.md @@ -1,18 +1,12 @@ --- layout: multipage-overview title: Показатели производительности - -discourse: true - partof: collections-213 overview-name: Collections - num: 12 previous-page: strings next-page: equality - language: ru - --- Из предыдущих объяснений стало ясно, что разные типы коллекций имеют разные показатели производительности. Что зачастую является основной причиной, выбора одной коллекции вместо другой. Показатели для наиболее распространенных операций собраны в таблицах ниже. diff --git a/_ru/overviews/collections-2.13/seqs.md b/_ru/overviews/collections-2.13/seqs.md index c5557bdd40..9bf9d180c3 100644 --- a/_ru/overviews/collections-2.13/seqs.md +++ b/_ru/overviews/collections-2.13/seqs.md @@ -1,18 +1,12 @@ --- layout: multipage-overview title: Последовательности. Трейт Seq, IndexedSeq и LinearSeq - -discourse: true - partof: collections-213 overview-name: Collections - num: 5 previous-page: trait-iterable next-page: sets - language: ru - --- Трейт [Seq](https://www.scala-lang.org/api/current/scala/collection/Seq.html) представляет из себя последовательность. Последовательность - это своего рода итерируемая сущность, у которой есть длина (`length`) и элементы с фиксированным индексом, начинающийся от `0`. diff --git a/_ru/overviews/collections-2.13/sets.md b/_ru/overviews/collections-2.13/sets.md index 3a2bbbf98e..2a4d4a0550 100644 --- a/_ru/overviews/collections-2.13/sets.md +++ b/_ru/overviews/collections-2.13/sets.md @@ -1,18 +1,12 @@ --- layout: multipage-overview title: Множества - -discourse: true - partof: collections-213 overview-name: Collections - num: 6 previous-page: seqs next-page: maps - language: ru - --- Множества (`Set`) - это итерируемые сущности, которые не содержат дублирующих друг друга элементов. Операции с множествами описаны в таблицах ниже. Описания включают операции для базовых, неизменяемых и изменяемых множеств. Все их операции поделены на следующие категории: diff --git a/_ru/overviews/collections-2.13/strings.md b/_ru/overviews/collections-2.13/strings.md index 1527860415..17e13d1a14 100644 --- a/_ru/overviews/collections-2.13/strings.md +++ b/_ru/overviews/collections-2.13/strings.md @@ -1,18 +1,12 @@ --- layout: multipage-overview title: Строки - -discourse: true - partof: collections-213 overview-name: Collections - num: 11 previous-page: arrays next-page: performance-characteristics - language: ru - --- Как и массивы, строки не являются непосредственно последовательностями, но могут быть преобразованы в них, а также поддерживают все операции которые есть у последовательностей. Ниже приведены некоторые примеры операций, которые можно вызывать на строках. diff --git a/_ru/overviews/collections-2.13/trait-iterable.md b/_ru/overviews/collections-2.13/trait-iterable.md index 25cfd6ed37..447859daba 100644 --- a/_ru/overviews/collections-2.13/trait-iterable.md +++ b/_ru/overviews/collections-2.13/trait-iterable.md @@ -1,18 +1,12 @@ --- layout: multipage-overview title: Трейт Iterable - -discourse: true - partof: collections-213 overview-name: Collections - num: 4 previous-page: overview next-page: seqs - language: ru - --- На самом верху иерархии коллекций находится трейт `Iterable`. Все методы в этого трейта описаны как абстрактные, `iterator` - это метод, который выдает элементы коллекции один за другим. diff --git a/_ru/overviews/collections-2.13/views.md b/_ru/overviews/collections-2.13/views.md index 8a095c96a1..3b8a5f5d76 100644 --- a/_ru/overviews/collections-2.13/views.md +++ b/_ru/overviews/collections-2.13/views.md @@ -1,18 +1,12 @@ --- layout: multipage-overview title: Отображения - -discourse: true - partof: collections-213 overview-name: Collections - num: 14 previous-page: equality next-page: iterators - language: ru - --- У коллекций довольно много вариантов создания новых коллекций. Ну например используя операции `map`, `filter` или `++`. Мы называем такие операции *трансформерами*, потому что они берут хотя бы одну коллекцию и трансформируют её в новую коллекцию. diff --git a/_ru/overviews/collections/introduction.md b/_ru/overviews/collections/introduction.md index 4f503f94d6..5b996a9254 100644 --- a/_ru/overviews/collections/introduction.md +++ b/_ru/overviews/collections/introduction.md @@ -1,14 +1,9 @@ --- layout: multipage-overview title: Введение - -discourse: false - partof: collections overview-name: Collections - num: 1 - language: ru --- diff --git a/_ru/overviews/parallel-collections/architecture.md b/_ru/overviews/parallel-collections/architecture.md index 5ee10d99b9..9677440e9c 100644 --- a/_ru/overviews/parallel-collections/architecture.md +++ b/_ru/overviews/parallel-collections/architecture.md @@ -1,9 +1,6 @@ --- layout: multipage-overview title: Архитектура библиотеки параллельных коллекций - -discourse: false - partof: parallel-collections overview-name: Parallel Collections diff --git a/_ru/overviews/parallel-collections/concrete-parallel-collections.md b/_ru/overviews/parallel-collections/concrete-parallel-collections.md index ab41a576c7..b6170ffe1d 100644 --- a/_ru/overviews/parallel-collections/concrete-parallel-collections.md +++ b/_ru/overviews/parallel-collections/concrete-parallel-collections.md @@ -1,12 +1,8 @@ --- layout: multipage-overview title: Конкретные классы параллельных коллекций - -discourse: false - partof: parallel-collections overview-name: Parallel Collections - language: ru num: 2 --- diff --git a/_ru/overviews/parallel-collections/configuration.md b/_ru/overviews/parallel-collections/configuration.md index 5dbd2b1e38..253c4c30d5 100644 --- a/_ru/overviews/parallel-collections/configuration.md +++ b/_ru/overviews/parallel-collections/configuration.md @@ -1,12 +1,8 @@ --- layout: multipage-overview title: Конфигурирование параллельных коллекций - -discourse: false - partof: parallel-collections overview-name: Parallel Collections - language: ru num: 7 --- diff --git a/_ru/overviews/parallel-collections/conversions.md b/_ru/overviews/parallel-collections/conversions.md index 114f2d8986..f001762841 100644 --- a/_ru/overviews/parallel-collections/conversions.md +++ b/_ru/overviews/parallel-collections/conversions.md @@ -1,12 +1,8 @@ --- layout: multipage-overview title: Преобразования параллельных коллекций - -discourse: false - partof: parallel-collections overview-name: Parallel Collections - language: ru num: 3 --- diff --git a/_ru/overviews/parallel-collections/ctries.md b/_ru/overviews/parallel-collections/ctries.md index 9e52d407bf..640ac7e8b9 100644 --- a/_ru/overviews/parallel-collections/ctries.md +++ b/_ru/overviews/parallel-collections/ctries.md @@ -1,12 +1,8 @@ --- layout: multipage-overview title: Многопоточные префиксные деревья - -discourse: false - partof: parallel-collections overview-name: Parallel Collections - language: ru num: 4 --- diff --git a/_ru/overviews/parallel-collections/custom-parallel-collections.md b/_ru/overviews/parallel-collections/custom-parallel-collections.md index 6fd6fa9f58..4dbcdf7e96 100644 --- a/_ru/overviews/parallel-collections/custom-parallel-collections.md +++ b/_ru/overviews/parallel-collections/custom-parallel-collections.md @@ -1,12 +1,8 @@ --- layout: multipage-overview title: Создание пользовательской параллельной коллекции - -discourse: false - partof: parallel-collections overview-name: Parallel Collections - language: ru num: 6 --- diff --git a/_ru/overviews/parallel-collections/overview.md b/_ru/overviews/parallel-collections/overview.md index 2d68d91d8d..e2b4bbcd7d 100644 --- a/_ru/overviews/parallel-collections/overview.md +++ b/_ru/overviews/parallel-collections/overview.md @@ -1,12 +1,8 @@ --- layout: multipage-overview title: Обзор - -discourse: false - partof: parallel-collections overview-name: Parallel Collections - num: 1 language: ru --- diff --git a/_ru/overviews/parallel-collections/performance.md b/_ru/overviews/parallel-collections/performance.md index b86e90bc2c..64e533e359 100644 --- a/_ru/overviews/parallel-collections/performance.md +++ b/_ru/overviews/parallel-collections/performance.md @@ -1,12 +1,8 @@ --- layout: multipage-overview title: Измерение производительности - -discourse: false - partof: parallel-collections overview-name: Parallel Collections - num: 8 language: ru --- diff --git a/_ru/tour/abstract-type-members.md b/_ru/tour/abstract-type-members.md index 849286419f..6da748d090 100644 --- a/_ru/tour/abstract-type-members.md +++ b/_ru/tour/abstract-type-members.md @@ -1,9 +1,6 @@ --- layout: tour title: Члены Абстрактного Типа - -discourse: true - partof: scala-tour num: 23 language: ru @@ -11,7 +8,6 @@ next-page: compound-types previous-page: inner-classes topics: abstract type members prerequisite-knowledge: variance, upper-type-bound - --- Абстрактные типы, такие как трейты и абстрактные классы, могут содержать членов абстрактного типа. diff --git a/_ru/tour/annotations.md b/_ru/tour/annotations.md index 99a668acb0..46718f2d77 100644 --- a/_ru/tour/annotations.md +++ b/_ru/tour/annotations.md @@ -1,16 +1,11 @@ --- layout: tour title: Аннотации - -discourse: true - partof: scala-tour - num: 32 language: ru next-page: packages-and-imports previous-page: by-name-parameters - --- Аннотации используются для передачи метаданных при объявлении. Например, аннотация `@deprecated` перед объявлением метода, заставит компилятор вывести предупреждение, если этот метод будет использован. diff --git a/_ru/tour/automatic-closures.md b/_ru/tour/automatic-closures.md index 7de83279d8..7465e6abef 100644 --- a/_ru/tour/automatic-closures.md +++ b/_ru/tour/automatic-closures.md @@ -1,8 +1,6 @@ --- layout: tour title: Конструкция Автоматического Замыкания Зависимого Типа - -discourse: true language: ru partof: scala-tour num: 14 diff --git a/_ru/tour/basics.md b/_ru/tour/basics.md index f6c3788f4c..518662c9f6 100644 --- a/_ru/tour/basics.md +++ b/_ru/tour/basics.md @@ -1,16 +1,11 @@ --- layout: tour title: Основы - -discourse: true - partof: scala-tour - num: 2 language: ru next-page: unified-types previous-page: tour-of-scala - --- На этой странице мы расскажем об основах Scala. diff --git a/_ru/tour/by-name-parameters.md b/_ru/tour/by-name-parameters.md index 4a1a4d4417..3be9478fe8 100644 --- a/_ru/tour/by-name-parameters.md +++ b/_ru/tour/by-name-parameters.md @@ -1,16 +1,11 @@ --- layout: tour title: Вызов по имени - -discourse: true - partof: scala-tour - num: 31 language: ru next-page: annotations previous-page: operators - --- _Вызов параметров по имени_ - это когда значение параметра вычисляется только в момент вызова параметра. Этот способ противоположен _вызову по значению_. Чтоб вызов параметра был по имени, необходимо просто указать `=>` перед его типом. diff --git a/_ru/tour/case-classes.md b/_ru/tour/case-classes.md index 9a49c560dd..64fab9024e 100644 --- a/_ru/tour/case-classes.md +++ b/_ru/tour/case-classes.md @@ -1,17 +1,12 @@ --- layout: tour title: Классы Образцы - -discourse: true - partof: scala-tour - num: 11 language: ru next-page: pattern-matching previous-page: multiple-parameter-lists prerequisite-knowledge: classes, basics, mutability - --- Классы образцы (Case classes) похожи на обычные классы с несколькими ключевыми отличиями, о которых мы поговорим ниже. Классы образцы хороши для моделирования неизменяемых данных. На следующей странице обзора вы увидите, насколько они полезны для участия в [сопоставлении с примером](pattern-matching.html). diff --git a/_ru/tour/classes.md b/_ru/tour/classes.md index db66150841..d7e66a84c0 100644 --- a/_ru/tour/classes.md +++ b/_ru/tour/classes.md @@ -1,18 +1,13 @@ --- layout: tour title: Классы - -discourse: true - partof: scala-tour - num: 4 language: ru next-page: traits previous-page: unified-types topics: classes prerequisite-knowledge: no-return-keyword, type-declaration-syntax, string-interpolation, procedures - --- Классы в Scala являются основами для создания объектов. Они могут содержать методы, константы, переменные, типы, объекты, трейты и классы, которые в совокупности называются _членами_. Типы, объекты и трейты будут рассмотрены позже в ходе нашего обзора. diff --git a/_ru/tour/compound-types.md b/_ru/tour/compound-types.md index eb861afbfd..5d0a49aa0e 100644 --- a/_ru/tour/compound-types.md +++ b/_ru/tour/compound-types.md @@ -1,16 +1,11 @@ --- layout: tour title: Составные Типы - -discourse: true - partof: scala-tour - num: 24 language: ru next-page: self-types previous-page: abstract-type-members - --- Иногда необходимо выразить, то что тип объекта является подтипом нескольких других типов. В Scala это можно выразить с помощью *составных типов*, которые являются объединением нескольких типов объектов. diff --git a/_ru/tour/default-parameter-values.md b/_ru/tour/default-parameter-values.md index 72ab55e786..ac8c04eda4 100644 --- a/_ru/tour/default-parameter-values.md +++ b/_ru/tour/default-parameter-values.md @@ -1,17 +1,12 @@ --- layout: tour title: Значения Параметров По умолчанию - -discourse: true - partof: scala-tour - num: 33 language: ru next-page: named-arguments previous-page: classes prerequisite-knowledge: named-arguments, function syntax - --- Scala предоставляет возможность задавать значения параметров по умолчанию, что позволяет лишний раз не указывать параметры. diff --git a/_ru/tour/extractor-objects.md b/_ru/tour/extractor-objects.md index 0c968f36cd..8d86b454ac 100644 --- a/_ru/tour/extractor-objects.md +++ b/_ru/tour/extractor-objects.md @@ -1,16 +1,11 @@ --- layout: tour title: Объект Экстрактор - -discourse: true - partof: scala-tour - num: 16 language: ru next-page: for-comprehensions previous-page: regular-expression-patterns - --- Объект Экстрактор (объект распаковщик или extractor object) - это объект с методом `unapply`. В то время как метод `apply` обычно действует как конструктор, который принимает аргументы и создает объект, метод `unapply` действует обратным образом, он принимает объект и пытается извлечь и вернуть аргументы из которых он (возможно) был создан. Чаще всего этот метод используется в функциях сопоставления с примером и в частично определенных функциях. diff --git a/_ru/tour/for-comprehensions.md b/_ru/tour/for-comprehensions.md index 29aad7105c..5a2c538769 100644 --- a/_ru/tour/for-comprehensions.md +++ b/_ru/tour/for-comprehensions.md @@ -1,16 +1,11 @@ --- layout: tour title: Сложные for-выражения - -discourse: true - partof: scala-tour - num: 17 language: ru next-page: generic-classes previous-page: extractor-objects - --- Scala предлагает простую запись для выражения *последовательных преобразований*. Эти преобразования можно упростить используя специальный синтаксис `for выражения` (for comprehension), который записывается как `for (enumerators) yield e`, где `enumerators` относятся к списку перечислителей, разделенных точкой с запятой. Где отдельный такой "перечислитель" (*enumerator*) является либо генератором, который вводит новые переменные, либо фильтром. For-выражение вычисляет тело `e` (которое связанно с тем что генерирует *enumerator*) и возвращает последовательность вычислений. diff --git a/_ru/tour/generic-classes.md b/_ru/tour/generic-classes.md index fafc2fd13e..48d68a9733 100644 --- a/_ru/tour/generic-classes.md +++ b/_ru/tour/generic-classes.md @@ -1,17 +1,12 @@ --- layout: tour title: Обобщенные Классы - -discourse: true - partof: scala-tour - num: 18 language: ru next-page: variances previous-page: for-comprehensions assumed-knowledge: classes unified-types - --- Обобщенные классы (Generic classes) - это классы, обладающие параметрическим полиморфизмом (т. е. классы, которые изменяют свое поведение в зависимости от приписываемого им типа. Этот тип указывается в квадратных скобках `[]` сразу после имени класса). Они особенно полезны для создания коллекций. diff --git a/_ru/tour/higher-order-functions.md b/_ru/tour/higher-order-functions.md index 36a8f0a2a7..2b029a6ca1 100644 --- a/_ru/tour/higher-order-functions.md +++ b/_ru/tour/higher-order-functions.md @@ -1,16 +1,11 @@ --- layout: tour title: Функции Высшего Порядка - -discourse: true - partof: scala-tour - num: 8 language: ru next-page: nested-functions previous-page: mixin-class-composition - --- Функции высшего порядка могут принимать другие функции в качестве параметров или возвращать функцию в качестве результата. diff --git a/_ru/tour/implicit-conversions.md b/_ru/tour/implicit-conversions.md index bd36a9e749..02c5319fae 100644 --- a/_ru/tour/implicit-conversions.md +++ b/_ru/tour/implicit-conversions.md @@ -1,16 +1,11 @@ --- layout: tour title: Неявные Преобразования - -discourse: true - partof: scala-tour - num: 27 language: ru next-page: polymorphic-methods previous-page: implicit-parameters - --- Неявные преобразование типа `S` к типу `T` задается неявным значением функционального типа `S =>T`, или неявным методом, который способен преобразовывать к значению требуемого типа. diff --git a/_ru/tour/implicit-parameters.md b/_ru/tour/implicit-parameters.md index cf58ded10e..f6ca9b6fda 100644 --- a/_ru/tour/implicit-parameters.md +++ b/_ru/tour/implicit-parameters.md @@ -1,16 +1,11 @@ --- layout: tour title: Неявные Параметры - -discourse: true - partof: scala-tour - num: 26 language: ru next-page: implicit-conversions previous-page: self-types - --- Метод может иметь список _неявных_ параметров, помеченный ключевым словом _implicit_ в начале списка параметров. Если параметры в этом списке не передаются как обычно, то Scala будет искать, где можно получить неявное значение требуемого типа, и если найдет, то передаст его автоматически. diff --git a/_ru/tour/inner-classes.md b/_ru/tour/inner-classes.md index 736677ceff..9d86b84000 100644 --- a/_ru/tour/inner-classes.md +++ b/_ru/tour/inner-classes.md @@ -1,16 +1,11 @@ --- layout: tour title: Внутренние классы - -discourse: true - partof: scala-tour - num: 22 language: ru next-page: abstract-type-members previous-page: lower-type-bounds - --- В Scala классам можно иметь в качестве членов другие классы. В отличие от Java-подобных языков, где такие внутренние классы являются членами окружающего класса, в Scala такие внутренние классы привязаны к содержащему его объекту. Предположим, мы хотим, чтобы компилятор не позволял нам на этапе компиляции смешивать узлы этого графа. Для решения этой задачи нам подойдут типы, зависящие от своего расположения. diff --git a/_ru/tour/lower-type-bounds.md b/_ru/tour/lower-type-bounds.md index 8351695a72..ac9e08bd59 100644 --- a/_ru/tour/lower-type-bounds.md +++ b/_ru/tour/lower-type-bounds.md @@ -1,17 +1,12 @@ --- layout: tour title: Нижнее Ограничение Типа - -discourse: true - partof: scala-tour - num: 21 language: ru next-page: inner-classes previous-page: upper-type-bounds prerequisite-knowledge: upper-type-bounds, generics, variance - --- В то время как [верхнее ограничение типа](upper-type-bounds.html) ограничивает тип до подтипа стороннего типа, *нижнее ограничение типа* объявляют тип супертипом стороннего типа. Термин `B >: A` выражает, то что параметр типа `B` или абстрактный тип `B` относится к супертипу типа `A`. В большинстве случаев `A` будет задавать тип класса, а `B` задавать тип метода. diff --git a/_ru/tour/mixin-class-composition.md b/_ru/tour/mixin-class-composition.md index ff7c1d60d9..c27a2edea1 100644 --- a/_ru/tour/mixin-class-composition.md +++ b/_ru/tour/mixin-class-composition.md @@ -1,17 +1,12 @@ --- layout: tour title: Композиция классов с примесями - -discourse: true - partof: scala-tour - num: 7 language: ru next-page: higher-order-functions previous-page: tuples prerequisite-knowledge: inheritance, traits, abstract-classes, unified-types - --- Примеси (Mixin) - это трейты, которые используются для создания класса. diff --git a/_ru/tour/multiple-parameter-lists.md b/_ru/tour/multiple-parameter-lists.md index c4656f5193..c93a6e31d1 100644 --- a/_ru/tour/multiple-parameter-lists.md +++ b/_ru/tour/multiple-parameter-lists.md @@ -1,16 +1,11 @@ --- layout: tour title: Множественные списки параметров (Каррирование) - -discourse: true - partof: scala-tour - num: 10 language: ru next-page: case-classes previous-page: nested-functions - --- Методы могут объявляться с несколькими списками параметров. При этом когда такой метод вызывается с меньшим количеством списков параметров, это приводит к созданию новой функции, которая ожидает на вход не достающий список параметров. Формально это называется [частичное применение](https://en.wikipedia.org/wiki/Partial_application). diff --git a/_ru/tour/named-arguments.md b/_ru/tour/named-arguments.md index 32b83664e4..463480e547 100644 --- a/_ru/tour/named-arguments.md +++ b/_ru/tour/named-arguments.md @@ -1,17 +1,12 @@ --- layout: tour title: Именованные Аргументы - -discourse: true - partof: scala-tour - num: 34 language: ru next-page: packages-and-imports previous-page: default-parameter-values prerequisite-knowledge: function-syntax - --- При вызове методов можно конкретно указывать название задаваемого аргумента следующим образом: diff --git a/_ru/tour/nested-functions.md b/_ru/tour/nested-functions.md index 663e0fdc36..6a59ca5a0e 100644 --- a/_ru/tour/nested-functions.md +++ b/_ru/tour/nested-functions.md @@ -1,16 +1,11 @@ --- layout: tour title: Вложенные Методы - -discourse: true - partof: scala-tour - num: 9 language: ru next-page: multiple-parameter-lists previous-page: higher-order-functions - --- В Scala возможно объявление метода вкладывать в тело другого метода. Это реализовано в следующем примере, в котором метод `factorial` используется для вычисления факториала заданного числа: diff --git a/_ru/tour/operators.md b/_ru/tour/operators.md index 09ea35ea76..dd80f7905d 100644 --- a/_ru/tour/operators.md +++ b/_ru/tour/operators.md @@ -1,17 +1,12 @@ --- layout: tour title: Операторы - -discourse: true - partof: scala-tour - num: 30 language: ru next-page: by-name-parameters previous-page: type-inference prerequisite-knowledge: case-classes - --- В Скале операторы - это обычные методы. В качестве _инфиксного оператора_ может быть использован любой метод с одним параметром. Например, `+` может вызываться с использованием точки: ``` diff --git a/_ru/tour/package-objects.md b/_ru/tour/package-objects.md index 1a0ba1b7f2..e7924e8de8 100644 --- a/_ru/tour/package-objects.md +++ b/_ru/tour/package-objects.md @@ -1,11 +1,7 @@ --- layout: tour title: Объекты Пакета - -discourse: true - partof: scala-tour - num: 36 language: ru previous-page: packages-and-imports diff --git a/_ru/tour/packages-and-imports.md b/_ru/tour/packages-and-imports.md index 2a3e6ba6ff..a4d6710454 100644 --- a/_ru/tour/packages-and-imports.md +++ b/_ru/tour/packages-and-imports.md @@ -1,11 +1,7 @@ --- layout: tour title: Пакеты и Импорт - -discourse: true - partof: scala-tour - num: 35 language: ru previous-page: annotations diff --git a/_ru/tour/pattern-matching.md b/_ru/tour/pattern-matching.md index 8d329636da..15e58ff983 100644 --- a/_ru/tour/pattern-matching.md +++ b/_ru/tour/pattern-matching.md @@ -1,17 +1,12 @@ --- layout: tour title: Сопоставление с примером - -discourse: true - partof: scala-tour - num: 12 language: ru next-page: singleton-objects previous-page: case-classes prerequisite-knowledge: case-classes, string-interpolation, subtyping - --- Сопоставление с примером (Pattern matching) - это механизм сравнения значений с определенным примером. При успешном совпадении значение может быть разложено на составные части. Мы рассматриваем сопоставление с примером, как более мощную версию `switch` оператора из Java. Eго также можно использовать вместо серии if/else выражений. diff --git a/_ru/tour/polymorphic-methods.md b/_ru/tour/polymorphic-methods.md index 3c017b89f6..9d54223100 100644 --- a/_ru/tour/polymorphic-methods.md +++ b/_ru/tour/polymorphic-methods.md @@ -1,17 +1,12 @@ --- layout: tour title: Полиморфные методы - -discourse: true - partof: scala-tour - num: 28 language: ru next-page: type-inference previous-page: implicit-conversions prerequisite-knowledge: unified-types - --- Также как и у обобщенных классов, у методов есть полиморфизм по типу, с таким же синтаксисом (параметр типа указывается в квадратных скобках сразу после названия метода). diff --git a/_ru/tour/regular-expression-patterns.md b/_ru/tour/regular-expression-patterns.md index e8c2ea8404..159921587c 100644 --- a/_ru/tour/regular-expression-patterns.md +++ b/_ru/tour/regular-expression-patterns.md @@ -1,16 +1,11 @@ --- layout: tour title: Регулярные Выражения - -discourse: true - partof: scala-tour - num: 15 language: ru next-page: extractor-objects previous-page: singleton-objects - --- Регулярные выражения (Regular expression) - это специальный шаблон для поиска данных, задаваемый в виде текстовой строки. Любая строка может быть преобразована в регулярное выражение методом `.r`. diff --git a/_ru/tour/self-types.md b/_ru/tour/self-types.md index 2ce9946450..5ca4c91b22 100644 --- a/_ru/tour/self-types.md +++ b/_ru/tour/self-types.md @@ -1,18 +1,13 @@ --- layout: tour title: Самоописываемые типы - -discourse: true - partof: scala-tour - num: 25 language: ru next-page: implicit-parameters previous-page: compound-types topics: self-types prerequisite-knowledge: nested-classes, mixin-class-composition - --- Самоописываемый тип(Self type) - это способ объявить, что трейт должен быть смешан с другим трейтом, даже если он не расширяет его напрямую. Что открывает доступ к членам зависимости без импортирования. diff --git a/_ru/tour/singleton-objects.md b/_ru/tour/singleton-objects.md index d39f5c170e..5b2f79dac8 100644 --- a/_ru/tour/singleton-objects.md +++ b/_ru/tour/singleton-objects.md @@ -1,11 +1,7 @@ --- layout: tour title: Объекты Одиночки - -discourse: true - partof: scala-tour - num: 13 language: ru next-page: regular-expression-patterns diff --git a/_ru/tour/tour-of-scala.md b/_ru/tour/tour-of-scala.md index ac523d9914..321685dbb3 100644 --- a/_ru/tour/tour-of-scala.md +++ b/_ru/tour/tour-of-scala.md @@ -1,11 +1,7 @@ --- layout: tour title: Введение - -discourse: true - partof: scala-tour - num: 1 language: ru next-page: basics diff --git a/_ru/tour/traits.md b/_ru/tour/traits.md index 3eec6fd35c..ab7f6a5ade 100644 --- a/_ru/tour/traits.md +++ b/_ru/tour/traits.md @@ -1,18 +1,13 @@ --- layout: tour title: Трейты - -discourse: true - partof: scala-tour - num: 5 language: ru next-page: tuples previous-page: named-arguments topics: traits prerequisite-knowledge: expressions, classes, generics, objects, companion-objects - --- Трейты (Traits) используются, чтобы обмениваться между классами информацией о структуре и полях. Они похожи на интерфейсы из Java 8. Классы и объекты могут расширять трейты, но трейты не могут быть созданы и поэтому не имеют параметров. diff --git a/_ru/tour/tuples.md b/_ru/tour/tuples.md index 8d30c607c5..8af61d5102 100644 --- a/_ru/tour/tuples.md +++ b/_ru/tour/tuples.md @@ -1,17 +1,12 @@ --- layout: tour title: Кортежи - -discourse: true - partof: scala-tour - num: 6 language: ru next-page: mixin-class-composition previous-page: traits topics: tuples - --- В Scala, кортеж (Тuple) это класс контейнер содержащий упорядоченный набор элементов различного типа. diff --git a/_ru/tour/type-inference.md b/_ru/tour/type-inference.md index 5e5e39cf17..6709acf411 100644 --- a/_ru/tour/type-inference.md +++ b/_ru/tour/type-inference.md @@ -1,11 +1,7 @@ --- layout: tour title: Выведение Типа - -discourse: true - partof: scala-tour - num: 29 language: ru next-page: operators diff --git a/_ru/tour/unified-types.md b/_ru/tour/unified-types.md index 1bd87556b7..7399f82409 100644 --- a/_ru/tour/unified-types.md +++ b/_ru/tour/unified-types.md @@ -1,17 +1,12 @@ --- layout: tour title: Единобразие типов - -discourse: true - partof: scala-tour - num: 3 language: ru next-page: classes previous-page: basics prerequisite-knowledge: classes, basics - --- В Scala все значения имеют тип, включая числовые значения и функции. Диаграмма ниже иллюстрирует подмножество иерархии типов. diff --git a/_ru/tour/upper-type-bounds.md b/_ru/tour/upper-type-bounds.md index 60ca550d59..2bfe19f96e 100644 --- a/_ru/tour/upper-type-bounds.md +++ b/_ru/tour/upper-type-bounds.md @@ -1,16 +1,12 @@ --- layout: tour title: Верхнее Ограничение Типа - -discourse: true - partof: scala-tour categories: tour num: 20 language: ru next-page: lower-type-bounds previous-page: variances - --- В Scala [параметры типа](generic-classes.html) и [члены абстрактного типа](abstract-type-members.html) могут быть ограничены определенными диапазонами. Такие диапазоны ограничивают конкретные значение типа и, возможно, предоставляют больше информации о членах таких типов. _Верхнее ограничение типа_ `T <: A` указывает на то что тип `T` относится к подтипу типа `A`. diff --git a/_ru/tour/variances.md b/_ru/tour/variances.md index c59549f340..17dd06b74c 100644 --- a/_ru/tour/variances.md +++ b/_ru/tour/variances.md @@ -1,16 +1,11 @@ --- layout: tour title: Вариантность - -discourse: true - partof: scala-tour - num: 19 language: ru next-page: upper-type-bounds previous-page: generic-classes - --- Вариантность (Variances) - это указание определенной специфики взаимосвязи между связанными типам. Scala поддерживает вариантную аннотацию типов у [обобщенных классов](generic-classes.html), что позволяет им быть ковариантными, контрвариантными или инвариантными (если нет никакого указание на вариантность). Использование вариантности в системе типов позволяет устанавливать понятные взаимосвязи между сложными типами, в то время как отсутствие вариантности может ограничить повторное использование абстракции класса. From 86b753a7c61b9ef04013902b6104eb92439b38fd Mon Sep 17 00:00:00 2001 From: Philippus Date: Tue, 19 Apr 2022 08:47:50 +0200 Subject: [PATCH 0636/1870] Display code blocks inside details/summary correctly --- _overviews/scala3-macros/tutorial/inline.md | 12 ++++++++++-- _sass/layout/details-summary.scss | 3 +++ resources/css/style.scss | 1 + 3 files changed, 14 insertions(+), 2 deletions(-) create mode 100644 _sass/layout/details-summary.scss diff --git a/_overviews/scala3-macros/tutorial/inline.md b/_overviews/scala3-macros/tutorial/inline.md index c081b8d61c..30c445cef0 100644 --- a/_overviews/scala3-macros/tutorial/inline.md +++ b/_overviews/scala3-macros/tutorial/inline.md @@ -254,8 +254,11 @@ Calling `power` with statically known constants results in the following code: val x = 2 power(x * x, 1) ``` + +{::options parse_block_html="true" /}
    - See rest of inlining steps + See rest of inlining steps + ```scala // then inlined as @@ -283,6 +286,8 @@ x2 * 1.0 ```
    +{::options parse_block_html="false" /} + In contrast, let us imagine we do not know the value of `n`: ```scala @@ -291,8 +296,10 @@ power(2, unknownNumber) Driven by the inline annotation on the parameter, the compiler will try to unroll the recursion. But without any success, since the parameter is not statically known. +{::options parse_block_html="true" /}
    - See inlining steps + See inlining steps + ```scala // first inlines as @@ -318,6 +325,7 @@ else { ... ```
    +{::options parse_block_html="false" /} To guarantee that the branching can indeed be performed at compile-time, we can use the `inline if` variant of `if`. Annotating a conditional with `inline` will guarantee that the conditional can be reduced at compile-time and emits an error if the condition is not a statically known constant. diff --git a/_sass/layout/details-summary.scss b/_sass/layout/details-summary.scss new file mode 100644 index 0000000000..1f18d4cd64 --- /dev/null +++ b/_sass/layout/details-summary.scss @@ -0,0 +1,3 @@ +details > summary > p { + display: inline; +} diff --git a/resources/css/style.scss b/resources/css/style.scss index 57b121deba..fb5c150296 100755 --- a/resources/css/style.scss +++ b/resources/css/style.scss @@ -56,6 +56,7 @@ @import 'layout/blog'; @import 'layout/download'; @import 'layout/content-contributors'; // COMPONENTS +@import 'layout/details-summary'; //------------------------------------------------ //------------------------------------------------ @import 'components/buttons'; From c4c0be187b9caf2c5243da2a2b521e91efba2ef2 Mon Sep 17 00:00:00 2001 From: Erik van Oosten Date: Thu, 21 Apr 2022 14:54:35 +0200 Subject: [PATCH 0637/1870] Avoid dysphemisms I was reading the inclusive language guide at https://docs.scala-lang.org/contribute/inclusive-language-guide.html. I have 2 points of feedback. I initially posted this on Discord but then I noticed I could do a pull request. So here it is. Re. blacklist/whitelist. Such lists are often used to regulate access. Therefore I propose we suggest the alternative 'allowlist/denylist' as it is probably appropriate in more circumstances. This is also the suggestion done from the linked page https://github.com/dialpad/inclusive-language. --- _overviews/contribute/inclusive-language-guide.md | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/_overviews/contribute/inclusive-language-guide.md b/_overviews/contribute/inclusive-language-guide.md index 375d988158..5689979302 100644 --- a/_overviews/contribute/inclusive-language-guide.md +++ b/_overviews/contribute/inclusive-language-guide.md @@ -90,7 +90,7 @@ This list is neither comprehensive nor definitive, and it can evolve over time. * **blacklist/whitelist** \ While the etymology of these words has no relation to racism, their use suggests an association between the color black and some form of badness or exclusion, and between the color white and some form of goodness or inclusion. Prefer alternatives when possible. - Several alternatives have been proposed but none sticks as "the one". We suggest using the pair *excludelist*/*includelist*, as it is generic enough to replace all uses of *blacklist*/*whitelist*. + Several alternatives have been proposed but none sticks as "the one". We suggest using the pair *allowlist*/*denylist*, as it is generic enough to replace most uses of *blacklist*/*whitelist*. * **master/slave** \ Never use *slave*. Never use *master* in conjunction with *slave*. @@ -116,6 +116,12 @@ We encourage you to research inclusive language guidelines applicable to your do You may want to use automated software like [In Solidarity](https://github.com/apps/in-solidarity) to steer contributors away from loaded words. +## Dysphemism + +Dysphemisms, the opposite of euphemisms, should be avoided. For example, the English expressions "pull the trigger" (enforce a decision) and "bite the bullet" (endure hardship) can be disturbingly violent if you are not used to them. + +Using the direct meaning is preferred. + ## Backward compatibility Sometimes, we have existing code, APIs or commands that do not follow the above recommendations. From 99d4d45e3c58c988849a1439a83e8f69a155a295 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?C=C3=A9dric=20Chantepie?= Date: Thu, 21 Apr 2022 21:25:45 +0200 Subject: [PATCH 0638/1870] Fix StandardPlugin example --- _scala3-reference/changed-features/compiler-plugins.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/_scala3-reference/changed-features/compiler-plugins.md b/_scala3-reference/changed-features/compiler-plugins.md index c77796d71d..39358b4e8c 100644 --- a/_scala3-reference/changed-features/compiler-plugins.md +++ b/_scala3-reference/changed-features/compiler-plugins.md @@ -57,6 +57,7 @@ package dividezero import dotty.tools.dotc.ast.Trees.* import dotty.tools.dotc.ast.tpd +import dotty.tools.dotc.report import dotty.tools.dotc.core.Constants.Constant import dotty.tools.dotc.core.Contexts.Context import dotty.tools.dotc.core.Decorators.* @@ -84,7 +85,7 @@ class DivideZeroPhase extends PluginPhase: tree match case Apply(Select(rcvr, nme.DIV), List(Literal(Constant(0)))) if rcvr.tpe <:< defn.IntType => - report.error("dividing by zero", tree.pos) + report.error("dividing by zero", tree.srcPos) case _ => () tree From 885fac887ecff3a2964c095af6cd5b8e05782180 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=A2=A6=E5=A2=83=E8=BF=B7=E7=A6=BB?= Date: Fri, 22 Apr 2022 23:48:15 +0800 Subject: [PATCH 0639/1870] fix --- _zh-cn/scala3/new-in-scala3.md | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/_zh-cn/scala3/new-in-scala3.md b/_zh-cn/scala3/new-in-scala3.md index 472f66331f..ed649cb7da 100644 --- a/_zh-cn/scala3/new-in-scala3.md +++ b/_zh-cn/scala3/new-in-scala3.md @@ -36,7 +36,7 @@ Scala的一个基本核心概念是(在某种程度上仍然是)为用户提 - **Viewing one type as another**. [隐式转换][contextual-conversions]已经被重新设计为类型类`Conversion`的实例。 -- **Higher-order contextual abstractions**. [context functions][contextual-functions]的 _全新_ 功能使上下文抽象成为一流的公民。它们是库开发人员的一个重要工具,允许表达简洁的特定领域语言。 +- **Higher-order contextual abstractions**. [context functions][contextual-functions]的 _全新_ 功能使上下文抽象成为第一等公民。它们是库开发人员的一个重要工具,允许表达简洁的特定领域语言。 - **Actionable feedback from the compiler**. 如果一个隐式参数不能被编译器解决,它现在提供了可能解决这个问题的[import suggestions](https://www.scala-lang.org/blog/2020/05/05/scala-3-import-suggestions.html)。 @@ -47,17 +47,17 @@ Scala的一个基本核心概念是(在某种程度上仍然是)为用户提 - **Opaque Types**. 将实现细节隐藏在[opaque type aliases][types-opaque]的别名后面,而不需要在性能上付出代价! Opaque types 取代了值类,并允许你建立一个抽象的屏障,而不会造成额外的装箱开销。 -- **Intersection and union types**. 将类型系统建立在新的基础上,导致了新的类型系统功能的引入:[intersection types][types-intersection]的实例,如`A & B`,既是`A`的实例,也是`B`的实例;[union types][types-union]的实例,如`A | B`,是`A`或`B`的实例。这两种结构都允许程序员在继承层次结构之外灵活地表达类型约束。 +- **Intersection and union types**. 将类型系统建立在新的基础上,引入了新的类型系统特性:[intersection types][types-intersection]的实例,如`A & B`,既是`A`的实例,也是`B`的实例;[union types][types-union]的实例,如`A | B`,是`A`或`B`的实例。这两种结构都允许程序员在继承层次结构之外灵活地表达类型约束。 - **Dependent function types**. Scala 2 已经允许返回类型依赖于(值)参数。在 Scala 3 中,现在可以对这种模式进行抽象,表达[dependent function types][types-dependent]。在类型`F = (e: Entry) => e.Key`中,结果类型取决于参数。 - **Polymorphic function types**. 与 dependent function types 一样,Scala 2 支持拥有类型参数的方法,但不允许程序员对这些方法进行抽象。在 Scala 3 中,像`[A] => List[A] => List[A]`这样的[polymorphic function types][types-polymorphic]可以抽象出除值参数外还接受 _类型参数_ 的函数。 -- **Type lambdas**. 在 Scala 2 中需要用[编译器插件](https://github.com/typelevel/kind-projector)来表达的东西,现在在 Scala 3 中是第一类的功能:类型lambdas是类型级别的函数,可以作为(高等类型的)类型参数传递,而不需要辅助类型定义。 +- **Type lambdas**. 在 Scala 2 中需要用[编译器插件](https://github.com/typelevel/kind-projector)来表达的东西,现在在 Scala 3 中是原生支持的功能:类型lambdas是类型级别的函数,可以作为(高等类型的)类型参数传递,而不需要辅助类型定义。 - **Match types**. Scala 3 提供了对[matching on types][types-match]的直接支持,而不是使用隐式解析对类型级别的计算进行编码。将类型级计算整合到类型检查器中,可以改进错误信息,并消除对复杂编码的需求。 -### 重新设想的:面向对象的编程 +### Re-envisioned:面向对象的编程 Scala 一直处于函数式编程和面向对象编程的前沿 -- 而 Scala 3 在这两个方向上都推动了边界的发展! 上述类型系统的变化和上下文抽象的重新设计使得 _函数式编程_ 比以前更容易。同时,以下的新特性使结构良好的 _面向对象设计_ 成为可能,并支持最佳实践。 @@ -65,7 +65,7 @@ Scala 一直处于函数式编程和面向对象编程的前沿 -- 而 Scala 3 - **Plan for extension**. 在面向对象的设计中,扩展那些不打算扩展的类是一个长期存在的问题。为了解决这个问题,[open classes][oo-open]要求库设计者 _明确地_ 将类标记为 open(开放的)。 -- **Hide implementation details**. 实施行为的实用性traits有时不应该是推断类型的一部分。在 Scala 3 中,这些traits可以被标记为[transparent][oo-transparent],(在推断类型中)向用户隐藏继承性。 +- **Hide implementation details**. 实现功能的工具性的traits有时不应该是推断类型的一部分。在 Scala 3 中,这些traits可以被标记为[transparent][oo-transparent],(在推断类型中)向用户隐藏继承信息。 - **Composition over inheritance**. 这句话经常被引用,但实现起来却很繁琐。Scala 3 的[export clauses][oo-export]则不然:与imports对应,export clauses 允许用户为对象的选定成员定义别名。 @@ -74,13 +74,13 @@ Scala 一直处于函数式编程和面向对象编程的前沿 -- 而 Scala 3 ### Batteries Included: 元编程 Scala 2 中的宏只是一个实验性的功能,而 Scala 3 则为元编程提供了强大的工具库。[宏教程]({% link _overviews/scala3-macros/tutorial/index.md %})中包含了关于不同设施的详细信息。特别是,Scala 3 为元编程提供了以下功能: -- **Inline**. [inline feature][meta-inline]允许在编译时减少数值和方法。这个简单的功能已经涵盖了许多使用情况,同时也为更高级的功能提供了入口。 +- **Inline**. [inline feature][meta-inline]允许在编译时化简值和方法。这个简单的功能已经涵盖了许多使用情况,同时也为更高级的功能提供了入口。 - **Compile-time operations**. 包[`scala.compiletime`][meta-compiletime]中包含了额外的功能,可以用来实现内联方法。 - **Quoted code blocks**. Scala 3为代码增加了[quasi-quotation][meta-quotes]的新功能,这为构建和分析代码提供了方便的高级接口。构建加一加一的代码就像`'{ 1 + 1 }`一样简单。 - **Reflection API**. 对于更高级的用例,[quotes.reflect][meta-reflection]提供了更详细的控制来检查和生成程序树。 -如果你想进一步了解 Scala 3 中的元编程,我们邀请你参加[教程][meta-tutorial]。 +如果你想进一步了解 Scala 3 中的元编程,我们邀请你参阅我们的[教程][meta-tutorial]。 [enums]: {{ site.scala3ref }}/enums/enums.html [enums-adts]: {{ site.scala3ref }}/enums/adts.html From 6b6676f885d39e05e8be4eb4fc076d416366bb34 Mon Sep 17 00:00:00 2001 From: Maximilien Tirard Date: Sat, 23 Apr 2022 14:28:14 +0100 Subject: [PATCH 0640/1870] Typo --- _overviews/parallel-collections/performance.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/_overviews/parallel-collections/performance.md b/_overviews/parallel-collections/performance.md index 625f08304e..96be271b44 100644 --- a/_overviews/parallel-collections/performance.md +++ b/_overviews/parallel-collections/performance.md @@ -81,7 +81,7 @@ For proper benchmark examples, you can see the source code inside [Scala library This is a question commonly asked. The answer is somewhat involved. -The size of the collection at which the parallelization pays of really +The size of the collection at which the parallelization pays off really depends on many factors. Some of them, but not all, include: - Machine architecture. Different CPU types have different From c09f64ad58eaf42a3f5619c434c9f3919f846124 Mon Sep 17 00:00:00 2001 From: kenji yoshida <6b656e6a69@gmail.com> Date: Sun, 24 Apr 2022 09:50:15 +0900 Subject: [PATCH 0641/1870] fix Scala 3 reflection doc. `companionObject` => `companionClass` https://github.com/lampepfl/dotty/blob/3.1.3-RC2/library/src/scala/quoted/Quotes.scala#L3929-L3933 --- _overviews/scala3-macros/tutorial/reflection.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/_overviews/scala3-macros/tutorial/reflection.md b/_overviews/scala3-macros/tutorial/reflection.md index b9bca2e1c9..46618a1d4f 100644 --- a/_overviews/scala3-macros/tutorial/reflection.md +++ b/_overviews/scala3-macros/tutorial/reflection.md @@ -117,7 +117,7 @@ In addition, `Symbol` exposes and is used by many useful methods. For example: - `declaredFields` and `declaredMethods` allow you to iterate on the fields and members defined inside a symbol - `flags` allows you to check multiple properties of a symbol - - `companionObject` and `companionModule` provide a way to jump to and from the companion object/class + - `companionClass` and `companionModule` provide a way to jump to and from the companion object/class - `TypeRepr.baseClasses` returns the list of symbols of classes extended by a type - `Symbol.pos` gives you access to the position where the symbol is defined, the source code of the definition, and even the filename where the symbol is defined - many others that you can find in [`SymbolMethods`](https://scala-lang.org/api/3.x/scala/quoted/Quotes$reflectModule$SymbolMethods.html) From 0ac46fb75644b042c04bb9469f8951847331d1b0 Mon Sep 17 00:00:00 2001 From: Jamie Thompson Date: Fri, 29 Apr 2022 17:00:51 +0200 Subject: [PATCH 0642/1870] add tabs on get-started page (english) --- _config.yml | 3 + _data/setup-scala.yml | 4 + _includes/code-snippet.html | 6 ++ _includes/getting-started.md | 52 +++++----- _includes/tabsection.html | 20 ++++ _install_tabs/1-macos.md | 23 +++++ _install_tabs/2-linux.md | 14 +++ _install_tabs/3-windows.md | 14 +++ _install_tabs/4-other.md | 17 ++++ _sass/layout/alt-details.scss | 46 +++++++++ _sass/layout/scala-in-action.scss | 158 ++++++++++++++++++++++++++++++ _sass/layout/tabsection.scss | 60 ++++++++++++ resources/css/style.scss | 3 + resources/js/functions.js | 78 ++++++++++++--- 14 files changed, 456 insertions(+), 42 deletions(-) create mode 100644 _data/setup-scala.yml create mode 100644 _includes/code-snippet.html create mode 100644 _includes/tabsection.html create mode 100644 _install_tabs/1-macos.md create mode 100644 _install_tabs/2-linux.md create mode 100644 _install_tabs/3-windows.md create mode 100644 _install_tabs/4-other.md create mode 100644 _sass/layout/alt-details.scss create mode 100755 _sass/layout/scala-in-action.scss create mode 100755 _sass/layout/tabsection.scss diff --git a/_config.yml b/_config.yml index accb4b5df1..21f5c59539 100644 --- a/_config.yml +++ b/_config.yml @@ -21,6 +21,9 @@ scala-3-version: 3.1.2 collections: contribute_resources: + output: false + install_tabs: + output: false style: output: true overviews: diff --git a/_data/setup-scala.yml b/_data/setup-scala.yml new file mode 100644 index 0000000000..d1bb19a78d --- /dev/null +++ b/_data/setup-scala.yml @@ -0,0 +1,4 @@ +linux: curl -fL https://github.com/coursier/launchers/raw/master/cs-x86_64-pc-linux.gz | gzip -d > cs && chmod +x cs && ./cs setup +macOS-default: curl -fL https://github.com/coursier/launchers/raw/master/cs-x86_64-apple-darwin.gz | gzip -d > cs && chmod +x cs && (xattr -d com.apple.quarantine cs || true) && ./cs setup +macOS-brew: brew install coursier/formulas/coursier && cs setup +windows-link: https://github.com/coursier/launchers/raw/master/cs-x86_64-pc-win32.zip diff --git a/_includes/code-snippet.html b/_includes/code-snippet.html new file mode 100644 index 0000000000..0286da8b4d --- /dev/null +++ b/_includes/code-snippet.html @@ -0,0 +1,6 @@ +
    +
    +
    +
    +
    {{include.codeSnippet}}
    +
    diff --git a/_includes/getting-started.md b/_includes/getting-started.md index 83c1de45fe..2df5661769 100644 --- a/_includes/getting-started.md +++ b/_includes/getting-started.md @@ -21,9 +21,29 @@ It ensures that a JVM and standard Scala tools are installed on your system. Install it on your system with the following instructions.
    -
    -

    Follow the instructions to install the cs launcher then run:

    -

    $ ./cs setup

    +
    @@ -165,29 +185,3 @@ Once you've finished the above tutorials, consider checking out: ## Getting Help There are a multitude of mailing lists and real-time chat rooms in case you want to quickly connect with other Scala users. Check out our [community](https://scala-lang.org/community/) page for a list of these resources, and for where to reach out for help. - - - - - - - - - diff --git a/_includes/tabsection.html b/_includes/tabsection.html new file mode 100644 index 0000000000..a5473b04e5 --- /dev/null +++ b/_includes/tabsection.html @@ -0,0 +1,20 @@ +
    +
    + {% for tabRoot in include.collection %} + + {% endfor %} +
    + {% for tabRoot in include.collection %} +
    {{tabRoot.content}}
    + {% endfor %} +
    diff --git a/_install_tabs/1-macos.md b/_install_tabs/1-macos.md new file mode 100644 index 0000000000..f91ab023fa --- /dev/null +++ b/_install_tabs/1-macos.md @@ -0,0 +1,23 @@ +--- +tabId: osx +tabLabel: macOS +--- +
    +
    +
    +
    +

    Run the following command in your terminal, following the on-screen instructions:

    + {% include code-snippet.html language='bash' codeSnippet=site.data.setup-scala.macOS-brew %} +
    + +
    +
    + {% include code-snippet.html language='bash' codeSnippet=site.data.setup-scala.macOS-default %} +
    +
    +
    +
    +
    +
    +
    diff --git a/_install_tabs/2-linux.md b/_install_tabs/2-linux.md new file mode 100644 index 0000000000..6924edf275 --- /dev/null +++ b/_install_tabs/2-linux.md @@ -0,0 +1,14 @@ +--- +tabId: linux +tabLabel: Linux +--- +
    +
    +
    +
    +

    Run the following command in your terminal, following the on-screen instructions:

    + {% include code-snippet.html language='bash' codeSnippet=site.data.setup-scala.linux %} +
    +
    +
    +
    diff --git a/_install_tabs/3-windows.md b/_install_tabs/3-windows.md new file mode 100644 index 0000000000..c3e31fb837 --- /dev/null +++ b/_install_tabs/3-windows.md @@ -0,0 +1,14 @@ +--- +tabId: windows +tabLabel: Windows +--- +
    +
    +
    +
    +

    Download and execute the Scala + installer for Windows based on Coursier, and follow the on-screen instructions.

    +
    +
    +
    +
    diff --git a/_install_tabs/4-other.md b/_install_tabs/4-other.md new file mode 100644 index 0000000000..d60085c17f --- /dev/null +++ b/_install_tabs/4-other.md @@ -0,0 +1,17 @@ +--- +tabId: other +tabLabel: Other +fallbackNoJS: true +--- +
    +
    +
    +
    + +

    Follow the documentation from Coursier on how to install and run cs setup.

    +
    +
    +
    +
    diff --git a/_sass/layout/alt-details.scss b/_sass/layout/alt-details.scss new file mode 100644 index 0000000000..aae4addefb --- /dev/null +++ b/_sass/layout/alt-details.scss @@ -0,0 +1,46 @@ +// ALT-DETAILS +//------------------------------------------------ +//------------------------------------------------ + +.alt-details { + margin: 10px 0px; + + button.alt-details-toggle { + width: 100%; + border: none; + background-color: #b635c4; + padding: 5px 10px; + border-radius: 15px; + font-size: $font-size-medium; + cursor: pointer; + font-weight: 500; + color: #fff; + + &:hover { + background-color: #941fa1; + } + + &:after { + content: "\f13a"; // + font-family: "Font Awesome 5 Free"; + font-weight: 900; + font-size: 15px; + color: #fff; + float: right; + margin-top: 2px; + } + + &.alt-details-closed:after { + content: "\f138"; // + } + } + + .alt-details-detail { + background-color: rgb(248, 226, 255); + border: 1px solid rgb(239, 207, 248); + padding-top: 25px; + padding-bottom: 10px; + margin-top: -15px; + margin-bottom: 10px; + } +} diff --git a/_sass/layout/scala-in-action.scss b/_sass/layout/scala-in-action.scss new file mode 100755 index 0000000000..404c9bbd7f --- /dev/null +++ b/_sass/layout/scala-in-action.scss @@ -0,0 +1,158 @@ +// SCALA-IN-ACTION +//------------------------------------------------ +//------------------------------------------------ + +.scala-in-action { + + .tabcontent { + .scala-text { + .alt-details { + button.alt-details-toggle { + border: 1px solid #a0dff0; + background-color: #d1e5eb; + color: $gray; + + &:hover { + background-color: #c9e3eb; + } + + &:after { + color: $gray; + } + } + + .alt-details-detail { + background-color: $gray-light; + border: 1px solid darken($gray-light, 3%); + } + } + } + } + + .scala-in-action-content { + transition: $base-transition; + + + .scala-in-action-code { + // display: none; + // background: $gray-dark; + padding: 20px 0; + + .wrap { + margin-bottom: 0px; + } + + .snippet { + position: relative; + margin: 10px 0px; + cursor: default; + width: 100%; + + &:hover { + .buttons { + opacity: 0.95; + + &:active { + opacity: 0.3; + } + } + } + + .buttons { + position: absolute; + right: 4px; + top: 5px; + transition: all .2s ease; + display: flex; + opacity: 0; + flex-direction: row-reverse; + justify-content: flex-start; + + button { + outline: none; + background: #fff; + border: none; + font-size: $font-size-medium; + color: rgba($gray, .6); + cursor: pointer; + + i { + font-weight: $font-bold; + } + } + } + + pre.snippet-code { + margin: 0px; + display: block; + overflow-x: auto; + + code { + overflow-x: auto; + display: block; + } + } + } + + .scala-code { + + @include span-columns(7); + + @include bp(large) { + @include span-columns(12); + } + } + + .scala-text { + + details { + summary { + + &:hover { + background-color: lighten($gray-lighter, 5%); + } + } + + summary>* { + display: inline; + } + } + + code { + padding: 3px 6px; + color: #859900; + background-color: #fff; + border-radius: 10px; + border: 1px solid $gray-light; + } + + .snippet { + pre.snippet-code { + code { + border: 1px solid darken($gray-light, 10%); + } + } + } + + @include span-columns(5); + + @include bp(large) { + @include span-columns(12); + } + + h3 { + font-size: 1.525rem; + margin-bottom: 20px; + } + + p { + color: $base-font-color; + } + + &.scala-text-large { + @include span-columns(12); + } + } + } + } +} diff --git a/_sass/layout/tabsection.scss b/_sass/layout/tabsection.scss new file mode 100755 index 0000000000..71c2777183 --- /dev/null +++ b/_sass/layout/tabsection.scss @@ -0,0 +1,60 @@ +// TABSECTION +//------------------------------------------------ +//------------------------------------------------ + +.recommended-install { + margin-top: -2em; + .tabsection { + background: $gray-lighter; + } +} + +.tabsection { + + &.inline-tabs { + margin: 20px 0px; + } + + /* Style the tab */ + .tab { + overflow: hidden; + margin-bottom: -12px; + } + + /* Style the buttons that are used to open the tab content */ + .tab button { + font-family: $heading-font-family; + font-size: $font-size-medium; + font-weight: $font-bold; + color: lighten($gray, 25%); + background-color: inherit; + float: left; + border: none; + border-radius: 30px; + outline: none; + cursor: pointer; + padding: 14px 16px; + } + + /* Change background color of buttons on hover */ + .tab button:hover { + color: #fff; + background-color: $gray; + border-bottom: $base-border-white; + } + + /* Create an active/current tablink class */ + .tab button.active { + background-color: $gray; + border-bottom: $base-border-white; + color: #fff; + } + + /* Style the tab content */ + .tabcontent { + display: none; + padding: 0px 2px; + border-top: none; + transition: all .5s linear; + } +} diff --git a/resources/css/style.scss b/resources/css/style.scss index fb5c150296..02ed07ce47 100755 --- a/resources/css/style.scss +++ b/resources/css/style.scss @@ -28,6 +28,9 @@ @import 'layout/twitter-feed'; @import 'layout/cheatsheet'; @import 'layout/ides'; +@import 'layout/alt-details'; +@import 'layout/tabsection'; +@import 'layout/scala-in-action'; @import 'layout/nutshell'; @import 'layout/overviews'; @import 'layout/sips'; diff --git a/resources/js/functions.js b/resources/js/functions.js index e52eddd5cf..cd5ac73eac 100644 --- a/resources/js/functions.js +++ b/resources/js/functions.js @@ -404,6 +404,58 @@ $(document).ready(function() { } }); +const toggleElement = (evt, elemId) => { + const btn = evt.target; + const elem = document.getElementById(elemId); + if (elem.style.display === "none") { + elem.style.display = "block"; + } else { + elem.style.display = "none"; + } + $(btn).toggleClass("alt-details-closed"); +} + +$(document).ready(() => { + $('.alt-details-toggle').click(); +}); + +function copySnippet(evt) { + const snippet = evt.target.closest('.snippet').querySelector('.snippet-code'); + const code = snippet.querySelector('code').innerText; + window.navigator.clipboard.writeText(code) +} + +function openTab(evt, category, tabName) { + // Get all elements with class="tabcontent" and hide them + $('.tabcontent-' + category + '.tabcontent').css('display', 'none'); + + const queried = evt.target; + + // Get all elements with class="tablinks" and remove the class "active" + $('.tablinks-' + category + '.tablinks').removeClass('active'); + + // Show the current tab, and add an "active" class to the button that opened the tab + document.getElementById(category + '-' + tabName).style.display = "block"; + queried.className += " active"; +} + +$(document).ready(() => { + const defaultTabs = document.getElementsByClassName('default-tab'); + for (i = 0; i < defaultTabs.length; i++) { + defaultTabs[i].click(); + } +}); + +$(document).ready(function () { + if ($(".main-download").length) { + let os = getOS(); + if (os === 'unix') { + os = 'linux'; + } + $("#get-started-tab-" + os).click(); + } +}); + var image = { width: 1680, height: 1100 @@ -467,18 +519,18 @@ $('#filter-glossary-terms').focus(); //Footer scroll to top button -$(document).ready(function(){ - $(window).scroll(function(){ - if ($(this).scrollTop() > 100) { - $('#scroll-to-top-btn').fadeIn(); - } else { - $('#scroll-to-top-btn').fadeOut(); - } - }); - $('#scroll-to-top-btn').click(function(){ - $("html, body").animate({ scrollTop: 0 }, 600); - return false; - }); +$(document).ready(function(){ + $(window).scroll(function(){ + if ($(this).scrollTop() > 100) { + $('#scroll-to-top-btn').fadeIn(); + } else { + $('#scroll-to-top-btn').fadeOut(); + } + }); + $('#scroll-to-top-btn').click(function(){ + $("html, body").animate({ scrollTop: 0 }, 600); + return false; + }); }); //Contributors widget @@ -490,7 +542,7 @@ $(document).ready(function () { * - some files aren't prefixed with underscore, see rootFiles * - some files are placed in _overviews but rendered to its folder, see overviewsFolders */ - + let rootFiles = ['getting-started', 'learn', 'glossary']; let overviewsFolders = ['FAQ', 'cheatsheets', 'collections', 'compiler-options', 'core', 'jdk-compatibility', 'macros', 'parallel-collections', From 71cf7e946fc3377ab35ae90e46cf3a9a9d8bc531 Mon Sep 17 00:00:00 2001 From: Jamie Thompson Date: Fri, 29 Apr 2022 18:03:35 +0200 Subject: [PATCH 0643/1870] add tabs to other translated pages --- _fr/getting-started/index.md | 41 +++--------- _includes/_ja/getting-started.md | 39 +++--------- _includes/alt-details.html | 6 ++ _includes/code-snippet.html | 2 + _includes/getting-started.md | 45 +++++++------- _includes/tabsection.html | 4 ++ _install_tabs/1-macos.md | 20 +++--- _install_tabs/2-linux.md | 1 + _install_tabs/3-windows.md | 1 + _install_tabs/4-other.md | 1 + _install_tabs/fr-1-macos.md | 26 ++++++++ _install_tabs/fr-2-linux.md | 14 +++++ _install_tabs/fr-3-windows.md | 14 +++++ _install_tabs/fr-4-other.md | 19 ++++++ _install_tabs/ja-1-macos.md | 26 ++++++++ _install_tabs/ja-2-linux.md | 14 +++++ _install_tabs/ja-3-windows.md | 14 +++++ _install_tabs/ja-4-other.md | 18 ++++++ _layouts/downloadpage.html | 100 ------------------------------ _sass/layout/scala-in-action.scss | 3 +- resources/js/functions.js | 30 +++------ 21 files changed, 225 insertions(+), 213 deletions(-) create mode 100644 _includes/alt-details.html create mode 100644 _install_tabs/fr-1-macos.md create mode 100644 _install_tabs/fr-2-linux.md create mode 100644 _install_tabs/fr-3-windows.md create mode 100644 _install_tabs/fr-4-other.md create mode 100644 _install_tabs/ja-1-macos.md create mode 100644 _install_tabs/ja-2-linux.md create mode 100644 _install_tabs/ja-3-windows.md create mode 100644 _install_tabs/ja-4-other.md delete mode 100644 _layouts/downloadpage.html diff --git a/_fr/getting-started/index.md b/_fr/getting-started/index.md index f9b05d7df9..397c18e59c 100644 --- a/_fr/getting-started/index.md +++ b/_fr/getting-started/index.md @@ -24,13 +24,19 @@ Nous recommandons l'utilisation de l'outil d'installation "Coursier" qui va auto ### Utilisation de l'installateur Scala (recommandé) L'installateur Scala est un outil nommé [Coursier](https://get-coursier.io/docs/cli-overview), la commande principale de l'outil est `cs`. -Il s'assure que la JVM est les outils standards de Scala sont installés sur votre système. +Il s'assure que la JVM est les outils standards de Scala sont installés sur votre système. Installez-le sur votre système avec les instructions suivantes.
    -
    -

    Suivez les instructions pour installer la commande cs puis exécutez :

    -

    $ ./cs setup

    +
    @@ -165,30 +171,3 @@ Une fois que vous avez terminé le tutoriel ce dessus, vous pouvez consulter : Il y a plusieurs listes de diffusion et canaux de discussions instantanés si vous souhaitez rencontrer rapidement d'autres utilisateurs de Scala. Allez faire un tour sur notre page [community](https://scala-lang.org/community/) pour consulter la liste des ces ressources et obtenir de l'aide. Traduction par Antoine Pointeau. - - - - - - - - - diff --git a/_includes/_ja/getting-started.md b/_includes/_ja/getting-started.md index 1df3b33933..f747ff92f7 100644 --- a/_includes/_ja/getting-started.md +++ b/_includes/_ja/getting-started.md @@ -18,13 +18,18 @@ Scala のインストーラーは[Coursier](https://get-coursier.io/docs/cli-ove 以下の手順でお使いのシステムにインストールしてください。
    -
    -

    Follow the instructions to install the cs launcher then run:

    -

    $ ./cs setup

    +
    - `cs setup` は JVM の管理だけでなく、便利なコマンドラインツールもインストールします: - JDK (インストール済みでなければ) @@ -141,29 +146,3 @@ IDE の使用に慣れている場合は、IDE から_Main.scala_のコードを ### (日本語のみ追記) Scala について日本語で質問したい場合、Twitterでつぶやくと気づいた人が教えてくれます。 - - - - - - - - - diff --git a/_includes/alt-details.html b/_includes/alt-details.html new file mode 100644 index 0000000000..52e8d9cf67 --- /dev/null +++ b/_includes/alt-details.html @@ -0,0 +1,6 @@ +
    + +
    + {{include.detail}} +
    +
    diff --git a/_includes/code-snippet.html b/_includes/code-snippet.html index 0286da8b4d..6267a08ad3 100644 --- a/_includes/code-snippet.html +++ b/_includes/code-snippet.html @@ -1,6 +1,8 @@
    + {% unless include.nocopy %}
    + {% endunless %}
    {{include.codeSnippet}}
    diff --git a/_includes/getting-started.md b/_includes/getting-started.md index 2df5661769..45c42b166f 100644 --- a/_includes/getting-started.md +++ b/_includes/getting-started.md @@ -20,31 +20,32 @@ The Scala installer is a tool named [Coursier](https://get-coursier.io/docs/cli- It ensures that a JVM and standard Scala tools are installed on your system. Install it on your system with the following instructions. +{% capture scalaDemo %}$ scala -version +Scala code runner version {{site.scala-3-version}} -- Copyright 2002-2022, LAMP/EPFL{% endcapture %} +
    -
    From 113f485c10c9143d9a5f081974a87061903b5a0d Mon Sep 17 00:00:00 2001 From: Julien Richard-Foy Date: Tue, 6 Jul 2021 16:29:35 +0200 Subject: [PATCH 0345/1870] Copy https://dotty.epfl.ch/docs/reference into https://docs.scala-lang.org/scala3/reference Content was taken from commit 270bd8b0f5af338be73790082d774516a83a73b5 --- _config.yml | 9 +- _data/scala3-doc-nav-header.yml | 2 +- _includes/sidebar-toc-multipage-overview.html | 2 +- _ja/index.md | 2 +- _ja/scala3/contribute-to-docs.md | 2 +- _ja/scala3/index.md | 2 +- _ja/scala3/new-in-scala3.md | 2 +- _overviews/FAQ/index.md | 4 +- _overviews/scala3-book/ca-summary.md | 2 +- _overviews/scala3-book/scala-features.md | 4 +- _overviews/scala3-macros/other-resources.md | 2 +- _overviews/scala3-macros/tutorial/inline.md | 2 +- .../compatibility-classpath.md | 36 +- .../compatibility-metaprogramming.md | 2 +- .../incompat-contextual-abstractions.md | 2 +- .../incompat-dropped-features.md | 10 +- .../incompat-other-changes.md | 2 +- .../incompat-type-inference.md | 2 +- .../scala3-migration/incompatibility-table.md | 4 +- _overviews/scala3-reference/overview.md | 7 - _scala3-reference/changed-features.md | 9 + .../changed-features/compiler-plugins.md | 130 +++ .../changed-features/eta-expansion-spec.md | 77 ++ .../changed-features/eta-expansion.md | 44 + .../implicit-conversions-spec.md | 117 +++ .../changed-features/implicit-conversions.md | 66 ++ .../changed-features/implicit-resolution.md | 170 ++++ _scala3-reference/changed-features/imports.md | 61 ++ .../changed-features/interpolation-escapes.md | 14 + .../changed-features/lazy-vals-init.md | 82 ++ .../changed-features/main-functions.md | 91 ++ .../changed-features/match-syntax.md | 58 ++ .../changed-features/numeric-literals.md | 264 ++++++ .../changed-features/operators.md | 167 ++++ .../changed-features/overload-resolution.md | 94 ++ .../changed-features/pattern-bindings.md | 62 ++ .../changed-features/pattern-matching.md | 246 ++++++ .../changed-features/structural-types-spec.md | 153 ++++ .../changed-features/structural-types.md | 194 ++++ .../changed-features/type-checking.md | 9 + .../changed-features/type-inference.md | 12 + .../changed-features/vararg-splices.md | 42 + .../changed-features/wildcards.md | 52 ++ _scala3-reference/contextual.md | 85 ++ .../contextual/by-name-context-parameters.md | 67 ++ .../contextual/context-bounds.md | 48 + .../contextual/context-functions-spec.md | 79 ++ .../contextual/context-functions.md | 156 ++++ _scala3-reference/contextual/conversions.md | 78 ++ .../contextual/derivation-macro.md | 204 +++++ _scala3-reference/contextual/derivation.md | 405 +++++++++ .../contextual/extension-methods.md | 308 +++++++ _scala3-reference/contextual/given-imports.md | 119 +++ _scala3-reference/contextual/givens.md | 173 ++++ .../contextual/multiversal-equality.md | 229 +++++ .../contextual/relationship-implicits.md | 208 +++++ .../right-associative-extension-methods.md | 52 ++ _scala3-reference/contextual/type-classes.md | 284 ++++++ _scala3-reference/contextual/using-clauses.md | 155 ++++ _scala3-reference/dropped-features.md | 9 + .../dropped-features/auto-apply.md | 98 +++ .../dropped-features/class-shadowing-spec.md | 26 + .../dropped-features/class-shadowing.md | 35 + .../dropped-features/delayed-init.md | 32 + .../dropped-features/do-while.md | 43 + .../dropped-features/early-initializers.md | 18 + .../dropped-features/existential-types.md | 37 + _scala3-reference/dropped-features/limit22.md | 19 + _scala3-reference/dropped-features/macros.md | 18 + .../dropped-features/nonlocal-returns.md | 26 + .../dropped-features/package-objects.md | 49 ++ .../dropped-features/procedure-syntax.md | 21 + _scala3-reference/dropped-features/symlits.md | 12 + .../dropped-features/this-qualifier.md | 17 + .../dropped-features/type-projection.md | 20 + .../dropped-features/weak-conformance-spec.md | 54 ++ .../dropped-features/weak-conformance.md | 49 ++ .../dropped-features/wildcard-init.md | 25 + _scala3-reference/dropped-features/xml.md | 41 + _scala3-reference/enums.md | 9 + _scala3-reference/enums/adts.md | 175 ++++ _scala3-reference/enums/desugarEnums.md | 217 +++++ _scala3-reference/enums/enums.md | 196 +++++ _scala3-reference/experimental/canthrow.md | 242 +++++ .../experimental/erased-defs-spec.md | 65 ++ _scala3-reference/experimental/erased-defs.md | 229 +++++ _scala3-reference/features-classification.md | 201 +++++ .../language-versions.md | 2 +- _scala3-reference/metaprogramming.md | 49 ++ .../metaprogramming/compiletime-ops.md | 296 +++++++ _scala3-reference/metaprogramming/inline.md | 380 ++++++++ .../metaprogramming/macros-spec.md | 254 ++++++ _scala3-reference/metaprogramming/macros.md | 825 ++++++++++++++++++ .../metaprogramming/reflection.md | 133 +++ .../metaprogramming/simple-smp.md | 232 +++++ _scala3-reference/metaprogramming/staging.md | 123 +++ .../metaprogramming/tasty-inspect.md | 59 ++ _scala3-reference/new-types.md | 9 + .../dependent-function-types-spec.md | 125 +++ .../new-types/dependent-function-types.md | 51 ++ .../new-types/intersection-types-spec.md | 108 +++ .../new-types/intersection-types.md | 70 ++ _scala3-reference/new-types/match-types.md | 247 ++++++ .../new-types/polymorphic-function-types.md | 96 ++ .../new-types/type-lambdas-spec.md | 119 +++ _scala3-reference/new-types/type-lambdas.md | 19 + .../new-types/union-types-spec.md | 172 ++++ _scala3-reference/new-types/union-types.md | 48 + _scala3-reference/other-new-features.md | 9 + .../other-new-features/control-syntax.md | 49 ++ .../creator-applications.md | 59 ++ .../other-new-features/explicit-nulls.md | 540 ++++++++++++ .../other-new-features/export.md | 179 ++++ .../indentation-experimental.md | 83 ++ .../other-new-features/indentation.md | 455 ++++++++++ .../other-new-features/kind-polymorphism.md | 49 ++ .../other-new-features/matchable.md | 143 +++ .../other-new-features/named-typeargs-spec.md | 39 + .../other-new-features/named-typeargs.md | 33 + .../other-new-features/opaques-details.md | 123 +++ .../other-new-features/opaques.md | 169 ++++ .../other-new-features/open-classes.md | 82 ++ .../parameter-untupling-spec.md | 88 ++ .../other-new-features/parameter-untupling.md | 48 + .../other-new-features/safe-initialization.md | 246 ++++++ .../other-new-features/targetName.md | 122 +++ .../threadUnsafe-annotation.md | 20 + .../other-new-features/trait-parameters.md | 90 ++ .../other-new-features/transparent-traits.md | 72 ++ .../other-new-features/type-test.md | 183 ++++ _scala3-reference/overview.md | 155 ++++ _scala3-reference/soft-modifier.md | 27 + _scala3-reference/syntax.md | 445 ++++++++++ _zh-cn/index.md | 2 +- index.md | 2 +- .../explicit-nulls-type-hierarchy.png | Bin 0 -> 57752 bytes scala3/contribute-to-docs.md | 6 +- scala3/guides.md | 4 - scala3/index.md | 2 +- scala3/new-in-scala3.md | 2 +- 140 files changed, 13826 insertions(+), 64 deletions(-) delete mode 100644 _overviews/scala3-reference/overview.md create mode 100644 _scala3-reference/changed-features.md create mode 100644 _scala3-reference/changed-features/compiler-plugins.md create mode 100644 _scala3-reference/changed-features/eta-expansion-spec.md create mode 100644 _scala3-reference/changed-features/eta-expansion.md create mode 100644 _scala3-reference/changed-features/implicit-conversions-spec.md create mode 100644 _scala3-reference/changed-features/implicit-conversions.md create mode 100644 _scala3-reference/changed-features/implicit-resolution.md create mode 100644 _scala3-reference/changed-features/imports.md create mode 100644 _scala3-reference/changed-features/interpolation-escapes.md create mode 100644 _scala3-reference/changed-features/lazy-vals-init.md create mode 100644 _scala3-reference/changed-features/main-functions.md create mode 100644 _scala3-reference/changed-features/match-syntax.md create mode 100644 _scala3-reference/changed-features/numeric-literals.md create mode 100644 _scala3-reference/changed-features/operators.md create mode 100644 _scala3-reference/changed-features/overload-resolution.md create mode 100644 _scala3-reference/changed-features/pattern-bindings.md create mode 100644 _scala3-reference/changed-features/pattern-matching.md create mode 100644 _scala3-reference/changed-features/structural-types-spec.md create mode 100644 _scala3-reference/changed-features/structural-types.md create mode 100644 _scala3-reference/changed-features/type-checking.md create mode 100644 _scala3-reference/changed-features/type-inference.md create mode 100644 _scala3-reference/changed-features/vararg-splices.md create mode 100644 _scala3-reference/changed-features/wildcards.md create mode 100644 _scala3-reference/contextual.md create mode 100644 _scala3-reference/contextual/by-name-context-parameters.md create mode 100644 _scala3-reference/contextual/context-bounds.md create mode 100644 _scala3-reference/contextual/context-functions-spec.md create mode 100644 _scala3-reference/contextual/context-functions.md create mode 100644 _scala3-reference/contextual/conversions.md create mode 100644 _scala3-reference/contextual/derivation-macro.md create mode 100644 _scala3-reference/contextual/derivation.md create mode 100644 _scala3-reference/contextual/extension-methods.md create mode 100644 _scala3-reference/contextual/given-imports.md create mode 100644 _scala3-reference/contextual/givens.md create mode 100644 _scala3-reference/contextual/multiversal-equality.md create mode 100644 _scala3-reference/contextual/relationship-implicits.md create mode 100644 _scala3-reference/contextual/right-associative-extension-methods.md create mode 100644 _scala3-reference/contextual/type-classes.md create mode 100644 _scala3-reference/contextual/using-clauses.md create mode 100644 _scala3-reference/dropped-features.md create mode 100644 _scala3-reference/dropped-features/auto-apply.md create mode 100644 _scala3-reference/dropped-features/class-shadowing-spec.md create mode 100644 _scala3-reference/dropped-features/class-shadowing.md create mode 100644 _scala3-reference/dropped-features/delayed-init.md create mode 100644 _scala3-reference/dropped-features/do-while.md create mode 100644 _scala3-reference/dropped-features/early-initializers.md create mode 100644 _scala3-reference/dropped-features/existential-types.md create mode 100644 _scala3-reference/dropped-features/limit22.md create mode 100644 _scala3-reference/dropped-features/macros.md create mode 100644 _scala3-reference/dropped-features/nonlocal-returns.md create mode 100644 _scala3-reference/dropped-features/package-objects.md create mode 100644 _scala3-reference/dropped-features/procedure-syntax.md create mode 100644 _scala3-reference/dropped-features/symlits.md create mode 100644 _scala3-reference/dropped-features/this-qualifier.md create mode 100644 _scala3-reference/dropped-features/type-projection.md create mode 100644 _scala3-reference/dropped-features/weak-conformance-spec.md create mode 100644 _scala3-reference/dropped-features/weak-conformance.md create mode 100644 _scala3-reference/dropped-features/wildcard-init.md create mode 100644 _scala3-reference/dropped-features/xml.md create mode 100644 _scala3-reference/enums.md create mode 100644 _scala3-reference/enums/adts.md create mode 100644 _scala3-reference/enums/desugarEnums.md create mode 100644 _scala3-reference/enums/enums.md create mode 100644 _scala3-reference/experimental/canthrow.md create mode 100644 _scala3-reference/experimental/erased-defs-spec.md create mode 100644 _scala3-reference/experimental/erased-defs.md create mode 100644 _scala3-reference/features-classification.md rename {_overviews/scala3-reference => _scala3-reference}/language-versions.md (99%) create mode 100644 _scala3-reference/metaprogramming.md create mode 100644 _scala3-reference/metaprogramming/compiletime-ops.md create mode 100644 _scala3-reference/metaprogramming/inline.md create mode 100644 _scala3-reference/metaprogramming/macros-spec.md create mode 100644 _scala3-reference/metaprogramming/macros.md create mode 100644 _scala3-reference/metaprogramming/reflection.md create mode 100644 _scala3-reference/metaprogramming/simple-smp.md create mode 100644 _scala3-reference/metaprogramming/staging.md create mode 100644 _scala3-reference/metaprogramming/tasty-inspect.md create mode 100644 _scala3-reference/new-types.md create mode 100644 _scala3-reference/new-types/dependent-function-types-spec.md create mode 100644 _scala3-reference/new-types/dependent-function-types.md create mode 100644 _scala3-reference/new-types/intersection-types-spec.md create mode 100644 _scala3-reference/new-types/intersection-types.md create mode 100644 _scala3-reference/new-types/match-types.md create mode 100644 _scala3-reference/new-types/polymorphic-function-types.md create mode 100644 _scala3-reference/new-types/type-lambdas-spec.md create mode 100644 _scala3-reference/new-types/type-lambdas.md create mode 100644 _scala3-reference/new-types/union-types-spec.md create mode 100644 _scala3-reference/new-types/union-types.md create mode 100644 _scala3-reference/other-new-features.md create mode 100644 _scala3-reference/other-new-features/control-syntax.md create mode 100644 _scala3-reference/other-new-features/creator-applications.md create mode 100644 _scala3-reference/other-new-features/explicit-nulls.md create mode 100644 _scala3-reference/other-new-features/export.md create mode 100644 _scala3-reference/other-new-features/indentation-experimental.md create mode 100644 _scala3-reference/other-new-features/indentation.md create mode 100644 _scala3-reference/other-new-features/kind-polymorphism.md create mode 100644 _scala3-reference/other-new-features/matchable.md create mode 100644 _scala3-reference/other-new-features/named-typeargs-spec.md create mode 100644 _scala3-reference/other-new-features/named-typeargs.md create mode 100644 _scala3-reference/other-new-features/opaques-details.md create mode 100644 _scala3-reference/other-new-features/opaques.md create mode 100644 _scala3-reference/other-new-features/open-classes.md create mode 100644 _scala3-reference/other-new-features/parameter-untupling-spec.md create mode 100644 _scala3-reference/other-new-features/parameter-untupling.md create mode 100644 _scala3-reference/other-new-features/safe-initialization.md create mode 100644 _scala3-reference/other-new-features/targetName.md create mode 100644 _scala3-reference/other-new-features/threadUnsafe-annotation.md create mode 100644 _scala3-reference/other-new-features/trait-parameters.md create mode 100644 _scala3-reference/other-new-features/transparent-traits.md create mode 100644 _scala3-reference/other-new-features/type-test.md create mode 100644 _scala3-reference/overview.md create mode 100644 _scala3-reference/soft-modifier.md create mode 100644 _scala3-reference/syntax.md create mode 100644 resources/images/scala3/explicit-nulls/explicit-nulls-type-hierarchy.png diff --git a/_config.yml b/_config.yml index 395bed4a34..64f78bc718 100644 --- a/_config.yml +++ b/_config.yml @@ -45,6 +45,8 @@ collections: getting-started: output: true permalink: /:collection/:path.html + scala3-reference: # not really a collection, but this is the only way I found to be able to generate the navigation bar on the right + output: true ja: # Japanese translations output: true permalink: /:collection/:path.html @@ -125,13 +127,14 @@ defaults: permalink: "/scala3/guides/macros/:title.html" - scope: - path: "_overviews/scala3-reference" + path: "_scala3-reference" values: scala3: true partof: scala3-reference + type: section overview-name: "Scala 3 Language Reference" layout: multipage-overview - permalink: "/scala3/guides/reference/:title.html" + permalink: "/scala3/reference/:path.html" - scope: path: "scala3" @@ -142,7 +145,7 @@ defaults: highlighter: rouge permalink: /:categories/:title.html:output_ext baseurl: -scala3ref: "/scala3/guides/reference" +scala3ref: "/scala3/reference" exclude: ["vendor"] plugins: - jekyll-redirect-from diff --git a/_data/scala3-doc-nav-header.yml b/_data/scala3-doc-nav-header.yml index c390278c6d..94e3bfa5c5 100644 --- a/_data/scala3-doc-nav-header.yml +++ b/_data/scala3-doc-nav-header.yml @@ -12,6 +12,6 @@ - title: Migrate url: "/scala3/guides/migration/compatibility-intro.html" - title: Reference - url: "https://dotty.epfl.ch/docs/reference/overview.html" + url: "/scala3/reference/overview.html" - title: API url: "https://dotty.epfl.ch/api/index.html" diff --git a/_includes/sidebar-toc-multipage-overview.html b/_includes/sidebar-toc-multipage-overview.html index ceab98320f..168f4b5950 100644 --- a/_includes/sidebar-toc-multipage-overview.html +++ b/_includes/sidebar-toc-multipage-overview.html @@ -9,7 +9,7 @@
    Contents
    {% endif %}
    -
    -

    Gitter

    - Real-time (topic-specialized) chat +
    +

    Chat

    + Real-time chat on Discord
    -
    ! Jekyll/Marulu limitation {% endcomment %} +

    From f317bfc00ca5272eeaa6556cb395e3dae8e0f9cc Mon Sep 17 00:00:00 2001 From: Vojin Jovanovic Date: Fri, 19 Apr 2013 18:07:58 +0200 Subject: [PATCH 0018/1870] Bug reporting guide. --- contribute/bug-reporting-guide.md | 120 +++++++++++++++++------------- 1 file changed, 70 insertions(+), 50 deletions(-) diff --git a/contribute/bug-reporting-guide.md b/contribute/bug-reporting-guide.md index 345dc03034..9b89f60ef4 100644 --- a/contribute/bug-reporting-guide.md +++ b/contribute/bug-reporting-guide.md @@ -3,53 +3,73 @@ layout: page title: Bug Reporting --- -# Reporting bugs to the Scala project - -The Scala project tracker is located at: - -> [http://issues.scala-lang.org](http://issues.scala-lang.org) - - -{% comment %} -WHAT THIS PAGE SHOULD TALK ABOUT: - - tracker - - what's a bug and what's not a bug? - - is it in the scala area? - - library - - compiler - - reflection - - scaladoc - - external libraries have their own trackers: - - akka - - play - - lift - - slick - - if it's a compiler crasher, it's a bug - - if the code generated throws a VerifyError, it's a bug - - if it's a regression, i.e. it worked in the previous version, it's a bug - - if the code generated is not doing what you expected, then it may or may not be a bug - - minimize the problem - - decouple from libraries - - decouple from complex build systems - - it could be a separate compilation issue - does it happen if you clean everything before? - - create small and self-contained files that, when compiled, will exhibit the behavior - - even if the behavior is not what you hoped for, it might still be correct - - if possible, look at the Scala Reference Specification and SIP documents - - or ask on the scala-internals mailing list - - okay, I'm sure it's a bug, now what? - - search for similar bugs - - the exception name and phase should be the best keywords to search for - - if the bug is there, add your test case as a comment. When someone picks up the bug, they will have to add your test case as a confirmation test - - if there's no similar bug - - try to fill in as many fields as possible: - - scala version - - component (if you know) - - labels - - assigneee may be left empty, as all new bugs are triaged - - environment - Machine architecture, Operating system, Java virtual machine version, any other environment necessary - - description - - - the test case - - the commands to trigger the bug - - the expected output - - the actual output -{% endcomment %} +# Reporting Bugs to the Scala Project + +The Scala project tracker is located at [http://issues.scala-lang.org](http://issues.scala-lang.org). Before you submit a bug make sure that it is certainly a bug by following instructions in *Is it a Bug?*. + +## Is it a Bug? + +The first step in identifying a bug is to identify which component of the Scala distribution is affected. First, ensure that your issue falls within any of the following categories: + + - **Library** bugs typically manifest themselves as run-time exceptions, or as *unexpected*/*unintuitive* behavior of Scala Standard Library methods. + - **Compiler** errors are manifested as compile time exceptions, unexpected behavior of your code at run time, or invalid behavior of the type system. + - **Reflection** are bugs that appear in the ‘scala.reflect’ package. For the *reflection* bugs , the same rules apply as for the *library* bugs. + - **Scaladoc** bugs are manifested as a logical problems in the information it presents (that is, the displayed information is incorrect, such as an incorrect subclassing relationship), or incorrect behavior of the user interface. If you'd like to suggest a change in the content of the documentation, please submit a pull request (possible to do in the browser using GitHub, which is easier and faster than filing a bug). Please file a bug about the content of documentation only if you cannot provide a suggestion for its fix. + +If your issue is related to any of the following external libraries, make sure to use the relevant project's issue tracker: + + - [Akka](http://doc.akka.io/docs/akka/current/project/issue-tracking.html) + - [Play!](http://github.com/playframework/Play20/issues) + - [Slick](http://github.com/slick/slick/issues) + - [Actors Migration Kit](http://github.com/scala/actors-migration/issues?state=open) + +The following are generally considered to be bugs: + +- **Scala Compiler Crash** If the Scala compiler is crashing with an internal error (compile time exception) you have certainly found a bug, and can move on to the next section of this document on reporting confirmed bugs. +- **Regressions** If some code snippet worked in a previous Scala release, but now no longer compiles or results in an exception, it is probably a regression. +- **Verify Errors** happen when the compiled Scala program is loaded to the Java Virtual Machine. If you're getting a *Verify Error*, you've usually found a bug. Make sure first that your project is not using stale `.class` files before reporting a new issue. + +If you have a code snippet that is resulting in bytecode which you believe is behaving incorrectly, you may or may not have found a bug. Before reporting your issue, please attempt the following: + +* Make sure you minimize your problem. To correctly minimize the problem follow the following instructions: + + 1. Gradually take apart the offensive code snippet until you believe you have the simplest representation of your problem. + + 2. Ensure that you have decoupled your code snippet from any library that could be introducing the offensive behavior. One way to achieve this is to try to recompile the offensive code snippet in isolation, outside of the context of any complex build environment. + + 3. Make sure you are compiling your project from a clean slate. Your problem could be related to separate compilation, which is difficult to detect without a clean build with new `.class` files. + +* Keep in mind that the behavior you are witnessing could be intended. Good resources for verifying whether or not behavior is intended is either in the [Scala Improvement Proposal Documents](http://docs.scala-lang.org/sips/sip-list.html) or in the [Scala Language Specification](http://www.scala-lang.org/docu/files/ScalaReference.pdf). If in doubt, you may always ask on the [scala-internals mailing list](https://groups.google.com/forum/?fromgroups#!forum/scala-internals) + +In general, if you find yourself stuck on any of these steps, asking on one of following Scala mailing lists can be helpful: + + - For compiler bugs use the [scala-internals](https://groups.google.com/forum/?fromgroups#!forum/scala-internals) mailing list. + - For unexpected behavior use [scala-language](https://groups.google.com/forum/?fromgroups#!forum/scala-language), or [scala-user](https://groups.google.com/forum/?fromgroups#!forum/scala-user) mailing lists. + +## Reporting Confirmed Bugs is a Sin + +Before reporting your bug, make sure to check the issue tracker for other similar bugs. The exception name or a compiler phase are the best keywords to search for. If you are experiencing unexpected behavior search for method/class names where it happens. Your issue might already be reported, and a workaround might already be available for you take advantage of. If your issue *is* reported, be sure to add your test case as a comment. + +**Note:** reporting a bug that already exists creates an additional overhead for you, the Scala Team, and all people that search the issue database. To avoid this inconvenience make sure that you thoroughly search for an existing issue. + +If you cannot find your issue in the issue tracker, create a new bug. The details about creating a bug report are in the following section. + +## Creating a Bug Report + +Please make sure to fill in as many fields as possible. Make sure you've indicated the following: + + 1. **Exact Scala version** that you are using. For example, `2.10.1` or `0.11.0-RC`. If the bug happens in mulitple versions indicate all of them. + 2. **The component** that is affected by the bug. For example, the Standard Library, Scaladoc, etc. + 3. **Labels** related to your issue. For example, if you think your issue is related to the typechecker, and if you have successfully minimized your issue, label your bug as "typechecker" and "minimized" + 4. **Running environment**. Are you running on Linux? Windows? What JVM version are you using? + +In order for us to quickly triage the bug that you've found, it's important that the code snippet which produces the observed issue is as minimized as possible. For advice on minimizing your code snippet, please see the appropriate subsection of the above (Is it a Bug?). + +### Description + +In the description of your issue, be as detailed as you can. Bug reports which have the following information included are typically understood, triaged, and fixed very quickly: + + 1. Include a test case (minimized if possible) enabling us to reproduce the problematic behavior. + 2. The expected output. + 3. The actual output. + 4. If you have already looked into the issue provide interesting insights or proposals for fixing the issue. \ No newline at end of file From fe39e1214a9b70ac76f223bde9670f66187b5810 Mon Sep 17 00:00:00 2001 From: Manojo Date: Tue, 23 Apr 2013 11:40:46 +0200 Subject: [PATCH 0019/1870] contribute -> get-involved --- contribute/bug-reporting-guide.md | 75 ------- contribute/documentation.md | 29 --- contribute/hacker-guide.md | 337 ------------------------------ contribute/index.md | 172 --------------- contribute/partest-guide.md | 66 ------ contribute/scala-fame.md | 9 - 6 files changed, 688 deletions(-) delete mode 100644 contribute/bug-reporting-guide.md delete mode 100644 contribute/documentation.md delete mode 100644 contribute/hacker-guide.md delete mode 100644 contribute/index.md delete mode 100644 contribute/partest-guide.md delete mode 100644 contribute/scala-fame.md diff --git a/contribute/bug-reporting-guide.md b/contribute/bug-reporting-guide.md deleted file mode 100644 index 9b89f60ef4..0000000000 --- a/contribute/bug-reporting-guide.md +++ /dev/null @@ -1,75 +0,0 @@ ---- -layout: page -title: Bug Reporting ---- - -# Reporting Bugs to the Scala Project - -The Scala project tracker is located at [http://issues.scala-lang.org](http://issues.scala-lang.org). Before you submit a bug make sure that it is certainly a bug by following instructions in *Is it a Bug?*. - -## Is it a Bug? - -The first step in identifying a bug is to identify which component of the Scala distribution is affected. First, ensure that your issue falls within any of the following categories: - - - **Library** bugs typically manifest themselves as run-time exceptions, or as *unexpected*/*unintuitive* behavior of Scala Standard Library methods. - - **Compiler** errors are manifested as compile time exceptions, unexpected behavior of your code at run time, or invalid behavior of the type system. - - **Reflection** are bugs that appear in the ‘scala.reflect’ package. For the *reflection* bugs , the same rules apply as for the *library* bugs. - - **Scaladoc** bugs are manifested as a logical problems in the information it presents (that is, the displayed information is incorrect, such as an incorrect subclassing relationship), or incorrect behavior of the user interface. If you'd like to suggest a change in the content of the documentation, please submit a pull request (possible to do in the browser using GitHub, which is easier and faster than filing a bug). Please file a bug about the content of documentation only if you cannot provide a suggestion for its fix. - -If your issue is related to any of the following external libraries, make sure to use the relevant project's issue tracker: - - - [Akka](http://doc.akka.io/docs/akka/current/project/issue-tracking.html) - - [Play!](http://github.com/playframework/Play20/issues) - - [Slick](http://github.com/slick/slick/issues) - - [Actors Migration Kit](http://github.com/scala/actors-migration/issues?state=open) - -The following are generally considered to be bugs: - -- **Scala Compiler Crash** If the Scala compiler is crashing with an internal error (compile time exception) you have certainly found a bug, and can move on to the next section of this document on reporting confirmed bugs. -- **Regressions** If some code snippet worked in a previous Scala release, but now no longer compiles or results in an exception, it is probably a regression. -- **Verify Errors** happen when the compiled Scala program is loaded to the Java Virtual Machine. If you're getting a *Verify Error*, you've usually found a bug. Make sure first that your project is not using stale `.class` files before reporting a new issue. - -If you have a code snippet that is resulting in bytecode which you believe is behaving incorrectly, you may or may not have found a bug. Before reporting your issue, please attempt the following: - -* Make sure you minimize your problem. To correctly minimize the problem follow the following instructions: - - 1. Gradually take apart the offensive code snippet until you believe you have the simplest representation of your problem. - - 2. Ensure that you have decoupled your code snippet from any library that could be introducing the offensive behavior. One way to achieve this is to try to recompile the offensive code snippet in isolation, outside of the context of any complex build environment. - - 3. Make sure you are compiling your project from a clean slate. Your problem could be related to separate compilation, which is difficult to detect without a clean build with new `.class` files. - -* Keep in mind that the behavior you are witnessing could be intended. Good resources for verifying whether or not behavior is intended is either in the [Scala Improvement Proposal Documents](http://docs.scala-lang.org/sips/sip-list.html) or in the [Scala Language Specification](http://www.scala-lang.org/docu/files/ScalaReference.pdf). If in doubt, you may always ask on the [scala-internals mailing list](https://groups.google.com/forum/?fromgroups#!forum/scala-internals) - -In general, if you find yourself stuck on any of these steps, asking on one of following Scala mailing lists can be helpful: - - - For compiler bugs use the [scala-internals](https://groups.google.com/forum/?fromgroups#!forum/scala-internals) mailing list. - - For unexpected behavior use [scala-language](https://groups.google.com/forum/?fromgroups#!forum/scala-language), or [scala-user](https://groups.google.com/forum/?fromgroups#!forum/scala-user) mailing lists. - -## Reporting Confirmed Bugs is a Sin - -Before reporting your bug, make sure to check the issue tracker for other similar bugs. The exception name or a compiler phase are the best keywords to search for. If you are experiencing unexpected behavior search for method/class names where it happens. Your issue might already be reported, and a workaround might already be available for you take advantage of. If your issue *is* reported, be sure to add your test case as a comment. - -**Note:** reporting a bug that already exists creates an additional overhead for you, the Scala Team, and all people that search the issue database. To avoid this inconvenience make sure that you thoroughly search for an existing issue. - -If you cannot find your issue in the issue tracker, create a new bug. The details about creating a bug report are in the following section. - -## Creating a Bug Report - -Please make sure to fill in as many fields as possible. Make sure you've indicated the following: - - 1. **Exact Scala version** that you are using. For example, `2.10.1` or `0.11.0-RC`. If the bug happens in mulitple versions indicate all of them. - 2. **The component** that is affected by the bug. For example, the Standard Library, Scaladoc, etc. - 3. **Labels** related to your issue. For example, if you think your issue is related to the typechecker, and if you have successfully minimized your issue, label your bug as "typechecker" and "minimized" - 4. **Running environment**. Are you running on Linux? Windows? What JVM version are you using? - -In order for us to quickly triage the bug that you've found, it's important that the code snippet which produces the observed issue is as minimized as possible. For advice on minimizing your code snippet, please see the appropriate subsection of the above (Is it a Bug?). - -### Description - -In the description of your issue, be as detailed as you can. Bug reports which have the following information included are typically understood, triaged, and fixed very quickly: - - 1. Include a test case (minimized if possible) enabling us to reproduce the problematic behavior. - 2. The expected output. - 3. The actual output. - 4. If you have already looked into the issue provide interesting insights or proposals for fixing the issue. \ No newline at end of file diff --git a/contribute/documentation.md b/contribute/documentation.md deleted file mode 100644 index 05b2455a5f..0000000000 --- a/contribute/documentation.md +++ /dev/null @@ -1,29 +0,0 @@ ---- -layout: page -title: Documentation Contributions ---- -# Contributing documentation to the Scala project - -TODO - - diff --git a/contribute/hacker-guide.md b/contribute/hacker-guide.md deleted file mode 100644 index bd7ac60e71..0000000000 --- a/contribute/hacker-guide.md +++ /dev/null @@ -1,337 +0,0 @@ ---- -layout: page -title: Scala hacker guide ---- - -**Eugene Burmako** - -This guide is intended to help you get from an idea of fixing a bug or implementing a new feature into a nightly Scala build, and, ultimately, to a production release of Scala incorporating your idea. - -This guide covers the entire process, from the conception of your idea or bugfix to the point where it is merged into Scala. Throughout, we will use a running example of an idea or bugfix one might wish to contribute. - -## The Running Example - -Let's say that you particularly enjoy the new string interpolation language feature introduced in Scala 2.10.0, and you use it quite heavily. - -Though, there's an annoying issue -which you occasionally stumble upon: the formatting string interpolator `f` [does not support](https://issues.scala-lang.org/browse/SI-6725) -new line tokens `%n`. - -One approach would be to go the mailing list, request that the bug be fixed, and then to wait indefinitely for the fix arrive. Another approach would be to instead patch Scala oneself, and to submit the fix to the Scala repository in hopes that it might make it into a subsequent release. - -**_Of note_**: There are several types of releases/builds. Nightly builds are produced every night at a fixed time. Minor releases happen once every few months. Major releases typically happen once per year. - -## 1. Connect - -Sometimes it's appealing to hack alone and not to have to interact with others out of fear, or out of comfort. However, in the context a big project such as Scala, -this might not be the very best idea. There are people in the Scala community who have spent years accumulating knowledge about Scala libraries and internals. They might provide -unique insights and, what's even better, direct assistance in their areas, so it is not only advantageous, but recommended to communicate with the community about your new patch. - -Typically bug fixes new features start out as an idea or an experiment posted on one of our mailing lists [our mailing lists]({{ site.baseurl }}/community/index.html#mailing_lists) to find out how people feel -about things you want to implement. People proficient is certain areas of Scala usually monitor mailing lists, so you'll often get some help -by simply posting a message. But the most efficient way to connect is to cc your message to one of the people responsible for maintaining the aspect of Scala which you wish to contribute to. - -This is the list of language features/libraries along with their maintainers's full names and github usernames: - -{% include maintainers.html %} - -Since Martin is the person who submitted the string interpolation Scala Improvement Proposal and implemented this language feature for Scala 2.10.0, he might be interested in learning of new bugfixes to that feature. - -As alluded to earlier, one must also choose an appropriate mailing list. Typically, one would use the scala-internals mailing list, as it is devoted to discussions about the core internal design and implementation of the Scala system. However, since this issue has been discussed previously on the scala-user mailing list, -in this example, we post to the [the scala-user mailing list](http://groups.google.com/group/scala-user)about our issue. - -
    Posting to scala-user
    -
    -
    Response from Martin
    - -Now that we have the approval of the feature's author, we can get to work! - -## 2. Set up - -Hacking Scala begins with creating a branch for your work item. To develop Scala we use [Git](http://git-scm.com/) -and [GitHub](http://github.com/). This section of the guide provides a short walkthrough, but if you are new to Git, -it probably makes sense to familiarize yourself with Git first. We recommend the [Git Pro](http://git-scm.com/book/en/) -online book. - -### Fork - -Log into [GitHub](http://github.com/), go to [https://github.com/scala/scala](https://github.com/scala/scala) and click the `Fork` -button in the top right corner of the page. This will create your own copy of our repository that will serve as a scratchpad for your work. - -If you're new to Git, don't be afraid of messing up-- there is no way you can corrupt our repository. - -
    Fork scala/scala
    - -### Clone - -If everything went okay, you will be redirected to your own fork at `https://github.com/username/scala`, where `username` -is your github user name. You might find it helpful to read [http://help.github.com/fork-a-repo/](http://help.github.com/fork-a-repo/), -which covers some of the things that will follow below. Then, _clone_ your repository (_i.e._ pull a copy from github to your local machine) by running the following on the command line: - - 16:35 ~/Projects$ git clone https://github.com/xeno-by/scala - Cloning into 'scala'... - remote: Counting objects: 258564, done. - remote: Compressing objects: 100% (58239/58239), done. - remote: Total 258564 (delta 182155), reused 254094 (delta 178356) - Receiving objects: 100% (258564/258564), 46.91 MiB | 700 KiB/s, done. - Resolving deltas: 100% (182155/182155), done. - -This will create a local directory called `scala`, which contains a clone of your own copy of our repository. The changes that you make -in this directory can be propagated back to your copy hosted on github and, ultimately, pushed into Scala when your patch is ready. - -### Branch - -Before you start making changes, always create your own branch. Never work on the `master` branch. Think of a name that describes -the changes you plan on making. Use a prefix that describes the nature of your change. There are essentially two kinds of changes: -bug fixes and new features. - -* For bug fixes, use `issue/NNNN` for bug NNNN from the [Scala issue tracker](https://issues.scala-lang.org/). -* For new feature use `topic/XXX` for feature XXX. Use feature names that make sense in the context of the whole Scala project and not just to you personally. For example, if you work on diagrams in Scaladoc, use `topic/scaladoc-diagrams` instead of just `topic/diagrams` would be a good branch name. - -Since in our example, we're going to fix an existing bug [SI-6725](https://issues.scala-lang.org/browse/SI-6725), we'll create a branch named `ticket/6725`. - - 16:39 ~/Projects/scala (master)$ git checkout -b ticket/6725 - Switched to a new branch 'ticket/6725' - -If you are new to Git and branching, read the [Branching Chapter](http://git-scm.com/book/en/Git-Branching) in the Git Pro book. - -### Build - -The next step after cloning your fork is setting up your machine to build Scala. The definitive guide on building Scala is located at -[https://github.com/scala/scala/blob/master/README.rst](https://github.com/scala/scala/blob/master/README.rst), but here's the summary: - -* It is recommended to use Java `1.6` (not `1.7` or `1.8`, because they might cause occasional glitches). -* The build tool is `ant`. -* The build runs the `pull-binary-libs.sh` script to download bootstrap libs. This requires `bash` and `curl`. -* The majority of our team works on Linux and OS X, so these operating systems are guaranteed to work. -* Windows is supported, but it might have issues. Please report to [the issue tracker](https://issues.scala-lang.org/) if you encounter any. - -Building Scala is as easy as running `ant` in the root of your cloned repository. Be prepared to wait for a while-- a full "clean" build -takes 8+ minutes depending on your machine (and up to 30 minutes on older machines with less memory). Incremental builds are usually within 30-120 seconds range (again, your mileage might vary -with your hardware). - - 16:50 ~/Projects/scala (ticket/6725)$ ant - Buildfile: /Users/xeno_by/Projects/scala/build.xml - - strap.clean: - - pack.clean: - - init.jars.check: - - init.jars: - [echo] Updating bootstrap libs. (To do this by hand, run ./pull-binary-libs.sh) - [exec] Resolving [943cd5c8802b2a3a64a010efb86ec19bac142e40/lib/ant/ant-contrib.jar] - - ... - - pack.bin: - [mkdir] Created dir: /Users/xeno_by/Projects/scala/build/pack/bin - - pack.done: - - build: - - BUILD SUCCESSFUL - Total time: 9 minutes 41 seconds - -### IDE - -There's no single editor of choice for working with Scala sources, as there are trade-offs associated with each available tool. - -Both Eclipse and IntelliJ IDEA have Scala plugins, which are known to work with our codebase. Here are -[instructions for Eclipse](https://github.com/scala/scala/blob/master/src/eclipse/README.md) and -[instructions for Intellij](https://github.com/scala/scala/blob/master/src/intellij/README). Both of those Scala plugins provide -navigation, refactoring and error reporting functionality as well as integrated debugging. - -There also exist lighter-weight editors such as Emacs, Sublime or jEdit which provide unparalleled are faster and much less memory/compute-intensive to run, while -lacking semantic services and debugging. To address this shortcoming, they can integrate with ENSIME, -a helper program, which hosts a resident Scala compiler providing some of the features implemented in traditional IDEs. However despite -having significantly matured over the last year, support for our particular code base is still being improved, and is not as mature as for Eclipse and IntelliJ. - -Due to the immense variability in personal preference between IDE/editor experience, it's difficult to recommend a particular tool, and your choice should boil down to your personal preferences. - -## 3. Hack - -When hacking on your topic of choice, you'll be modifying Scala, compiling it and testing it on relevant input files. -Typically you would want to first make sure that your changes work on a small example and afterwards verify that nothing break -by running a comprehensive test suite. - -We'll start by creating a `sandbox` directory (this particular name doesn't bear any special meaning), which will hold a single test file and its compilation results. First, let's make sure that -[the bug](https://issues.scala-lang.org/browse/SI-6725) is indeed reproducible by putting together a simple test and compiling and running it with the Scala compiler that we built using `ant`. The Scala compiler that we just built is located in `build/pack/bin`. - - 17:25 ~/Projects/scala (ticket/6725)$ mkdir sandbox - 17:26 ~/Projects/scala (ticket/6725)$ cd sandbox - 17:26 ~/Projects/scala/sandbox (ticket/6725)$ edit Test.scala - 17:26 ~/Projects/scala/sandbox (ticket/6725)$ cat Test.scala - object Test extends App { - val a = 1 - val s = f"$a%s%n$a%s" - println(s) - } - 17:27 ~/Projects/scala/sandbox (ticket/6725)$ ../build/pack/bin/scalac Test.scala - 17:28 ~/Projects/scala/sandbox (ticket/6725)$ ../build/pack/bin/scala Test - 1%n1 // %n should've been replaced by a newline here - -### Implement - -Now, implement your bugfix or new feature! - -Here are also some tips & tricks that have proven useful in Scala development: - -* If after introducing changes or updating your clone, you get `AbstractMethodError` or other linkage exceptions, - try doing `ant clean build`. Due to the way how Scala compiles traits, if a trait changes, then it's sometimes not enough to recompile - just that trait, but it might also be necessary to recompile its users. The `ant` tool is not smart enough to do that, which might lead to - very strange errors. Full-rebuilds fix the problem. Fortunately that's rarely necessary, because full-rebuilds take a lot of time-- the same 8-30 minutes as mentioned above. -* Even on solid state drives packaging Scala distribution (i.e. creating jars from class files) is a non-trivial task. To save time here, - some people in our team do `ant quick.comp` instead of `ant` and then create custom scripts to launch Scala from `build/quick/classes`. -* Don't underestimate the power of `print`. When starting with Scala, I spent a lot of time in the debugger trying to figure out how - things work. However later I found out that print-based debugging is often more effective than jumping around. While it might be obvious - to some, I'd like to explicitly mention that it's also useful to print stack traces to understand the flow of execution. - -### Documentation - -There are several areas that one could contribute to-- there is the Scala library, the Scala compiler, and other tools such as Scaladoc. Each area has varying amounts of documentation. - -##### The Scala Library - -Contributing to the Scala standard library is about the same as working on one of your own libraries. Beyond the Scala collections hierarchy, there are no complex internals or architectures to have to worry about. Just make sure that you code in a "don't-repeat-yourself" (DRY) style, obeying the "boy scout principle" (i.e. make sure you've left something cleaner than you found it.) - -If documentation is necessary for some trait/class/object/method/etc in the Scala standard library, typically maintainers will include inline comments describing their design decisions or rationale for implementing things the way they have, if it is not straightforward. - -If you intend on contributing to Scala collections, please make sure you're familiar with the design of the Scala collections library. It can be easy to put an implementation in the wrong location if you are unfamiliar with the collections architecture. There is an excellent and very detailed guide covering [the Architecture of Scala Collections](http://docs.scala-lang.org/overviews/core/architecture-of-scala-collections.html), as well as a larger more general [Scala collections Guide](http://docs.scala-lang.org/overviews/core/collections.html) covering the sequential portion of collections. For parallel collections, there also exists a detailed [Scala Parallel Collections Guide](http://docs.scala-lang.org/overviews/core/parallel-collections.html). (TODO double check these links!) - -##### The Scala Compiler - -Documentation about the internal workings of the Scala compiler is scarce, and most of the knowledge is passed around by email (scala-internals mailing list), ticket, or word of mouth. However the situation is steadily improving. Here are the resources that might help: - -* [Compiler internals videos by Martin Odersky](TODO) are quite dated, but still very useful. In this three-video - series Martin explains the general architecture of the compiler, and the basics of the front-end, which has recently become Scala reflection API. -* [Reflection documentation](http://docs.scala-lang.org/overviews/reflection/overview.html) describes fundamental data structures (like `Tree`s, `Symbol`s, and `Types`) that - are used to represent Scala programs and operations defined on then. Since much of the compiler has been factored out and made accessible via the Reflection API, all of the fundamentals needed for reflection are the same for the compiler. -* [Reflection and Compilers by Martin Odersky](http://channel9.msdn.com/Events/Lang-NEXT/Lang-NEXT-2012/Reflection-and-Compilers), a talk - at Lang.NEXT 2012 in which Martin elaborates on the design of scalac and the architecture of the reflection API. -* [Scala compiler corner](http://lampwww.epfl.ch/~magarcia/ScalaCompilerCornerReloaded/) contains extensive documentation about - most of the post-typer phases (i.e. the backend) in the Scala compiler. -* [scala-internals](http://groups.google.com/group/scala-internals), a mailing list which hosts discussions about the core - internal design and implementation of the Scala system. - -##### Other Projects - -Tools like Scaladoc also welcome contributions. Unfortunately these smaller projects have less developer documentation. In these cases, the best thing to do is to directly explore the code base (which often contains documentation as inline comments) or to write to the appropriate maintainers for pointers. - -### Interlude - -To fix [the bug we're interested in](https://issues.scala-lang.org/browse/SI-6725). Let's say we've tracked the `StringContext.f` interpolator -down to a macro implemented in `MacroImplementations.scala`, and there we notice that the interpolator only processes conversions, -but not tokens like `%n`. Looks like an easy fix. - - 18:44 ~/Projects/scala/sandbox (ticket/6725)$ git diff - diff --git a/src/compiler/scala/tools/reflect/MacroImplementations.scala b/src/compiler/scala/tools/ - index 002a3fce82..4e8f02084d 100644 - --- a/src/compiler/scala/tools/reflect/MacroImplementations.scala - +++ b/src/compiler/scala/tools/reflect/MacroImplementations.scala - @@ -117,7 +117,8 @@ abstract class MacroImplementations { - if (!strIsEmpty) { - val len = str.length - while (idx < len) { - - if (str(idx) == '%') { - + def notPercentN = str(idx) != '%' || (idx + 1 < len && str(idx + 1) != 'n') - + if (str(idx) == '%' && notPercentN) { - bldr append (str substring (start, idx)) append "%%" - start = idx + 1 - } - -After applying the fix and running `ant`, our simple test case in `sandbox/Test.scala` started working! - - 18:51 ~/Projects/scala/sandbox (ticket/6725)$ cd .. - 18:51 ~/Projects/scala (ticket/6725)$ ant - Buildfile: /Users/xeno_by/Projects/scala/build.xml - - ... - - quick.comp: - [scalacfork] Compiling 1 file to /Users/xeno_by/Projects/scala/build/quick/classes/compiler - [propertyfile] Updating property file: /Users/xeno_by/Projects/scala/build/quick/classes/compiler/compiler.properties - [stopwatch] [quick.comp.timer: 6.588 sec] - - ... - - BUILD SUCCESSFUL - Total time: 18 seconds - - 18:51 ~/Projects/scala (ticket/6725)$ cd sandbox - 18:51 ~/Projects/scala/sandbox (ticket/6725)$ ../build/pack/bin/scalac Test.scala - 18:51 ~/Projects/scala/sandbox (ticket/6725)$ ../build/pack/bin/scala Test - 1 - 1 // no longer getting the %n here - it got transformed into a newline - -### Verify - -Now to make sure that my fix doesn't break anything I need to run the test suite using the `partest` tool we wrote to test Scala. -Read up [the partest guide](/contribute/partest-guide.html) to learn the details about partest, but in a nutshell you can either -run `ant test` to go through the entire test suite (30+ minutes) or use wildcards to limit the tests to something manageable: - - 18:52 ~/Projects/scala/sandbox (ticket/6725)$ cd ../test - 18:56 ~/Projects/scala/test (ticket/6725)$ partest files/run/*interpol* - Testing individual files - testing: [...]/files/run/interpolationArgs.scala [ OK ] - testing: [...]/files/run/interpolationMultiline1.scala [ OK ] - testing: [...]/files/run/interpolationMultiline2.scala [ OK ] - testing: [...]/files/run/sm-interpolator.scala [ OK ] - testing: [...]/files/run/interpolation.scala [ OK ] - testing: [...]/files/run/stringinterpolation_macro-run.scala [ OK ] - All of 6 tests were successful (elapsed time: 00:00:08) - -## 4. Publish - -After development is finished, it's time to publish the code and submit your patch for discussion and potential inclusion into Scala. -In a nutshell, this involves: - - 1. making sure that your code and commit messages are of high quality, - 2. clicking a few buttons in the Github interface, - 3. assigning one or more reviewers which will look through your pull request. - - Let's go into each of these points in more detail. - -### Commit - -The [Git Basics](http://git-scm.com/book/en/Git-Basics) chapter in the Git online book covers most of the basic workflow during this stage. -There are two things you should know here: - - 1. Commit messages are often the only way to understand the intentions of authors of code written a few years ago. Thus, writing a quality is of utmost importance. The more context you provide for the change you've introduced, the larger the chance that some future maintainer understand your intentions. Consult [the pull request policy](https://github.com/scala/scala/wiki/Pull-Request-Policy) for more information about the desired style of your commits. - - 2. Keeping Scala's git history clean is also important. Therefore we won't accept pull requests for bug fixes that have more than one commit. For features, it is okay to have several commits, but all tests need to pass after every single commit. To clean up your commit structure, you want to [rewrite history](http://git-scm.com/book/en/Git-Branching-Rebasing) using `git rebase` so that your commits are against the latest revision of `master`. - -Once you are satisfied with your work, synced with `master` and cleaned up your commits you are ready to submit a patch to the central Scala repository. Before proceeding make sure you have pushed all of your local changes to your fork on Github. - - 19:22 ~/Projects/scala/test (ticket/6725)$ git add ../src/compiler/scala/tools/reflect/MacroImplementations.scala - 19:22 ~/Projects/scala/test (ticket/6725)$ git commit - [ticket/6725 3c3098693b] SI-6725 `f` interpolator now supports %n tokens - 1 file changed, 2 insertions(+), 1 deletion(-) - 19:34 ~/Projects/scala/test (ticket/6725)$ git push origin ticket/6725 - Username for 'https://github.com': xeno-by - Password for 'https://xeno-by@github.com': - Counting objects: 15, done. - Delta compression using up to 8 threads. - Compressing objects: 100% (8/8), done. - Writing objects: 100% (8/8), 1.00 KiB, done. - Total 8 (delta 5), reused 0 (delta 0) - To https://github.com/xeno-by/scala - * [new branch] ticket/6725 -> ticket/6725 - -### Submit - -Now, we must simply submit our proposed patch. Navigate to your branch in Github (for me it was `https://github.com/xeno-by/scala/tree/ticket/6725`) -and click the pull request button to submit your patch as a pull request to Scala. If you've never submitted patches to Scala, you will -need to sign the contributor license agreement, which [can be done online](http://typesafe.com/contribute/cla/scala) within a few minutes. - -
    Submit a pull request
    - -### Discuss - -After the pull request has been submitted, you need to pick a reviewer (usually the person you've contacted in the beginning of your -workflow) and be ready to elaborate and adjust your patch if necessary. In this example, we picked Martin, because we had such a nice chat on the mailing list: - -
    SAssign the reviewer
    - diff --git a/contribute/index.md b/contribute/index.md deleted file mode 100644 index 05696f5165..0000000000 --- a/contribute/index.md +++ /dev/null @@ -1,172 +0,0 @@ ---- -layout: page -title: Contribute ---- -# Contributing to the Scala project - -The Scala programming langauge is an open source project with a very -diverse community, where people from all over the world contribute their work, -with everyone benefitting from friendly help and advice, and -kindly helping others in return. So why not join the Scala community and help -everyone make things better? - -The following are typical questions you might ask when first contributing to Scala. -If you have other questions not addressed here, feel free to ask on the [scala-internals mailing list](http://groups.google.com/group/scala-internals). - -
    - -### I found something that doesn't work as expected. How to file a bug report? - -[The reporting bugs page](bug-reporting-guide.html) describes the steps to take when you find something that doesn't work -as expected. Filing in a good bug report increases the chances the ticket is fixed quickly. - -
    - -### Why contribute a patch to Scala? - -Just to name a few common reasons: - - contributing a patch is the best way to make sure your desired changes will be available in the next Scala version - - Scala is written in Scala, so going through the source code and patching it will improve your Scala-fu - - last but not least, you will make it into the [Scala Contribuitor Hall of Fame](scala-fame.html). - -
    - -### I'd like to start hacking the Scala project, how to find something to work on? - -Depending on your skillset, you may want to contribute documentation and/or code. Documentation has always been very -appreciated work in the Scala community, as most code contributions tend to be quite scarce in explanations of how -things work and how everyone else is supposed to use them. To contribute documentation, have a look at the -[documentation page](documentation.html). - -The main Scala project consists of the standard Scala library, the Scala reflection and macros library, -the Scala compiler and the Scaladoc tool. This means there's plenty to choose from when deciding what to work on. -Typically the scaladoc tool provides a low entry point for new committers, so it is a good first step into contributing. - -On the Scala bug tracker you will find many bugs that are [marked as good starting points to contributing ("community" bugs)](https://issues.scala-lang.org/secure/IssueNavigator.jspa?requestId=12111) or [that are not currently assigned](https://issues.scala-lang.org/secure/IssueNavigator.jspa?requestId=12112) and that you could pick up. Once you decided on a ticket to look at, see the next step on how to proceed further. - -{% comment %} Keep the space in the
    ! Jekyll/Marulu limitation {% endcomment %} -
    - -
    - -### I have this idea that I'd like to add to Scala, how do I start? - -The first step to making a change is to discuss it with the community at large, to make sure everyone agrees on the idea -and on the implementation plan. Starting point ("community") bugs are usually uncontroversial, so you can jump right -ahead to hacking the scala source tree and filing a pull request. For larger changes it is best to announce the change -on the [scala-internals](http://groups.google.com/group/scala-internals) mailing list and get developer feedback. For really complex changes, a [Scala Improvement Process (SIP)](http://docs.scala-lang.org/sips/) document might be required, but the first step is always to discuss it on the mailing list. - -Contributions, big or small, simple or complex, controversial or undisputed, need to materialize as patches against -the Scala project source tree. The [hacker guide](hacker-guide.html) will explain how to materialize your idea into a full-fledged pull request against the Scala code base. - -
    - - \ No newline at end of file diff --git a/contribute/partest-guide.md b/contribute/partest-guide.md deleted file mode 100644 index e681c569fe..0000000000 --- a/contribute/partest-guide.md +++ /dev/null @@ -1,66 +0,0 @@ ---- -layout: page -title: Running the Test Suite ---- - -Partest is a custom parallel testing tool that we use to run the test suite for the Scala compiler and library. Go the scala project folder from your local checkout and run it via `ant` or standalone as follows. - -## Using ant - -The test suite can be run by using ant from the command line: - - $ ant test.suite - -## Standalone - -There are launch scripts `partest` and `partest.bat` in the `test` folder of the scala project. To have partest run failing tests only and print details about test failures to the console, you can use - - ./test/partest --show-diff --show-log --failed - -You can get a summary of the usage by running partest without arguments. - -* Most commonly you want to invoke partest with an option that tells it which part of the tests to run. For example `--all`, `--pos`, `--neg` or `--run`. -* You can test individual files by specifying individual test files (`.scala` files) as options. Several files can be tested if they are from the same category, e.g., `pos`. -* You can enable output of log and diff using the `-show-log` and `-show-diff` options. -* If you get into real trouble, and want to find out what partest does, you can run it with option `--verbose`. This info is useful as part of bug reports. -* Set custom path from where to load classes: `-classpath ` and `-buildpath `. -* You can use the `SCALAC_OPTS` environment variable to pass command line options to the compiler. -* You can use the `JAVA_OPTS` environment variable to pass command line options to the runner (e.g., for `run/jvm` tests). -* The launch scripts run partest as follows: - - scala -cp scala.tools.partest.nest.NestRunner - - Partest classes from a `quick` build, e.g., can be found in `./build/quick/classes/partest/`. - - Partest will tell you where it loads compiler/library classes from by adding the `partest.debug` property: - - scala -Dpartest.debug=true -cp scala.tools.partest.nest.NestRunner - - - -## ScalaCheck tests - -Tests that depend on [ScalaCheck](https://github.com/rickynils/scalacheck) can be added under folder `./test/files/scalacheck`. A sample test: - - import org.scalacheck._ - import Prop._ - - object Test { - val prop_ConcatLists = property{ (l1: ListInt, l2: ListInt) => - l1.size + l2.size == (l1 ::: l2).size - } - - val tests = List(("prop_ConcatLists", prop_ConcatLists)) - } - -## Troubleshooting - -### Windows - -Some tests might fail because line endings in the `.check` files and the produced results do not match. In that case, set either - - git config core.autocrlf false - -or - - git config core.autocrlf input \ No newline at end of file diff --git a/contribute/scala-fame.md b/contribute/scala-fame.md deleted file mode 100644 index 75317be820..0000000000 --- a/contribute/scala-fame.md +++ /dev/null @@ -1,9 +0,0 @@ ---- -layout: page -title: Scala Contribuitor Hall of Fame ---- -# Scala Hall of Fame - -A big thank you to everyone who contributed to: - - [the Scala library and compiler](https://github.com/scala/scala/contributors) - - [the Scala documentation website](https://github.com/scala/scala.github.com/contributors) \ No newline at end of file From ab597ab0b5dde3577da92ef3fd803f6e00675b94 Mon Sep 17 00:00:00 2001 From: Heather Miller Date: Thu, 30 May 2013 13:25:09 +0100 Subject: [PATCH 0020/1870] Going back to having a 'Contribute' section --- contribute/bug-reporting-guide.md | 89 +++++ contribute/documentation.md | 29 ++ contribute/hacker-guide.md | 337 ++++++++++++++++++ contribute/index.md | 201 +++++++++++ contribute/partest-guide.md | 66 ++++ .../_posts/2013-03-01-scala-fame-2013-02.md | 182 ++++++++++ .../_posts/2013-04-01-scala-fame-2013-03.md | 126 +++++++ .../_posts/2013-05-01-scala-fame-2013-04.md | 91 +++++ contribute/scala-fame.md | 14 + 9 files changed, 1135 insertions(+) create mode 100644 contribute/bug-reporting-guide.md create mode 100644 contribute/documentation.md create mode 100644 contribute/hacker-guide.md create mode 100644 contribute/index.md create mode 100644 contribute/partest-guide.md create mode 100644 contribute/scala-fame-data/_posts/2013-03-01-scala-fame-2013-02.md create mode 100644 contribute/scala-fame-data/_posts/2013-04-01-scala-fame-2013-03.md create mode 100644 contribute/scala-fame-data/_posts/2013-05-01-scala-fame-2013-04.md create mode 100644 contribute/scala-fame.md diff --git a/contribute/bug-reporting-guide.md b/contribute/bug-reporting-guide.md new file mode 100644 index 0000000000..e286ce2002 --- /dev/null +++ b/contribute/bug-reporting-guide.md @@ -0,0 +1,89 @@ +--- +layout: page +title: Bug Reporting +--- + +# Reporting Bugs to the Scala Project + +The Scala project tracker is located at [http://issues.scala-lang.org](http://issues.scala-lang.org). Before you submit a bug make sure that it is certainly a bug by following instructions in *Is it a Bug?*. + +## Is it a Bug? + +The first step in identifying a bug is to identify which component of the Scala distribution is affected. First, ensure that your issue falls within any of the following categories: + + - **Library** bugs typically manifest themselves as run-time exceptions, or as *unexpected*/*unintuitive* behavior of Scala Standard Library methods. + - **Compiler** errors are manifested as compile time exceptions, unexpected behavior of your code at run time, or invalid behavior of the type system. + - **Reflection** are bugs that appear in the ‘scala.reflect’ package. For the *reflection* bugs , the same rules apply as for the *library* bugs. + - **Scaladoc** bugs are manifested as a logical problems in the information it presents (that is, the displayed information is incorrect, such as an incorrect subclassing relationship), or incorrect behavior of the user interface. If you'd like to suggest a change in the content of the documentation, please submit a pull request (possible to do in the browser using GitHub, which is easier and faster than filing a bug). Please file a bug about the content of documentation only if you cannot provide a suggestion for its fix. + +If your issue is related to any of the following external projects, make sure to use its appropriate issue tracker: + + - [Akka](http://doc.akka.io/docs/akka/current/project/issue-tracking.html) + - [Play!](http://github.com/playframework/Play20/issues) + - [Slick](http://github.com/slick/slick/issues) + - [Actors Migration Kit](http://github.com/scala/actors-migration/issues?state=open) + - [Scala IDE](https://scala-ide-portfolio.assembla.com/spaces/scala-ide/support/tickets) + - [sbt](https://github.com/sbt/sbt/issues) + +The following are generally considered to be bugs: + +- **Scala Compiler Crash** If the Scala compiler is crashing with an internal error (compile time exception) you have certainly found a bug, and can move on to the next section of this document on reporting confirmed bugs. +- **Regressions** If some code snippet worked in a previous Scala release, but now no longer compiles or results in an exception, it is probably a regression. +- **Verify Errors** happen when the compiled Scala program is loaded to the Java Virtual Machine. If you're getting a *Verify Error*, you've usually found a bug. Make sure first that your project is not using stale `.class` files before reporting a new issue. + +If you have a code snippet that is resulting in bytecode which you believe is behaving incorrectly, you may or may not have found a bug. Before reporting your issue, please attempt the following: + +* Make sure you minimize your problem. To correctly minimize the problem follow the following instructions: + + 1. Gradually take apart the offensive code snippet until you believe you have the simplest representation of your problem. + + 2. Ensure that you have decoupled your code snippet from any library that could be introducing the offensive behavior. One way to achieve this is to try to recompile the offensive code snippet in isolation, outside of the context of any complex build environment. If your code depends on some strictly Java library and source code is available for it, make sure that the latter is also minimized. + + 3. Make sure you are compiling your project from a clean slate. Your problem could be related to separate compilation, which is difficult to detect without a clean build with new `.class` files. + + 4. If you have encountered a bug while building your code in the IDE, then please reproduce it on the command line. The same rule applies for build tools like `sbt` or `ant`. + + 5. If you want to file an improvement in the issue tracker please discuss it first on one of the mailing lists. They offer much bigger audience than issue tracker. The latter is not suitable for long discussions. + +* Keep in mind that the behavior you are witnessing could be intended. Good formal resources for verifying whether or not the language behavior is intended is either in the [Scala Improvement Proposal Documents](http://docs.scala-lang.org/sips/sip-list.html) or in the [Scala Language Specification](http://www.scala-lang.org/docu/files/ScalaReference.pdf). If in doubt, you may always ask on the [scala-internals mailing list](https://groups.google.com/forum/?fromgroups#!forum/scala-internals) or [stackoveflow](http://stackoverflow.com/questions/tagged/scala). + +In general, if you find yourself stuck on any of these steps, asking on one of following Scala mailing lists can be helpful: + + - For unexpected behavior use [scala-language](https://groups.google.com/forum/?fromgroups#!forum/scala-language), or [scala-user](https://groups.google.com/forum/?fromgroups#!forum/scala-user) mailing lists. + - For compiler bugs use the [scala-internals](https://groups.google.com/forum/?fromgroups#!forum/scala-internals) mailing list. + +* Examples of exceptions reported by the compiler which usually are not bugs: + 1. `StackOverflowError` is typically not a bug unless the stacktrace involves the internal packages of the compiler (like `scala.tools.nsc...`). Try to increase the Java stack size (`-Xss`), in most of the cases it helps. + 2. `AbstractMethodError` can occur when you did not recompile all the necessary Scala files (build tools, like `sbt`, can prevent that from happening) or you are mixing external libraries compiled for different Scala versions (for example one uses `2.10.x` and the other `2.11.x`). + +## Reporting Confirmed Bugs is a Sin + +Before reporting your bug, make sure to check the issue tracker for other similar bugs. The exception name or a compiler phase are the best keywords to search for. If you are experiencing unexpected behavior search for method/class names where it happens. Your issue might already be reported, and a workaround might already be available for you take advantage of. If your issue *is* reported, be sure to add your test case as a comment if it is different from any of the existing ones. + +**Note:** reporting a bug that already exists creates an additional overhead for you, the Scala Team, and all people that search the issue database. To avoid this inconvenience make sure that you thoroughly search for an existing issue. + +If you cannot find your issue in the issue tracker, create a new bug. The details about creating a bug report are in the following section. + +## Creating a Bug Report + +Please make sure to fill in as many fields as possible. Make sure you've indicated the following: + + 1. **Exact Scala version** that you are using. For example, `2.10.1` or `2.11.0-RC`. If the bug happens in multiple versions indicate all of them. + 2. **The component** that is affected by the bug. For example, the Standard Library, Scaladoc, etc. + 3. **Labels** related to your issue. For example, if you think your issue is related to the typechecker, and if you have successfully minimized your issue, label your bug as "typechecker" and "minimized". Issue tracker will suggest names for existing labels as you type them so try not to create duplicates. + 4. **Running environment**. Are you running on Linux? Windows? What JVM version are you using? + +In order for us to quickly triage the bug that you've found, it's important that the code snippet which produces the observed issue is as minimized as possible. For advice on minimizing your code snippet, please see the appropriate subsection of the above (Is it a Bug?). + +### Description + +In the description of your issue, be as detailed as you can. Bug reports which have the following information included are typically understood, triaged, and fixed very quickly: + + 1. Include a test case (minimized if possible) enabling us to reproduce the problematic behavior. Include your test case (and output) in proper formatting `{code}` blocks: + + {code}Here you put your classes{code} + + 2. The expected output. + 3. The actual output, including the stacktrace. + 4. Related discussion on the mailing lists, if applicable. + 4. If you have already looked into the issue provide interesting insights or proposals for fixing the issue. \ No newline at end of file diff --git a/contribute/documentation.md b/contribute/documentation.md new file mode 100644 index 0000000000..05b2455a5f --- /dev/null +++ b/contribute/documentation.md @@ -0,0 +1,29 @@ +--- +layout: page +title: Documentation Contributions +--- +# Contributing documentation to the Scala project + +TODO + + diff --git a/contribute/hacker-guide.md b/contribute/hacker-guide.md new file mode 100644 index 0000000000..758bb17115 --- /dev/null +++ b/contribute/hacker-guide.md @@ -0,0 +1,337 @@ +--- +layout: page +title: Scala hacker guide +--- + +**Eugene Burmako** + +This guide is intended to help you get from an idea of fixing a bug or implementing a new feature into a nightly Scala build, and, ultimately, to a production release of Scala incorporating your idea. + +This guide covers the entire process, from the conception of your idea or bugfix to the point where it is merged into Scala. Throughout, we will use a running example of an idea or bugfix one might wish to contribute. + +## The Running Example + +Let's say that you particularly enjoy the new string interpolation language feature introduced in Scala 2.10.0, and you use it quite heavily. + +Though, there's an annoying issue +which you occasionally stumble upon: the formatting string interpolator `f` [does not support](https://issues.scala-lang.org/browse/SI-6725) +new line tokens `%n`. + +One approach would be to go the mailing list, request that the bug be fixed, and then to wait indefinitely for the fix arrive. Another approach would be to instead patch Scala oneself, and to submit the fix to the Scala repository in hopes that it might make it into a subsequent release. + +**_Of note_**: There are several types of releases/builds. Nightly builds are produced every night at a fixed time. Minor releases happen once every few months. Major releases typically happen once per year. + +## 1. Connect + +Sometimes it's appealing to hack alone and not to have to interact with others out of fear, or out of comfort. However, in the context a big project such as Scala, +this might not be the very best idea. There are people in the Scala community who have spent years accumulating knowledge about Scala libraries and internals. They might provide +unique insights and, what's even better, direct assistance in their areas, so it is not only advantageous, but recommended to communicate with the community about your new patch. + +Typically bug fixes new features start out as an idea or an experiment posted on one of our mailing lists [our mailing lists]({{ site.baseurl }}/community/index.html#mailing_lists) to find out how people feel +about things you want to implement. People proficient is certain areas of Scala usually monitor mailing lists, so you'll often get some help +by simply posting a message. But the most efficient way to connect is to cc your message to one of the people responsible for maintaining the aspect of Scala which you wish to contribute to. + +This is the list of language features/libraries along with their maintainers's full names and github usernames: + +{% include maintainers.html %} + +Since Martin is the person who submitted the string interpolation Scala Improvement Proposal and implemented this language feature for Scala 2.10.0, he might be interested in learning of new bugfixes to that feature. + +As alluded to earlier, one must also choose an appropriate mailing list. Typically, one would use the scala-internals mailing list, as it is devoted to discussions about the core internal design and implementation of the Scala system. However, since this issue has been discussed previously on the scala-user mailing list, +in this example, we post to the [the scala-user mailing list](http://groups.google.com/group/scala-user)about our issue. + +
    Posting to scala-user
    +
    +
    Response from Martin
    + +Now that we have the approval of the feature's author, we can get to work! + +## 2. Set up + +Hacking Scala begins with creating a branch for your work item. To develop Scala we use [Git](http://git-scm.com/) +and [GitHub](http://github.com/). This section of the guide provides a short walkthrough, but if you are new to Git, +it probably makes sense to familiarize yourself with Git first. We recommend the [Git Pro](http://git-scm.com/book/en/) +online book. + +### Fork + +Log into [GitHub](http://github.com/), go to [https://github.com/scala/scala](https://github.com/scala/scala) and click the `Fork` +button in the top right corner of the page. This will create your own copy of our repository that will serve as a scratchpad for your work. + +If you're new to Git, don't be afraid of messing up-- there is no way you can corrupt our repository. + +
    Fork scala/scala
    + +### Clone + +If everything went okay, you will be redirected to your own fork at `https://github.com/username/scala`, where `username` +is your github user name. You might find it helpful to read [http://help.github.com/fork-a-repo/](http://help.github.com/fork-a-repo/), +which covers some of the things that will follow below. Then, _clone_ your repository (_i.e._ pull a copy from github to your local machine) by running the following on the command line: + + 16:35 ~/Projects$ git clone https://github.com/xeno-by/scala + Cloning into 'scala'... + remote: Counting objects: 258564, done. + remote: Compressing objects: 100% (58239/58239), done. + remote: Total 258564 (delta 182155), reused 254094 (delta 178356) + Receiving objects: 100% (258564/258564), 46.91 MiB | 700 KiB/s, done. + Resolving deltas: 100% (182155/182155), done. + +This will create a local directory called `scala`, which contains a clone of your own copy of our repository. The changes that you make +in this directory can be propagated back to your copy hosted on github and, ultimately, pushed into Scala when your patch is ready. + +### Branch + +Before you start making changes, always create your own branch. Never work on the `master` branch. Think of a name that describes +the changes you plan on making. Use a prefix that describes the nature of your change. There are essentially two kinds of changes: +bug fixes and new features. + +* For bug fixes, use `issue/NNNN` for bug NNNN from the [Scala issue tracker](https://issues.scala-lang.org/). +* For new feature use `topic/XXX` for feature XXX. Use feature names that make sense in the context of the whole Scala project and not just to you personally. For example, if you work on diagrams in Scaladoc, use `topic/scaladoc-diagrams` instead of just `topic/diagrams` would be a good branch name. + +Since in our example, we're going to fix an existing bug [SI-6725](https://issues.scala-lang.org/browse/SI-6725), we'll create a branch named `ticket/6725`. + + 16:39 ~/Projects/scala (master)$ git checkout -b ticket/6725 + Switched to a new branch 'ticket/6725' + +If you are new to Git and branching, read the [Branching Chapter](http://git-scm.com/book/en/Git-Branching) in the Git Pro book. + +### Build + +The next step after cloning your fork is setting up your machine to build Scala. The definitive guide on building Scala is located at +[https://github.com/scala/scala/blob/master/README.rst](https://github.com/scala/scala/blob/master/README.rst), but here's the summary: + +* It is recommended to use Java `1.6` (not `1.7` or `1.8`, because they might cause occasional glitches). +* The build tool is `ant`. +* The build runs the `pull-binary-libs.sh` script to download bootstrap libs. This requires `bash` and `curl`. +* The majority of our team works on Linux and OS X, so these operating systems are guaranteed to work. +* Windows is supported, but it might have issues. Please report to [the issue tracker](https://issues.scala-lang.org/) if you encounter any. + +Building Scala is as easy as running `ant` in the root of your cloned repository. Be prepared to wait for a while-- a full "clean" build +takes 8+ minutes depending on your machine (and up to 30 minutes on older machines with less memory). Incremental builds are usually within 30-120 seconds range (again, your mileage might vary +with your hardware). + + 16:50 ~/Projects/scala (ticket/6725)$ ant + Buildfile: /Users/xeno_by/Projects/scala/build.xml + + strap.clean: + + pack.clean: + + init.jars.check: + + init.jars: + [echo] Updating bootstrap libs. (To do this by hand, run ./pull-binary-libs.sh) + [exec] Resolving [943cd5c8802b2a3a64a010efb86ec19bac142e40/lib/ant/ant-contrib.jar] + + ... + + pack.bin: + [mkdir] Created dir: /Users/xeno_by/Projects/scala/build/pack/bin + + pack.done: + + build: + + BUILD SUCCESSFUL + Total time: 9 minutes 41 seconds + +### IDE + +There's no single editor of choice for working with Scala sources, as there are trade-offs associated with each available tool. + +Both Eclipse and IntelliJ IDEA have Scala plugins, which are known to work with our codebase. Here are +[instructions for Eclipse](https://github.com/scala/scala/blob/master/src/eclipse/README.md) and +[instructions for Intellij](https://github.com/scala/scala/blob/master/src/intellij/README). Both of those Scala plugins provide +navigation, refactoring and error reporting functionality as well as integrated debugging. + +There also exist lighter-weight editors such as Emacs, Sublime or jEdit which provide unparalleled are faster and much less memory/compute-intensive to run, while +lacking semantic services and debugging. To address this shortcoming, they can integrate with ENSIME, +a helper program, which hosts a resident Scala compiler providing some of the features implemented in traditional IDEs. However despite +having significantly matured over the last year, support for our particular code base is still being improved, and is not as mature as for Eclipse and IntelliJ. + +Due to the immense variability in personal preference between IDE/editor experience, it's difficult to recommend a particular tool, and your choice should boil down to your personal preferences. + +## 3. Hack + +When hacking on your topic of choice, you'll be modifying Scala, compiling it and testing it on relevant input files. +Typically you would want to first make sure that your changes work on a small example and afterwards verify that nothing break +by running a comprehensive test suite. + +We'll start by creating a `sandbox` directory (this particular name doesn't bear any special meaning), which will hold a single test file and its compilation results. First, let's make sure that +[the bug](https://issues.scala-lang.org/browse/SI-6725) is indeed reproducible by putting together a simple test and compiling and running it with the Scala compiler that we built using `ant`. The Scala compiler that we just built is located in `build/pack/bin`. + + 17:25 ~/Projects/scala (ticket/6725)$ mkdir sandbox + 17:26 ~/Projects/scala (ticket/6725)$ cd sandbox + 17:26 ~/Projects/scala/sandbox (ticket/6725)$ edit Test.scala + 17:26 ~/Projects/scala/sandbox (ticket/6725)$ cat Test.scala + object Test extends App { + val a = 1 + val s = f"$a%s%n$a%s" + println(s) + } + 17:27 ~/Projects/scala/sandbox (ticket/6725)$ ../build/pack/bin/scalac Test.scala + 17:28 ~/Projects/scala/sandbox (ticket/6725)$ ../build/pack/bin/scala Test + 1%n1 // %n should've been replaced by a newline here + +### Implement + +Now, implement your bugfix or new feature! + +Here are also some tips & tricks that have proven useful in Scala development: + +* If after introducing changes or updating your clone, you get `AbstractMethodError` or other linkage exceptions, + try doing `ant clean build`. Due to the way how Scala compiles traits, if a trait changes, then it's sometimes not enough to recompile + just that trait, but it might also be necessary to recompile its users. The `ant` tool is not smart enough to do that, which might lead to + very strange errors. Full-rebuilds fix the problem. Fortunately that's rarely necessary, because full-rebuilds take a lot of time-- the same 8-30 minutes as mentioned above. +* Even on solid state drives packaging Scala distribution (i.e. creating jars from class files) is a non-trivial task. To save time here, + some people in our team do `ant quick.comp` instead of `ant` and then create custom scripts to launch Scala from `build/quick/classes`. +* Don't underestimate the power of `print`. When starting with Scala, I spent a lot of time in the debugger trying to figure out how + things work. However later I found out that print-based debugging is often more effective than jumping around. While it might be obvious + to some, I'd like to explicitly mention that it's also useful to print stack traces to understand the flow of execution. + +### Documentation + +There are several areas that one could contribute to-- there is the Scala library, the Scala compiler, and other tools such as Scaladoc. Each area has varying amounts of documentation. + +##### The Scala Library + +Contributing to the Scala standard library is about the same as working on one of your own libraries. Beyond the Scala collections hierarchy, there are no complex internals or architectures to have to worry about. Just make sure that you code in a "don't-repeat-yourself" (DRY) style, obeying the "boy scout principle" (i.e. make sure you've left something cleaner than you found it.) + +If documentation is necessary for some trait/class/object/method/etc in the Scala standard library, typically maintainers will include inline comments describing their design decisions or rationale for implementing things the way they have, if it is not straightforward. + +If you intend on contributing to Scala collections, please make sure you're familiar with the design of the Scala collections library. It can be easy to put an implementation in the wrong location if you are unfamiliar with the collections architecture. There is an excellent and very detailed guide covering [the Architecture of Scala Collections](http://docs.scala-lang.org/overviews/core/architecture-of-scala-collections.html), as well as a larger more general [Scala collections Guide](http://docs.scala-lang.org/overviews/core/collections.html) covering the sequential portion of collections. For parallel collections, there also exists a detailed [Scala Parallel Collections Guide](http://docs.scala-lang.org/overviews/core/parallel-collections.html). (TODO double check these links!) + +##### The Scala Compiler + +Documentation about the internal workings of the Scala compiler is scarce, and most of the knowledge is passed around by email (scala-internals mailing list), ticket, or word of mouth. However the situation is steadily improving. Here are the resources that might help: + +* [Compiler internals videos by Martin Odersky](TODO) are quite dated, but still very useful. In this three-video + series Martin explains the general architecture of the compiler, and the basics of the front-end, which has recently become Scala reflection API. +* [Reflection documentation](http://docs.scala-lang.org/overviews/reflection/overview.html) describes fundamental data structures (like `Tree`s, `Symbol`s, and `Types`) that + are used to represent Scala programs and operations defined on then. Since much of the compiler has been factored out and made accessible via the Reflection API, all of the fundamentals needed for reflection are the same for the compiler. +* [Reflection and Compilers by Martin Odersky](http://channel9.msdn.com/Events/Lang-NEXT/Lang-NEXT-2012/Reflection-and-Compilers), a talk + at Lang.NEXT 2012 in which Martin elaborates on the design of scalac and the architecture of the reflection API. +* [Scala compiler corner](http://lampwww.epfl.ch/~magarcia/ScalaCompilerCornerReloaded/) contains extensive documentation about + most of the post-typer phases (i.e. the backend) in the Scala compiler. +* [scala-internals](http://groups.google.com/group/scala-internals), a mailing list which hosts discussions about the core + internal design and implementation of the Scala system. + +##### Other Projects + +Tools like Scaladoc also welcome contributions. Unfortunately these smaller projects have less developer documentation. In these cases, the best thing to do is to directly explore the code base (which often contains documentation as inline comments) or to write to the appropriate maintainers for pointers. + +### Interlude + +To fix [the bug we're interested in](https://issues.scala-lang.org/browse/SI-6725). Let's say we've tracked the `StringContext.f` interpolator +down to a macro implemented in `MacroImplementations.scala`, and there we notice that the interpolator only processes conversions, +but not tokens like `%n`. Looks like an easy fix. + + 18:44 ~/Projects/scala/sandbox (ticket/6725)$ git diff + diff --git a/src/compiler/scala/tools/reflect/MacroImplementations.scala b/src/compiler/scala/tools/ + index 002a3fce82..4e8f02084d 100644 + --- a/src/compiler/scala/tools/reflect/MacroImplementations.scala + +++ b/src/compiler/scala/tools/reflect/MacroImplementations.scala + @@ -117,7 +117,8 @@ abstract class MacroImplementations { + if (!strIsEmpty) { + val len = str.length + while (idx < len) { + - if (str(idx) == '%') { + + def notPercentN = str(idx) != '%' || (idx + 1 < len && str(idx + 1) != 'n') + + if (str(idx) == '%' && notPercentN) { + bldr append (str substring (start, idx)) append "%%" + start = idx + 1 + } + +After applying the fix and running `ant`, our simple test case in `sandbox/Test.scala` started working! + + 18:51 ~/Projects/scala/sandbox (ticket/6725)$ cd .. + 18:51 ~/Projects/scala (ticket/6725)$ ant + Buildfile: /Users/xeno_by/Projects/scala/build.xml + + ... + + quick.comp: + [scalacfork] Compiling 1 file to /Users/xeno_by/Projects/scala/build/quick/classes/compiler + [propertyfile] Updating property file: /Users/xeno_by/Projects/scala/build/quick/classes/compiler/compiler.properties + [stopwatch] [quick.comp.timer: 6.588 sec] + + ... + + BUILD SUCCESSFUL + Total time: 18 seconds + + 18:51 ~/Projects/scala (ticket/6725)$ cd sandbox + 18:51 ~/Projects/scala/sandbox (ticket/6725)$ ../build/pack/bin/scalac Test.scala + 18:51 ~/Projects/scala/sandbox (ticket/6725)$ ../build/pack/bin/scala Test + 1 + 1 // no longer getting the %n here - it got transformed into a newline + +### Verify + +Now to make sure that my fix doesn't break anything I need to run the test suite using the `partest` tool we wrote to test Scala. +Read up [the partest guide](partest-guide.html) to learn the details about partest, but in a nutshell you can either +run `ant test` to go through the entire test suite (30+ minutes) or use wildcards to limit the tests to something manageable: + + 18:52 ~/Projects/scala/sandbox (ticket/6725)$ cd ../test + 18:56 ~/Projects/scala/test (ticket/6725)$ partest files/run/*interpol* + Testing individual files + testing: [...]/files/run/interpolationArgs.scala [ OK ] + testing: [...]/files/run/interpolationMultiline1.scala [ OK ] + testing: [...]/files/run/interpolationMultiline2.scala [ OK ] + testing: [...]/files/run/sm-interpolator.scala [ OK ] + testing: [...]/files/run/interpolation.scala [ OK ] + testing: [...]/files/run/stringinterpolation_macro-run.scala [ OK ] + All of 6 tests were successful (elapsed time: 00:00:08) + +## 4. Publish + +After development is finished, it's time to publish the code and submit your patch for discussion and potential inclusion into Scala. +In a nutshell, this involves: + + 1. making sure that your code and commit messages are of high quality, + 2. clicking a few buttons in the Github interface, + 3. assigning one or more reviewers which will look through your pull request. + + Let's go into each of these points in more detail. + +### Commit + +The [Git Basics](http://git-scm.com/book/en/Git-Basics) chapter in the Git online book covers most of the basic workflow during this stage. +There are two things you should know here: + + 1. Commit messages are often the only way to understand the intentions of authors of code written a few years ago. Thus, writing a quality is of utmost importance. The more context you provide for the change you've introduced, the larger the chance that some future maintainer understand your intentions. Consult [the pull request policy](https://github.com/scala/scala/wiki/Pull-Request-Policy) for more information about the desired style of your commits. + + 2. Keeping Scala's git history clean is also important. Therefore we won't accept pull requests for bug fixes that have more than one commit. For features, it is okay to have several commits, but all tests need to pass after every single commit. To clean up your commit structure, you want to [rewrite history](http://git-scm.com/book/en/Git-Branching-Rebasing) using `git rebase` so that your commits are against the latest revision of `master`. + +Once you are satisfied with your work, synced with `master` and cleaned up your commits you are ready to submit a patch to the central Scala repository. Before proceeding make sure you have pushed all of your local changes to your fork on Github. + + 19:22 ~/Projects/scala/test (ticket/6725)$ git add ../src/compiler/scala/tools/reflect/MacroImplementations.scala + 19:22 ~/Projects/scala/test (ticket/6725)$ git commit + [ticket/6725 3c3098693b] SI-6725 `f` interpolator now supports %n tokens + 1 file changed, 2 insertions(+), 1 deletion(-) + 19:34 ~/Projects/scala/test (ticket/6725)$ git push origin ticket/6725 + Username for 'https://github.com': xeno-by + Password for 'https://xeno-by@github.com': + Counting objects: 15, done. + Delta compression using up to 8 threads. + Compressing objects: 100% (8/8), done. + Writing objects: 100% (8/8), 1.00 KiB, done. + Total 8 (delta 5), reused 0 (delta 0) + To https://github.com/xeno-by/scala + * [new branch] ticket/6725 -> ticket/6725 + +### Submit + +Now, we must simply submit our proposed patch. Navigate to your branch in Github (for me it was `https://github.com/xeno-by/scala/tree/ticket/6725`) +and click the pull request button to submit your patch as a pull request to Scala. If you've never submitted patches to Scala, you will +need to sign the contributor license agreement, which [can be done online](http://typesafe.com/contribute/cla/scala) within a few minutes. + +
    Submit a pull request
    + +### Discuss + +After the pull request has been submitted, you need to pick a reviewer (usually the person you've contacted in the beginning of your +workflow) and be ready to elaborate and adjust your patch if necessary. In this example, we picked Martin, because we had such a nice chat on the mailing list: + +
    SAssign the reviewer
    + diff --git a/contribute/index.md b/contribute/index.md new file mode 100644 index 0000000000..c3be3be994 --- /dev/null +++ b/contribute/index.md @@ -0,0 +1,201 @@ +--- +layout: page +title: Get Involved +--- +# Contributing to the Scala project + +The Scala programming language is an open source project with a very +diverse community, where people from all over the world contribute their work, +with everyone benefitting from friendly help and advice, and +kindly helping others in return. So why not join the Scala community and help +everyone make things better? + +
    +
    +
    +

    Scala Internals

    +

    Get a peek into the inners of the Scala compiler.

    +
    +
    +

    Report an issue

    +

    File a bug report or a feature request.

    +
    +
    +

    Documentation

    +

    Improve the documentation itself.

    +
    +
    + +
    +
    +

    Write a SIP

    +

    Write a proposal for extending/improving Scala.

    +
    +
    +

    Hacker's guide

    +

    Learn to write good code and improve your chances of contributing to the Scala galaxy.

    +
    +
    +

    Community issues

    +

    Get cracking on some easy to approach issues.

    +
    +
    + +
    +
    +

    Unassigned issues

    +

    Get serious with some more complex issues.

    +
    +
    +

    Hall of Fame

    +

    Track your rockstar status in the community.

    +
    +
    +

    Test your contributions

    +

    Learn how to run the Scala test suite.

    +
    +
    +
    + + + +### Why contribute a patch to Scala? + +Just to name a few common reasons: + - contributing a patch is the best way to make sure your desired changes will be available in the next Scala version + - Scala is written in Scala, so going through the source code and patching it will improve your Scala-fu + - last but not least, you will make it into the [Scala Contributor Hall of Fame](scala-fame.html). + +
    + +The main Scala project consists of the standard Scala library, the Scala reflection and macros library, +the Scala compiler and the Scaladoc tool. This means there's plenty to choose from when deciding what to work on. +Typically the scaladoc tool provides a low entry point for new committers, so it is a good first step into contributing. + +On the Scala bug tracker you will find many bugs that are [marked as good starting points to contributing ("community" bugs)](https://issues.scala-lang.org/secure/IssueNavigator.jspa?requestId=12111) or [that are not currently assigned](https://issues.scala-lang.org/secure/IssueNavigator.jspa?requestId=12112) and that you could pick up. Once you decided on a ticket to look at, see the next step on how to proceed further. + +If you are interested in contributing code, we ask you to sign the +[Scala Contributor License Agreement](http://typesafe.com/contribute/cla/scala), +which allows us to ensure that all code submitted to the project is +unencumbered by copyrights or patents. + +
    + +### I have this idea that I'd like to add to Scala, how do I start? + +The first step to making a change is to discuss it with the community at large, to make sure everyone agrees on the idea +and on the implementation plan. Starting point ("community") bugs are usually uncontroversial, so you can jump right +ahead to hacking the scala source tree and filing a pull request. For larger changes it is best to announce the change +on the [scala-internals](http://groups.google.com/group/scala-internals) mailing list and get developer feedback. For really complex changes, a [Scala Improvement Process (SIP)](http://docs.scala-lang.org/sips/) document might be required, but the first step is always to discuss it on the mailing list. + +Contributions, big or small, simple or complex, controversial or undisputed, need to materialize as patches against +the Scala project source tree. The [hacker guide](hacker-guide.html) will explain how to materialize your idea into a full-fledged pull request against the Scala code base. + +
    + + diff --git a/contribute/partest-guide.md b/contribute/partest-guide.md new file mode 100644 index 0000000000..e681c569fe --- /dev/null +++ b/contribute/partest-guide.md @@ -0,0 +1,66 @@ +--- +layout: page +title: Running the Test Suite +--- + +Partest is a custom parallel testing tool that we use to run the test suite for the Scala compiler and library. Go the scala project folder from your local checkout and run it via `ant` or standalone as follows. + +## Using ant + +The test suite can be run by using ant from the command line: + + $ ant test.suite + +## Standalone + +There are launch scripts `partest` and `partest.bat` in the `test` folder of the scala project. To have partest run failing tests only and print details about test failures to the console, you can use + + ./test/partest --show-diff --show-log --failed + +You can get a summary of the usage by running partest without arguments. + +* Most commonly you want to invoke partest with an option that tells it which part of the tests to run. For example `--all`, `--pos`, `--neg` or `--run`. +* You can test individual files by specifying individual test files (`.scala` files) as options. Several files can be tested if they are from the same category, e.g., `pos`. +* You can enable output of log and diff using the `-show-log` and `-show-diff` options. +* If you get into real trouble, and want to find out what partest does, you can run it with option `--verbose`. This info is useful as part of bug reports. +* Set custom path from where to load classes: `-classpath ` and `-buildpath `. +* You can use the `SCALAC_OPTS` environment variable to pass command line options to the compiler. +* You can use the `JAVA_OPTS` environment variable to pass command line options to the runner (e.g., for `run/jvm` tests). +* The launch scripts run partest as follows: + + scala -cp scala.tools.partest.nest.NestRunner + + Partest classes from a `quick` build, e.g., can be found in `./build/quick/classes/partest/`. + + Partest will tell you where it loads compiler/library classes from by adding the `partest.debug` property: + + scala -Dpartest.debug=true -cp scala.tools.partest.nest.NestRunner + + + +## ScalaCheck tests + +Tests that depend on [ScalaCheck](https://github.com/rickynils/scalacheck) can be added under folder `./test/files/scalacheck`. A sample test: + + import org.scalacheck._ + import Prop._ + + object Test { + val prop_ConcatLists = property{ (l1: ListInt, l2: ListInt) => + l1.size + l2.size == (l1 ::: l2).size + } + + val tests = List(("prop_ConcatLists", prop_ConcatLists)) + } + +## Troubleshooting + +### Windows + +Some tests might fail because line endings in the `.check` files and the produced results do not match. In that case, set either + + git config core.autocrlf false + +or + + git config core.autocrlf input \ No newline at end of file diff --git a/contribute/scala-fame-data/_posts/2013-03-01-scala-fame-2013-02.md b/contribute/scala-fame-data/_posts/2013-03-01-scala-fame-2013-02.md new file mode 100644 index 0000000000..fbdccb279c --- /dev/null +++ b/contribute/scala-fame-data/_posts/2013-03-01-scala-fame-2013-02.md @@ -0,0 +1,182 @@ +--- +layout: famearchive +title: Contributors of February 2013 +fame-year: 2013 +fame-month: 2 +fame-month-str: February +fame-categories: + - category: Typesafe + authors: + - username: retronym + gravatar: https://secure.gravatar.com/avatar/5df8faf17a57ccab478a9b8056862fc3?s=60&d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-user-420.png + commits: 38 + linesAdded: 2578 + linesDeleted: 2114 + rank: 1 + newContributor: false + - username: adriaanm + gravatar: https://secure.gravatar.com/avatar/d573d4b8a6bd9e2f41611d8d566c533e?s=60&d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-user-420.png + commits: 31 + linesAdded: 7110 + linesDeleted: 9889 + rank: 2 + newContributor: false + - username: JamesIry + gravatar: https://secure.gravatar.com/avatar/72b1a6b08fd8bb3068bd281974461c3e?s=60&d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-user-420.png + commits: 23 + linesAdded: 1673 + linesDeleted: 740 + rank: 3 + newContributor: false + - username: paulp + gravatar: https://secure.gravatar.com/avatar/c25d674f69bb9c155f265a7482712be4?s=60&d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-user-420.png + commits: 10 + linesAdded: 1466 + linesDeleted: 1097 + rank: 4 + newContributor: false + - username: gkossakowski + gravatar: https://secure.gravatar.com/avatar/e608c8cb27858cc5aaf7d0c1e57958d7?s=60&d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-user-420.png + commits: 2 + linesAdded: 4 + linesDeleted: 1 + rank: 5 + newContributor: false + - category: EPFL + authors: + - username: xeno-by + gravatar: https://secure.gravatar.com/avatar/69e339fd10a5ad804c45e22c819c67ad?s=60&d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-user-420.png + commits: 29 + linesAdded: 2108 + linesDeleted: 724 + rank: 1 + newContributor: false + - username: lrytz + gravatar: https://secure.gravatar.com/avatar/d807dd5133a6fc14c821178e53c34091?s=60&d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-user-420.png + commits: 3 + linesAdded: 213 + linesDeleted: 31 + rank: 2 + newContributor: false + - username: heathermiller + gravatar: https://secure.gravatar.com/avatar/54d0b6494927c0040b96ed327202e8dc?s=60&d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-user-420.png + commits: 2 + linesAdded: 2 + linesDeleted: 1333 + rank: 3 + newContributor: false + - username: VladUreche + gravatar: https://secure.gravatar.com/avatar/5658ed1cea041577df360fd663c570fa?s=60&d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-user-420.png + commits: 2 + linesAdded: 86 + linesDeleted: 32 + rank: 3 + newContributor: false + - username: axel22 + gravatar: https://secure.gravatar.com/avatar/e9bdb4fada7e635fffb5e6f26e70cd1d?s=60&d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-user-420.png + commits: 1 + linesAdded: 9 + linesDeleted: 106 + rank: 4 + newContributor: false + - category: Community + authors: + - username: vigdorchik + gravatar: https://secure.gravatar.com/avatar/d497b1b875b7f68414daff74485b8501?s=60&d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-user-420.png + commits: 4 + linesAdded: 471 + linesDeleted: 410 + rank: 1 + newContributor: false + - username: vy + gravatar: https://secure.gravatar.com/avatar/bb8d759cf4230bcaa238fac0018af80c?s=60&d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-user-420.png + commits: 2 + linesAdded: 21 + linesDeleted: 21 + rank: 2 + newContributor: true + - username: u-abramchuk + gravatar: https://secure.gravatar.com/avatar/c70eb13a60582914b51966fdc1a18536?s=60&d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-user-420.png + commits: 2 + linesAdded: 47 + linesDeleted: 13 + rank: 2 + newContributor: true + - username: viktorklang + gravatar: https://secure.gravatar.com/avatar/4f674b2e79f1663864ff78e07ce4c8a8?s=60&d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-user-420.png + commits: 2 + linesAdded: 38 + linesDeleted: 10 + rank: 2 + newContributor: false + - username: jozic + gravatar: https://secure.gravatar.com/avatar/41fbba6d48e543a7dfa8c231b2d0286d?s=60&d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-user-420.png + commits: 1 + linesAdded: 8 + linesDeleted: 8 + rank: 3 + newContributor: true + - username: rnix + gravatar: https://secure.gravatar.com/avatar/0dcbf348a28f2295164c53a40d48a958?s=60&d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-user-420.png + commits: 1 + linesAdded: 1 + linesDeleted: 1 + rank: 3 + newContributor: true + - username: mergeconflict + gravatar: https://secure.gravatar.com/avatar/9a58682929b182af7b01f0180e072fcd?s=60&d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-user-420.png + commits: 1 + linesAdded: 22 + linesDeleted: 15 + rank: 3 + newContributor: false + - username: huitseeker + gravatar: https://secure.gravatar.com/avatar/dc11aab8ab70b10a828b5ee4735183e8?s=60&d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-user-420.png + commits: 1 + linesAdded: 26 + linesDeleted: 0 + rank: 3 + newContributor: false + - username: ViniciusMiana + gravatar: https://secure.gravatar.com/avatar/e05e828a92458c4075b498c7d2957ddd?s=60&d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-user-420.png + commits: 1 + linesAdded: 16 + linesDeleted: 0 + rank: 3 + newContributor: false + - username: mt2309 + gravatar: https://secure.gravatar.com/avatar/f70e1d36b9c1b9290d31e810fa1502f3?s=60&d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-user-420.png + commits: 1 + linesAdded: 3 + linesDeleted: 0 + rank: 3 + newContributor: false + - username: Blaisorblade + gravatar: https://secure.gravatar.com/avatar/a3a676c96a88feb813010e67af012ca0?s=60&d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-user-420.png + commits: 1 + linesAdded: 0 + linesDeleted: 3 + rank: 3 + newContributor: false + - username: rkuhn + gravatar: https://secure.gravatar.com/avatar/262b1ab25e66b1e15a48fa3f68703aad?s=60&d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-user-420.png + commits: 1 + linesAdded: 3 + linesDeleted: 2 + rank: 3 + newContributor: false + - username: khernyo + gravatar: https://secure.gravatar.com/avatar/0e0d750a49edb4b16e8ec83816ea356e?s=60&d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-user-420.png + commits: 1 + linesAdded: 25 + linesDeleted: 1 + rank: 3 + newContributor: false + - username: som-snytt + gravatar: https://secure.gravatar.com/avatar/ec5b08d0fe94845ba49fd4a263c7d99d?s=60&d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-user-420.png + commits: 1 + linesAdded: 1 + linesDeleted: 1 + rank: 3 + newContributor: false +--- diff --git a/contribute/scala-fame-data/_posts/2013-04-01-scala-fame-2013-03.md b/contribute/scala-fame-data/_posts/2013-04-01-scala-fame-2013-03.md new file mode 100644 index 0000000000..51b489e84c --- /dev/null +++ b/contribute/scala-fame-data/_posts/2013-04-01-scala-fame-2013-03.md @@ -0,0 +1,126 @@ +--- +layout: famearchive +title: Contributors of March 2013 +fame-year: 2013 +fame-month: 3 +fame-month-str: March +fame-categories: + - category: Typesafe + authors: + - username: paulp + gravatar: https://secure.gravatar.com/avatar/c25d674f69bb9c155f265a7482712be4?s=60&d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-user-420.png + commits: 51 + linesAdded: 38101 + linesDeleted: 37753 + rank: 1 + newContributor: false + - username: retronym + gravatar: https://secure.gravatar.com/avatar/5df8faf17a57ccab478a9b8056862fc3?s=60&d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-user-420.png + commits: 45 + linesAdded: 4824 + linesDeleted: 3092 + rank: 2 + newContributor: false + - username: adriaanm + gravatar: https://secure.gravatar.com/avatar/d573d4b8a6bd9e2f41611d8d566c533e?s=60&d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-user-420.png + commits: 26 + linesAdded: 2632 + linesDeleted: 5012 + rank: 3 + newContributor: false + - username: JamesIry + gravatar: https://secure.gravatar.com/avatar/72b1a6b08fd8bb3068bd281974461c3e?s=60&d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-user-420.png + commits: 7 + linesAdded: 1218 + linesDeleted: 171 + rank: 4 + newContributor: false + - username: dragos + gravatar: https://secure.gravatar.com/avatar/fbd384e9626d28d1648f023a5e22672f?s=60&d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-user-420.png + commits: 1 + linesAdded: 169 + linesDeleted: 2 + rank: 5 + newContributor: false + - category: EPFL + authors: + - username: xeno-by + gravatar: https://secure.gravatar.com/avatar/69e339fd10a5ad804c45e22c819c67ad?s=60&d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-user-420.png + commits: 7 + linesAdded: 212 + linesDeleted: 104 + rank: 1 + newContributor: false + - category: Community + authors: + - username: vigdorchik + gravatar: https://secure.gravatar.com/avatar/d497b1b875b7f68414daff74485b8501?s=60&d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-user-420.png + commits: 9 + linesAdded: 714 + linesDeleted: 619 + rank: 1 + newContributor: false + - username: som-snytt + gravatar: https://secure.gravatar.com/avatar/ec5b08d0fe94845ba49fd4a263c7d99d?s=60&d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-user-420.png + commits: 7 + linesAdded: 2103 + linesDeleted: 2068 + rank: 2 + newContributor: false + - username: soc + gravatar: https://secure.gravatar.com/avatar/6e4171314f4704b1e82aa4e5d9067e92?s=60&d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-user-420.png + commits: 5 + linesAdded: 162 + linesDeleted: 96 + rank: 3 + newContributor: false + - username: kzys + gravatar: https://secure.gravatar.com/avatar/7828b45f8396aa361d85cead01fd99ca?s=60&d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-user-420.png + commits: 5 + linesAdded: 129 + linesDeleted: 41 + rank: 3 + newContributor: false + - username: Blaisorblade + gravatar: https://secure.gravatar.com/avatar/a3a676c96a88feb813010e67af012ca0?s=60&d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-user-420.png + commits: 3 + linesAdded: 72 + linesDeleted: 20 + rank: 4 + newContributor: false + - username: mesagie + gravatar: https://secure.gravatar.com/avatar/6e7dc465ed74b5250147168a0178d91c?s=60&d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-user-420.png + commits: 1 + linesAdded: 4 + linesDeleted: 5 + rank: 5 + newContributor: true + - username: srinivasreddy + gravatar: https://secure.gravatar.com/avatar/1f542afb3240b82fdf08632bf6cd5384?s=60&d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-user-420.png + commits: 1 + linesAdded: 1 + linesDeleted: 1 + rank: 5 + newContributor: true + - username: mergeconflict + gravatar: https://secure.gravatar.com/avatar/9a58682929b182af7b01f0180e072fcd?s=60&d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-user-420.png + commits: 1 + linesAdded: 22 + linesDeleted: 15 + rank: 5 + newContributor: false + - username: sschaef + gravatar: https://secure.gravatar.com/avatar/dd80aab570fdb5f37e62de5422f44ed4?s=60&d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-user-420.png + commits: 1 + linesAdded: 13 + linesDeleted: 0 + rank: 5 + newContributor: false + - username: chuvoks + gravatar: https://secure.gravatar.com/avatar/415869059046602f37803890bd992fc0?s=60&d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-user-420.png + commits: 1 + linesAdded: 45 + linesDeleted: 24 + rank: 5 + newContributor: false +--- diff --git a/contribute/scala-fame-data/_posts/2013-05-01-scala-fame-2013-04.md b/contribute/scala-fame-data/_posts/2013-05-01-scala-fame-2013-04.md new file mode 100644 index 0000000000..ca59c6cdfb --- /dev/null +++ b/contribute/scala-fame-data/_posts/2013-05-01-scala-fame-2013-04.md @@ -0,0 +1,91 @@ +--- +layout: famearchive +title: Contributors of April 2013 +fame-year: 2013 +fame-month: 4 +fame-month-str: April +fame-categories: + - category: Typesafe + authors: + - username: retronym + gravatar: https://secure.gravatar.com/avatar/5df8faf17a57ccab478a9b8056862fc3?s=60&d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-user-420.png + commits: 36 + linesAdded: 1274 + linesDeleted: 776 + rank: 1 + newContributor: false + - username: paulp + gravatar: https://secure.gravatar.com/avatar/c25d674f69bb9c155f265a7482712be4?s=60&d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-user-420.png + commits: 26 + linesAdded: 1848 + linesDeleted: 1647 + rank: 2 + newContributor: false + - username: vigdorchik + gravatar: https://secure.gravatar.com/avatar/d497b1b875b7f68414daff74485b8501?s=60&d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-user-420.png + commits: 6 + linesAdded: 136 + linesDeleted: 186 + rank: 3 + newContributor: false + - username: adriaanm + gravatar: https://secure.gravatar.com/avatar/d573d4b8a6bd9e2f41611d8d566c533e?s=60&d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-user-420.png + commits: 1 + linesAdded: 3 + linesDeleted: 1 + rank: 4 + newContributor: false + - category: EPFL + authors: + - username: magarciaEPFL + gravatar: https://secure.gravatar.com/avatar/94ff1d59d6e0a3a4ab10c80ab12bfeed?s=60&d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-user-420.png + commits: 9 + linesAdded: 147 + linesDeleted: 149 + rank: 1 + newContributor: false + - username: heathermiller + gravatar: https://secure.gravatar.com/avatar/54d0b6494927c0040b96ed327202e8dc?s=60&d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-user-420.png + commits: 1 + linesAdded: 1 + linesDeleted: 1 + rank: 2 + newContributor: false + - username: hubertp + gravatar: https://secure.gravatar.com/avatar/e0dec64f93778e5c689c3873078a406f?s=60&d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-user-420.png + commits: 1 + linesAdded: 54 + linesDeleted: 46 + rank: 2 + newContributor: false + - category: Community + authors: + - username: som-snytt + gravatar: https://secure.gravatar.com/avatar/ec5b08d0fe94845ba49fd4a263c7d99d?s=60&d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-user-420.png + commits: 11 + linesAdded: 1000 + linesDeleted: 509 + rank: 1 + newContributor: false + - username: soc + gravatar: https://secure.gravatar.com/avatar/6e4171314f4704b1e82aa4e5d9067e92?s=60&d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-user-420.png + commits: 3 + linesAdded: 37 + linesDeleted: 22 + rank: 2 + newContributor: false + - username: huitseeker + gravatar: https://secure.gravatar.com/avatar/dc11aab8ab70b10a828b5ee4735183e8?s=60&d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-user-420.png + commits: 2 + linesAdded: 15 + linesDeleted: 19 + rank: 3 + newContributor: false + - username: namin + gravatar: https://secure.gravatar.com/avatar/f2adf4eb83e1221b519d23bf0bdc98d2?s=60&d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-user-420.png + commits: 1 + linesAdded: 6 + linesDeleted: 11 + rank: 4 + newContributor: false +--- diff --git a/contribute/scala-fame.md b/contribute/scala-fame.md new file mode 100644 index 0000000000..98fad6e629 --- /dev/null +++ b/contribute/scala-fame.md @@ -0,0 +1,14 @@ +--- +layout: page +title: Scala Contribuitor Hall of Fame +--- +# Scala Hall of Fame + +A big thank you to everyone who contributed to: + - [the Scala library and compiler](https://github.com/scala/scala/contributors) + - [the Scala documentation website](https://github.com/scala/scala.github.com/contributors) + +{% for data in site.categories.scala-fame-data limit:1 %} + {% assign famedata = data %} + {% include render-scala-fame.html %} +{% endfor %} From 8559ddab546a4548f3cca197793f3809e3fe8d7f Mon Sep 17 00:00:00 2001 From: Heather Miller Date: Thu, 30 May 2013 13:26:48 +0100 Subject: [PATCH 0021/1870] Going back to having a 'Contribute' section, take 2 --- contribute/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/contribute/index.md b/contribute/index.md index c3be3be994..6e07e5b84c 100644 --- a/contribute/index.md +++ b/contribute/index.md @@ -1,6 +1,6 @@ --- layout: page -title: Get Involved +title: Contribute --- # Contributing to the Scala project From 96c6854e2422b5a813d80ac737e4f58958a17c71 Mon Sep 17 00:00:00 2001 From: Heather Miller Date: Wed, 5 Jun 2013 11:50:04 +0200 Subject: [PATCH 0022/1870] Making contribute page full width --- contribute/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/contribute/index.md b/contribute/index.md index 6e07e5b84c..9b6024dcf9 100644 --- a/contribute/index.md +++ b/contribute/index.md @@ -1,5 +1,5 @@ --- -layout: page +layout: page-full-width title: Contribute --- # Contributing to the Scala project From 2ddf889be5bad81e58ee391e1cf2cee85d3c5b36 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Doeraene?= Date: Thu, 6 Jun 2013 09:09:53 +0200 Subject: [PATCH 0023/1870] Added hall of fame of May 2013. --- .../_posts/2013-06-01-scala-fame-2013-05.md | 105 ++++++++++++++++++ 1 file changed, 105 insertions(+) create mode 100644 contribute/scala-fame-data/_posts/2013-06-01-scala-fame-2013-05.md diff --git a/contribute/scala-fame-data/_posts/2013-06-01-scala-fame-2013-05.md b/contribute/scala-fame-data/_posts/2013-06-01-scala-fame-2013-05.md new file mode 100644 index 0000000000..2829d6a4aa --- /dev/null +++ b/contribute/scala-fame-data/_posts/2013-06-01-scala-fame-2013-05.md @@ -0,0 +1,105 @@ +--- +layout: famearchive +title: Contributors of May 2013 +fame-year: 2013 +fame-month: 5 +fame-month-str: May +fame-categories: + - category: Typesafe + authors: + - username: paulp + gravatar: https://secure.gravatar.com/avatar/c25d674f69bb9c155f265a7482712be4?s=60&d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-user-420.png + commits: 54 + linesAdded: 3465 + linesDeleted: 2035 + rank: 1 + newContributor: false + - username: retronym + gravatar: https://secure.gravatar.com/avatar/5df8faf17a57ccab478a9b8056862fc3?s=60&d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-user-420.png + commits: 13 + linesAdded: 525 + linesDeleted: 66 + rank: 2 + newContributor: false + - username: adriaanm + gravatar: https://secure.gravatar.com/avatar/d573d4b8a6bd9e2f41611d8d566c533e?s=60&d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-user-420.png + commits: 5 + linesAdded: 245 + linesDeleted: 81 + rank: 3 + newContributor: false + - username: viktorklang + gravatar: https://secure.gravatar.com/avatar/4f674b2e79f1663864ff78e07ce4c8a8?s=60&d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-user-420.png + commits: 2 + linesAdded: 51 + linesDeleted: 32 + rank: 4 + newContributor: false + - username: phaller + gravatar: https://secure.gravatar.com/avatar/3b84657fdb075382e3781310ca8a9a70?s=60&d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-user-420.png + commits: 1 + linesAdded: 1965 + linesDeleted: 1086 + rank: 5 + newContributor: false + - category: EPFL + authors: + - username: xeno-by + gravatar: https://secure.gravatar.com/avatar/69e339fd10a5ad804c45e22c819c67ad?s=60&d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-user-420.png + commits: 19 + linesAdded: 742 + linesDeleted: 468 + rank: 1 + newContributor: false + - username: magarciaEPFL + gravatar: https://secure.gravatar.com/avatar/94ff1d59d6e0a3a4ab10c80ab12bfeed?s=60&d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-user-420.png + commits: 11 + linesAdded: 1214 + linesDeleted: 1069 + rank: 2 + newContributor: false + - username: heathermiller + gravatar: https://secure.gravatar.com/avatar/54d0b6494927c0040b96ed327202e8dc?s=60&d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-user-420.png + commits: 1 + linesAdded: 10 + linesDeleted: 7 + rank: 3 + newContributor: false + - category: Community + authors: + - username: soc + gravatar: https://secure.gravatar.com/avatar/6e4171314f4704b1e82aa4e5d9067e92?s=60&d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-user-420.png + commits: 12 + linesAdded: 254 + linesDeleted: 1135 + rank: 1 + newContributor: false + - username: som-snytt + gravatar: https://secure.gravatar.com/avatar/ec5b08d0fe94845ba49fd4a263c7d99d?s=60&d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-user-420.png + commits: 6 + linesAdded: 454 + linesDeleted: 403 + rank: 2 + newContributor: false + - username: vigdorchik + gravatar: https://secure.gravatar.com/avatar/d497b1b875b7f68414daff74485b8501?s=60&d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-user-420.png + commits: 2 + linesAdded: 42 + linesDeleted: 32 + rank: 3 + newContributor: false + - username: dcsobral + gravatar: https://secure.gravatar.com/avatar/6d43da5df0e52fc31c55e6a227bb23f4?s=60&d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-user-420.png + commits: 1 + linesAdded: 6 + linesDeleted: 2 + rank: 4 + newContributor: false + - username: kzys + gravatar: https://secure.gravatar.com/avatar/7828b45f8396aa361d85cead01fd99ca?s=60&d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-user-420.png + commits: 1 + linesAdded: 25 + linesDeleted: 9 + rank: 4 + newContributor: false +--- From 81e54742affd89a43d638b815593089857f277cd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Doeraene?= Date: Thu, 6 Jun 2013 09:17:01 +0200 Subject: [PATCH 0024/1870] 3-column layout for hall of fame pages. --- contribute/scala-fame.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/contribute/scala-fame.md b/contribute/scala-fame.md index 98fad6e629..084c120e27 100644 --- a/contribute/scala-fame.md +++ b/contribute/scala-fame.md @@ -1,5 +1,5 @@ --- -layout: page +layout: page-full-width title: Scala Contribuitor Hall of Fame --- # Scala Hall of Fame From 5a8dd183d57819c319f69e3d92ee73aabf6c934f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Doeraene?= Date: Thu, 6 Jun 2013 09:28:28 +0200 Subject: [PATCH 0025/1870] Added namin in EPFL people. --- .../_posts/2013-03-01-scala-fame-2013-02.md | 63 +++++----- .../_posts/2013-04-01-scala-fame-2013-03.md | 63 ++++++---- .../_posts/2013-05-01-scala-fame-2013-04.md | 115 ++++++++++++------ 3 files changed, 152 insertions(+), 89 deletions(-) diff --git a/contribute/scala-fame-data/_posts/2013-03-01-scala-fame-2013-02.md b/contribute/scala-fame-data/_posts/2013-03-01-scala-fame-2013-02.md index fbdccb279c..376563abce 100644 --- a/contribute/scala-fame-data/_posts/2013-03-01-scala-fame-2013-02.md +++ b/contribute/scala-fame-data/_posts/2013-03-01-scala-fame-2013-02.md @@ -35,20 +35,41 @@ fame-categories: linesDeleted: 1097 rank: 4 newContributor: false + - username: viktorklang + gravatar: https://secure.gravatar.com/avatar/4f674b2e79f1663864ff78e07ce4c8a8?s=60&d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-user-420.png + commits: 3 + linesAdded: 84 + linesDeleted: 53 + rank: 5 + newContributor: false - username: gkossakowski gravatar: https://secure.gravatar.com/avatar/e608c8cb27858cc5aaf7d0c1e57958d7?s=60&d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-user-420.png commits: 2 linesAdded: 4 linesDeleted: 1 - rank: 5 + rank: 6 + newContributor: false + - username: huitseeker + gravatar: https://secure.gravatar.com/avatar/dc11aab8ab70b10a828b5ee4735183e8?s=60&d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-user-420.png + commits: 1 + linesAdded: 26 + linesDeleted: 0 + rank: 7 + newContributor: false + - username: rkuhn + gravatar: https://secure.gravatar.com/avatar/262b1ab25e66b1e15a48fa3f68703aad?s=60&d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-user-420.png + commits: 1 + linesAdded: 3 + linesDeleted: 2 + rank: 7 newContributor: false - category: EPFL authors: - username: xeno-by gravatar: https://secure.gravatar.com/avatar/69e339fd10a5ad804c45e22c819c67ad?s=60&d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-user-420.png - commits: 29 - linesAdded: 2108 - linesDeleted: 724 + commits: 36 + linesAdded: 3379 + linesDeleted: 1635 rank: 1 newContributor: false - username: lrytz @@ -72,6 +93,13 @@ fame-categories: linesDeleted: 32 rank: 3 newContributor: false + - username: hubertp + gravatar: https://secure.gravatar.com/avatar/e0dec64f93778e5c689c3873078a406f?s=60&d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-user-420.png + commits: 2 + linesAdded: 297 + linesDeleted: 100 + rank: 3 + newContributor: false - username: axel22 gravatar: https://secure.gravatar.com/avatar/e9bdb4fada7e635fffb5e6f26e70cd1d?s=60&d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-user-420.png commits: 1 @@ -102,13 +130,6 @@ fame-categories: linesDeleted: 13 rank: 2 newContributor: true - - username: viktorklang - gravatar: https://secure.gravatar.com/avatar/4f674b2e79f1663864ff78e07ce4c8a8?s=60&d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-user-420.png - commits: 2 - linesAdded: 38 - linesDeleted: 10 - rank: 2 - newContributor: false - username: jozic gravatar: https://secure.gravatar.com/avatar/41fbba6d48e543a7dfa8c231b2d0286d?s=60&d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-user-420.png commits: 1 @@ -130,10 +151,10 @@ fame-categories: linesDeleted: 15 rank: 3 newContributor: false - - username: huitseeker - gravatar: https://secure.gravatar.com/avatar/dc11aab8ab70b10a828b5ee4735183e8?s=60&d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-user-420.png + - username: mt2309 + gravatar: https://secure.gravatar.com/avatar/f70e1d36b9c1b9290d31e810fa1502f3?s=60&d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-user-420.png commits: 1 - linesAdded: 26 + linesAdded: 3 linesDeleted: 0 rank: 3 newContributor: false @@ -144,13 +165,6 @@ fame-categories: linesDeleted: 0 rank: 3 newContributor: false - - username: mt2309 - gravatar: https://secure.gravatar.com/avatar/f70e1d36b9c1b9290d31e810fa1502f3?s=60&d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-user-420.png - commits: 1 - linesAdded: 3 - linesDeleted: 0 - rank: 3 - newContributor: false - username: Blaisorblade gravatar: https://secure.gravatar.com/avatar/a3a676c96a88feb813010e67af012ca0?s=60&d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-user-420.png commits: 1 @@ -158,13 +172,6 @@ fame-categories: linesDeleted: 3 rank: 3 newContributor: false - - username: rkuhn - gravatar: https://secure.gravatar.com/avatar/262b1ab25e66b1e15a48fa3f68703aad?s=60&d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-user-420.png - commits: 1 - linesAdded: 3 - linesDeleted: 2 - rank: 3 - newContributor: false - username: khernyo gravatar: https://secure.gravatar.com/avatar/0e0d750a49edb4b16e8ec83816ea356e?s=60&d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-user-420.png commits: 1 diff --git a/contribute/scala-fame-data/_posts/2013-04-01-scala-fame-2013-03.md b/contribute/scala-fame-data/_posts/2013-04-01-scala-fame-2013-03.md index 51b489e84c..0feb88618a 100644 --- a/contribute/scala-fame-data/_posts/2013-04-01-scala-fame-2013-03.md +++ b/contribute/scala-fame-data/_posts/2013-04-01-scala-fame-2013-03.md @@ -16,16 +16,16 @@ fame-categories: newContributor: false - username: retronym gravatar: https://secure.gravatar.com/avatar/5df8faf17a57ccab478a9b8056862fc3?s=60&d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-user-420.png - commits: 45 - linesAdded: 4824 + commits: 46 + linesAdded: 4908 linesDeleted: 3092 rank: 2 newContributor: false - username: adriaanm gravatar: https://secure.gravatar.com/avatar/d573d4b8a6bd9e2f41611d8d566c533e?s=60&d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-user-420.png - commits: 26 - linesAdded: 2632 - linesDeleted: 5012 + commits: 27 + linesAdded: 2675 + linesDeleted: 5043 rank: 3 newContributor: false - username: JamesIry @@ -46,11 +46,18 @@ fame-categories: authors: - username: xeno-by gravatar: https://secure.gravatar.com/avatar/69e339fd10a5ad804c45e22c819c67ad?s=60&d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-user-420.png - commits: 7 - linesAdded: 212 - linesDeleted: 104 + commits: 11 + linesAdded: 295 + linesDeleted: 129 rank: 1 newContributor: false + - username: magarciaEPFL + gravatar: https://secure.gravatar.com/avatar/94ff1d59d6e0a3a4ab10c80ab12bfeed?s=60&d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-user-420.png + commits: 6 + linesAdded: 89 + linesDeleted: 44 + rank: 2 + newContributor: false - category: Community authors: - username: vigdorchik @@ -69,8 +76,8 @@ fame-categories: newContributor: false - username: soc gravatar: https://secure.gravatar.com/avatar/6e4171314f4704b1e82aa4e5d9067e92?s=60&d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-user-420.png - commits: 5 - linesAdded: 162 + commits: 6 + linesAdded: 166 linesDeleted: 96 rank: 3 newContributor: false @@ -79,48 +86,62 @@ fame-categories: commits: 5 linesAdded: 129 linesDeleted: 41 - rank: 3 + rank: 4 newContributor: false - username: Blaisorblade gravatar: https://secure.gravatar.com/avatar/a3a676c96a88feb813010e67af012ca0?s=60&d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-user-420.png commits: 3 linesAdded: 72 linesDeleted: 20 - rank: 4 + rank: 5 newContributor: false - - username: mesagie - gravatar: https://secure.gravatar.com/avatar/6e7dc465ed74b5250147168a0178d91c?s=60&d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-user-420.png + - username: starblood + gravatar: https://secure.gravatar.com/avatar/bd3514b960213c6a7ff5fd3186675429?s=60&d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-user-420.png commits: 1 - linesAdded: 4 - linesDeleted: 5 - rank: 5 + linesAdded: 1 + linesDeleted: 1 + rank: 6 newContributor: true - username: srinivasreddy gravatar: https://secure.gravatar.com/avatar/1f542afb3240b82fdf08632bf6cd5384?s=60&d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-user-420.png commits: 1 linesAdded: 1 linesDeleted: 1 - rank: 5 + rank: 6 + newContributor: true + - username: mesagie + gravatar: https://secure.gravatar.com/avatar/6e7dc465ed74b5250147168a0178d91c?s=60&d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-user-420.png + commits: 1 + linesAdded: 4 + linesDeleted: 5 + rank: 6 newContributor: true - username: mergeconflict gravatar: https://secure.gravatar.com/avatar/9a58682929b182af7b01f0180e072fcd?s=60&d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-user-420.png commits: 1 linesAdded: 22 linesDeleted: 15 - rank: 5 + rank: 6 newContributor: false - username: sschaef gravatar: https://secure.gravatar.com/avatar/dd80aab570fdb5f37e62de5422f44ed4?s=60&d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-user-420.png commits: 1 linesAdded: 13 linesDeleted: 0 - rank: 5 + rank: 6 + newContributor: false + - username: ihji + gravatar: https://secure.gravatar.com/avatar/866a258f0c9fa9529aa47ebd96fe599c?s=60&d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-user-420.png + commits: 1 + linesAdded: 33 + linesDeleted: 6 + rank: 6 newContributor: false - username: chuvoks gravatar: https://secure.gravatar.com/avatar/415869059046602f37803890bd992fc0?s=60&d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-user-420.png commits: 1 linesAdded: 45 linesDeleted: 24 - rank: 5 + rank: 6 newContributor: false --- diff --git a/contribute/scala-fame-data/_posts/2013-05-01-scala-fame-2013-04.md b/contribute/scala-fame-data/_posts/2013-05-01-scala-fame-2013-04.md index ca59c6cdfb..e2cd419e9b 100644 --- a/contribute/scala-fame-data/_posts/2013-05-01-scala-fame-2013-04.md +++ b/contribute/scala-fame-data/_posts/2013-05-01-scala-fame-2013-04.md @@ -7,85 +7,120 @@ fame-month-str: April fame-categories: - category: Typesafe authors: - - username: retronym - gravatar: https://secure.gravatar.com/avatar/5df8faf17a57ccab478a9b8056862fc3?s=60&d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-user-420.png - commits: 36 - linesAdded: 1274 - linesDeleted: 776 - rank: 1 - newContributor: false - username: paulp gravatar: https://secure.gravatar.com/avatar/c25d674f69bb9c155f265a7482712be4?s=60&d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-user-420.png - commits: 26 - linesAdded: 1848 - linesDeleted: 1647 + commits: 38 + linesAdded: 3745 + linesDeleted: 2973 + rank: 1 + newContributor: false + - username: retronym + gravatar: https://secure.gravatar.com/avatar/5df8faf17a57ccab478a9b8056862fc3?s=60&d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-user-420.png + commits: 37 + linesAdded: 1309 + linesDeleted: 777 rank: 2 newContributor: false - - username: vigdorchik - gravatar: https://secure.gravatar.com/avatar/d497b1b875b7f68414daff74485b8501?s=60&d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-user-420.png - commits: 6 - linesAdded: 136 - linesDeleted: 186 + - username: huitseeker + gravatar: https://secure.gravatar.com/avatar/dc11aab8ab70b10a828b5ee4735183e8?s=60&d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-user-420.png + commits: 3 + linesAdded: 16 + linesDeleted: 24 rank: 3 newContributor: false - username: adriaanm gravatar: https://secure.gravatar.com/avatar/d573d4b8a6bd9e2f41611d8d566c533e?s=60&d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-user-420.png - commits: 1 - linesAdded: 3 - linesDeleted: 1 + commits: 2 + linesAdded: 35 + linesDeleted: 82 rank: 4 newContributor: false - category: EPFL authors: - username: magarciaEPFL gravatar: https://secure.gravatar.com/avatar/94ff1d59d6e0a3a4ab10c80ab12bfeed?s=60&d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-user-420.png - commits: 9 - linesAdded: 147 - linesDeleted: 149 + commits: 11 + linesAdded: 238 + linesDeleted: 204 rank: 1 newContributor: false + - username: xeno-by + gravatar: https://secure.gravatar.com/avatar/69e339fd10a5ad804c45e22c819c67ad?s=60&d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-user-420.png + commits: 4 + linesAdded: 208 + linesDeleted: 121 + rank: 2 + newContributor: false + - username: namin + gravatar: https://secure.gravatar.com/avatar/f2adf4eb83e1221b519d23bf0bdc98d2?s=60&d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-user-420.png + commits: 1 + linesAdded: 6 + linesDeleted: 11 + rank: 3 + newContributor: false - username: heathermiller gravatar: https://secure.gravatar.com/avatar/54d0b6494927c0040b96ed327202e8dc?s=60&d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-user-420.png commits: 1 linesAdded: 1 linesDeleted: 1 - rank: 2 + rank: 3 newContributor: false - username: hubertp gravatar: https://secure.gravatar.com/avatar/e0dec64f93778e5c689c3873078a406f?s=60&d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-user-420.png commits: 1 linesAdded: 54 linesDeleted: 46 - rank: 2 + rank: 3 newContributor: false - category: Community authors: - username: som-snytt gravatar: https://secure.gravatar.com/avatar/ec5b08d0fe94845ba49fd4a263c7d99d?s=60&d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-user-420.png - commits: 11 - linesAdded: 1000 - linesDeleted: 509 + commits: 16 + linesAdded: 2561 + linesDeleted: 1150 rank: 1 newContributor: false + - username: vigdorchik + gravatar: https://secure.gravatar.com/avatar/d497b1b875b7f68414daff74485b8501?s=60&d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-user-420.png + commits: 9 + linesAdded: 235 + linesDeleted: 321 + rank: 2 + newContributor: false - username: soc gravatar: https://secure.gravatar.com/avatar/6e4171314f4704b1e82aa4e5d9067e92?s=60&d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-user-420.png - commits: 3 - linesAdded: 37 - linesDeleted: 22 - rank: 2 + commits: 4 + linesAdded: 38 + linesDeleted: 26 + rank: 3 newContributor: false - - username: huitseeker - gravatar: https://secure.gravatar.com/avatar/dc11aab8ab70b10a828b5ee4735183e8?s=60&d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-user-420.png + - username: ihji + gravatar: https://secure.gravatar.com/avatar/866a258f0c9fa9529aa47ebd96fe599c?s=60&d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-user-420.png commits: 2 - linesAdded: 15 - linesDeleted: 19 - rank: 3 + linesAdded: 13 + linesDeleted: 2 + rank: 4 newContributor: false - - username: namin - gravatar: https://secure.gravatar.com/avatar/f2adf4eb83e1221b519d23bf0bdc98d2?s=60&d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-user-420.png + - username: bjornregnell + gravatar: https://secure.gravatar.com/avatar/b1d20c98b0eeb72829523144b9174ca2?s=60&d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-user-420.png commits: 1 - linesAdded: 6 - linesDeleted: 11 - rank: 4 + linesAdded: 3 + linesDeleted: 2 + rank: 5 + newContributor: true + - username: aldenml + gravatar: https://secure.gravatar.com/avatar/bbf061bd484515c156f662a65820c226?s=60&d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-user-420.png + commits: 1 + linesAdded: 4 + linesDeleted: 4 + rank: 5 + newContributor: true + - username: eed3si9n + gravatar: https://secure.gravatar.com/avatar/8f41595db400be30176f6f04630c2842?s=60&d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-user-420.png + commits: 1 + linesAdded: 304 + linesDeleted: 6 + rank: 5 newContributor: false --- From 5056003f15841f8f8362b0240f141e2b0aced0a2 Mon Sep 17 00:00:00 2001 From: Heather Miller Date: Sat, 8 Jun 2013 00:45:43 +0200 Subject: [PATCH 0026/1870] Styling contents and other cleanups --- contribute/bug-reporting-guide.md | 2 -- contribute/hacker-guide.md | 5 ++--- 2 files changed, 2 insertions(+), 5 deletions(-) diff --git a/contribute/bug-reporting-guide.md b/contribute/bug-reporting-guide.md index e286ce2002..f04503f968 100644 --- a/contribute/bug-reporting-guide.md +++ b/contribute/bug-reporting-guide.md @@ -3,8 +3,6 @@ layout: page title: Bug Reporting --- -# Reporting Bugs to the Scala Project - The Scala project tracker is located at [http://issues.scala-lang.org](http://issues.scala-lang.org). Before you submit a bug make sure that it is certainly a bug by following instructions in *Is it a Bug?*. ## Is it a Bug? diff --git a/contribute/hacker-guide.md b/contribute/hacker-guide.md index 758bb17115..484d3036a1 100644 --- a/contribute/hacker-guide.md +++ b/contribute/hacker-guide.md @@ -1,10 +1,9 @@ --- layout: page title: Scala hacker guide +by: Eugene Burmako --- - -**Eugene Burmako** - +
    This guide is intended to help you get from an idea of fixing a bug or implementing a new feature into a nightly Scala build, and, ultimately, to a production release of Scala incorporating your idea. This guide covers the entire process, from the conception of your idea or bugfix to the point where it is merged into Scala. Throughout, we will use a running example of an idea or bugfix one might wish to contribute. From 43b72d980cd057dc11dafb6f73d37bbad1f6e491 Mon Sep 17 00:00:00 2001 From: Heather Miller Date: Sat, 8 Jun 2013 20:32:38 +0200 Subject: [PATCH 0027/1870] Formatting fix to hackers guide --- contribute/hacker-guide.md | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/contribute/hacker-guide.md b/contribute/hacker-guide.md index 484d3036a1..d3ee84456f 100644 --- a/contribute/hacker-guide.md +++ b/contribute/hacker-guide.md @@ -287,9 +287,9 @@ run `ant test` to go through the entire test suite (30+ minutes) or use wildcard After development is finished, it's time to publish the code and submit your patch for discussion and potential inclusion into Scala. In a nutshell, this involves: - 1. making sure that your code and commit messages are of high quality, - 2. clicking a few buttons in the Github interface, - 3. assigning one or more reviewers which will look through your pull request. +1. making sure that your code and commit messages are of high quality, +2. clicking a few buttons in the Github interface, +3. assigning one or more reviewers which will look through your pull request. Let's go into each of these points in more detail. @@ -298,9 +298,8 @@ In a nutshell, this involves: The [Git Basics](http://git-scm.com/book/en/Git-Basics) chapter in the Git online book covers most of the basic workflow during this stage. There are two things you should know here: - 1. Commit messages are often the only way to understand the intentions of authors of code written a few years ago. Thus, writing a quality is of utmost importance. The more context you provide for the change you've introduced, the larger the chance that some future maintainer understand your intentions. Consult [the pull request policy](https://github.com/scala/scala/wiki/Pull-Request-Policy) for more information about the desired style of your commits. - - 2. Keeping Scala's git history clean is also important. Therefore we won't accept pull requests for bug fixes that have more than one commit. For features, it is okay to have several commits, but all tests need to pass after every single commit. To clean up your commit structure, you want to [rewrite history](http://git-scm.com/book/en/Git-Branching-Rebasing) using `git rebase` so that your commits are against the latest revision of `master`. +1. Commit messages are often the only way to understand the intentions of authors of code written a few years ago. Thus, writing a quality is of utmost importance. The more context you provide for the change you've introduced, the larger the chance that some future maintainer understand your intentions. Consult [the pull request policy](https://github.com/scala/scala/wiki/Pull-Request-Policy) for more information about the desired style of your commits. +2. Keeping Scala's git history clean is also important. Therefore we won't accept pull requests for bug fixes that have more than one commit. For features, it is okay to have several commits, but all tests need to pass after every single commit. To clean up your commit structure, you want to [rewrite history](http://git-scm.com/book/en/Git-Branching-Rebasing) using `git rebase` so that your commits are against the latest revision of `master`. Once you are satisfied with your work, synced with `master` and cleaned up your commits you are ready to submit a patch to the central Scala repository. Before proceeding make sure you have pushed all of your local changes to your fork on Github. From 05854a11c3be0fbd2dfb0f10b27d5fc89cdffcac Mon Sep 17 00:00:00 2001 From: Heather Miller Date: Fri, 12 Jul 2013 12:25:39 +0200 Subject: [PATCH 0028/1870] Moving community tickets back to contribute section --- contribute/index.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/contribute/index.md b/contribute/index.md index 9b6024dcf9..7338d06c2c 100644 --- a/contribute/index.md +++ b/contribute/index.md @@ -93,6 +93,10 @@ the Scala project source tree. The [hacker guide](hacker-guide.html) will explai
    +## Community Tickets + +
    + diff --git a/contribute/index.md b/contribute/index.md index 656109cf02..c7b822ae04 100644 --- a/contribute/index.md +++ b/contribute/index.md @@ -1,199 +1,19 @@ --- -layout: page-full-width +layout: page title: Contribute --- -# Contributing to the Scala project -The Scala programming language is an open source project with a very -diverse community, where people from all over the world contribute their work, -with everyone benefitting from friendly help and advice, and -kindly helping others in return. So why not join the Scala community and help -everyone make things better? +## How to help? -
    -
    -
    -

    Scala Internals

    -

    Get a peek into the inners of the Scala compiler.

    -
    -
    -

    Report an issue

    -

    File a bug report or a feature request.

    -
    -
    -

    Documentation

    -

    Improve the documentation itself.

    -
    -
    +### Reporting bugs -
    -
    -

    Write a SIP

    -

    Write a proposal for extending/improving Scala.

    -
    -
    -

    Hacker's guide

    -

    Learn to write good code and improve your chances of contributing to the Scala galaxy.

    -
    -
    -

    Community issues

    -

    Get cracking on some easy to approach issues.

    -
    -
    +See our [bug reporting guide](./bug-reporting-guide.html) to learn +how to efficiently report a bug. -
    -
    -

    Unassigned issues

    -

    Get serious with some more complex issues.

    -
    -
    -

    Hall of Fame

    -

    Track your rockstar status in the community.

    -
    -
    -

    Test your contributions

    -

    Learn how to run the Scala test suite.

    -
    -
    -
    +### Patch the core +Want to dive into the hardcore business? Check out our +[selection of community tickets](./community-tickets.html), +which are good starting points to contributing. - -### Why contribute a patch to Scala? - -Just to name a few common reasons: - - contributing a patch is the best way to make sure your desired changes will be available in the next Scala version - - Scala is written in Scala, so going through the source code and patching it will improve your Scala-fu - - last but not least, you will make it into the [Scala Contributor Hall of Fame](scala-fame.html). - -
    - -The main Scala project consists of the standard Scala library, the Scala reflection and macros library, -the Scala compiler and the Scaladoc tool. This means there's plenty to choose from when deciding what to work on. -Typically the scaladoc tool provides a low entry point for new committers, so it is a good first step into contributing. - -On the Scala bug tracker you will find many bugs that are [marked as good starting points to contributing ("community" bugs)](https://issues.scala-lang.org/secure/IssueNavigator.jspa?requestId=12111) or [that are not currently assigned](https://issues.scala-lang.org/secure/IssueNavigator.jspa?requestId=12112) and that you could pick up. Once you decided on a ticket to look at, see the next step on how to proceed further. - -If you are interested in contributing code, we ask you to sign the -[Scala Contributor License Agreement](http://typesafe.com/contribute/cla/scala), -which allows us to ensure that all code submitted to the project is -unencumbered by copyrights or patents. - -
    - -### I have this idea that I'd like to add to Scala, how do I start? - -The first step to making a change is to discuss it with the community at large, to make sure everyone agrees on the idea -and on the implementation plan. Starting point ("community") bugs are usually uncontroversial, so you can jump right -ahead to hacking the scala source tree and filing a pull request. For larger changes it is best to announce the change -on the [scala-internals](http://groups.google.com/group/scala-internals) mailing list and get developer feedback. For really complex changes, a [Scala Improvement Process (SIP)](http://docs.scala-lang.org/sips/) document might be required, but the first step is always to discuss it on the mailing list. - -Contributions, big or small, simple or complex, controversial or undisputed, need to materialize as patches against -the Scala project source tree. The [hacker guide](hacker-guide.html) will explain how to materialize your idea into a full-fledged pull request against the Scala code base. - - +More info in our [contributing guide](./guide.html). From 22dc8088db52f999a4290dc3455e1231557b1aae Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Doeraene?= Date: Wed, 17 Jul 2013 17:31:21 +0200 Subject: [PATCH 0032/1870] A bit of rewording on the contribute page. --- contribute/index.md | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/contribute/index.md b/contribute/index.md index c7b822ae04..3cd58f8631 100644 --- a/contribute/index.md +++ b/contribute/index.md @@ -10,10 +10,16 @@ title: Contribute See our [bug reporting guide](./bug-reporting-guide.html) to learn how to efficiently report a bug. -### Patch the core +### Help with the documentation + +An easy but very important way to contribute to Scala is to +[help with the documentation](http://docs.scala-lang.org/contribute.html). + +### Compiler and other tools Want to dive into the hardcore business? Check out our [selection of community tickets](./community-tickets.html), -which are good starting points to contributing. +which are good starting points to contributing to the compiler and +surrounding tools, like ScalaDoc. More info in our [contributing guide](./guide.html). From 684bb8b49fdd1baf968b04b74395adccd1e8962a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Doeraene?= Date: Thu, 18 Jul 2013 11:03:40 +0200 Subject: [PATCH 0033/1870] Dropped 3 boxes on the Contribute guide. * SIP * Unassigned tickets * Partest The two first are not supposed to be entry points, and they still have a link further down in the text. Partest is mentioned in the Hacker's guide. And there is no point in using partest without first going through the hacker's guide. --- contribute/guide.md | 19 ++----------------- 1 file changed, 2 insertions(+), 17 deletions(-) diff --git a/contribute/guide.md b/contribute/guide.md index 28adc54e6b..4841496253 100644 --- a/contribute/guide.md +++ b/contribute/guide.md @@ -27,32 +27,17 @@ everyone make things better?
    -

    Write a SIP

    -

    Write a proposal for extending/improving Scala.

    +

    Community issues

    +

    Get cracking on some easy to approach issues.

    Hacker's guide

    Learn to write good code and improve your chances of contributing to the Scala galaxy.

    -
    -

    Community issues

    -

    Get cracking on some easy to approach issues.

    -
    -
    - -
    -
    -

    Unassigned issues

    -

    Get serious with some more complex issues.

    -

    Hall of Fame

    Track your rockstar status in the community.

    -
    -

    Test your contributions

    -

    Learn how to run the Scala test suite.

    -
    From 13462b997cddbc48e8392f6324fafb2a30b678b3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Doeraene?= Date: Thu, 18 Jul 2013 11:10:07 +0200 Subject: [PATCH 0034/1870] Moved the contribute intro text to contribute/. Before it was in contribute/guide.html, but now contribute/ is the landing page for contributions. --- contribute/guide.md | 6 ------ contribute/index.md | 6 ++++++ 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/contribute/guide.md b/contribute/guide.md index 4841496253..ac27e53719 100644 --- a/contribute/guide.md +++ b/contribute/guide.md @@ -3,12 +3,6 @@ layout: page-full-width title: Contributing guide --- -The Scala programming language is an open source project with a very -diverse community, where people from all over the world contribute their work, -with everyone benefitting from friendly help and advice, and -kindly helping others in return. So why not join the Scala community and help -everyone make things better? -
    diff --git a/contribute/index.md b/contribute/index.md index 3cd58f8631..d2402cf4d2 100644 --- a/contribute/index.md +++ b/contribute/index.md @@ -3,6 +3,12 @@ layout: page title: Contribute --- +The Scala programming language is an open source project with a very +diverse community, where people from all over the world contribute their work, +with everyone benefitting from friendly help and advice, and +kindly helping others in return. So why not join the Scala community and help +everyone make things better? + ## How to help? ### Reporting bugs From 966a0f22e50d6cf9a2e2f0ac4cf042d369d69490 Mon Sep 17 00:00:00 2001 From: Heather Miller Date: Tue, 30 Jul 2013 10:01:55 -0700 Subject: [PATCH 0035/1870] Removing double title on the hall of fame --- contribute/scala-fame.md | 1 - 1 file changed, 1 deletion(-) diff --git a/contribute/scala-fame.md b/contribute/scala-fame.md index 084c120e27..81bb76ee3a 100644 --- a/contribute/scala-fame.md +++ b/contribute/scala-fame.md @@ -2,7 +2,6 @@ layout: page-full-width title: Scala Contribuitor Hall of Fame --- -# Scala Hall of Fame A big thank you to everyone who contributed to: - [the Scala library and compiler](https://github.com/scala/scala/contributors) From 688d5568e0a74ea8a7b83f3d56f08378fc1eb516 Mon Sep 17 00:00:00 2001 From: Simon Ochsenreither Date: Wed, 31 Jul 2013 01:34:52 +0200 Subject: [PATCH 0036/1870] =?UTF-8?q?Add=20section=20=E2=80=9CTest?= =?UTF-8?q?=E2=80=9D=20and=20=E2=80=9CMerge=E2=80=9D,=20rename=20=E2=80=9C?= =?UTF-8?q?Discuss=E2=80=9D=20to=20=E2=80=9CReview=E2=80=9D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- contribute/hacker-guide.md | 22 +++++++++++++++++++--- 1 file changed, 19 insertions(+), 3 deletions(-) diff --git a/contribute/hacker-guide.md b/contribute/hacker-guide.md index d3ee84456f..c471baceca 100644 --- a/contribute/hacker-guide.md +++ b/contribute/hacker-guide.md @@ -221,8 +221,8 @@ Tools like Scaladoc also welcome contributions. Unfortunately these smaller proj ### Interlude -To fix [the bug we're interested in](https://issues.scala-lang.org/browse/SI-6725). Let's say we've tracked the `StringContext.f` interpolator -down to a macro implemented in `MacroImplementations.scala`, and there we notice that the interpolator only processes conversions, +To fix [the bug we're interested in](https://issues.scala-lang.org/browse/SI-6725) we've tracked the `StringContext.f` interpolator +down to a macro implemented in `MacroImplementations.scala` There we notice that the interpolator only processes conversions, but not tokens like `%n`. Looks like an easy fix. 18:44 ~/Projects/scala/sandbox (ticket/6725)$ git diff @@ -265,6 +265,17 @@ After applying the fix and running `ant`, our simple test case in `sandbox/Test. 1 1 // no longer getting the %n here - it got transformed into a newline +### Test + +To guard your change against accidental breakage in the future, it is important to add tests. +I have already written one test earlier, so that's a good start but not enough! Apart from obvious usages of our new functionality, we need to cover corner-cases as well. + +Adding tests to the test suite is as easy as moving them to the appropriate directory: + +* Code which should compile successfully, but doesn't need to be executed, needs to go into the [“pos” directory](https://github.com/scala/scala/tree/master/test/files/pos) +* Code which should not compile needs to go into the [“neg” directory](https://github.com/scala/scala/tree/master/test/files/neg) +* Code which should compile and get executed by the test suite needs to go into the [“run” directory](https://github.com/scala/scala/tree/master/test/files/run) + ### Verify Now to make sure that my fix doesn't break anything I need to run the test suite using the `partest` tool we wrote to test Scala. @@ -326,10 +337,15 @@ need to sign the contributor license agreement, which [can be done online](http:
    Submit a pull request
    -### Discuss +### Review After the pull request has been submitted, you need to pick a reviewer (usually the person you've contacted in the beginning of your workflow) and be ready to elaborate and adjust your patch if necessary. In this example, we picked Martin, because we had such a nice chat on the mailing list:
    SAssign the reviewer
    +## Merge + +After your reviewer is happy with your code (usually signalled by a LGTM — “Looks good to me”), your job is done. +Note that there can be a gap between a successful review and the merge, because not every reviewer has merge rights. In that case, someone else from the team will pick up your pull request and merge it. +So don't be confused if your reviewer says “LGTM”, but your code doesn't get merged immediately. From 29705fcb98500b5c2c586cbf8f06c411a1b1d53e Mon Sep 17 00:00:00 2001 From: Seth Tisue Date: Wed, 31 Jul 2013 08:10:21 -0400 Subject: [PATCH 0037/1870] minor copyediting to hacker guide --- contribute/hacker-guide.md | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/contribute/hacker-guide.md b/contribute/hacker-guide.md index c471baceca..28ea69bc3f 100644 --- a/contribute/hacker-guide.md +++ b/contribute/hacker-guide.md @@ -26,11 +26,11 @@ Sometimes it's appealing to hack alone and not to have to interact with others o this might not be the very best idea. There are people in the Scala community who have spent years accumulating knowledge about Scala libraries and internals. They might provide unique insights and, what's even better, direct assistance in their areas, so it is not only advantageous, but recommended to communicate with the community about your new patch. -Typically bug fixes new features start out as an idea or an experiment posted on one of our mailing lists [our mailing lists]({{ site.baseurl }}/community/index.html#mailing_lists) to find out how people feel -about things you want to implement. People proficient is certain areas of Scala usually monitor mailing lists, so you'll often get some help +Typically bug fixes and new features start out as an idea or an experiment posted on one of our mailing lists [our mailing lists]({{ site.baseurl }}/community/index.html#mailing_lists) to find out how people feel +about things you want to implement. People proficient in certain areas of Scala usually monitor mailing lists, so you'll often get some help by simply posting a message. But the most efficient way to connect is to cc your message to one of the people responsible for maintaining the aspect of Scala which you wish to contribute to. -This is the list of language features/libraries along with their maintainers's full names and github usernames: +This is the list of language features/libraries along with their maintainers's full names and GitHub usernames: {% include maintainers.html %} @@ -65,7 +65,7 @@ If you're new to Git, don't be afraid of messing up-- there is no way you can co If everything went okay, you will be redirected to your own fork at `https://github.com/username/scala`, where `username` is your github user name. You might find it helpful to read [http://help.github.com/fork-a-repo/](http://help.github.com/fork-a-repo/), -which covers some of the things that will follow below. Then, _clone_ your repository (_i.e._ pull a copy from github to your local machine) by running the following on the command line: +which covers some of the things that will follow below. Then, _clone_ your repository (_i.e._ pull a copy from GitHub to your local machine) by running the following on the command line: 16:35 ~/Projects$ git clone https://github.com/xeno-by/scala Cloning into 'scala'... @@ -76,7 +76,7 @@ which covers some of the things that will follow below. Then, _clone_ your repos Resolving deltas: 100% (182155/182155), done. This will create a local directory called `scala`, which contains a clone of your own copy of our repository. The changes that you make -in this directory can be propagated back to your copy hosted on github and, ultimately, pushed into Scala when your patch is ready. +in this directory can be propagated back to your copy hosted on GitHub and, ultimately, pushed into Scala when your patch is ready. ### Branch @@ -299,10 +299,10 @@ After development is finished, it's time to publish the code and submit your pat In a nutshell, this involves: 1. making sure that your code and commit messages are of high quality, -2. clicking a few buttons in the Github interface, -3. assigning one or more reviewers which will look through your pull request. +2. clicking a few buttons in the GitHub interface, +3. assigning one or more reviewers who will look through your pull request. - Let's go into each of these points in more detail. +Let's go into each of these points in more detail. ### Commit @@ -312,7 +312,7 @@ There are two things you should know here: 1. Commit messages are often the only way to understand the intentions of authors of code written a few years ago. Thus, writing a quality is of utmost importance. The more context you provide for the change you've introduced, the larger the chance that some future maintainer understand your intentions. Consult [the pull request policy](https://github.com/scala/scala/wiki/Pull-Request-Policy) for more information about the desired style of your commits. 2. Keeping Scala's git history clean is also important. Therefore we won't accept pull requests for bug fixes that have more than one commit. For features, it is okay to have several commits, but all tests need to pass after every single commit. To clean up your commit structure, you want to [rewrite history](http://git-scm.com/book/en/Git-Branching-Rebasing) using `git rebase` so that your commits are against the latest revision of `master`. -Once you are satisfied with your work, synced with `master` and cleaned up your commits you are ready to submit a patch to the central Scala repository. Before proceeding make sure you have pushed all of your local changes to your fork on Github. +Once you are satisfied with your work, synced with `master` and cleaned up your commits you are ready to submit a patch to the central Scala repository. Before proceeding make sure you have pushed all of your local changes to your fork on GitHub. 19:22 ~/Projects/scala/test (ticket/6725)$ git add ../src/compiler/scala/tools/reflect/MacroImplementations.scala 19:22 ~/Projects/scala/test (ticket/6725)$ git commit @@ -331,7 +331,7 @@ Once you are satisfied with your work, synced with `master` and cleaned up your ### Submit -Now, we must simply submit our proposed patch. Navigate to your branch in Github (for me it was `https://github.com/xeno-by/scala/tree/ticket/6725`) +Now, we must simply submit our proposed patch. Navigate to your branch in GitHub (for me it was `https://github.com/xeno-by/scala/tree/ticket/6725`) and click the pull request button to submit your patch as a pull request to Scala. If you've never submitted patches to Scala, you will need to sign the contributor license agreement, which [can be done online](http://typesafe.com/contribute/cla/scala) within a few minutes. From 50d50417d01e7eb834088ce5a3bf924b862eb26f Mon Sep 17 00:00:00 2001 From: Antoine Gourlay Date: Wed, 31 Jul 2013 23:46:24 +0200 Subject: [PATCH 0038/1870] fix links in hacker guide and various typos. --- contribute/bug-reporting-guide.md | 4 ++-- contribute/hacker-guide.md | 14 +++++++------- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/contribute/bug-reporting-guide.md b/contribute/bug-reporting-guide.md index f04503f968..4160dcf438 100644 --- a/contribute/bug-reporting-guide.md +++ b/contribute/bug-reporting-guide.md @@ -45,7 +45,7 @@ If you have a code snippet that is resulting in bytecode which you believe is be * Keep in mind that the behavior you are witnessing could be intended. Good formal resources for verifying whether or not the language behavior is intended is either in the [Scala Improvement Proposal Documents](http://docs.scala-lang.org/sips/sip-list.html) or in the [Scala Language Specification](http://www.scala-lang.org/docu/files/ScalaReference.pdf). If in doubt, you may always ask on the [scala-internals mailing list](https://groups.google.com/forum/?fromgroups#!forum/scala-internals) or [stackoveflow](http://stackoverflow.com/questions/tagged/scala). -In general, if you find yourself stuck on any of these steps, asking on one of following Scala mailing lists can be helpful: +In general, if you find yourself stuck on any of these steps, asking on one of the following Scala mailing lists can be helpful: - For unexpected behavior use [scala-language](https://groups.google.com/forum/?fromgroups#!forum/scala-language), or [scala-user](https://groups.google.com/forum/?fromgroups#!forum/scala-user) mailing lists. - For compiler bugs use the [scala-internals](https://groups.google.com/forum/?fromgroups#!forum/scala-internals) mailing list. @@ -84,4 +84,4 @@ In the description of your issue, be as detailed as you can. Bug reports which h 2. The expected output. 3. The actual output, including the stacktrace. 4. Related discussion on the mailing lists, if applicable. - 4. If you have already looked into the issue provide interesting insights or proposals for fixing the issue. \ No newline at end of file + 4. If you have already looked into the issue provide interesting insights or proposals for fixing the issue. diff --git a/contribute/hacker-guide.md b/contribute/hacker-guide.md index 28ea69bc3f..69ed05d25e 100644 --- a/contribute/hacker-guide.md +++ b/contribute/hacker-guide.md @@ -37,7 +37,7 @@ This is the list of language features/libraries along with their maintainers's f Since Martin is the person who submitted the string interpolation Scala Improvement Proposal and implemented this language feature for Scala 2.10.0, he might be interested in learning of new bugfixes to that feature. As alluded to earlier, one must also choose an appropriate mailing list. Typically, one would use the scala-internals mailing list, as it is devoted to discussions about the core internal design and implementation of the Scala system. However, since this issue has been discussed previously on the scala-user mailing list, -in this example, we post to the [the scala-user mailing list](http://groups.google.com/group/scala-user)about our issue. +in this example, we post to the [the scala-user mailing list](http://groups.google.com/group/scala-user) about our issue.
    Posting to scala-user

    @@ -143,7 +143,7 @@ Both Eclipse and IntelliJ IDEA have Scala plugins, which are known to work with [instructions for Intellij](https://github.com/scala/scala/blob/master/src/intellij/README). Both of those Scala plugins provide navigation, refactoring and error reporting functionality as well as integrated debugging. -There also exist lighter-weight editors such as Emacs, Sublime or jEdit which provide unparalleled are faster and much less memory/compute-intensive to run, while +There also exist lighter-weight editors such as Emacs, Sublime or jEdit which are faster and much less memory/compute-intensive to run, while lacking semantic services and debugging. To address this shortcoming, they can integrate with ENSIME, a helper program, which hosts a resident Scala compiler providing some of the features implemented in traditional IDEs. However despite having significantly matured over the last year, support for our particular code base is still being improved, and is not as mature as for Eclipse and IntelliJ. @@ -194,11 +194,11 @@ There are several areas that one could contribute to-- there is the Scala librar ##### The Scala Library -Contributing to the Scala standard library is about the same as working on one of your own libraries. Beyond the Scala collections hierarchy, there are no complex internals or architectures to have to worry about. Just make sure that you code in a "don't-repeat-yourself" (DRY) style, obeying the "boy scout principle" (i.e. make sure you've left something cleaner than you found it.) +Contributing to the Scala standard library is about the same as working on one of your own libraries. Beyond the Scala collections hierarchy, there are no complex internals or architectures to have to worry about. Just make sure that you code in a "don't-repeat-yourself" (DRY) style, obeying the "boy scout principle" (i.e. make sure you've left something cleaner than you found it). If documentation is necessary for some trait/class/object/method/etc in the Scala standard library, typically maintainers will include inline comments describing their design decisions or rationale for implementing things the way they have, if it is not straightforward. -If you intend on contributing to Scala collections, please make sure you're familiar with the design of the Scala collections library. It can be easy to put an implementation in the wrong location if you are unfamiliar with the collections architecture. There is an excellent and very detailed guide covering [the Architecture of Scala Collections](http://docs.scala-lang.org/overviews/core/architecture-of-scala-collections.html), as well as a larger more general [Scala collections Guide](http://docs.scala-lang.org/overviews/core/collections.html) covering the sequential portion of collections. For parallel collections, there also exists a detailed [Scala Parallel Collections Guide](http://docs.scala-lang.org/overviews/core/parallel-collections.html). (TODO double check these links!) +If you intend on contributing to Scala collections, please make sure you're familiar with the design of the Scala collections library. It can be easy to put an implementation in the wrong location if you are unfamiliar with the collections architecture. There is an excellent and very detailed guide covering [the Architecture of Scala Collections](http://docs.scala-lang.org/overviews/core/architecture-of-scala-collections.html), as well as a larger more general [Scala collections Guide](http://docs.scala-lang.org/overviews/collections/introduction.html) covering the sequential portion of collections. For parallel collections, there also exists a detailed [Scala Parallel Collections Guide](http://docs.scala-lang.org/overviews/parallel-collections/overview.html). ##### The Scala Compiler @@ -272,9 +272,9 @@ I have already written one test earlier, so that's a good start but not enough! Adding tests to the test suite is as easy as moving them to the appropriate directory: -* Code which should compile successfully, but doesn't need to be executed, needs to go into the [“pos” directory](https://github.com/scala/scala/tree/master/test/files/pos) -* Code which should not compile needs to go into the [“neg” directory](https://github.com/scala/scala/tree/master/test/files/neg) -* Code which should compile and get executed by the test suite needs to go into the [“run” directory](https://github.com/scala/scala/tree/master/test/files/run) +* Code which should compile successfully, but doesn't need to be executed, needs to go into the [“pos” directory](https://github.com/scala/scala/tree/master/test/files/pos). +* Code which should not compile needs to go into the [“neg” directory](https://github.com/scala/scala/tree/master/test/files/neg). +* Code which should compile and get executed by the test suite needs to go into the [“run” directory](https://github.com/scala/scala/tree/master/test/files/run). ### Verify From ac890ec4475ccac7b4cde69954e0325d770429f5 Mon Sep 17 00:00:00 2001 From: Ricky Elrod Date: Wed, 31 Jul 2013 21:44:19 -0400 Subject: [PATCH 0039/1870] Make hacker-guide valid. --- contribute/hacker-guide.md | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/contribute/hacker-guide.md b/contribute/hacker-guide.md index 69ed05d25e..5e22223278 100644 --- a/contribute/hacker-guide.md +++ b/contribute/hacker-guide.md @@ -39,9 +39,8 @@ Since Martin is the person who submitted the string interpolation Scala Improvem As alluded to earlier, one must also choose an appropriate mailing list. Typically, one would use the scala-internals mailing list, as it is devoted to discussions about the core internal design and implementation of the Scala system. However, since this issue has been discussed previously on the scala-user mailing list, in this example, we post to the [the scala-user mailing list](http://groups.google.com/group/scala-user) about our issue. -
    Posting to scala-user
    -
    -
    Response from Martin
    +Posting to scala-user +Response from Martin Now that we have the approval of the feature's author, we can get to work! @@ -59,7 +58,7 @@ button in the top right corner of the page. This will create your own copy of ou If you're new to Git, don't be afraid of messing up-- there is no way you can corrupt our repository. -
    Fork scala/scala
    +Fork scala/scala ### Clone @@ -335,14 +334,14 @@ Now, we must simply submit our proposed patch. Navigate to your branch in GitHub and click the pull request button to submit your patch as a pull request to Scala. If you've never submitted patches to Scala, you will need to sign the contributor license agreement, which [can be done online](http://typesafe.com/contribute/cla/scala) within a few minutes. -
    Submit a pull request
    +Submit a pull request ### Review After the pull request has been submitted, you need to pick a reviewer (usually the person you've contacted in the beginning of your workflow) and be ready to elaborate and adjust your patch if necessary. In this example, we picked Martin, because we had such a nice chat on the mailing list: -
    SAssign the reviewer
    +SAssign the reviewer ## Merge From 38ef7cf6c68443939d834c4f5fe28bed129eb7e8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Doeraene?= Date: Mon, 30 Sep 2013 14:30:04 +0200 Subject: [PATCH 0040/1870] Add hall of fame for July and August 2013. --- .../_posts/2013-08-01-scala-fame-2013-07.md | 119 ++++++++++++++++++ .../_posts/2013-09-01-scala-fame-2013-08.md | 98 +++++++++++++++ 2 files changed, 217 insertions(+) create mode 100644 contribute/scala-fame-data/_posts/2013-08-01-scala-fame-2013-07.md create mode 100644 contribute/scala-fame-data/_posts/2013-09-01-scala-fame-2013-08.md diff --git a/contribute/scala-fame-data/_posts/2013-08-01-scala-fame-2013-07.md b/contribute/scala-fame-data/_posts/2013-08-01-scala-fame-2013-07.md new file mode 100644 index 0000000000..b6670c42ce --- /dev/null +++ b/contribute/scala-fame-data/_posts/2013-08-01-scala-fame-2013-07.md @@ -0,0 +1,119 @@ +--- +layout: famearchive +title: Contributors of July 2013 +fame-year: 2013 +fame-month: 7 +fame-month-str: July +fame-categories: + - category: Typesafe + authors: + - username: gkossakowski + gravatar: https://0.gravatar.com/avatar/e608c8cb27858cc5aaf7d0c1e57958d7?d=https%3A%2F%2Fidenticons.github.com%2F8196e8d0f9ee7dfdfc7e11dbbfa30d77.png&s=60 + commits: 11 + linesAdded: 522 + linesDeleted: 311 + rank: 1 + newContributor: false + - username: adriaanm + gravatar: https://0.gravatar.com/avatar/d573d4b8a6bd9e2f41611d8d566c533e?d=https%3A%2F%2Fidenticons.github.com%2Ff0d91e20ef53ace520f6ccbf8402319f.png&s=60 + commits: 9 + linesAdded: 1068 + linesDeleted: 11436 + rank: 2 + newContributor: false + - username: retronym + gravatar: https://0.gravatar.com/avatar/5df8faf17a57ccab478a9b8056862fc3?d=https%3A%2F%2Fidenticons.github.com%2F75e4dffe50001cf8b96d3beecbe181be.png&s=60 + commits: 8 + linesAdded: 416 + linesDeleted: 134 + rank: 3 + newContributor: false + - username: paulp + gravatar: https://identicons.github.com/bf65417dcecc7f2b0006e1f5793b7143.png + commits: 2 + linesAdded: 46 + linesDeleted: 27 + rank: 4 + newContributor: false + - category: EPFL + authors: + - username: magarciaEPFL + gravatar: https://2.gravatar.com/avatar/94ff1d59d6e0a3a4ab10c80ab12bfeed?d=https%3A%2F%2Fidenticons.github.com%2F8b7440eff98d923640c99b5535429144.png&s=60 + commits: 12 + linesAdded: 1208 + linesDeleted: 1069 + rank: 1 + newContributor: false + - username: xeno-by + gravatar: https://2.gravatar.com/avatar/69e339fd10a5ad804c45e22c819c67ad?d=https%3A%2F%2Fidenticons.github.com%2F6a5b1b05e953818962474e94b67d1cc2.png&s=60 + commits: 8 + linesAdded: 321 + linesDeleted: 95 + rank: 2 + newContributor: false + - username: VladUreche + gravatar: https://2.gravatar.com/avatar/5658ed1cea041577df360fd663c570fa?d=https%3A%2F%2Fidenticons.github.com%2Fa1ef2fed16f85a1af890467a80c30226.png&s=60 + commits: 2 + linesAdded: 104 + linesDeleted: 2 + rank: 3 + newContributor: false + - username: cvogt + gravatar: https://1.gravatar.com/avatar/669fb4eab529fba02f390051ddf3c8d3?d=https%3A%2F%2Fidenticons.github.com%2F78d9e7d7c73ac19ca8da9805762e5bb0.png&s=60 + commits: 1 + linesAdded: 19 + linesDeleted: 0 + rank: 4 + newContributor: false + - category: Community + authors: + - username: soc + gravatar: https://0.gravatar.com/avatar/6e4171314f4704b1e82aa4e5d9067e92?d=https%3A%2F%2Fidenticons.github.com%2F29f7ac3adbe1d3500c9404388aedcbfd.png&s=60 + commits: 19 + linesAdded: 2818 + linesDeleted: 4377 + rank: 1 + newContributor: false + - username: som-snytt + gravatar: https://2.gravatar.com/avatar/ec5b08d0fe94845ba49fd4a263c7d99d?d=https%3A%2F%2Fidenticons.github.com%2Fd292a902ebb73981efd65c9ef416046b.png&s=60 + commits: 16 + linesAdded: 1049 + linesDeleted: 553 + rank: 2 + newContributor: false + - username: densh + gravatar: https://0.gravatar.com/avatar/5ed274e115ec061d062d9c32a539cdc9?d=https%3A%2F%2Fidenticons.github.com%2Fcd3e73ab183ea35424f0bf59101a74e4.png&s=60 + commits: 9 + linesAdded: 2632 + linesDeleted: 178 + rank: 3 + newContributor: false + - username: folone + gravatar: https://2.gravatar.com/avatar/50e7e3f60b3507383d2b327857b66a62?d=https%3A%2F%2Fidenticons.github.com%2F6c2bcbccd23191b40f4932e2b8450681.png&s=60 + commits: 3 + linesAdded: 106 + linesDeleted: 261 + rank: 4 + newContributor: false + - username: xuwei-k + gravatar: https://2.gravatar.com/avatar/18d8b1bf73827b2a15e2bd3e75b4b34a?d=https%3A%2F%2Fidenticons.github.com%2Fdab0069935d770e6285411ed1f4398b9.png&s=60 + commits: 3 + linesAdded: 5 + linesDeleted: 5 + rank: 4 + newContributor: false + - username: gourlaysama + gravatar: https://2.gravatar.com/avatar/8acf3c87222f89b18786c8db60eb365d?d=https%3A%2F%2Fidenticons.github.com%2F76004d7b1fac3a2b262caa5e6bdf15c9.png&s=60 + commits: 2 + linesAdded: 67 + linesDeleted: 3 + rank: 5 + newContributor: false + - username: ScrapCodes + gravatar: https://0.gravatar.com/avatar/e9813bbbab2caa993bf7e2b2d60de894?d=https%3A%2F%2Fidenticons.github.com%2F38c660c74f82a216b75167debab770ed.png&s=60 + commits: 1 + linesAdded: 1 + linesDeleted: 1 + rank: 6 + newContributor: false +--- diff --git a/contribute/scala-fame-data/_posts/2013-09-01-scala-fame-2013-08.md b/contribute/scala-fame-data/_posts/2013-09-01-scala-fame-2013-08.md new file mode 100644 index 0000000000..c876e815d1 --- /dev/null +++ b/contribute/scala-fame-data/_posts/2013-09-01-scala-fame-2013-08.md @@ -0,0 +1,98 @@ +--- +layout: famearchive +title: Contributors of August 2013 +fame-year: 2013 +fame-month: 8 +fame-month-str: August +fame-categories: + - category: Typesafe + authors: + - username: paulp + gravatar: https://identicons.github.com/bf65417dcecc7f2b0006e1f5793b7143.png + commits: 50 + linesAdded: 3703 + linesDeleted: 2269 + rank: 1 + newContributor: false + - username: retronym + gravatar: https://0.gravatar.com/avatar/5df8faf17a57ccab478a9b8056862fc3?d=https%3A%2F%2Fidenticons.github.com%2F75e4dffe50001cf8b96d3beecbe181be.png&s=60 + commits: 30 + linesAdded: 990 + linesDeleted: 167 + rank: 2 + newContributor: false + - username: adriaanm + gravatar: https://0.gravatar.com/avatar/d573d4b8a6bd9e2f41611d8d566c533e?d=https%3A%2F%2Fidenticons.github.com%2Ff0d91e20ef53ace520f6ccbf8402319f.png&s=60 + commits: 6 + linesAdded: 224 + linesDeleted: 11001 + rank: 3 + newContributor: false + - username: huitseeker + gravatar: https://0.gravatar.com/avatar/dc11aab8ab70b10a828b5ee4735183e8?d=https%3A%2F%2Fidenticons.github.com%2F0777acff7c9ab34562699e4e1d05affb.png&s=60 + commits: 2 + linesAdded: 6 + linesDeleted: 6 + rank: 4 + newContributor: false + - category: EPFL + authors: + - username: xeno-by + gravatar: https://2.gravatar.com/avatar/69e339fd10a5ad804c45e22c819c67ad?d=https%3A%2F%2Fidenticons.github.com%2F6a5b1b05e953818962474e94b67d1cc2.png&s=60 + commits: 9 + linesAdded: 579 + linesDeleted: 419 + rank: 1 + newContributor: false + - username: magarciaEPFL + gravatar: https://2.gravatar.com/avatar/94ff1d59d6e0a3a4ab10c80ab12bfeed?d=https%3A%2F%2Fidenticons.github.com%2F8b7440eff98d923640c99b5535429144.png&s=60 + commits: 4 + linesAdded: 319 + linesDeleted: 105 + rank: 2 + newContributor: false + - category: Community + authors: + - username: densh + gravatar: https://0.gravatar.com/avatar/5ed274e115ec061d062d9c32a539cdc9?d=https%3A%2F%2Fidenticons.github.com%2Fcd3e73ab183ea35424f0bf59101a74e4.png&s=60 + commits: 19 + linesAdded: 687 + linesDeleted: 322 + rank: 1 + newContributor: false + - username: som-snytt + gravatar: https://2.gravatar.com/avatar/ec5b08d0fe94845ba49fd4a263c7d99d?d=https%3A%2F%2Fidenticons.github.com%2Fd292a902ebb73981efd65c9ef416046b.png&s=60 + commits: 12 + linesAdded: 455 + linesDeleted: 91 + rank: 2 + newContributor: false + - username: soc + gravatar: https://0.gravatar.com/avatar/6e4171314f4704b1e82aa4e5d9067e92?d=https%3A%2F%2Fidenticons.github.com%2F29f7ac3adbe1d3500c9404388aedcbfd.png&s=60 + commits: 4 + linesAdded: 64 + linesDeleted: 27 + rank: 3 + newContributor: false + - username: gourlaysama + gravatar: https://2.gravatar.com/avatar/8acf3c87222f89b18786c8db60eb365d?d=https%3A%2F%2Fidenticons.github.com%2F76004d7b1fac3a2b262caa5e6bdf15c9.png&s=60 + commits: 2 + linesAdded: 50 + linesDeleted: 9 + rank: 4 + newContributor: false + - username: ScrapCodes + gravatar: https://0.gravatar.com/avatar/e9813bbbab2caa993bf7e2b2d60de894?d=https%3A%2F%2Fidenticons.github.com%2F38c660c74f82a216b75167debab770ed.png&s=60 + commits: 1 + linesAdded: 3 + linesDeleted: 0 + rank: 5 + newContributor: false + - username: folone + gravatar: https://2.gravatar.com/avatar/50e7e3f60b3507383d2b327857b66a62?d=https%3A%2F%2Fidenticons.github.com%2F6c2bcbccd23191b40f4932e2b8450681.png&s=60 + commits: 1 + linesAdded: 55 + linesDeleted: 7 + rank: 5 + newContributor: false +--- From 1fad03554f97da791f28a74746dbb158f9109c02 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Doeraene?= Date: Thu, 10 Oct 2013 11:17:43 +0200 Subject: [PATCH 0041/1870] Add hall of fame for 2013-09. --- .../_posts/2013-10-01-scala-fame-2013-09.md | 105 ++++++++++++++++++ 1 file changed, 105 insertions(+) create mode 100644 contribute/scala-fame-data/_posts/2013-10-01-scala-fame-2013-09.md diff --git a/contribute/scala-fame-data/_posts/2013-10-01-scala-fame-2013-09.md b/contribute/scala-fame-data/_posts/2013-10-01-scala-fame-2013-09.md new file mode 100644 index 0000000000..23fa456fc0 --- /dev/null +++ b/contribute/scala-fame-data/_posts/2013-10-01-scala-fame-2013-09.md @@ -0,0 +1,105 @@ +--- +layout: famearchive +title: Contributors of September 2013 +fame-year: 2013 +fame-month: 9 +fame-month-str: September +fame-categories: + - category: Typesafe + authors: + - username: retronym + gravatar: https://2.gravatar.com/avatar/5df8faf17a57ccab478a9b8056862fc3?d=https%3A%2F%2Fidenticons.github.com%2F75e4dffe50001cf8b96d3beecbe181be.png&s=60 + commits: 42 + linesAdded: 1459 + linesDeleted: 476 + rank: 1 + newContributor: false + - username: paulp + gravatar: https://identicons.github.com/bf65417dcecc7f2b0006e1f5793b7143.png + commits: 25 + linesAdded: 6603 + linesDeleted: 7419 + rank: 2 + newContributor: false + - username: huitseeker + gravatar: https://1.gravatar.com/avatar/dc11aab8ab70b10a828b5ee4735183e8?d=https%3A%2F%2Fidenticons.github.com%2F0777acff7c9ab34562699e4e1d05affb.png&s=60 + commits: 7 + linesAdded: 520 + linesDeleted: 536 + rank: 3 + newContributor: false + - username: gkossakowski + gravatar: https://0.gravatar.com/avatar/e608c8cb27858cc5aaf7d0c1e57958d7?d=https%3A%2F%2Fidenticons.github.com%2F8196e8d0f9ee7dfdfc7e11dbbfa30d77.png&s=60 + commits: 2 + linesAdded: 1443 + linesDeleted: 44 + rank: 4 + newContributor: false + - username: dragos + gravatar: https://2.gravatar.com/avatar/fbd384e9626d28d1648f023a5e22672f?d=https%3A%2F%2Fidenticons.github.com%2F6b660454242c937e501b88fd136132f8.png&s=60 + commits: 2 + linesAdded: 95 + linesDeleted: 13 + rank: 4 + newContributor: false + - username: jsuereth + gravatar: https://1.gravatar.com/avatar/5ed293320c06809a24812f56861201ad?d=https%3A%2F%2Fidenticons.github.com%2F11a5b5ef81cff76a0a1f3d042f635df3.png&s=60 + commits: 1 + linesAdded: 18 + linesDeleted: 37 + rank: 5 + newContributor: false + - username: adriaanm + gravatar: https://0.gravatar.com/avatar/d573d4b8a6bd9e2f41611d8d566c533e?d=https%3A%2F%2Fidenticons.github.com%2Ff0d91e20ef53ace520f6ccbf8402319f.png&s=60 + commits: 1 + linesAdded: 5 + linesDeleted: 5 + rank: 5 + newContributor: false + - category: EPFL + authors: + - username: xeno-by + gravatar: https://1.gravatar.com/avatar/69e339fd10a5ad804c45e22c819c67ad?d=https%3A%2F%2Fidenticons.github.com%2F6a5b1b05e953818962474e94b67d1cc2.png&s=60 + commits: 5 + linesAdded: 434 + linesDeleted: 153 + rank: 1 + newContributor: false + - username: sjrd + gravatar: https://1.gravatar.com/avatar/bc554c7355c8476dd63375b314b1bd97?d=https%3A%2F%2Fidenticons.github.com%2F7f7549008d59643d2ce9846ce0364947.png&s=60 + commits: 4 + linesAdded: 30 + linesDeleted: 9 + rank: 2 + newContributor: true + - category: Community + authors: + - username: densh + gravatar: https://1.gravatar.com/avatar/5ed274e115ec061d062d9c32a539cdc9?d=https%3A%2F%2Fidenticons.github.com%2Fcd3e73ab183ea35424f0bf59101a74e4.png&s=60 + commits: 20 + linesAdded: 1415 + linesDeleted: 594 + rank: 1 + newContributor: false + - username: som-snytt + gravatar: https://1.gravatar.com/avatar/ec5b08d0fe94845ba49fd4a263c7d99d?d=https%3A%2F%2Fidenticons.github.com%2Fd292a902ebb73981efd65c9ef416046b.png&s=60 + commits: 11 + linesAdded: 367 + linesDeleted: 106 + rank: 2 + newContributor: false + - username: Ichoran + gravatar: https://0.gravatar.com/avatar/3698349ad0b898d398a6573f4d1f867a?d=https%3A%2F%2Fidenticons.github.com%2Ffc12483537f3df99d480423de674e099.png&s=60 + commits: 3 + linesAdded: 75 + linesDeleted: 27 + rank: 3 + newContributor: true + - username: sschaef + gravatar: https://0.gravatar.com/avatar/dd80aab570fdb5f37e62de5422f44ed4?d=https%3A%2F%2Fidenticons.github.com%2Fb5a662bc30d97b377338f5dfb2b4cc66.png&s=60 + commits: 3 + linesAdded: 84 + linesDeleted: 139 + rank: 3 + newContributor: false +--- From 9b709e0b67f7e3b7594734b019f262fd1dcf6e15 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20van=20Delft?= Date: Mon, 6 Jan 2014 14:49:42 +0100 Subject: [PATCH 0042/1870] Update hacker-guide.md Added two more Git learning resources --- contribute/hacker-guide.md | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/contribute/hacker-guide.md b/contribute/hacker-guide.md index 5e22223278..46d252984e 100644 --- a/contribute/hacker-guide.md +++ b/contribute/hacker-guide.md @@ -48,8 +48,11 @@ Now that we have the approval of the feature's author, we can get to work! Hacking Scala begins with creating a branch for your work item. To develop Scala we use [Git](http://git-scm.com/) and [GitHub](http://github.com/). This section of the guide provides a short walkthrough, but if you are new to Git, -it probably makes sense to familiarize yourself with Git first. We recommend the [Git Pro](http://git-scm.com/book/en/) -online book. +it probably makes sense to familiarize yourself with Git first. We recommend + +* the [Git Pro](http://git-scm.com/book/en/) online book. +* the help page on [Forking a Git Repository](https://help.github.com/articles/fork-a-repo). +* this great training tool [LearnGitBranching](http://pcottle.github.io/learnGitBranching/). One hour hands-on training helps more than 1000 hours reading. ### Fork From 6f80442e6ac4050d70ab6b06ed5d59ee8187637f Mon Sep 17 00:00:00 2001 From: George Leontiev Date: Wed, 25 Jun 2014 17:43:17 +0200 Subject: [PATCH 0043/1870] Update hacker guide: add more info, fix broken links. --- contribute/hacker-guide.md | 99 ++++++++++++++++++++++++++++++++------ 1 file changed, 83 insertions(+), 16 deletions(-) diff --git a/contribute/hacker-guide.md b/contribute/hacker-guide.md index 46d252984e..895d925f48 100644 --- a/contribute/hacker-guide.md +++ b/contribute/hacker-guide.md @@ -26,7 +26,7 @@ Sometimes it's appealing to hack alone and not to have to interact with others o this might not be the very best idea. There are people in the Scala community who have spent years accumulating knowledge about Scala libraries and internals. They might provide unique insights and, what's even better, direct assistance in their areas, so it is not only advantageous, but recommended to communicate with the community about your new patch. -Typically bug fixes and new features start out as an idea or an experiment posted on one of our mailing lists [our mailing lists]({{ site.baseurl }}/community/index.html#mailing_lists) to find out how people feel +Typically bug fixes and new features start out as an idea or an experiment posted on one of [our mailing lists]({{ site.baseurl }}/community/index.html#mailing_lists) to find out how people feel about things you want to implement. People proficient in certain areas of Scala usually monitor mailing lists, so you'll often get some help by simply posting a message. But the most efficient way to connect is to cc your message to one of the people responsible for maintaining the aspect of Scala which you wish to contribute to. @@ -67,7 +67,7 @@ If you're new to Git, don't be afraid of messing up-- there is no way you can co If everything went okay, you will be redirected to your own fork at `https://github.com/username/scala`, where `username` is your github user name. You might find it helpful to read [http://help.github.com/fork-a-repo/](http://help.github.com/fork-a-repo/), -which covers some of the things that will follow below. Then, _clone_ your repository (_i.e._ pull a copy from GitHub to your local machine) by running the following on the command line: +which covers some of the things that will follow below. Then, _clone_ your repository (i.e. pull a copy from GitHub to your local machine) by running the following on the command line: 16:35 ~/Projects$ git clone https://github.com/xeno-by/scala Cloning into 'scala'... @@ -86,7 +86,7 @@ Before you start making changes, always create your own branch. Never work on th the changes you plan on making. Use a prefix that describes the nature of your change. There are essentially two kinds of changes: bug fixes and new features. -* For bug fixes, use `issue/NNNN` for bug NNNN from the [Scala issue tracker](https://issues.scala-lang.org/). +* For bug fixes, use `issue/NNNN` or `ticket/NNNN` for bug NNNN from the [Scala issue tracker](https://issues.scala-lang.org/). * For new feature use `topic/XXX` for feature XXX. Use feature names that make sense in the context of the whole Scala project and not just to you personally. For example, if you work on diagrams in Scaladoc, use `topic/scaladoc-diagrams` instead of just `topic/diagrams` would be a good branch name. Since in our example, we're going to fix an existing bug [SI-6725](https://issues.scala-lang.org/browse/SI-6725), we'll create a branch named `ticket/6725`. @@ -98,8 +98,7 @@ If you are new to Git and branching, read the [Branching Chapter](http://git-scm ### Build -The next step after cloning your fork is setting up your machine to build Scala. The definitive guide on building Scala is located at -[https://github.com/scala/scala/blob/master/README.rst](https://github.com/scala/scala/blob/master/README.rst), but here's the summary: +The next step after cloning your fork is setting up your machine to build Scala. * It is recommended to use Java `1.6` (not `1.7` or `1.8`, because they might cause occasional glitches). * The build tool is `ant`. @@ -140,10 +139,8 @@ with your hardware). There's no single editor of choice for working with Scala sources, as there are trade-offs associated with each available tool. -Both Eclipse and IntelliJ IDEA have Scala plugins, which are known to work with our codebase. Here are -[instructions for Eclipse](https://github.com/scala/scala/blob/master/src/eclipse/README.md) and -[instructions for Intellij](https://github.com/scala/scala/blob/master/src/intellij/README). Both of those Scala plugins provide -navigation, refactoring and error reporting functionality as well as integrated debugging. +Both Eclipse and IntelliJ IDEA have Scala plugins, which are known to work with our codebase. +Both of those Scala plugins provide navigation, refactoring and error reporting functionality as well as integrated debugging. There also exist lighter-weight editors such as Emacs, Sublime or jEdit which are faster and much less memory/compute-intensive to run, while lacking semantic services and debugging. To address this shortcoming, they can integrate with ENSIME, @@ -185,10 +182,33 @@ Here are also some tips & tricks that have proven useful in Scala development: just that trait, but it might also be necessary to recompile its users. The `ant` tool is not smart enough to do that, which might lead to very strange errors. Full-rebuilds fix the problem. Fortunately that's rarely necessary, because full-rebuilds take a lot of time-- the same 8-30 minutes as mentioned above. * Even on solid state drives packaging Scala distribution (i.e. creating jars from class files) is a non-trivial task. To save time here, - some people in our team do `ant quick.comp` instead of `ant` and then create custom scripts to launch Scala from `build/quick/classes`. + some people in our team do `ant quick.comp` instead of `ant` and then create custom scripts ([here](https://github.com/adriaanm/binfu/blob/master/scafu.sh) are some examples to get you strarted) to launch Scala from `build/quick/classes`. * Don't underestimate the power of `print`. When starting with Scala, I spent a lot of time in the debugger trying to figure out how things work. However later I found out that print-based debugging is often more effective than jumping around. While it might be obvious - to some, I'd like to explicitly mention that it's also useful to print stack traces to understand the flow of execution. + to some, I'd like to explicitly mention that it's also useful to print stack traces to understand the flow of execution. When working with `Trees`, you might want to use `showRaw` to get the `AST` representation. +* You can publish your newly-built scala version locally to use it from sbt. Here's how: + + $ ant publish-local-opt -Dmaven.version.suffix="-test" + $ sbt + [info] Set current project to test (in build file:/Users/georgii/workspace/test/) + > set resolvers += Resolver.mavenLocal + [info] Defining *:resolvers + [info] The new value will be used by *:externalResolvers + [info] Reapplying settings... + [info] Set current project to test (in build file:/Users/georgii/workspace/test/) + > ++2.12.0-test + [info] Setting version to 2.12.0-test + [info] Set current project to test (in build file:/Users/georgii/workspace/test/) + > console + [info] Starting scala interpreter... + [info] + Welcome to Scala version 2.12.0-20140623-155543-8bdacad317 (Java HotSpot(TM) 64-Bit Server VM, Java 1.7.0_51). + Type in expressions to have them evaluated. + Type :help for more information. + + scala> + +* Adding a macro to the `Predef` is a pretty involved task. For the reason of bootstrapping, you cannot just throw a macro into it. There is a more involved process here. You might want to follow the way `StringContext.f` itself is added. In short, you need to define your macro under `src/compiler/scala/tools/reflect/` and provide no implementation in `Predef` (`def fn = macro ???`). Now you want to set up the wiring. Add the name of your macro to `src/reflect/scala/reflect/internal/StdNames.scala`, add the needed links to it to `src/reflect/scala/reflect/internal/Definitions.scala`, and finally specify the bindings in `src/compiler/scala/tools/reflect/FastTrack.scala`. If that explanation does not sound very clear, [here's](https://github.com/folone/scala/commit/59536ea833ca16c985339727baed5d70e577b0fe) an example of adding a macro. ### Documentation @@ -196,7 +216,7 @@ There are several areas that one could contribute to-- there is the Scala librar ##### The Scala Library -Contributing to the Scala standard library is about the same as working on one of your own libraries. Beyond the Scala collections hierarchy, there are no complex internals or architectures to have to worry about. Just make sure that you code in a "don't-repeat-yourself" (DRY) style, obeying the "boy scout principle" (i.e. make sure you've left something cleaner than you found it). +Contributing to the Scala standard library is about the same as working on one of your own libraries. Beyond the Scala collections hierarchy, there are no complex internals or architectures to have to worry about. Just make sure that you code in a "don't-repeat-yourself" (DRY) style, obeying the "boy scout principle" (i.e. make sure you've left the code cleaner than you found it). If documentation is necessary for some trait/class/object/method/etc in the Scala standard library, typically maintainers will include inline comments describing their design decisions or rationale for implementing things the way they have, if it is not straightforward. @@ -206,7 +226,7 @@ If you intend on contributing to Scala collections, please make sure you're fami Documentation about the internal workings of the Scala compiler is scarce, and most of the knowledge is passed around by email (scala-internals mailing list), ticket, or word of mouth. However the situation is steadily improving. Here are the resources that might help: -* [Compiler internals videos by Martin Odersky](TODO) are quite dated, but still very useful. In this three-video +* [Compiler internals videos by Martin Odersky](http://www.scala-lang.org/old/node/598.html) are quite dated, but still very useful. In this three-video series Martin explains the general architecture of the compiler, and the basics of the front-end, which has recently become Scala reflection API. * [Reflection documentation](http://docs.scala-lang.org/overviews/reflection/overview.html) describes fundamental data structures (like `Tree`s, `Symbol`s, and `Types`) that are used to represent Scala programs and operations defined on then. Since much of the compiler has been factored out and made accessible via the Reflection API, all of the fundamentals needed for reflection are the same for the compiler. @@ -274,9 +294,56 @@ I have already written one test earlier, so that's a good start but not enough! Adding tests to the test suite is as easy as moving them to the appropriate directory: -* Code which should compile successfully, but doesn't need to be executed, needs to go into the [“pos” directory](https://github.com/scala/scala/tree/master/test/files/pos). -* Code which should not compile needs to go into the [“neg” directory](https://github.com/scala/scala/tree/master/test/files/neg). -* Code which should compile and get executed by the test suite needs to go into the [“run” directory](https://github.com/scala/scala/tree/master/test/files/run). +* Code which should compile successfully, but doesn't need to be executed, needs to go into the [“pos” directory](https://github.com/scala/scala/tree/2.12.x/test/files/pos). +* Code which should not compile needs to go into the [“neg” directory](https://github.com/scala/scala/tree/2.12.x/test/files/neg). +* Code which should compile and get executed by the test suite needs to go into the [“run” directory](https://github.com/scala/scala/tree/2.12.x/test/files/run) and have a corresponding `.check` file with the expected output. You will get test failures if the content of a `.check` file is different from what the test produces while running. If the change in the output is an expected product of your work, you might not want to change the `.check` file by hand. To make partest change the `.check` file, run it with a `--update-check` flag, like so `./test/partest --update-check path/to/test.scala`. For more information on partest, please refer to its [documentation](http://docs.scala-lang.org/tutorials/partest-guide.html). +* Everything that can be unit-tested should go to ["junit" directory](https://github.com/scala/scala/tree/2.12.x/test/junit) +* Property-based tests go to the ["scalacheck" directory](https://github.com/scala/scala/tree/2.12.x/test/files/scalacheck) + +Here are some more testing tips: + +* If you have several tests, and want a tool for only running tests that conform to some regular expression, you can use `partest-ack` in the `tools` directory: `./tools/partest-ack "dottype"` +* If your tests fail with an like: + + test.bc: + [echo] Checking backward binary compatibility for scala-library (against 2.11.0) + [mima] Found 2 binary incompatibiities + [mima] ================================ + [mima] * synthetic method + [mima] scala$package$Class$method(java.lang.String)Unit in trait + [mima] scala.package.Class does not have a correspondent in old version + [mima] * synthetic method + [mima] scala$package$AnotherClass$anotherMethod(java.lang.String)Unit in trait + [mima] scala.package.AnotherClass does not have a correspondent in old version + [mima] Generated filter config definition + [mima] ================================== + [mima] + [mima] filter { + [mima] problems=[ + [mima] { + [mima] matchName="scala.package.Class$method" + [mima] problemName=MissingMethodProblem + [mima] }, + [mima] { + [mima] matchName="scala.package.AnotherClass$anotherMethod" + [mima] problemName=MissingMethodProblem + [mima] } + [mima] ] + [mima] } + [mima] + + BUILD FAILED + /localhome/jenkins/c/workspace/pr-scala-test/scala/build.xml:1530: The following error occurred while executing this line: + /localhome/jenkins/c/workspace/pr-scala-test/scala/build-ant-macros.xml:791: The following error occurred while executing this line: + /localhome/jenkins/c/workspace/pr-scala-test/scala/build-ant-macros.xml:773: Java returned: 2 + + Total time: 6 minutes 46 seconds + Build step 'Execute shell' marked build as failure + Archiving artifacts + Notifying upstream projects of job completion + Finished: FAILURE + +This means your change is backward or forward binary incompatible with the specified version (the check is performed by the [migration manager](https://github.com/typesafehub/migration-manager)). The error message is actually saying what you need to add to `bincompat-backward.whitelist.conf` or `bincompat-forward.whitelist.conf` to make the error go away. If you are getting this on an internal/experimental api, it should be safe to add suggested sections to the config. Otherwise, you might want to target a newer version of scala for this change. ### Verify From a076f43769050b80646fb196a9b109e6ed97228f Mon Sep 17 00:00:00 2001 From: George Leontiev Date: Thu, 26 Jun 2014 10:44:54 +0200 Subject: [PATCH 0044/1870] Address the feedback. --- contribute/hacker-guide.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/contribute/hacker-guide.md b/contribute/hacker-guide.md index 895d925f48..08f5d40c09 100644 --- a/contribute/hacker-guide.md +++ b/contribute/hacker-guide.md @@ -208,7 +208,7 @@ Here are also some tips & tricks that have proven useful in Scala development: scala> -* Adding a macro to the `Predef` is a pretty involved task. For the reason of bootstrapping, you cannot just throw a macro into it. There is a more involved process here. You might want to follow the way `StringContext.f` itself is added. In short, you need to define your macro under `src/compiler/scala/tools/reflect/` and provide no implementation in `Predef` (`def fn = macro ???`). Now you want to set up the wiring. Add the name of your macro to `src/reflect/scala/reflect/internal/StdNames.scala`, add the needed links to it to `src/reflect/scala/reflect/internal/Definitions.scala`, and finally specify the bindings in `src/compiler/scala/tools/reflect/FastTrack.scala`. If that explanation does not sound very clear, [here's](https://github.com/folone/scala/commit/59536ea833ca16c985339727baed5d70e577b0fe) an example of adding a macro. +* Adding a macro to the `Predef` object is a pretty involved task. Due to bootstrapping, you cannot just throw a macro into it. For this reason, the process is more involved. You might want to follow the way `StringContext.f` itself is added. In short, you need to define your macro under `src/compiler/scala/tools/reflect/` and provide no implementation in `Predef` (`def fn = macro ???`). Now you have to set up the wiring. Add the name of your macro to `src/reflect/scala/reflect/internal/StdNames.scala`, add the needed links to it to `src/reflect/scala/reflect/internal/Definitions.scala`, and finally specify the bindings in `src/compiler/scala/tools/reflect/FastTrack.scala`. [Here's](https://github.com/folone/scala/commit/59536ea833ca16c985339727baed5d70e577b0fe) an example of adding a macro. ### Documentation @@ -303,7 +303,7 @@ Adding tests to the test suite is as easy as moving them to the appropriate dire Here are some more testing tips: * If you have several tests, and want a tool for only running tests that conform to some regular expression, you can use `partest-ack` in the `tools` directory: `./tools/partest-ack "dottype"` -* If your tests fail with an like: +* If your tests fail in the following way: test.bc: [echo] Checking backward binary compatibility for scala-library (against 2.11.0) From 8f63cd0ebdf244c5051357d3781d985b54d126da Mon Sep 17 00:00:00 2001 From: Adriaan Moors Date: Mon, 7 Jul 2014 20:28:10 +0200 Subject: [PATCH 0045/1870] Fix more references to spec --- contribute/bug-reporting-guide.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/contribute/bug-reporting-guide.md b/contribute/bug-reporting-guide.md index 4160dcf438..960f40b704 100644 --- a/contribute/bug-reporting-guide.md +++ b/contribute/bug-reporting-guide.md @@ -43,7 +43,7 @@ If you have a code snippet that is resulting in bytecode which you believe is be 5. If you want to file an improvement in the issue tracker please discuss it first on one of the mailing lists. They offer much bigger audience than issue tracker. The latter is not suitable for long discussions. -* Keep in mind that the behavior you are witnessing could be intended. Good formal resources for verifying whether or not the language behavior is intended is either in the [Scala Improvement Proposal Documents](http://docs.scala-lang.org/sips/sip-list.html) or in the [Scala Language Specification](http://www.scala-lang.org/docu/files/ScalaReference.pdf). If in doubt, you may always ask on the [scala-internals mailing list](https://groups.google.com/forum/?fromgroups#!forum/scala-internals) or [stackoveflow](http://stackoverflow.com/questions/tagged/scala). +* Keep in mind that the behavior you are witnessing could be intended. Good formal resources for verifying whether or not the language behavior is intended is either in the [Scala Improvement Proposal Documents](http://docs.scala-lang.org/sips/sip-list.html) or in the [Scala Language Specification](http://www.scala-lang.org/files/archive/spec/2.11/). If in doubt, you may always ask on the [scala-internals mailing list](https://groups.google.com/forum/?fromgroups#!forum/scala-internals) or [stackoveflow](http://stackoverflow.com/questions/tagged/scala). In general, if you find yourself stuck on any of these steps, asking on one of the following Scala mailing lists can be helpful: From afc73aa06baf7b9204c11edd946b02e82b74fcaa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Doeraene?= Date: Mon, 29 Sep 2014 10:30:37 +0200 Subject: [PATCH 0046/1870] Hall of fame Auguest 2014. --- .../_posts/2014-09-01-scala-fame-2014-08.md | 63 +++++++++++++++++++ 1 file changed, 63 insertions(+) create mode 100644 contribute/scala-fame-data/_posts/2014-09-01-scala-fame-2014-08.md diff --git a/contribute/scala-fame-data/_posts/2014-09-01-scala-fame-2014-08.md b/contribute/scala-fame-data/_posts/2014-09-01-scala-fame-2014-08.md new file mode 100644 index 0000000000..1393e01705 --- /dev/null +++ b/contribute/scala-fame-data/_posts/2014-09-01-scala-fame-2014-08.md @@ -0,0 +1,63 @@ +--- +layout: famearchive +title: Contributors of August 2014 +fame-year: 2014 +fame-month: 8 +fame-month-str: August +fame-categories: + - category: Typesafe + authors: + - username: retronym + gravatar: https://avatars0.githubusercontent.com/u/65551?v=2&s=60 + commits: 3 + linesAdded: 57 + linesDeleted: 4 + rank: 1 + newContributor: false + - username: adriaanm + gravatar: https://avatars2.githubusercontent.com/u/91083?v=2&s=60 + commits: 2 + linesAdded: 57 + linesDeleted: 42 + rank: 2 + newContributor: false + - category: EPFL + authors: + - username: lrytz + gravatar: https://avatars3.githubusercontent.com/u/119636?v=2&s=60 + commits: 21 + linesAdded: 3764 + linesDeleted: 2122 + rank: 1 + newContributor: false + - category: Community + authors: + - username: gourlaysama + gravatar: https://avatars2.githubusercontent.com/u/733438?v=2&s=60 + commits: 10 + linesAdded: 171 + linesDeleted: 7680 + rank: 1 + newContributor: false + - username: som-snytt + gravatar: https://avatars2.githubusercontent.com/u/369425?v=2&s=60 + commits: 10 + linesAdded: 917 + linesDeleted: 543 + rank: 1 + newContributor: false + - username: dgruntz + gravatar: https://avatars3.githubusercontent.com/u/1516800?v=2&s=60 + commits: 1 + linesAdded: 18 + linesDeleted: 18 + rank: 2 + newContributor: false + - username: Ichoran + gravatar: https://avatars3.githubusercontent.com/u/2298644?v=2&s=60 + commits: 1 + linesAdded: 26 + linesDeleted: 27 + rank: 2 + newContributor: false +--- From d4630ea3257b7740c390f5d728b6d2fd012f7fc1 Mon Sep 17 00:00:00 2001 From: Fabien Salvi Date: Fri, 24 Oct 2014 16:36:48 +0200 Subject: [PATCH 0047/1870] Add 2014 scala-fame data --- .../_posts/2014-02-01-scala-fame-2014-01.md | 147 ++++++++++++++++++ .../_posts/2014-03-01-scala-fame-2014-02.md | 133 ++++++++++++++++ .../_posts/2014-04-01-scala-fame-2014-03.md | 112 +++++++++++++ .../_posts/2014-05-01-scala-fame-2014-04.md | 91 +++++++++++ .../_posts/2014-06-01-scala-fame-2014-05.md | 112 +++++++++++++ .../_posts/2014-07-01-scala-fame-2014-06.md | 98 ++++++++++++ .../_posts/2014-08-01-scala-fame-2014-07.md | 98 ++++++++++++ .../_posts/2014-09-01-scala-fame-2014-08.md | 7 + .../_posts/2014-10-01-scala-fame-2014-09.md | 84 ++++++++++ 9 files changed, 882 insertions(+) create mode 100644 contribute/scala-fame-data/_posts/2014-02-01-scala-fame-2014-01.md create mode 100644 contribute/scala-fame-data/_posts/2014-03-01-scala-fame-2014-02.md create mode 100644 contribute/scala-fame-data/_posts/2014-04-01-scala-fame-2014-03.md create mode 100644 contribute/scala-fame-data/_posts/2014-05-01-scala-fame-2014-04.md create mode 100644 contribute/scala-fame-data/_posts/2014-06-01-scala-fame-2014-05.md create mode 100644 contribute/scala-fame-data/_posts/2014-07-01-scala-fame-2014-06.md create mode 100644 contribute/scala-fame-data/_posts/2014-08-01-scala-fame-2014-07.md create mode 100644 contribute/scala-fame-data/_posts/2014-10-01-scala-fame-2014-09.md diff --git a/contribute/scala-fame-data/_posts/2014-02-01-scala-fame-2014-01.md b/contribute/scala-fame-data/_posts/2014-02-01-scala-fame-2014-01.md new file mode 100644 index 0000000000..ab8e808036 --- /dev/null +++ b/contribute/scala-fame-data/_posts/2014-02-01-scala-fame-2014-01.md @@ -0,0 +1,147 @@ +--- +layout: famearchive +title: Contributors of January 2014 +fame-year: 2014 +fame-month: 1 +fame-month-str: January +fame-categories: + - category: Typesafe + authors: + - username: retronym + gravatar: https://avatars0.githubusercontent.com/u/65551?v=2&s=60 + commits: 37 + linesAdded: 2000 + linesDeleted: 2487 + rank: 1 + newContributor: false + - username: adriaanm + gravatar: https://avatars2.githubusercontent.com/u/91083?v=2&s=60 + commits: 8 + linesAdded: 311 + linesDeleted: 175 + rank: 2 + newContributor: false + - username: gkossakowski + gravatar: https://avatars0.githubusercontent.com/u/4217?v=2&s=60 + commits: 3 + linesAdded: 15 + linesDeleted: 5 + rank: 3 + newContributor: false + - username: huitseeker + gravatar: https://avatars2.githubusercontent.com/u/4142?v=2&s=60 + commits: 2 + linesAdded: 81 + linesDeleted: 79 + rank: 4 + newContributor: false + - username: paulp + gravatar: https://avatars2.githubusercontent.com/u/9135?v=2&s=60 + commits: 2 + linesAdded: 7 + linesDeleted: 5 + rank: 4 + newContributor: false + - category: EPFL + authors: + - username: xeno-by + gravatar: https://avatars1.githubusercontent.com/u/609152?v=2&s=60 + commits: 75 + linesAdded: 8908 + linesDeleted: 6023 + rank: 1 + newContributor: false + - category: Community + authors: + - username: densh + gravatar: https://avatars2.githubusercontent.com/u/320966?v=2&s=60 + commits: 16 + linesAdded: 722 + linesDeleted: 295 + rank: 1 + newContributor: false + - username: Ichoran + gravatar: https://avatars3.githubusercontent.com/u/2298644?v=2&s=60 + commits: 10 + linesAdded: 315 + linesDeleted: 103 + rank: 2 + newContributor: false + - username: som-snytt + gravatar: https://avatars2.githubusercontent.com/u/369425?v=2&s=60 + commits: 9 + linesAdded: 646 + linesDeleted: 201 + rank: 3 + newContributor: false + - username: VladimirNik + gravatar: https://avatars2.githubusercontent.com/u/2835001?v=2&s=60 + commits: 7 + linesAdded: 1729 + linesDeleted: 350 + rank: 4 + newContributor: false + - username: rklaehn + gravatar: https://avatars0.githubusercontent.com/u/248257?v=2&s=60 + commits: 6 + linesAdded: 1288 + linesDeleted: 39 + rank: 5 + newContributor: false + - username: gourlaysama + gravatar: https://avatars2.githubusercontent.com/u/733438?v=2&s=60 + commits: 3 + linesAdded: 37 + linesDeleted: 7 + rank: 6 + newContributor: false + - username: cunei + gravatar: https://avatars2.githubusercontent.com/u/686260?v=2&s=60 + commits: 2 + linesAdded: 42 + linesDeleted: 12 + rank: 7 + newContributor: false + - username: Blaisorblade + gravatar: https://avatars2.githubusercontent.com/u/289960?v=2&s=60 + commits: 2 + linesAdded: 51 + linesDeleted: 33 + rank: 7 + newContributor: false + - username: havocp + gravatar: https://avatars2.githubusercontent.com/u/218689?v=2&s=60 + commits: 1 + linesAdded: 38 + linesDeleted: 2 + rank: 8 + newContributor: false + - username: clhodapp + gravatar: https://avatars0.githubusercontent.com/u/108633?v=2&s=60 + commits: 1 + linesAdded: 22 + linesDeleted: 0 + rank: 8 + newContributor: false + - username: rjolly + gravatar: https://avatars3.githubusercontent.com/u/128610?v=2&s=60 + commits: 1 + linesAdded: 45 + linesDeleted: 38 + rank: 8 + newContributor: false + - username: xuwei-k + gravatar: https://avatars3.githubusercontent.com/u/389787?v=2&s=60 + commits: 1 + linesAdded: 1 + linesDeleted: 1 + rank: 8 + newContributor: false + - username: dotta + gravatar: https://avatars2.githubusercontent.com/u/703748?v=2&s=60 + commits: 1 + linesAdded: 67 + linesDeleted: 67 + rank: 8 + newContributor: false +--- diff --git a/contribute/scala-fame-data/_posts/2014-03-01-scala-fame-2014-02.md b/contribute/scala-fame-data/_posts/2014-03-01-scala-fame-2014-02.md new file mode 100644 index 0000000000..065ab45d13 --- /dev/null +++ b/contribute/scala-fame-data/_posts/2014-03-01-scala-fame-2014-02.md @@ -0,0 +1,133 @@ +--- +layout: famearchive +title: Contributors of February 2014 +fame-year: 2014 +fame-month: 2 +fame-month-str: February +fame-categories: + - category: Typesafe + authors: + - username: retronym + gravatar: https://avatars0.githubusercontent.com/u/65551?v=2&s=60 + commits: 47 + linesAdded: 1533 + linesDeleted: 1032 + rank: 1 + newContributor: false + - username: adriaanm + gravatar: https://avatars2.githubusercontent.com/u/91083?v=2&s=60 + commits: 25 + linesAdded: 1043 + linesDeleted: 491 + rank: 2 + newContributor: false + - username: gkossakowski + gravatar: https://avatars0.githubusercontent.com/u/4217?v=2&s=60 + commits: 4 + linesAdded: 1867 + linesDeleted: 1747 + rank: 3 + newContributor: false + - username: paulp + gravatar: https://avatars2.githubusercontent.com/u/9135?v=2&s=60 + commits: 3 + linesAdded: 427 + linesDeleted: 15 + rank: 4 + newContributor: false + - username: dragos + gravatar: https://avatars2.githubusercontent.com/u/133742?v=2&s=60 + commits: 1 + linesAdded: 12 + linesDeleted: 3 + rank: 5 + newContributor: false + - category: EPFL + authors: + - username: xeno-by + gravatar: https://avatars1.githubusercontent.com/u/609152?v=2&s=60 + commits: 47 + linesAdded: 3989 + linesDeleted: 1545 + rank: 1 + newContributor: false + - username: lrytz + gravatar: https://avatars3.githubusercontent.com/u/119636?v=2&s=60 + commits: 1 + linesAdded: 18 + linesDeleted: 13 + rank: 2 + newContributor: false + - category: Community + authors: + - username: densh + gravatar: https://avatars2.githubusercontent.com/u/320966?v=2&s=60 + commits: 23 + linesAdded: 1166 + linesDeleted: 515 + rank: 1 + newContributor: false + - username: VladimirNik + gravatar: https://avatars2.githubusercontent.com/u/2835001?v=2&s=60 + commits: 10 + linesAdded: 2647 + linesDeleted: 2416 + rank: 2 + newContributor: false + - username: som-snytt + gravatar: https://avatars2.githubusercontent.com/u/369425?v=2&s=60 + commits: 9 + linesAdded: 662 + linesDeleted: 339 + rank: 3 + newContributor: false + - username: Ichoran + gravatar: https://avatars3.githubusercontent.com/u/2298644?v=2&s=60 + commits: 8 + linesAdded: 277 + linesDeleted: 75 + rank: 4 + newContributor: false + - username: pavelpavlov + gravatar: https://avatars0.githubusercontent.com/u/1330451?v=2&s=60 + commits: 3 + linesAdded: 44 + linesDeleted: 54 + rank: 5 + newContributor: false + - username: Blaisorblade + gravatar: https://avatars2.githubusercontent.com/u/289960?v=2&s=60 + commits: 3 + linesAdded: 6 + linesDeleted: 5 + rank: 5 + newContributor: false + - username: soc + gravatar: https://avatars0.githubusercontent.com/u/42493?v=2&s=60 + commits: 3 + linesAdded: 476 + linesDeleted: 338 + rank: 5 + newContributor: false + - username: gourlaysama + gravatar: https://avatars2.githubusercontent.com/u/733438?v=2&s=60 + commits: 2 + linesAdded: 7 + linesDeleted: 7 + rank: 6 + newContributor: false + - username: greenrd + gravatar: https://avatars1.githubusercontent.com/u/164965?v=2&s=60 + commits: 1 + linesAdded: 2 + linesDeleted: 3 + rank: 7 + newContributor: false + - username: clhodapp + gravatar: https://avatars0.githubusercontent.com/u/108633?v=2&s=60 + commits: 1 + linesAdded: 228 + linesDeleted: 0 + rank: 7 + newContributor: false +--- diff --git a/contribute/scala-fame-data/_posts/2014-04-01-scala-fame-2014-03.md b/contribute/scala-fame-data/_posts/2014-04-01-scala-fame-2014-03.md new file mode 100644 index 0000000000..954a870612 --- /dev/null +++ b/contribute/scala-fame-data/_posts/2014-04-01-scala-fame-2014-03.md @@ -0,0 +1,112 @@ +--- +layout: famearchive +title: Contributors of March 2014 +fame-year: 2014 +fame-month: 3 +fame-month-str: March +fame-categories: + - category: Typesafe + authors: + - username: adriaanm + gravatar: https://avatars2.githubusercontent.com/u/91083?v=2&s=60 + commits: 79 + linesAdded: 24547 + linesDeleted: 24999 + rank: 1 + newContributor: false + - username: retronym + gravatar: https://avatars0.githubusercontent.com/u/65551?v=2&s=60 + commits: 21 + linesAdded: 622 + linesDeleted: 101 + rank: 2 + newContributor: false + - username: gkossakowski + gravatar: https://avatars0.githubusercontent.com/u/4217?v=2&s=60 + commits: 3 + linesAdded: 236 + linesDeleted: 6 + rank: 3 + newContributor: false + - username: huitseeker + gravatar: https://avatars2.githubusercontent.com/u/4142?v=2&s=60 + commits: 2 + linesAdded: 4 + linesDeleted: 2 + rank: 4 + newContributor: false + - username: szeiger + gravatar: https://avatars3.githubusercontent.com/u/54262?v=2&s=60 + commits: 1 + linesAdded: 8 + linesDeleted: 1 + rank: 5 + newContributor: false + - username: viktorklang + gravatar: https://avatars0.githubusercontent.com/u/10871?v=2&s=60 + commits: 1 + linesAdded: 7 + linesDeleted: 2 + rank: 5 + newContributor: false + - username: paulp + gravatar: https://avatars2.githubusercontent.com/u/9135?v=2&s=60 + commits: 1 + linesAdded: 20 + linesDeleted: 3 + rank: 5 + newContributor: false + - category: EPFL + authors: + - username: xeno-by + gravatar: https://avatars1.githubusercontent.com/u/609152?v=2&s=60 + commits: 10 + linesAdded: 379 + linesDeleted: 76 + rank: 1 + newContributor: false + - category: Community + authors: + - username: densh + gravatar: https://avatars2.githubusercontent.com/u/320966?v=2&s=60 + commits: 13 + linesAdded: 589 + linesDeleted: 115 + rank: 1 + newContributor: false + - username: som-snytt + gravatar: https://avatars2.githubusercontent.com/u/369425?v=2&s=60 + commits: 4 + linesAdded: 31 + linesDeleted: 23 + rank: 2 + newContributor: false + - username: VladimirNik + gravatar: https://avatars2.githubusercontent.com/u/2835001?v=2&s=60 + commits: 2 + linesAdded: 1778 + linesDeleted: 1441 + rank: 3 + newContributor: false + - username: mkubala + gravatar: https://avatars0.githubusercontent.com/u/328844?v=2&s=60 + commits: 1 + linesAdded: 247 + linesDeleted: 53 + rank: 4 + newContributor: false + - username: puffnfresh + gravatar: https://avatars1.githubusercontent.com/u/37715?v=2&s=60 + commits: 1 + linesAdded: 0 + linesDeleted: 1 + rank: 4 + newContributor: false + - username: iainmcgin + gravatar: https://avatars0.githubusercontent.com/u/309153?v=2&s=60 + commits: 1 + linesAdded: 20 + linesDeleted: 19 + rank: 4 + newContributor: false +--- diff --git a/contribute/scala-fame-data/_posts/2014-05-01-scala-fame-2014-04.md b/contribute/scala-fame-data/_posts/2014-05-01-scala-fame-2014-04.md new file mode 100644 index 0000000000..66c6819f17 --- /dev/null +++ b/contribute/scala-fame-data/_posts/2014-05-01-scala-fame-2014-04.md @@ -0,0 +1,91 @@ +--- +layout: famearchive +title: Contributors of April 2014 +fame-year: 2014 +fame-month: 4 +fame-month-str: April +fame-categories: + - category: Typesafe + authors: + - username: retronym + gravatar: https://avatars0.githubusercontent.com/u/65551?v=2&s=60 + commits: 9 + linesAdded: 177 + linesDeleted: 34 + rank: 1 + newContributor: false + - username: huitseeker + gravatar: https://avatars2.githubusercontent.com/u/4142?v=2&s=60 + commits: 1 + linesAdded: 16 + linesDeleted: 1 + rank: 2 + newContributor: false + - username: gkossakowski + gravatar: https://avatars0.githubusercontent.com/u/4217?v=2&s=60 + commits: 1 + linesAdded: 10 + linesDeleted: 3 + rank: 2 + newContributor: false + - username: adriaanm + gravatar: https://avatars2.githubusercontent.com/u/91083?v=2&s=60 + commits: 1 + linesAdded: 34 + linesDeleted: 2 + rank: 2 + newContributor: false + - category: EPFL + authors: + - username: lrytz + gravatar: https://avatars3.githubusercontent.com/u/119636?v=2&s=60 + commits: 2 + linesAdded: 202 + linesDeleted: 75 + rank: 1 + newContributor: false + - username: VladUreche + gravatar: https://avatars0.githubusercontent.com/u/428706?v=2&s=60 + commits: 1 + linesAdded: 24 + linesDeleted: 3 + rank: 2 + newContributor: false + - username: xeno-by + gravatar: https://avatars1.githubusercontent.com/u/609152?v=2&s=60 + commits: 1 + linesAdded: 12 + linesDeleted: 1 + rank: 2 + newContributor: false + - category: Community + authors: + - username: gourlaysama + gravatar: https://avatars2.githubusercontent.com/u/733438?v=2&s=60 + commits: 3 + linesAdded: 51 + linesDeleted: 5 + rank: 1 + newContributor: false + - username: som-snytt + gravatar: https://avatars2.githubusercontent.com/u/369425?v=2&s=60 + commits: 2 + linesAdded: 110 + linesDeleted: 51 + rank: 2 + newContributor: false + - username: lefou + gravatar: https://avatars2.githubusercontent.com/u/1321393?v=2&s=60 + commits: 1 + linesAdded: 45 + linesDeleted: 8 + rank: 3 + newContributor: false + - username: densh + gravatar: https://avatars2.githubusercontent.com/u/320966?v=2&s=60 + commits: 1 + linesAdded: 4 + linesDeleted: 5 + rank: 3 + newContributor: false +--- diff --git a/contribute/scala-fame-data/_posts/2014-06-01-scala-fame-2014-05.md b/contribute/scala-fame-data/_posts/2014-06-01-scala-fame-2014-05.md new file mode 100644 index 0000000000..f9191afb17 --- /dev/null +++ b/contribute/scala-fame-data/_posts/2014-06-01-scala-fame-2014-05.md @@ -0,0 +1,112 @@ +--- +layout: famearchive +title: Contributors of May 2014 +fame-year: 2014 +fame-month: 5 +fame-month-str: May +fame-categories: + - category: Typesafe + authors: + - username: retronym + gravatar: https://avatars0.githubusercontent.com/u/65551?v=2&s=60 + commits: 32 + linesAdded: 951 + linesDeleted: 136 + rank: 1 + newContributor: false + - username: adriaanm + gravatar: https://avatars2.githubusercontent.com/u/91083?v=2&s=60 + commits: 9 + linesAdded: 21 + linesDeleted: 70 + rank: 2 + newContributor: false + - username: gkossakowski + gravatar: https://avatars0.githubusercontent.com/u/4217?v=2&s=60 + commits: 3 + linesAdded: 13 + linesDeleted: 18 + rank: 3 + newContributor: false + - category: EPFL + authors: + - username: lrytz + gravatar: https://avatars3.githubusercontent.com/u/119636?v=2&s=60 + commits: 23 + linesAdded: 6048 + linesDeleted: 2325 + rank: 1 + newContributor: false + - username: xeno-by + gravatar: https://avatars1.githubusercontent.com/u/609152?v=2&s=60 + commits: 3 + linesAdded: 93 + linesDeleted: 3 + rank: 2 + newContributor: false + - category: Community + authors: + - username: som-snytt + gravatar: https://avatars2.githubusercontent.com/u/369425?v=2&s=60 + commits: 12 + linesAdded: 442 + linesDeleted: 238 + rank: 1 + newContributor: false + - username: lefou + gravatar: https://avatars2.githubusercontent.com/u/1321393?v=2&s=60 + commits: 3 + linesAdded: 14 + linesDeleted: 24 + rank: 2 + newContributor: false + - username: tvierling + gravatar: https://avatars3.githubusercontent.com/u/397857?v=2&s=60 + commits: 2 + linesAdded: 35 + linesDeleted: 11 + rank: 3 + newContributor: true + - username: clhodapp + gravatar: https://avatars0.githubusercontent.com/u/108633?v=2&s=60 + commits: 2 + linesAdded: 98 + linesDeleted: 51 + rank: 3 + newContributor: false + - username: Ichoran + gravatar: https://avatars3.githubusercontent.com/u/2298644?v=2&s=60 + commits: 2 + linesAdded: 55 + linesDeleted: 16 + rank: 3 + newContributor: false + - username: mkubala + gravatar: https://avatars0.githubusercontent.com/u/328844?v=2&s=60 + commits: 1 + linesAdded: 1 + linesDeleted: 0 + rank: 4 + newContributor: false + - username: jedesah + gravatar: https://avatars1.githubusercontent.com/u/1780116?v=2&s=60 + commits: 1 + linesAdded: 23 + linesDeleted: 1 + rank: 4 + newContributor: false + - username: VladimirNik + gravatar: https://avatars2.githubusercontent.com/u/2835001?v=2&s=60 + commits: 1 + linesAdded: 78 + linesDeleted: 40 + rank: 4 + newContributor: false + - username: densh + gravatar: https://avatars2.githubusercontent.com/u/320966?v=2&s=60 + commits: 1 + linesAdded: 14 + linesDeleted: 0 + rank: 4 + newContributor: false +--- diff --git a/contribute/scala-fame-data/_posts/2014-07-01-scala-fame-2014-06.md b/contribute/scala-fame-data/_posts/2014-07-01-scala-fame-2014-06.md new file mode 100644 index 0000000000..5f051d08a7 --- /dev/null +++ b/contribute/scala-fame-data/_posts/2014-07-01-scala-fame-2014-06.md @@ -0,0 +1,98 @@ +--- +layout: famearchive +title: Contributors of June 2014 +fame-year: 2014 +fame-month: 6 +fame-month-str: June +fame-categories: + - category: Typesafe + authors: + - username: adriaanm + gravatar: https://avatars2.githubusercontent.com/u/91083?v=2&s=60 + commits: 14 + linesAdded: 873 + linesDeleted: 661 + rank: 1 + newContributor: false + - username: retronym + gravatar: https://avatars0.githubusercontent.com/u/65551?v=2&s=60 + commits: 8 + linesAdded: 166 + linesDeleted: 126 + rank: 2 + newContributor: false + - category: EPFL + authors: + - username: lrytz + gravatar: https://avatars3.githubusercontent.com/u/119636?v=2&s=60 + commits: 16 + linesAdded: 1865 + linesDeleted: 437 + rank: 1 + newContributor: false + - username: xeno-by + gravatar: https://avatars1.githubusercontent.com/u/609152?v=2&s=60 + commits: 4 + linesAdded: 164 + linesDeleted: 44 + rank: 2 + newContributor: false + - username: odersky + gravatar: https://avatars2.githubusercontent.com/u/795990?v=2&s=60 + commits: 1 + linesAdded: 36 + linesDeleted: 10 + rank: 3 + newContributor: false + - category: Community + authors: + - username: Ichoran + gravatar: https://avatars3.githubusercontent.com/u/2298644?v=2&s=60 + commits: 7 + linesAdded: 275 + linesDeleted: 57 + rank: 1 + newContributor: false + - username: jxcoder + gravatar: https://avatars1.githubusercontent.com/u/1075547?v=2&s=60 + commits: 4 + linesAdded: 41 + linesDeleted: 19 + rank: 2 + newContributor: true + - username: gourlaysama + gravatar: https://avatars2.githubusercontent.com/u/733438?v=2&s=60 + commits: 2 + linesAdded: 20 + linesDeleted: 6 + rank: 3 + newContributor: false + - username: som-snytt + gravatar: https://avatars2.githubusercontent.com/u/369425?v=2&s=60 + commits: 2 + linesAdded: 146 + linesDeleted: 41 + rank: 3 + newContributor: false + - username: jrudolph + gravatar: https://avatars1.githubusercontent.com/u/9868?v=2&s=60 + commits: 1 + linesAdded: 97 + linesDeleted: 4 + rank: 4 + newContributor: false + - username: Blaisorblade + gravatar: https://avatars2.githubusercontent.com/u/289960?v=2&s=60 + commits: 1 + linesAdded: 6 + linesDeleted: 1 + rank: 4 + newContributor: false + - username: densh + gravatar: https://avatars2.githubusercontent.com/u/320966?v=2&s=60 + commits: 1 + linesAdded: 17 + linesDeleted: 5 + rank: 4 + newContributor: false +--- diff --git a/contribute/scala-fame-data/_posts/2014-08-01-scala-fame-2014-07.md b/contribute/scala-fame-data/_posts/2014-08-01-scala-fame-2014-07.md new file mode 100644 index 0000000000..c57474778d --- /dev/null +++ b/contribute/scala-fame-data/_posts/2014-08-01-scala-fame-2014-07.md @@ -0,0 +1,98 @@ +--- +layout: famearchive +title: Contributors of July 2014 +fame-year: 2014 +fame-month: 7 +fame-month-str: July +fame-categories: + - category: Typesafe + authors: + - username: adriaanm + gravatar: https://avatars2.githubusercontent.com/u/91083?v=2&s=60 + commits: 31 + linesAdded: 775 + linesDeleted: 712 + rank: 1 + newContributor: false + - username: phaller + gravatar: https://avatars0.githubusercontent.com/u/289943?v=2&s=60 + commits: 3 + linesAdded: 161 + linesDeleted: 49 + rank: 2 + newContributor: false + - username: retronym + gravatar: https://avatars0.githubusercontent.com/u/65551?v=2&s=60 + commits: 1 + linesAdded: 35 + linesDeleted: 34 + rank: 3 + newContributor: false + - category: EPFL + authors: + - username: lrytz + gravatar: https://avatars3.githubusercontent.com/u/119636?v=2&s=60 + commits: 4 + linesAdded: 84 + linesDeleted: 29 + rank: 1 + newContributor: false + - category: Community + authors: + - username: som-snytt + gravatar: https://avatars2.githubusercontent.com/u/369425?v=2&s=60 + commits: 11 + linesAdded: 330 + linesDeleted: 226 + rank: 1 + newContributor: false + - username: gourlaysama + gravatar: https://avatars2.githubusercontent.com/u/733438?v=2&s=60 + commits: 5 + linesAdded: 217 + linesDeleted: 94 + rank: 2 + newContributor: false + - username: dhgarrette + gravatar: https://avatars2.githubusercontent.com/u/484190?v=2&s=60 + commits: 2 + linesAdded: 1 + linesDeleted: 3 + rank: 3 + newContributor: true + - username: pocket7878 + gravatar: https://avatars1.githubusercontent.com/u/236528?v=2&s=60 + commits: 2 + linesAdded: 21 + linesDeleted: 13 + rank: 3 + newContributor: true + - username: dgruntz + gravatar: https://avatars3.githubusercontent.com/u/1516800?v=2&s=60 + commits: 2 + linesAdded: 4 + linesDeleted: 4 + rank: 3 + newContributor: false + - username: Ichoran + gravatar: https://avatars3.githubusercontent.com/u/2298644?v=2&s=60 + commits: 1 + linesAdded: 26 + linesDeleted: 9 + rank: 4 + newContributor: false + - username: kzys + gravatar: https://avatars2.githubusercontent.com/u/19111?v=2&s=60 + commits: 1 + linesAdded: 19 + linesDeleted: 0 + rank: 4 + newContributor: false + - username: densh + gravatar: https://avatars2.githubusercontent.com/u/320966?v=2&s=60 + commits: 1 + linesAdded: 3 + linesDeleted: 1 + rank: 4 + newContributor: false +--- diff --git a/contribute/scala-fame-data/_posts/2014-09-01-scala-fame-2014-08.md b/contribute/scala-fame-data/_posts/2014-09-01-scala-fame-2014-08.md index 1393e01705..afef86d3be 100644 --- a/contribute/scala-fame-data/_posts/2014-09-01-scala-fame-2014-08.md +++ b/contribute/scala-fame-data/_posts/2014-09-01-scala-fame-2014-08.md @@ -46,6 +46,13 @@ fame-categories: linesDeleted: 543 rank: 1 newContributor: false + - username: gbasler + gravatar: https://avatars1.githubusercontent.com/u/273035?v=2&s=60 + commits: 1 + linesAdded: 14 + linesDeleted: 22 + rank: 2 + newContributor: false - username: dgruntz gravatar: https://avatars3.githubusercontent.com/u/1516800?v=2&s=60 commits: 1 diff --git a/contribute/scala-fame-data/_posts/2014-10-01-scala-fame-2014-09.md b/contribute/scala-fame-data/_posts/2014-10-01-scala-fame-2014-09.md new file mode 100644 index 0000000000..ee67016186 --- /dev/null +++ b/contribute/scala-fame-data/_posts/2014-10-01-scala-fame-2014-09.md @@ -0,0 +1,84 @@ +--- +layout: famearchive +title: Contributors of September 2014 +fame-year: 2014 +fame-month: 9 +fame-month-str: September +fame-categories: + - category: Typesafe + authors: + - username: retronym + gravatar: https://avatars0.githubusercontent.com/u/65551?v=2&s=60 + commits: 12 + linesAdded: 182 + linesDeleted: 23 + rank: 1 + newContributor: false + - username: dragos + gravatar: https://avatars2.githubusercontent.com/u/133742?v=2&s=60 + commits: 1 + linesAdded: 169 + linesDeleted: 169 + rank: 2 + newContributor: false + - category: EPFL + authors: + - username: lrytz + gravatar: https://avatars3.githubusercontent.com/u/119636?v=2&s=60 + commits: 6 + linesAdded: 262 + linesDeleted: 85 + rank: 1 + newContributor: false + - username: xeno-by + gravatar: https://avatars1.githubusercontent.com/u/609152?v=2&s=60 + commits: 3 + linesAdded: 1272 + linesDeleted: 1240 + rank: 2 + newContributor: false + - category: Community + authors: + - username: gourlaysama + gravatar: https://avatars2.githubusercontent.com/u/733438?v=2&s=60 + commits: 9 + linesAdded: 1782 + linesDeleted: 1227 + rank: 1 + newContributor: false + - username: som-snytt + gravatar: https://avatars2.githubusercontent.com/u/369425?v=2&s=60 + commits: 4 + linesAdded: 305 + linesDeleted: 125 + rank: 2 + newContributor: false + - username: puffnfresh + gravatar: https://avatars1.githubusercontent.com/u/37715?v=2&s=60 + commits: 3 + linesAdded: 42 + linesDeleted: 7 + rank: 3 + newContributor: false + - username: Ichoran + gravatar: https://avatars3.githubusercontent.com/u/2298644?v=2&s=60 + commits: 2 + linesAdded: 12 + linesDeleted: 1 + rank: 4 + newContributor: false + - username: gbasler + gravatar: https://avatars1.githubusercontent.com/u/273035?v=2&s=60 + commits: 1 + linesAdded: 115 + linesDeleted: 41 + rank: 5 + newContributor: false + - username: soc + gravatar: https://avatars0.githubusercontent.com/u/42493?v=2&s=60 + commits: 1 + linesAdded: 4 + linesDeleted: 1 + rank: 5 + newContributor: false +--- From bd730a6d4d147e313828cf8155e71a8ac47069be Mon Sep 17 00:00:00 2001 From: Fabien Salvi Date: Fri, 24 Oct 2014 16:48:29 +0200 Subject: [PATCH 0048/1870] Add 2013 scala-fame data --- .../_posts/2013-02-01-scala-fame-2013-01.md | 175 ++++++++++++++++++ .../_posts/2013-11-01-scala-fame-2013-10.md | 105 +++++++++++ .../_posts/2013-12-01-scala-fame-2013-11.md | 126 +++++++++++++ .../_posts/2014-01-01-scala-fame-2013-12.md | 147 +++++++++++++++ 4 files changed, 553 insertions(+) create mode 100644 contribute/scala-fame-data/_posts/2013-02-01-scala-fame-2013-01.md create mode 100644 contribute/scala-fame-data/_posts/2013-11-01-scala-fame-2013-10.md create mode 100644 contribute/scala-fame-data/_posts/2013-12-01-scala-fame-2013-11.md create mode 100644 contribute/scala-fame-data/_posts/2014-01-01-scala-fame-2013-12.md diff --git a/contribute/scala-fame-data/_posts/2013-02-01-scala-fame-2013-01.md b/contribute/scala-fame-data/_posts/2013-02-01-scala-fame-2013-01.md new file mode 100644 index 0000000000..68e990a7b7 --- /dev/null +++ b/contribute/scala-fame-data/_posts/2013-02-01-scala-fame-2013-01.md @@ -0,0 +1,175 @@ +--- +layout: famearchive +title: Contributors of January 2013 +fame-year: 2013 +fame-month: 1 +fame-month-str: January +fame-categories: + - category: Typesafe + authors: + - username: retronym + gravatar: https://avatars0.githubusercontent.com/u/65551?v=2&s=60 + commits: 67 + linesAdded: 7112 + linesDeleted: 3063 + rank: 1 + newContributor: false + - username: paulp + gravatar: https://avatars2.githubusercontent.com/u/9135?v=2&s=60 + commits: 37 + linesAdded: 1812 + linesDeleted: 1158 + rank: 2 + newContributor: false + - username: adriaanm + gravatar: https://avatars2.githubusercontent.com/u/91083?v=2&s=60 + commits: 22 + linesAdded: 1397 + linesDeleted: 561 + rank: 3 + newContributor: false + - username: JamesIry + gravatar: https://avatars0.githubusercontent.com/u/478012?v=2&s=60 + commits: 20 + linesAdded: 1156 + linesDeleted: 208 + rank: 4 + newContributor: false + - username: gkossakowski + gravatar: https://avatars0.githubusercontent.com/u/4217?v=2&s=60 + commits: 5 + linesAdded: 422 + linesDeleted: 9 + rank: 5 + newContributor: false + - username: viktorklang + gravatar: https://avatars0.githubusercontent.com/u/10871?v=2&s=60 + commits: 2 + linesAdded: 187 + linesDeleted: 12 + rank: 6 + newContributor: false + - username: phaller + gravatar: https://avatars0.githubusercontent.com/u/289943?v=2&s=60 + commits: 2 + linesAdded: 21 + linesDeleted: 42 + rank: 6 + newContributor: false + - username: dragos + gravatar: https://avatars2.githubusercontent.com/u/133742?v=2&s=60 + commits: 1 + linesAdded: 6 + linesDeleted: 26 + rank: 7 + newContributor: false + - category: EPFL + authors: + - username: xeno-by + gravatar: https://avatars1.githubusercontent.com/u/609152?v=2&s=60 + commits: 28 + linesAdded: 8416 + linesDeleted: 2758 + rank: 1 + newContributor: false + - username: lrytz + gravatar: https://avatars3.githubusercontent.com/u/119636?v=2&s=60 + commits: 8 + linesAdded: 1189 + linesDeleted: 418 + rank: 2 + newContributor: false + - username: heathermiller + gravatar: https://avatars0.githubusercontent.com/u/687163?v=2&s=60 + commits: 2 + linesAdded: 100 + linesDeleted: 15 + rank: 3 + newContributor: false + - username: namin + gravatar: https://avatars2.githubusercontent.com/u/6441?v=2&s=60 + commits: 1 + linesAdded: 23 + linesDeleted: 4 + rank: 4 + newContributor: false + - username: vjovanov + gravatar: https://avatars3.githubusercontent.com/u/352820?v=2&s=60 + commits: 1 + linesAdded: 38 + linesDeleted: 2 + rank: 4 + newContributor: false + - category: Community + authors: + - username: soc + gravatar: https://avatars0.githubusercontent.com/u/42493?v=2&s=60 + commits: 13 + linesAdded: 886 + linesDeleted: 3152 + rank: 1 + newContributor: false + - username: kzys + gravatar: https://avatars2.githubusercontent.com/u/19111?v=2&s=60 + commits: 7 + linesAdded: 79 + linesDeleted: 40 + rank: 2 + newContributor: false + - username: danielhopkins + gravatar: https://avatars3.githubusercontent.com/u/91909?v=2&s=60 + commits: 2 + linesAdded: 146 + linesDeleted: 146 + rank: 3 + newContributor: true + - username: ViniciusMiana + gravatar: https://avatars1.githubusercontent.com/u/2053546?v=2&s=60 + commits: 2 + linesAdded: 47 + linesDeleted: 8 + rank: 3 + newContributor: false + - username: Blaisorblade + gravatar: https://avatars2.githubusercontent.com/u/289960?v=2&s=60 + commits: 2 + linesAdded: 53 + linesDeleted: 6 + rank: 3 + newContributor: false + - username: som-snytt + gravatar: https://avatars2.githubusercontent.com/u/369425?v=2&s=60 + commits: 2 + linesAdded: 236 + linesDeleted: 183 + rank: 3 + newContributor: false + - username: eed3si9n + gravatar: https://avatars1.githubusercontent.com/u/184683?v=2&s=60 + commits: 1 + linesAdded: 35 + linesDeleted: 2 + rank: 4 + newContributor: false + - username: mt2309 + gravatar: https://avatars2.githubusercontent.com/u/816245?v=2&s=60 + commits: 1 + linesAdded: 24 + linesDeleted: 0 + rank: 4 + newContributor: false + - username: puffnfresh + gravatar: https://avatars1.githubusercontent.com/u/37715?v=2&s=60 + commits: 1 + linesAdded: 39 + linesDeleted: 3 + rank: 4 + newContributor: false + - username: khernyo + gravatar: https://avatars3.githubusercontent.com/u/447532?v=2&s=60 + commits: 1 + linesAdded: 2 + linesDeleted: 3 + rank: 4 + newContributor: false +--- diff --git a/contribute/scala-fame-data/_posts/2013-11-01-scala-fame-2013-10.md b/contribute/scala-fame-data/_posts/2013-11-01-scala-fame-2013-10.md new file mode 100644 index 0000000000..557955d60c --- /dev/null +++ b/contribute/scala-fame-data/_posts/2013-11-01-scala-fame-2013-10.md @@ -0,0 +1,105 @@ +--- +layout: famearchive +title: Contributors of October 2013 +fame-year: 2013 +fame-month: 10 +fame-month-str: October +fame-categories: + - category: Typesafe + authors: + - username: retronym + gravatar: https://avatars0.githubusercontent.com/u/65551?v=2&s=60 + commits: 52 + linesAdded: 1917 + linesDeleted: 1778 + rank: 1 + newContributor: false + - username: adriaanm + gravatar: https://avatars2.githubusercontent.com/u/91083?v=2&s=60 + commits: 18 + linesAdded: 1648 + linesDeleted: 1591 + rank: 2 + newContributor: false + - username: paulp + gravatar: https://avatars2.githubusercontent.com/u/9135?v=2&s=60 + commits: 9 + linesAdded: 871 + linesDeleted: 1346 + rank: 3 + newContributor: false + - username: huitseeker + gravatar: https://avatars2.githubusercontent.com/u/4142?v=2&s=60 + commits: 1 + linesAdded: 3 + linesDeleted: 0 + rank: 4 + newContributor: false + - category: EPFL + authors: + - username: xeno-by + gravatar: https://avatars1.githubusercontent.com/u/609152?v=2&s=60 + commits: 9 + linesAdded: 398 + linesDeleted: 2260 + rank: 1 + newContributor: false + - username: axel22 + gravatar: https://avatars1.githubusercontent.com/u/151774?v=2&s=60 + commits: 1 + linesAdded: 201 + linesDeleted: 74 + rank: 2 + newContributor: false + - category: Community + authors: + - username: densh + gravatar: https://avatars2.githubusercontent.com/u/320966?v=2&s=60 + commits: 18 + linesAdded: 766 + linesDeleted: 422 + rank: 1 + newContributor: false + - username: som-snytt + gravatar: https://avatars2.githubusercontent.com/u/369425?v=2&s=60 + commits: 4 + linesAdded: 114 + linesDeleted: 58 + rank: 2 + newContributor: false + - username: etaty + gravatar: https://avatars3.githubusercontent.com/u/461170?v=2&s=60 + commits: 2 + linesAdded: 2 + linesDeleted: 2 + rank: 3 + newContributor: false + - username: dotta + gravatar: https://avatars2.githubusercontent.com/u/703748?v=2&s=60 + commits: 2 + linesAdded: 68 + linesDeleted: 6 + rank: 3 + newContributor: false + - username: qerub + gravatar: https://avatars2.githubusercontent.com/u/636?v=2&s=60 + commits: 1 + linesAdded: 8 + linesDeleted: 0 + rank: 4 + newContributor: false + - username: gourlaysama + gravatar: https://avatars2.githubusercontent.com/u/733438?v=2&s=60 + commits: 1 + linesAdded: 31 + linesDeleted: 1 + rank: 4 + newContributor: false + - username: Ichoran + gravatar: https://avatars3.githubusercontent.com/u/2298644?v=2&s=60 + commits: 1 + linesAdded: 215 + linesDeleted: 25 + rank: 4 + newContributor: false +--- diff --git a/contribute/scala-fame-data/_posts/2013-12-01-scala-fame-2013-11.md b/contribute/scala-fame-data/_posts/2013-12-01-scala-fame-2013-11.md new file mode 100644 index 0000000000..7fba955998 --- /dev/null +++ b/contribute/scala-fame-data/_posts/2013-12-01-scala-fame-2013-11.md @@ -0,0 +1,126 @@ +--- +layout: famearchive +title: Contributors of November 2013 +fame-year: 2013 +fame-month: 11 +fame-month-str: November +fame-categories: + - category: Typesafe + authors: + - username: retronym + gravatar: https://avatars0.githubusercontent.com/u/65551?v=2&s=60 + commits: 44 + linesAdded: 1814 + linesDeleted: 1372 + rank: 1 + newContributor: false + - username: adriaanm + gravatar: https://avatars2.githubusercontent.com/u/91083?v=2&s=60 + commits: 20 + linesAdded: 1945 + linesDeleted: 1463 + rank: 2 + newContributor: false + - username: paulp + gravatar: https://avatars2.githubusercontent.com/u/9135?v=2&s=60 + commits: 4 + linesAdded: 62 + linesDeleted: 659 + rank: 3 + newContributor: false + - username: huitseeker + gravatar: https://avatars2.githubusercontent.com/u/4142?v=2&s=60 + commits: 2 + linesAdded: 137 + linesDeleted: 87 + rank: 4 + newContributor: false + - username: phaller + gravatar: https://avatars0.githubusercontent.com/u/289943?v=2&s=60 + commits: 1 + linesAdded: 105 + linesDeleted: 101 + rank: 5 + newContributor: false + - category: EPFL + authors: + - username: xeno-by + gravatar: https://avatars1.githubusercontent.com/u/609152?v=2&s=60 + commits: 5 + linesAdded: 82 + linesDeleted: 12 + rank: 1 + newContributor: false + - username: heathermiller + gravatar: https://avatars0.githubusercontent.com/u/687163?v=2&s=60 + commits: 1 + linesAdded: 8 + linesDeleted: 5 + rank: 2 + newContributor: false + - category: Community + authors: + - username: densh + gravatar: https://avatars2.githubusercontent.com/u/320966?v=2&s=60 + commits: 10 + linesAdded: 1089 + linesDeleted: 884 + rank: 1 + newContributor: false + - username: skyluc + gravatar: https://avatars3.githubusercontent.com/u/1098830?v=2&s=60 + commits: 6 + linesAdded: 1911 + linesDeleted: 53 + rank: 2 + newContributor: false + - username: dotta + gravatar: https://avatars2.githubusercontent.com/u/703748?v=2&s=60 + commits: 6 + linesAdded: 64 + linesDeleted: 47 + rank: 2 + newContributor: false + - username: som-snytt + gravatar: https://avatars2.githubusercontent.com/u/369425?v=2&s=60 + commits: 6 + linesAdded: 499 + linesDeleted: 197 + rank: 2 + newContributor: false + - username: soc + gravatar: https://avatars0.githubusercontent.com/u/42493?v=2&s=60 + commits: 5 + linesAdded: 280 + linesDeleted: 97 + rank: 3 + newContributor: false + - username: sschaef + gravatar: https://avatars2.githubusercontent.com/u/488530?v=2&s=60 + commits: 4 + linesAdded: 182 + linesDeleted: 12 + rank: 4 + newContributor: false + - username: xuwei-k + gravatar: https://avatars3.githubusercontent.com/u/389787?v=2&s=60 + commits: 2 + linesAdded: 3 + linesDeleted: 3 + rank: 5 + newContributor: false + - username: Ichoran + gravatar: https://avatars3.githubusercontent.com/u/2298644?v=2&s=60 + commits: 2 + linesAdded: 1179 + linesDeleted: 0 + rank: 5 + newContributor: false + - username: Blaisorblade + gravatar: https://avatars2.githubusercontent.com/u/289960?v=2&s=60 + commits: 1 + linesAdded: 3 + linesDeleted: 3 + rank: 6 + newContributor: false +--- diff --git a/contribute/scala-fame-data/_posts/2014-01-01-scala-fame-2013-12.md b/contribute/scala-fame-data/_posts/2014-01-01-scala-fame-2013-12.md new file mode 100644 index 0000000000..80c4139b10 --- /dev/null +++ b/contribute/scala-fame-data/_posts/2014-01-01-scala-fame-2013-12.md @@ -0,0 +1,147 @@ +--- +layout: famearchive +title: Contributors of December 2013 +fame-year: 2013 +fame-month: 12 +fame-month-str: December +fame-categories: + - category: Typesafe + authors: + - username: retronym + gravatar: https://avatars0.githubusercontent.com/u/65551?v=2&s=60 + commits: 28 + linesAdded: 901 + linesDeleted: 215 + rank: 1 + newContributor: false + - username: adriaanm + gravatar: https://avatars2.githubusercontent.com/u/91083?v=2&s=60 + commits: 21 + linesAdded: 1386 + linesDeleted: 16746 + rank: 2 + newContributor: false + - username: paulp + gravatar: https://avatars2.githubusercontent.com/u/9135?v=2&s=60 + commits: 9 + linesAdded: 899 + linesDeleted: 409 + rank: 3 + newContributor: false + - username: huitseeker + gravatar: https://avatars2.githubusercontent.com/u/4142?v=2&s=60 + commits: 3 + linesAdded: 45 + linesDeleted: 38 + rank: 4 + newContributor: false + - category: EPFL + authors: + - username: xeno-by + gravatar: https://avatars1.githubusercontent.com/u/609152?v=2&s=60 + commits: 30 + linesAdded: 2170 + linesDeleted: 984 + rank: 1 + newContributor: false + - username: magarciaEPFL + gravatar: https://avatars2.githubusercontent.com/u/1249748?v=2&s=60 + commits: 5 + linesAdded: 47 + linesDeleted: 17 + rank: 2 + newContributor: false + - category: Community + authors: + - username: densh + gravatar: https://avatars2.githubusercontent.com/u/320966?v=2&s=60 + commits: 20 + linesAdded: 1604 + linesDeleted: 703 + rank: 1 + newContributor: false + - username: soc + gravatar: https://avatars0.githubusercontent.com/u/42493?v=2&s=60 + commits: 11 + linesAdded: 728 + linesDeleted: 606 + rank: 2 + newContributor: false + - username: Ichoran + gravatar: https://avatars3.githubusercontent.com/u/2298644?v=2&s=60 + commits: 8 + linesAdded: 1490 + linesDeleted: 286 + rank: 3 + newContributor: false + - username: som-snytt + gravatar: https://avatars2.githubusercontent.com/u/369425?v=2&s=60 + commits: 6 + linesAdded: 382 + linesDeleted: 224 + rank: 4 + newContributor: false + - username: dotta + gravatar: https://avatars2.githubusercontent.com/u/703748?v=2&s=60 + commits: 5 + linesAdded: 265 + linesDeleted: 13 + rank: 5 + newContributor: false + - username: VladimirNik + gravatar: https://avatars2.githubusercontent.com/u/2835001?v=2&s=60 + commits: 2 + linesAdded: 7 + linesDeleted: 8 + rank: 6 + newContributor: false + - username: rklaehn + gravatar: https://avatars0.githubusercontent.com/u/248257?v=2&s=60 + commits: 2 + linesAdded: 2 + linesDeleted: 83 + rank: 6 + newContributor: false + - username: qerub + gravatar: https://avatars2.githubusercontent.com/u/636?v=2&s=60 + commits: 1 + linesAdded: 10 + linesDeleted: 11 + rank: 7 + newContributor: false + - username: jrudolph + gravatar: https://avatars1.githubusercontent.com/u/9868?v=2&s=60 + commits: 1 + linesAdded: 4 + linesDeleted: 4 + rank: 7 + newContributor: false + - username: skyluc + gravatar: https://avatars3.githubusercontent.com/u/1098830?v=2&s=60 + commits: 1 + linesAdded: 112 + linesDeleted: 54 + rank: 7 + newContributor: false + - username: non + gravatar: https://avatars3.githubusercontent.com/u/218045?v=2&s=60 + commits: 1 + linesAdded: 19 + linesDeleted: 8 + rank: 7 + newContributor: false + - username: xuwei-k + gravatar: https://avatars3.githubusercontent.com/u/389787?v=2&s=60 + commits: 1 + linesAdded: 1 + linesDeleted: 1 + rank: 7 + newContributor: false + - username: gourlaysama + gravatar: https://avatars2.githubusercontent.com/u/733438?v=2&s=60 + commits: 1 + linesAdded: 136 + linesDeleted: 55 + rank: 7 + newContributor: false +--- From 3d71e5bd8e4dae6dc1d318e8d72768b49e97bede Mon Sep 17 00:00:00 2001 From: Fabien Salvi Date: Mon, 3 Nov 2014 16:34:38 +0100 Subject: [PATCH 0049/1870] Add scala-fame data --- .../_posts/2014-11-01-scala-fame-2014-10.md | 63 +++++++++++++++++++ 1 file changed, 63 insertions(+) create mode 100644 contribute/scala-fame-data/_posts/2014-11-01-scala-fame-2014-10.md diff --git a/contribute/scala-fame-data/_posts/2014-11-01-scala-fame-2014-10.md b/contribute/scala-fame-data/_posts/2014-11-01-scala-fame-2014-10.md new file mode 100644 index 0000000000..0c957577fb --- /dev/null +++ b/contribute/scala-fame-data/_posts/2014-11-01-scala-fame-2014-10.md @@ -0,0 +1,63 @@ +--- +layout: famearchive +title: Contributors of October 2014 +fame-year: 2014 +fame-month: 10 +fame-month-str: October +fame-categories: + - category: Typesafe + authors: + - username: retronym + gravatar: https://avatars0.githubusercontent.com/u/65551?v=2&s=60 + commits: 11 + linesAdded: 414 + linesDeleted: 51 + rank: 1 + newContributor: false + - username: gkossakowski + gravatar: https://avatars0.githubusercontent.com/u/4217?v=2&s=60 + commits: 2 + linesAdded: 2 + linesDeleted: 2 + rank: 2 + newContributor: false + - username: adriaanm + gravatar: https://avatars2.githubusercontent.com/u/91083?v=2&s=60 + commits: 2 + linesAdded: 54 + linesDeleted: 18 + rank: 2 + newContributor: false + - category: EPFL + authors: + - username: lrytz + gravatar: https://avatars3.githubusercontent.com/u/119636?v=2&s=60 + commits: 4 + linesAdded: 146 + linesDeleted: 171 + rank: 1 + newContributor: false + - category: Community + authors: + - username: roberthoedicke + gravatar: https://avatars0.githubusercontent.com/u/9093826?v=2&s=60 + commits: 9 + linesAdded: 15 + linesDeleted: 15 + rank: 1 + newContributor: true + - username: puffnfresh + gravatar: https://avatars1.githubusercontent.com/u/37715?v=2&s=60 + commits: 1 + linesAdded: 19 + linesDeleted: 10 + rank: 2 + newContributor: false + - username: Blaisorblade + gravatar: https://avatars2.githubusercontent.com/u/289960?v=2&s=60 + commits: 1 + linesAdded: 0 + linesDeleted: 93 + rank: 2 + newContributor: false +--- From 84d53a941025d8188d7ce2f8312748ed23ae6de6 Mon Sep 17 00:00:00 2001 From: Fabien Salvi Date: Wed, 3 Dec 2014 16:47:25 +0100 Subject: [PATCH 0050/1870] Add scala-fame data --- .../_posts/2014-12-01-scala-fame-2014-11.md | 112 ++++++++++++++++++ 1 file changed, 112 insertions(+) create mode 100644 contribute/scala-fame-data/_posts/2014-12-01-scala-fame-2014-11.md diff --git a/contribute/scala-fame-data/_posts/2014-12-01-scala-fame-2014-11.md b/contribute/scala-fame-data/_posts/2014-12-01-scala-fame-2014-11.md new file mode 100644 index 0000000000..3c95eb2521 --- /dev/null +++ b/contribute/scala-fame-data/_posts/2014-12-01-scala-fame-2014-11.md @@ -0,0 +1,112 @@ +--- +layout: famearchive +title: Contributors of November 2014 +fame-year: 2014 +fame-month: 11 +fame-month-str: November +fame-categories: + - category: Typesafe + authors: + - username: retronym + gravatar: https://avatars1.githubusercontent.com/u/65551?v=3&s=60 + commits: 24 + linesAdded: 650 + linesDeleted: 90 + rank: 1 + newContributor: false + - username: adriaanm + gravatar: https://avatars3.githubusercontent.com/u/91083?v=3&s=60 + commits: 3 + linesAdded: 208 + linesDeleted: 54 + rank: 2 + newContributor: false + - username: phaller + gravatar: https://avatars1.githubusercontent.com/u/289943?v=3&s=60 + commits: 1 + linesAdded: 10 + linesDeleted: 8 + rank: 3 + newContributor: false + - category: EPFL + authors: + - username: lrytz + gravatar: https://avatars2.githubusercontent.com/u/119636?v=3&s=60 + commits: 6 + linesAdded: 782 + linesDeleted: 32 + rank: 1 + newContributor: false + - username: heathermiller + gravatar: https://avatars1.githubusercontent.com/u/687163?v=3&s=60 + commits: 2 + linesAdded: 64 + linesDeleted: 66 + rank: 2 + newContributor: false + - category: Community + authors: + - username: gourlaysama + gravatar: https://avatars3.githubusercontent.com/u/733438?v=3&s=60 + commits: 7 + linesAdded: 245 + linesDeleted: 83 + rank: 1 + newContributor: false + - username: som-snytt + gravatar: https://avatars3.githubusercontent.com/u/369425?v=3&s=60 + commits: 3 + linesAdded: 53 + linesDeleted: 53 + rank: 2 + newContributor: false + - username: advancedxy + gravatar: https://avatars1.githubusercontent.com/u/807537?v=3&s=60 + commits: 2 + linesAdded: 2 + linesDeleted: 2 + rank: 3 + newContributor: true + - username: kanielc + gravatar: https://avatars1.githubusercontent.com/u/1334074?v=3&s=60 + commits: 2 + linesAdded: 3 + linesDeleted: 3 + rank: 3 + newContributor: true + - username: gdickinson + gravatar: https://avatars3.githubusercontent.com/u/1130928?v=3&s=60 + commits: 2 + linesAdded: 0 + linesDeleted: 380 + rank: 3 + newContributor: true + - username: Ichoran + gravatar: https://avatars2.githubusercontent.com/u/2298644?v=3&s=60 + commits: 2 + linesAdded: 35 + linesDeleted: 18 + rank: 3 + newContributor: false + - username: ruippeixotog + gravatar: https://avatars1.githubusercontent.com/u/613493?v=3&s=60 + commits: 1 + linesAdded: 81 + linesDeleted: 8 + rank: 4 + newContributor: false + - username: mpociecha + gravatar: https://avatars0.githubusercontent.com/u/6143494?v=3&s=60 + commits: 1 + linesAdded: 5 + linesDeleted: 2 + rank: 4 + newContributor: false + - username: soc + gravatar: https://avatars1.githubusercontent.com/u/42493?v=3&s=60 + commits: 1 + linesAdded: 1 + linesDeleted: 1 + rank: 4 + newContributor: false +--- From def0d83bc4a8ae5ab2c7d07928f1717eec682e0d Mon Sep 17 00:00:00 2001 From: Dick Wall Date: Mon, 12 Jan 2015 09:52:21 -0800 Subject: [PATCH 0051/1870] Removed PHP issues page in favor of direct JIRA queries. --- contribute/community-tickets.md | 10 -------- contribute/guide.md | 2 +- contribute/index.md | 45 +++++++++++++++++++++++++++++---- 3 files changed, 41 insertions(+), 16 deletions(-) delete mode 100644 contribute/community-tickets.md diff --git a/contribute/community-tickets.md b/contribute/community-tickets.md deleted file mode 100644 index e458d3b6f2..0000000000 --- a/contribute/community-tickets.md +++ /dev/null @@ -1,10 +0,0 @@ ---- -layout: page-full-width -title: Community tickets ---- - -Below is a selection of tickets from -[Scala's bug tracker](https://issues.scala-lang.org/) -that we think are a good starting point for you, as the community. - -
    diff --git a/contribute/guide.md b/contribute/guide.md index ac27e53719..9446e6ce9c 100644 --- a/contribute/guide.md +++ b/contribute/guide.md @@ -21,7 +21,7 @@ title: Contributing guide
    -

    Community issues

    +

    Community issues

    Get cracking on some easy to approach issues.

    diff --git a/contribute/index.md b/contribute/index.md index d2402cf4d2..d1ba675f05 100644 --- a/contribute/index.md +++ b/contribute/index.md @@ -23,9 +23,44 @@ An easy but very important way to contribute to Scala is to ### Compiler and other tools -Want to dive into the hardcore business? Check out our -[selection of community tickets](./community-tickets.html), -which are good starting points to contributing to the compiler and -surrounding tools, like ScalaDoc. - More info in our [contributing guide](./guide.html). + +### Community Tickets + +The following links provide starting points for +various contributor activities: + +
    +
    +
    +

    Documentation

    +

    Help augment or correct the documentation.

    +
    +
    +

    Core Libraries

    +

    Community bugs and enhancements on the core libs.

    +
    +
    + +
    +
    +

    Tools

    +

    Help with the Scala tool chain.

    +
    +
    +

    Compiler

    +

    Ready for a challenge? Here's the compiler bugs.

    +
    +
    + +
    +
    +

    Bugs

    +

    All bugs marked with the label community.

    +
    +
    +

    All Issues

    +

    Bugs + Enhancements marked with the label community.

    +
    +
    +
    From 76fcdfafa32914a60a0dd16e0ee7c75094e9682f Mon Sep 17 00:00:00 2001 From: Fabien Salvi Date: Wed, 14 Jan 2015 11:24:27 +0100 Subject: [PATCH 0052/1870] Add scala-fame data --- .../_posts/2015-01-01-scala-fame-2014-12.md | 70 +++++++++++++++++++ 1 file changed, 70 insertions(+) create mode 100644 contribute/scala-fame-data/_posts/2015-01-01-scala-fame-2014-12.md diff --git a/contribute/scala-fame-data/_posts/2015-01-01-scala-fame-2014-12.md b/contribute/scala-fame-data/_posts/2015-01-01-scala-fame-2014-12.md new file mode 100644 index 0000000000..c11348b33a --- /dev/null +++ b/contribute/scala-fame-data/_posts/2015-01-01-scala-fame-2014-12.md @@ -0,0 +1,70 @@ +--- +layout: famearchive +title: Contributors of December 2014 +fame-year: 2014 +fame-month: 12 +fame-month-str: December +fame-categories: + - category: Typesafe + authors: + - username: adriaanm + gravatar: https://avatars3.githubusercontent.com/u/91083?v=3&s=60 + commits: 2 + linesAdded: 962 + linesDeleted: 290 + rank: 1 + newContributor: false + - username: retronym + gravatar: https://avatars1.githubusercontent.com/u/65551?v=3&s=60 + commits: 1 + linesAdded: 5 + linesDeleted: 1 + rank: 2 + newContributor: false + - category: EPFL + authors: + - username: lrytz + gravatar: https://avatars2.githubusercontent.com/u/119636?v=3&s=60 + commits: 4 + linesAdded: 61 + linesDeleted: 50 + rank: 1 + newContributor: false + - category: Community + authors: + - username: gbasler + gravatar: https://avatars0.githubusercontent.com/u/273035?v=3&s=60 + commits: 2 + linesAdded: 567 + linesDeleted: 1 + rank: 1 + newContributor: false + - username: kanielc + gravatar: https://avatars1.githubusercontent.com/u/1334074?v=3&s=60 + commits: 1 + linesAdded: 43 + linesDeleted: 6 + rank: 2 + newContributor: false + - username: xuwei-k + gravatar: https://avatars2.githubusercontent.com/u/389787?v=3&s=60 + commits: 1 + linesAdded: 2 + linesDeleted: 2 + rank: 2 + newContributor: false + - username: gourlaysama + gravatar: https://avatars3.githubusercontent.com/u/733438?v=3&s=60 + commits: 1 + linesAdded: 1 + linesDeleted: 1 + rank: 2 + newContributor: false + - username: som-snytt + gravatar: https://avatars3.githubusercontent.com/u/369425?v=3&s=60 + commits: 1 + linesAdded: 44 + linesDeleted: 3 + rank: 2 + newContributor: false +--- From fd4cf442dbb1b58fe5dd583068bbd1dcb2b07aca Mon Sep 17 00:00:00 2001 From: Dick Wall Date: Wed, 14 Jan 2015 14:14:00 -0800 Subject: [PATCH 0053/1870] Add scaladoc contribution page and link up. --- contribute/contribute-scaladoc.md | 116 ++++++++++++++++++++++++++++++ contribute/index.md | 2 + 2 files changed, 118 insertions(+) create mode 100644 contribute/contribute-scaladoc.md diff --git a/contribute/contribute-scaladoc.md b/contribute/contribute-scaladoc.md new file mode 100644 index 0000000000..3bea0dea5a --- /dev/null +++ b/contribute/contribute-scaladoc.md @@ -0,0 +1,116 @@ +--- +layout: page +title: Scaladoc Contributions +--- + +This page is specific to scaladoc contributions. For contributions to the scala-lang +documentation site, [help with the documentation](http://docs.scala-lang.org/contribute.html). + +*Please note, these instructions cover contributions to the scala language and +core libraries only. For other scala projects please check those projects for +the contribution steps and guidelines. Thank you.* + +## Overview + +Since the scaladoc documentation is located in scala source code files, the +process for contributing scaladoc is similar to that of contributing bug-fixes +to the scala code base, but without the requirement that there be a JIRA bug +first (just use a `scaladoc/xxxx` branch name instead of `issue/NNNN`). +However, if an issue *does* exist, please use `issue/NNNN` (where NNNN is the bug id) +instead. + +If you would like to assist us by helping us find missing documentation and +submitting issues, [please read the following section](#submit-scaladoc-issues). +If you want to contribute scaladoc, +[jump down to the next section](#contribute-scaladoc). + +## Submit Scaladoc Issues + +You can also contribute by helping us to identify missing documentation. To do +this, [browse the current API documentation](http://www.scala-lang.org/api/current/) +and identify missing, incorrect or inadequate documentation. In particular pay +attention to the package objects for important packages (these often get overlooked +for documentation and are a good place for API overviews). + +If you find an issue, please log it in the [Scala issue browser](https://issues.scala-lang.org) +**after making sure it is not already logged as an issue**. To help with +disambiguation, please use the following format for issue title: + +* Use an action describing the work required. E.g. Add, Document, Correct, Remove +* Use the full package, class/trait/object name (or state package object if + that is the case). +* Extremely short description of what to do. +* More detail can (and should) go into the issue description, including a short + justification for the issue if it provides additional detail. + +Here is an example of the title and description for an example scaladoc issue: + +`Document scala.concurrent.Future object, include code examples` + +(note the explicit companion object called out in the title) + +and the description: + +`The methods on the Future companion object are critical` +`for using Futures effectively without blocking. Provide code` +`examples of how methods like sequence, transform, fold and` +`firstCompletedOf should be used.` + +In addition to following these conventions, please add `documentation` and +`community` labels to the issue, and put them in the `Documentation and API` +component so that they show up in the correct issue filters. + +## Contribute scaladoc + +### Required reading + +Please familiarize yourself with **all** of the following before contributing +scaladoc to save time, effort, mistakes and repetition. + +* [Forking the Repo](./hacker-guide.html#set-up) follow setup steps through + branch name. If providing scaladoc related to a JIRA issue, use `issue/NNNN` + or `ticket/NNNN` as the guide states. If providing scaladoc with no associated + JIRA issue, use `scaladoc/xxxx` instead, where xxxx is a descriptive but + short branch name, e.g. `scaladoc/future-object`. +* [Scaladoc basics](http://docs.scala-lang.org/overviews/scaladoc/basics.html) + covers the use of scaladoc tags, markdown and other features. +* [Scaladoc usage](http://docs.scala-lang.org/overviews/scaladoc/usage.html) if + you are unfamiliar with all of the features of scaladoc, e.g. switching between + companions, browsing package object documentation, searching, token searches + and so on. +* Prior to commit, be sure to read + [A note about git commit messages](http://tbaggery.com/2008/04/19/a-note-about-git-commit-messages.html). +* Also read the Scala [Pull Request Policy](https://github.com/scala/scala/wiki/Pull-Request-Policy). + Some of this document will clearly not apply (like the sections on providing tests, + however see below for some special requirements for documentation). Do still read + the whole document though, and pay close attention to the title and commit + message formats, noting *present tense*, *length limits* and that it must merge + cleanly. Remember that the title of the pull request will become the commit + message when merged. **Also**, be sure to assign one or more reviewers to the PR, list of + reviewers is at the bottom of this document, but the quick version is to add + `Review by @dickwall` **in the pull request comments**. + +### Extra Requirements for Scaladoc Commits + +Although some of the requirements for bug fix pull requests are not needed for +scaladoc commits, here are the step by step requirements to ensure your scaladoc +PR is merged in smoothly: + +* Any and all code examples provided should *be correct, compile and run* as + expected (ensure this in the REPL or your IDE). +* Spelling must be checked for all written language *and* code examples where + possible. Most editors have some spell checking feature available. Obviously + scala code is likely to flag as mis-spelled sometimes, but any written language + should be checked. If you can also use a grammar checker, even better. We + *will* ask for spelling and grammar to be corrected before acceptance. +* You **must** also run `ant docs`, fix any problems and check the formatting and + layout of your changes. Again, corrections will be required if formatting or + layout are inadequate. After running `ant docs` the generated documents can be + found under the `build/scaladoc/` folders (probably in the `library` folder + but maybe under the others depending on what section of the scala source you + are working on). +* All of these steps are required to save time for both the reviewers and + contributors. It benefits everyone to ensure that the PR to merge process is + as smooth and streamlined as possible. + +Thanks for helping us improve the scaladoc. diff --git a/contribute/index.md b/contribute/index.md index d2402cf4d2..995617634d 100644 --- a/contribute/index.md +++ b/contribute/index.md @@ -20,6 +20,8 @@ how to efficiently report a bug. An easy but very important way to contribute to Scala is to [help with the documentation](http://docs.scala-lang.org/contribute.html). +If you want to [contribute to scaladoc](./contribute-scaladoc.html), the +process is slightly different, since scaladoc lives alongside the source code. ### Compiler and other tools From b049734092803dafea95e4318322ff0e6102ff33 Mon Sep 17 00:00:00 2001 From: Dick Wall Date: Tue, 27 Jan 2015 09:20:21 -0800 Subject: [PATCH 0054/1870] Corrected JIRA search URL for compiler bugs. --- contribute/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/contribute/index.md b/contribute/index.md index d1ba675f05..65c9c501cd 100644 --- a/contribute/index.md +++ b/contribute/index.md @@ -48,7 +48,7 @@ various contributor activities:

    Help with the Scala tool chain.

    -

    Compiler

    +

    Compiler

    Ready for a challenge? Here's the compiler bugs.

    From b53c6bd2d67eddb97f61c857ed35989425da73ee Mon Sep 17 00:00:00 2001 From: Heather Miller Date: Thu, 29 Jan 2015 14:21:15 +0100 Subject: [PATCH 0055/1870] Wording tweaks --- contribute/contribute-scaladoc.md | 75 +++++++++++++++++-------------- contribute/index.md | 6 +-- 2 files changed, 44 insertions(+), 37 deletions(-) diff --git a/contribute/contribute-scaladoc.md b/contribute/contribute-scaladoc.md index 3bea0dea5a..d9bd931de3 100644 --- a/contribute/contribute-scaladoc.md +++ b/contribute/contribute-scaladoc.md @@ -1,38 +1,45 @@ --- layout: page -title: Scaladoc Contributions +title: Contribute to API Documentation --- -This page is specific to scaladoc contributions. For contributions to the scala-lang -documentation site, [help with the documentation](http://docs.scala-lang.org/contribute.html). +This page is specific to API documentation contributions – that is, API +documentation for +[Scala's standard library](http://scala-lang.org/api/current/#package) – +sometimes referred to as Scaladoc contributions. -*Please note, these instructions cover contributions to the scala language and -core libraries only. For other scala projects please check those projects for -the contribution steps and guidelines. Thank you.* +For contributions to tutorial and guide-style documentation on +[docs.scala-lang.org](http://docs.scala-lang.org), +see the ["doc-site"'s contribution guide](http://docs.scala-lang.org/contribute.html). + +*Please note, these instructions cover documentation contributions Scala core +libraries only. For other Scala projects please check those projects for the +contribution steps and guidelines. Thank you.* ## Overview -Since the scaladoc documentation is located in scala source code files, the -process for contributing scaladoc is similar to that of contributing bug-fixes -to the scala code base, but without the requirement that there be a JIRA bug -first (just use a `scaladoc/xxxx` branch name instead of `issue/NNNN`). -However, if an issue *does* exist, please use `issue/NNNN` (where NNNN is the bug id) +Since API documentation is located in Scala source code files, the +process for contributing API documentation is similar to that of contributing bug-fixes +to the Scala code base, but without the requirement that there be an issue filed on JIRA +first (when forking/branching, just use a `scaladoc/xxxx` branch name instead of `issue/NNNN`). +However, if an issue *does* exist, please use `issue/NNNN` (where NNNN is the ticket number) instead. If you would like to assist us by helping us find missing documentation and -submitting issues, [please read the following section](#submit-scaladoc-issues). -If you want to contribute scaladoc, -[jump down to the next section](#contribute-scaladoc). +submitting bug reports for existing documentation, +[please read the following section](#contribute-api-documentation-bug-reports). +If you want to contribute new API documentation, +[jump down to the next section](#contribute-new-api-documentation). -## Submit Scaladoc Issues +## Contribute API Documentation Bug Reports -You can also contribute by helping us to identify missing documentation. To do -this, [browse the current API documentation](http://www.scala-lang.org/api/current/) -and identify missing, incorrect or inadequate documentation. In particular pay -attention to the package objects for important packages (these often get overlooked -for documentation and are a good place for API overviews). +One good way to contribute is by helping us to identify missing documentation. To do +this, [browse the current API documentationn](http://www.scala-lang.org/api/current/) +and identify missing, incorrect or inadequate documentation. A good place to start is +is package objects for important packages (these often get overlooked for documentation +and are a good place for API overviews). -If you find an issue, please log it in the [Scala issue browser](https://issues.scala-lang.org) +If you find an issue, please log it in the [Scala issue tracker](https://issues.scala-lang.org) **after making sure it is not already logged as an issue**. To help with disambiguation, please use the following format for issue title: @@ -43,7 +50,7 @@ disambiguation, please use the following format for issue title: * More detail can (and should) go into the issue description, including a short justification for the issue if it provides additional detail. -Here is an example of the title and description for an example scaladoc issue: +Here is an example of the title and description for an example API documentation issue: `Document scala.concurrent.Future object, include code examples` @@ -60,22 +67,22 @@ In addition to following these conventions, please add `documentation` and `community` labels to the issue, and put them in the `Documentation and API` component so that they show up in the correct issue filters. -## Contribute scaladoc +## Contribute New API Documentation -### Required reading +### Required Reading Please familiarize yourself with **all** of the following before contributing -scaladoc to save time, effort, mistakes and repetition. +new API documentation to save time, effort, mistakes and repetition. * [Forking the Repo](./hacker-guide.html#set-up) follow setup steps through - branch name. If providing scaladoc related to a JIRA issue, use `issue/NNNN` - or `ticket/NNNN` as the guide states. If providing scaladoc with no associated + branch name. If providing new documentation related to an existing JIRA issue, use `issue/NNNN` + or `ticket/NNNN` as the guide states. If providing API documentation with no associated JIRA issue, use `scaladoc/xxxx` instead, where xxxx is a descriptive but short branch name, e.g. `scaladoc/future-object`. -* [Scaladoc basics](http://docs.scala-lang.org/overviews/scaladoc/basics.html) +* [Scaladoc for library authors](http://docs.scala-lang.org/overviews/scaladoc/for-library-authors.html) covers the use of scaladoc tags, markdown and other features. -* [Scaladoc usage](http://docs.scala-lang.org/overviews/scaladoc/usage.html) if - you are unfamiliar with all of the features of scaladoc, e.g. switching between +* [Scaladoc's interface](http://docs.scala-lang.org/overviews/scaladoc/interface.html) + covers all of the features of Scaladoc's interface, e.g. switching between companions, browsing package object documentation, searching, token searches and so on. * Prior to commit, be sure to read @@ -93,24 +100,24 @@ scaladoc to save time, effort, mistakes and repetition. ### Extra Requirements for Scaladoc Commits Although some of the requirements for bug fix pull requests are not needed for -scaladoc commits, here are the step by step requirements to ensure your scaladoc +API documentation commits, here are the step by step requirements to ensure your API documentation PR is merged in smoothly: * Any and all code examples provided should *be correct, compile and run* as expected (ensure this in the REPL or your IDE). * Spelling must be checked for all written language *and* code examples where possible. Most editors have some spell checking feature available. Obviously - scala code is likely to flag as mis-spelled sometimes, but any written language + Scala code is likely to flag as mis-spelled sometimes, but any written language should be checked. If you can also use a grammar checker, even better. We *will* ask for spelling and grammar to be corrected before acceptance. * You **must** also run `ant docs`, fix any problems and check the formatting and layout of your changes. Again, corrections will be required if formatting or layout are inadequate. After running `ant docs` the generated documents can be found under the `build/scaladoc/` folders (probably in the `library` folder - but maybe under the others depending on what section of the scala source you + but maybe under the others depending on what section of the Scala source you are working on). * All of these steps are required to save time for both the reviewers and contributors. It benefits everyone to ensure that the PR to merge process is as smooth and streamlined as possible. -Thanks for helping us improve the scaladoc. +Thanks for helping us improve the Scaladoc API documentation! diff --git a/contribute/index.md b/contribute/index.md index 995617634d..5dda418cbf 100644 --- a/contribute/index.md +++ b/contribute/index.md @@ -19,9 +19,9 @@ how to efficiently report a bug. ### Help with the documentation An easy but very important way to contribute to Scala is to -[help with the documentation](http://docs.scala-lang.org/contribute.html). -If you want to [contribute to scaladoc](./contribute-scaladoc.html), the -process is slightly different, since scaladoc lives alongside the source code. +[help with the guide/tutorial-style documentation on docs.scala-lang.org](http://docs.scala-lang.org/contribute.html). +If you want to [contribute to Scala standard library API docmentation](./contribute-scaladoc.html), the +process is slightly different, since API documentation lives within Scala standard library source code. ### Compiler and other tools From b27128fd7967d882e274a80fc0328c7d4df6f4c0 Mon Sep 17 00:00:00 2001 From: Heather Miller Date: Thu, 29 Jan 2015 14:25:00 +0100 Subject: [PATCH 0056/1870] Some reorganization and tweaks --- contribute/index.md | 2 +- ...-scaladoc.md => scala-standard-library-api-documentation.md} | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) rename contribute/{contribute-scaladoc.md => scala-standard-library-api-documentation.md} (99%) diff --git a/contribute/index.md b/contribute/index.md index 5dda418cbf..f2bed88bae 100644 --- a/contribute/index.md +++ b/contribute/index.md @@ -20,7 +20,7 @@ how to efficiently report a bug. An easy but very important way to contribute to Scala is to [help with the guide/tutorial-style documentation on docs.scala-lang.org](http://docs.scala-lang.org/contribute.html). -If you want to [contribute to Scala standard library API docmentation](./contribute-scaladoc.html), the +If you want to [contribute to Scala standard library API docmentation](./scala-standard-library-api-documentation.html), the process is slightly different, since API documentation lives within Scala standard library source code. ### Compiler and other tools diff --git a/contribute/contribute-scaladoc.md b/contribute/scala-standard-library-api-documentation.md similarity index 99% rename from contribute/contribute-scaladoc.md rename to contribute/scala-standard-library-api-documentation.md index d9bd931de3..ec41aee3cb 100644 --- a/contribute/contribute-scaladoc.md +++ b/contribute/scala-standard-library-api-documentation.md @@ -97,7 +97,7 @@ new API documentation to save time, effort, mistakes and repetition. reviewers is at the bottom of this document, but the quick version is to add `Review by @dickwall` **in the pull request comments**. -### Extra Requirements for Scaladoc Commits +### Extra Requirements for Scaladoc Documentation Commits Although some of the requirements for bug fix pull requests are not needed for API documentation commits, here are the step by step requirements to ensure your API documentation From 66f39d2e292cdc347b7d3c8d59835e83c59739f6 Mon Sep 17 00:00:00 2001 From: Justin Pihony Date: Mon, 2 Feb 2015 15:32:49 -0500 Subject: [PATCH 0057/1870] Fix the Forking url and grammatical consistency Review by @dickwall --- .../scala-standard-library-api-documentation.md | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/contribute/scala-standard-library-api-documentation.md b/contribute/scala-standard-library-api-documentation.md index ec41aee3cb..de5a970bbe 100644 --- a/contribute/scala-standard-library-api-documentation.md +++ b/contribute/scala-standard-library-api-documentation.md @@ -21,8 +21,9 @@ contribution steps and guidelines. Thank you.* Since API documentation is located in Scala source code files, the process for contributing API documentation is similar to that of contributing bug-fixes to the Scala code base, but without the requirement that there be an issue filed on JIRA -first (when forking/branching, just use a `scaladoc/xxxx` branch name instead of `issue/NNNN`). -However, if an issue *does* exist, please use `issue/NNNN` (where NNNN is the ticket number) +first. When forking/branching, just use a `scaladoc/xxxx` branch name, where xxxx is a +descriptive, but short branch name (e.g. `scaladoc/future-object`). +However, if an issue *does* exist, please use `issue/NNNN`, where NNNN is the ticket number, instead. If you would like to assist us by helping us find missing documentation and @@ -35,8 +36,8 @@ If you want to contribute new API documentation, One good way to contribute is by helping us to identify missing documentation. To do this, [browse the current API documentationn](http://www.scala-lang.org/api/current/) -and identify missing, incorrect or inadequate documentation. A good place to start is -is package objects for important packages (these often get overlooked for documentation +and identify missing, incorrect or inadequate documentation. A good place to start is +package objects for important packages (these often get overlooked for documentation and are a good place for API overviews). If you find an issue, please log it in the [Scala issue tracker](https://issues.scala-lang.org) @@ -74,11 +75,10 @@ component so that they show up in the correct issue filters. Please familiarize yourself with **all** of the following before contributing new API documentation to save time, effort, mistakes and repetition. -* [Forking the Repo](./hacker-guide.html#set-up) follow setup steps through - branch name. If providing new documentation related to an existing JIRA issue, use `issue/NNNN` +* [Forking the Repo](./hacker-guide.html#2_set_up) - follow the setup steps through + the Branch section. If providing new documentation related to an existing JIRA issue, use `issue/NNNN` or `ticket/NNNN` as the guide states. If providing API documentation with no associated - JIRA issue, use `scaladoc/xxxx` instead, where xxxx is a descriptive but - short branch name, e.g. `scaladoc/future-object`. + JIRA issue, use `scaladoc/xxxx` instead. * [Scaladoc for library authors](http://docs.scala-lang.org/overviews/scaladoc/for-library-authors.html) covers the use of scaladoc tags, markdown and other features. * [Scaladoc's interface](http://docs.scala-lang.org/overviews/scaladoc/interface.html) From f2a174cea939a311901274c187ffafadf17ebed0 Mon Sep 17 00:00:00 2001 From: Dick Wall Date: Mon, 2 Feb 2015 14:10:10 -0800 Subject: [PATCH 0058/1870] Correct a couple of spelling typos on contribution pages. --- contribute/index.md | 2 +- .../scala-standard-library-api-documentation.md | 16 ++++++++-------- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/contribute/index.md b/contribute/index.md index a065565a98..9ea981b115 100644 --- a/contribute/index.md +++ b/contribute/index.md @@ -5,7 +5,7 @@ title: Contribute The Scala programming language is an open source project with a very diverse community, where people from all over the world contribute their work, -with everyone benefitting from friendly help and advice, and +with everyone benefiting from friendly help and advice, and kindly helping others in return. So why not join the Scala community and help everyone make things better? diff --git a/contribute/scala-standard-library-api-documentation.md b/contribute/scala-standard-library-api-documentation.md index de5a970bbe..519c85a030 100644 --- a/contribute/scala-standard-library-api-documentation.md +++ b/contribute/scala-standard-library-api-documentation.md @@ -4,11 +4,11 @@ title: Contribute to API Documentation --- This page is specific to API documentation contributions – that is, API -documentation for -[Scala's standard library](http://scala-lang.org/api/current/#package) – +documentation for +[Scala's standard library](http://scala-lang.org/api/current/#package) – sometimes referred to as Scaladoc contributions. -For contributions to tutorial and guide-style documentation on +For contributions to tutorial and guide-style documentation on [docs.scala-lang.org](http://docs.scala-lang.org), see the ["doc-site"'s contribution guide](http://docs.scala-lang.org/contribute.html). @@ -21,13 +21,13 @@ contribution steps and guidelines. Thank you.* Since API documentation is located in Scala source code files, the process for contributing API documentation is similar to that of contributing bug-fixes to the Scala code base, but without the requirement that there be an issue filed on JIRA -first. When forking/branching, just use a `scaladoc/xxxx` branch name, where xxxx is a +first. When forking/branching, just use a `scaladoc/xxxx` branch name, where xxxx is a descriptive, but short branch name (e.g. `scaladoc/future-object`). However, if an issue *does* exist, please use `issue/NNNN`, where NNNN is the ticket number, instead. If you would like to assist us by helping us find missing documentation and -submitting bug reports for existing documentation, +submitting bug reports for existing documentation, [please read the following section](#contribute-api-documentation-bug-reports). If you want to contribute new API documentation, [jump down to the next section](#contribute-new-api-documentation). @@ -35,9 +35,9 @@ If you want to contribute new API documentation, ## Contribute API Documentation Bug Reports One good way to contribute is by helping us to identify missing documentation. To do -this, [browse the current API documentationn](http://www.scala-lang.org/api/current/) -and identify missing, incorrect or inadequate documentation. A good place to start is -package objects for important packages (these often get overlooked for documentation +this, [browse the current API documentation](http://www.scala-lang.org/api/current/) +and identify missing, incorrect or inadequate documentation. A good place to start is +package objects for important packages (these often get overlooked for documentation and are a good place for API overviews). If you find an issue, please log it in the [Scala issue tracker](https://issues.scala-lang.org) From db2a14f159ab6db8c802cb415885cc1645cbcb85 Mon Sep 17 00:00:00 2001 From: JustinPihony Date: Tue, 3 Feb 2015 21:35:08 -0500 Subject: [PATCH 0059/1870] Add u to docmentation typo Review by @dickwall --- contribute/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/contribute/index.md b/contribute/index.md index 9ea981b115..338ff06a06 100644 --- a/contribute/index.md +++ b/contribute/index.md @@ -20,7 +20,7 @@ how to efficiently report a bug. An easy but very important way to contribute to Scala is to [help with the guide/tutorial-style documentation on docs.scala-lang.org](http://docs.scala-lang.org/contribute.html). -If you want to [contribute to Scala standard library API docmentation](./scala-standard-library-api-documentation.html), the +If you want to [contribute to Scala standard library API documentation](./scala-standard-library-api-documentation.html), the process is slightly different, since API documentation lives within Scala standard library source code. ### Compiler and other tools From eb1e3cbd55fa0fb19c8f0f9eb444cd16527d4d15 Mon Sep 17 00:00:00 2001 From: Dick Wall Date: Mon, 9 Feb 2015 14:51:26 -0800 Subject: [PATCH 0060/1870] Update contributor pages for bugs/issues - provide issue checklist - Individual changes to docs: - corelibs.md and tools.md - add placeholders/call for help - documentation.md - small changes and spelling only - guide.md - bugfix checklist with links to other resources for each step - hacker-guide.md - spelling corrections - index.md - organize by type of contribution - scala-internals.md - new doc describing use of scala-internals for coordination - scala-standard-library-api-documentation.md - spelling/minor --- contribute/corelibs.md | 8 + contribute/documentation.md | 92 ++++++++---- contribute/guide.md | 137 ++++-------------- contribute/hacker-guide.md | 6 +- contribute/index.md | 67 +++++++-- contribute/scala-internals.md | 45 ++++++ ...cala-standard-library-api-documentation.md | 6 +- contribute/tools.md | 8 + 8 files changed, 213 insertions(+), 156 deletions(-) create mode 100644 contribute/corelibs.md create mode 100644 contribute/scala-internals.md create mode 100644 contribute/tools.md diff --git a/contribute/corelibs.md b/contribute/corelibs.md new file mode 100644 index 0000000000..1429ec87ff --- /dev/null +++ b/contribute/corelibs.md @@ -0,0 +1,8 @@ +--- +layout: page +title: Core Library Contributions +--- +## Under Construction + +If you would like to help complete this document, welcome, and please head over and read [Documentation Contributions](./documentation.html#the-scala-language-site), +and let us know on the [scala-internals](https://groups.google.com/forum/#!forum/scala-internals) forum (suggested post title: `[docs] Core Library Contributions`) so that we can get you hooked up with the right people. \ No newline at end of file diff --git a/contribute/documentation.md b/contribute/documentation.md index 05b2455a5f..da20b9360d 100644 --- a/contribute/documentation.md +++ b/contribute/documentation.md @@ -2,28 +2,70 @@ layout: page title: Documentation Contributions --- -# Contributing documentation to the Scala project - -TODO - - +## Contributing Documentation to the Scala project + +There are several ways you can help out with the improvement of Scala documentation. These include: + +* Code examples and tutorials in activator templates. +* The Scala Wiki +* API Documentation in Scaladoc +* Guides, Overviews, Tutorials, Cheat Sheets and more on the docs.scala-lang.org site +* Updating Documents on the Main Scala Language Site (this one) + +Please read this page, and the pages linked from this one, fully before contributing documentation. Many of the questions you have will be answered in these resources. If you have a question that isn't answered, feel free to ask on the [scala-internals Google group](https://groups.google.com/forum/#!forum/scala-internals) and then, please, submit a pull request with updated documentation reflecting that answer. + +**General requirements** for documentation submissions include spell-checking all written language, ensuring code samples compile and run correctly, correct grammar, and clean formatting/layout of the documentation. + +Thanks + +### Examples/Tutorials in Activator Templates + +[Typesafe Activator](https://typesafe.com/community/core-tools/activator-and-sbt) +is a tool based on SBT, with a UI mode that is ideal for code based tutorials, overviews and walk-throughs. To contribute an example in activator, you can fork an existing template, edit it, add a tutorial, upload it to github and then submit the github project into the template repository. It's the fastest way to produce a working code example with tutorial. + +Please see [Contributing an Activator Template](https://typesafe.com/activator/template/contribute) for more details. + +### API Documentation (Scaladoc) + +The Scala API documentation lives with the scala project source code. There are many ways you can help with improving Scaladoc, including: + +* [Log issues for missing scaladoc documentation](./scala-standard-library-api-documentation.html#contribute-api-documentation-bug-reports) - +Please *follow the issue submission process closely* to help prevent duplicate issues being created. +* [Claim Scaladoc Issues and Provide Documentation](./scala-standard-library-api-documentation.html) - please claim issues prior to working on a specific scaladoc task to prevent duplication of effort. If you sit on an issue for too long without submitting a pull request, it will revert back to unassigned and you will need to re-claim it. +* You can also just +[submit new Scaladoc](./scala-standard-library-api-documentation.html) +without creating an issue, but please look to see if there is an issue already submitted for your task and claim it if there is. If not, please post your intention to work on a specific scaladoc task on scala-internals so that people know what you are doing. + +### The Scala Wiki + +The [Scala wiki](https://wiki.scala-lang.org/) could be a useful resource, but tends to get out of date quickly. It is perhaps best viewed as a place for information to temporarily live while it is constructed and refined, but with an aim to putting the material into the [docs.scala-lang.org](http://docs.scala-lang.org) site eventually (see the next section). Nonetheless, it is a fast way to add some public documentation. + +The wiki is self documenting, so make sure to take a look at the [home page](https://wiki.scala-lang.org/) to get started. Please consider contributions to [docs.scala-lang.org](docs.scala-lang.org) for more enduring documentation, even though it is more work to get through the review process for the main doc site. + +### The Main Scala Documentation Site + +[docs.scala-lang.org](https://wiki.scala-lang.org/) houses the primary source of written, non-API documentation for Scala. It's a github project that you can fork and submit pull requests from. It includes: + +* Overviews +* Tutorials +* Conversion Guides from Other Languages +* Cheat Sheets +* A Glossary +* The Scala Style Guide +* The Scala Language Specification +* SIP (Scala Improvement Process) Proposals +and more + +Please read [contributing to the docs.scala-lang.org site](http://docs.scala-lang.org/contribute.html) through before embarking on changes. The site uses +the [Jekyll](http://jekyllrb.com/) markdown engine so you will need to follow the instructions to get that running as well. + +### The Scala Language Site + +Additional high-level documentation (including documentation on contributing +to Scala and related projects) is provided on the main +[Scala Language site](http://scala-lang.org), and is also kept in the +[scala-lang github project](https://github.com/scala/scala-lang) which may be forked to create pull requests. + +Please read both the +[docs.scala-lang.org contribution](http://docs.scala-lang.org/contribute.html) document and the scala-lang.org github README file before embarking on any changes to the Scala language site, as it uses the same Jekyll markdown tool and many of the same conventions as the Scala documentation site. + diff --git a/contribute/guide.md b/contribute/guide.md index 9446e6ce9c..809c6558d5 100644 --- a/contribute/guide.md +++ b/contribute/guide.md @@ -1,5 +1,5 @@ --- -layout: page-full-width +layout: page title: Contributing guide --- @@ -13,10 +13,6 @@ title: Contributing guide

    Report an issue

    File a bug report or a feature request.

    -
    -

    Documentation

    -

    Improve the documentation itself.

    -
    @@ -28,10 +24,6 @@ title: Contributing guide

    Hacker's guide

    Learn to write good code and improve your chances of contributing to the Scala galaxy.

    -
    -

    Hall of Fame

    -

    Track your rockstar status in the community.

    -