- Notifications
You must be signed in to change notification settings - Fork 91
Contributor guide
Like Scala, the scala-xml library is distributed under a modified BSD license. The copyright is held by EPFL and Lightbend.
Contributors should sign the the contributor license agreement (CLA). This is common practice in community-based free and open source software projects.
https://www.lightbend.com/contribute/cla/scala
The scala-xml project is committed to making the Scala community a welcoming and safe place for newcomers and regular contributors.
https://scala-lang.org/conduct/
This guide for contributors assumes you have some experience with Scala and the scala-xml library, but also with using sbt and git:
It doesn't hurt to also have experience with the following:
- JUnit 4 for writing unit tests,
- Scaladoc for API documentation and
- Markdown for other documentation:
These are some of the tasks of the project you can contribute to:
- Discuss scala-xml with other users on the Gitter chat channel
- Confirm or verify issues that are submitted
- Review and verify pull requests that are submitted
- Contribute documentation to the Wiki
- Improve the API documentation (see Scaladoc link above)
- Ask and answer questions on Stack Overflow:
- Good first issues for new contributors are tagged as "good first issue":
To start hacking on scala-xml, first check out the source code with git:
$ git clone -o upstream [email protected]:scala/scala-xml.git Then change to the scala-xml sub-directory:
$ cd scala-xml You don't want to commit to main, so create a new branch named BRANCHNAME
$ git checkout -b BRANCHNAME main Here are some good example branch names:
fix-escape-defectimprove-docsupgrade-scala-2.13fix-readme-typodependency-classpath-issue
After checking out a branch, you can start the sbt build tool:
$ sbt If you want to use another version of Java, not the default, you can override it with:
$ env JAVA_HOME="$(/usr/libexec/java_home -1.8)" sbt You can compile the library source code in sbt:
> compile Run the test suite:
> test And produce the API docs:
> doc To run a single test, run testOnly:
> testOnly scala.xml.XMLTest To pass arguments to the junit-interface, use testOnly
> testOnly -- -v scala.xml.XMLTest.* You can access the Scala console REPL, but it doesn't use the scala-xml source code, but instead uses the version used by the Scala compiler because of a classpath issue with sbt and the Scala compiler
> console scala> val html = """<p><a href="http://scala-lang.org/">Scala</a></p>""" html: String = <p><a href="http://scala-lang.org/">Scala</a></p> scala> val src = scala.xml.Source.fromString(html) src: org.xml.sax.InputSource = org.xml.sax.InputSource@694cc703 scala> val xml = scala.xml.XML.load(src) xml: scala.xml.Elem = <p><a href="http://scala-lang.org/">Scala</a></p> If you want to locally publish a modified version of scala-xml to your system, first edit the build.sbt file and modify the version to be something other than SNAPSHOT. For instance, consider using the current (HEAD) git short hash:
version := "1.2.0-1e8c888", // "1.2.0-SNAPSHOT", Which you can get from the git command:
$ git rev-parse --short HEAD 1e8c888 Since the scala-xml library has to compile to two target platforms, Java and Javascript, there are two sbt projects:
scala-xmlxmlxmlJS
They can be listed with the projects command in sbt:
> projects [info] In file:~/scala-xml/ [info] * scala-xml [info] xml [info] xmlJS To change the current project, use the project in sbt:
> project xmlJS [info] Set current project to scala-xml (in build file:~/scala-xml/) To show the current project, use the project command with no arguments:
> project [info] xmlJS (in build file:~/scala-xml/) Alternatively, you can run sbt commands for a project by adding the project name before the command with a slash character
> xmlJS/compile If you are in the root scala-xml project, you will be running a command for both projects:
> compile [info] Compiling Scala sources to ~/scala-xml/jvm/target/scala-2.13/classes... [info] Compiling Scala sources to ~/scala-xml/js/target/scala-2.13/classes... [success] Total time: 84 s If you have modified the project's sbt settings (build.sbt or project/plugins.sbt), you can re-read them by using the reload command:
> reload [info] Loading global plugins from ~/.sbt/0.13/plugins [info] Updating{file:~.sbt/0.13/plugins/}global-plugins... [info] Done updating. [info] Loading project definition from ~/scala-xml/project [info] Updating{file:~/scala-xml/project/}scala-xml-build... [info] Done updating. [info] Set current project to scala-xml (in build file:~/scala-xml/) If you want to see if dependency resolution and retrieval is working you can run the update command:
> update If you want to remove the compiled artifacts so everything can be rebuilt:
> clean [success] Total time: 2 s If you decide you want to contribute a patch back, feel free to hit the fork button, see https://github.com/scala/scala-xml/fork
After forking, add your downstream origin where USERNAME is your GitHub username:
$ git remote add origin [email protected]/USERNAME/scala-xml.git Then push your BRANCHNAME from above to your origin:
$ git push -u origin BRANCHNAME And then create a pull request, see https://github.com/scala/scala-xml/pull/new/main
If main gets updated and you are asked to rebase your branch against main, then do the following:
$ git checkout main $ git fetch upstream main $ git checkout BRANCHNAME $ git rebase main $ git push -f origin BRANCHNAME