Commit Graph

2151 Commits

Author SHA1 Message Date
Jason Zaugg 111cc5f473 Add scalacOptions to the SBT targets 2021-06-28 11:02:12 +10:00
Jason Zaugg af14864986 Address review feedback
- Restore old type of `bspWorkspace` key for backwards compat.
    Instead, introduce `bspFullWorkspace` that includes the
    SBT targets
  - Log a warning if the client requests, e.g. `scalaMainClasses`
    for a SBT target
  - Refactor the code that creates the SBT build targets so it
    doesn't depend on `sbtFullWorkspace`.
  - Add a setting `bspSbtEnabled` to let the user opt-opt of
    SBT target export (e.g. to compensate for a client that does
    not yet support them)
2021-06-28 11:02:12 +10:00
Jason Zaugg 45e8e2f90d Support the SBT extension in BSP import
This enables code assist in the .sbt and project/*.scala files
in IntelliJ and any other IDEs that implement this extension.
2021-06-28 11:02:09 +10:00
Adrien Piquerez 852498e992 [BSP] Remove useless log after request failure 2021-06-25 10:41:10 +02:00
Adrien Piquerez f58c8c349a [BSP] add handle for cancelled compilation 2021-06-25 10:41:08 +02:00
Adrien Piquerez f0efbf0f5d Make BSP compile fail after random exception 2021-06-25 10:40:32 +02:00
Adrien Piquerez 74ff1b0a4a Fill error message when BSP task fails 2021-06-24 17:00:22 +02:00
Samuel CLARENC c9562cb1c3
Merge branch 'develop' into bspBuildTargetResources 2021-06-21 16:52:58 +02:00
Samuel CLARENC f3ec202a06 Add resourcesProvider flag to BuildServerCapabilities in BSP contra 2021-06-21 16:51:34 +02:00
Samuel CLARENC a0e3d89855 Implement BSP buildTarget/resources command 2021-06-21 16:51:34 +02:00
Amina Adewusi 24bb4de35e
Merge branch 'develop' into remote-cache 2021-06-18 20:13:55 +01:00
Amina Adewusi f82c0c4c5f fixes remote caching not managing resource files
What is the problem?
When using remote caching, the resource files are not tracked so if they
have changed, pullRemoteCache will deliver both the old resource file
as well as the changed one.

This is a problem, because it's not the behaviour that our users will
expect and it's not in keeping with the contract of this feature.

Why is this happening?
Zinc, sbt's incremental compiler, keeps track of changes that have
been made. It keeps this in what is called the Analysis file.
However, resource files are not tracked in the Analysis file, so
remote caching is not invalidating the unchanged resource file in
place of the latest version.

What is the solution?
PullRemoteCache deletes all of the resources files. After this,
copyResources is called by PackageBin, which puts the latest
version of the resources back.
2021-06-18 20:10:07 +01:00
eugene yokota a9402a61ae
Merge pull request #6538 from adpi2/fix-mkScalaInstance
Fix compiler class loader jars
2021-06-12 01:00:22 -04:00
Adrien Piquerez 75a55a10df fix compiler class loader jars 2021-06-11 10:41:40 +02:00
Adrien Piquerez cbc1c87974 Disconnect BSP server when build/exit 2021-06-09 18:01:09 +02:00
eugene yokota f2f884436b
Merge pull request #6499 from pikinier20/scaladoc-scalac-options
Add missing scalac options to scaladoc task configuration
2021-05-30 22:06:32 -04:00
Ethan Atkins 7dbf7978e9 Disable multiple main class warning w/ qualified key
If the user runs foo/runMain in a project with multiple main classes,
sbt will still warn the user about their being multiple main classes
even though this is a pointless warning since the user either is running
runMain which requires a main class. The run task is also excluded since
by default it prompts the user with a main class selector. The previous
logic for doing this filtering was bad because it only looked at the
first command in a sequence and couldn't handle the foo/runMain case
since it was looking for an exact match with `run` or `runMain`. This
commit relaxes those restrictions to look at all of the strings in the
command as well as splitting the string to check if the last part of the
key ends in run or runMain. This logic could theoretically be incorrect
if the user wrote an input task that was expecting run or runMain as
user input but even in that case the only consequence would be that they
wouldn't see the multiple main class warning which generally isn't all
the helpful unless you are packaging a jar that expects there to be only
one main class. It seems unlikely that that the user would be running a
custom input task that is both packaging a jar and expecting run or
runMain as input strings.
2021-05-30 14:48:05 -07:00
Matthias Kurz ee460e0043
Upgrade semanticdb to newest version which supports Scala 2.12.14 2021-05-28 21:44:10 +02:00
Matthias Kurz fbfc272171
Scala 2.12.14 / 2.13.6 2021-05-28 18:13:28 +02:00
Filip Zybała 236f419f88 Add condition preventing errors on 3.0.0. Add scripted test for running doc on Scala.js project 2021-05-27 14:56:47 +02:00
eugene yokota 1ae2d9d59c
Merge pull request #6517 from Nirvikalpa108/fix-nowarn
Fix @nowarn annotation in old sbt plugin style
2021-05-21 13:58:16 -04:00
Amina Adewusi 2e6fb3f2a5 Fix nowarn in both old & new sbt plugin styles
Fixes #6430.

What is the problem?
As detailed in #6430, the @nowarn annotation was not suppressing
warnings, even after the first attempt to fix this in PR#6431.

This first PR fixed the problem for projects using
enablePlugins(SbtPlugin), but not for those using sbtPlugin := true.

Why is this a valuable problem to solve?
The annotation was not working as users would expect.

What is this solution?
I have moved the scalacOptions change from SbtPlugin.projectSettings
to the scalacOptions in the JvmPlugin settings.

Has this been tested?
Yes, a test has been added. Also, this branch was tested successfully
on the twinagle repo (https://github.com/soundcloud/twinagle/pull/224).
2021-05-21 18:11:24 +01:00
Brice Jaglin 622eabfa95 dedup unmanagedSourceDirectories for Scala 3
For Scala 3, scalaBinaryVersion == epochVersion
2021-05-15 22:14:51 +02:00
Adrien Piquerez ce59ea754a expose makeScalaInstance 2021-05-10 11:32:33 +02:00
Eugene Yokota 25148899a1 Skip zip file manipulation if the package is empty
Fixes https://github.com/sbt/sbt/issues/6497
2021-05-09 18:55:04 -04:00
eugene yokota e1766d9a3d
Merge pull request #6500 from Nirvikalpa108/correct-client-arg
make -client the same as --client
2021-05-07 14:48:37 -04:00
Amina Adewusi f12b0baef0 make -client the same as --client
The problem was that -client was different from --client, which
makes for a confusing user experience. So, this change makes
them the same and re-names -client to --java-client. The value
of this is that hopefully -client and --client being the same
feels more logical to users.
2021-05-07 16:07:42 +01:00
Filip Zybała fcab06bd3d Add missing scalac options to scaladoc task configuration 2021-05-07 11:58:18 +02:00
Adrien Piquerez a07bd46cdb Add util-interface to SbtInterfaceLoader 2021-05-03 11:18:12 +02:00
eugene yokota 9b6d4b5390
Merge pull request #6488 from eed3si9n/wip/new
Fix new command leaving behind target, take 2
2021-05-02 21:52:44 -04:00
Eugene Yokota 1c8b55107d Fix new command leaving behind target, take 2
Fixes #2835

Somehow the fix in #4033 due to various initialization.
Here's a bit more aggressive rebasing of the base directory
that should fix the `project` and `target` directory created during sbt
new.
2021-05-02 20:48:10 -04:00
Adrien Piquerez ded074ac75 Expose Defaults.makeScalaInstance 2021-05-01 20:29:42 +02:00
Jason Pickens 223ab2b310
Remove configuration scope from runner settings 2021-04-20 15:35:06 +12:00
Guillaume Galy 8849bfbcd5 Retain classifiers for transitive dependencies when publishing to Ivy 2021-04-19 15:24:45 +02:00
kenji yoshida 61f4ed1017
fix typo 2021-04-16 15:48:53 +09:00
Philippus Baalman 4bf7f3a877
Fix typo 2021-04-12 21:02:14 +02:00
eugene yokota 627f72ef87
Merge pull request #6425 from ashleymercer/issues/2853-junit-config
Allow output directory for JUnitXmlTestsListener to be configured
2021-04-12 10:15:56 -04:00
Ashley Mercer b37fc6d5be Allow JUnitXmlTestsListener output directory to be configured
Add `testReportsDirectory` setting to allow output directory for
JUnitXmlTestsListener to be configured.

Add `testReportSettings` which provides defaults values:

- by default this uses the build configuration name as a prefix so
  `target/test-reports` for `Test` config, but `target/it-reports`
  for `IntegrationTest` (previously this was hardcoded to always
  use `target/test-reports`). To override this set e.g.

  `Test / testReportsDirectory := target.value / "my-custom-dir"`

- the `JunitXmlTestsListener` is now only attached to the `Test`
  and `IntegrationTest` configs by default (previously it was added
  to the global configuration object). Any configs which inherit
  from one of these will continue to have the listener attached;
  but completely custom configurations will need to re-add with:

  `project.settings(testReportSettings)`

Fixes #2853
2021-04-12 12:17:50 +01:00
Adrien Piquerez 7ac35d11d9 Fix MetaBuildLoader 2021-04-07 17:11:38 +02:00
Adrien Piquerez 56746d5792 Fix unused nowarn in sbt plugins 2021-04-06 15:45:52 +02:00
Adrien Piquerez b0ee80e34e Use full Scala 3 version in crossTarget 2021-04-01 10:23:38 +02:00
Guillaume Martres 24dba24b2a Fix Scala 2.13-3.0 sandwich on Scala >= 3.0.0
The binary version of Scala >= 3.0.0 will be 3, but the logic was
hardcoded for 3.0.
2021-03-31 13:54:40 +02:00
Eugene Yokota 2a3a0f5594 Fixes clean not cleaning files added to cleanFiles
Fixes #6395

The current code assumes cleanFiles are only directories. This fixes that.
2021-03-29 00:23:50 -04:00
eugene yokota 1cb23c843b
Merge pull request #6417 from mkurz/fix_warn
Add missing versionScheme to warning
2021-03-28 16:43:07 -04:00
Josef Vlach 0c7bc71403
Instantiate only test runners needed by current TestDefinitions 2021-03-28 20:58:18 +01:00
Matthias Kurz dc2865d407
Add missing versionScheme to warning 2021-03-28 21:31:48 +02:00
Adrien Piquerez 54c27d575b Fix internal dependency configurations 2021-03-23 15:58:23 +01:00
Eugene Yokota 01e3d9e9d8 Use LOCALAPPDATA or $HOME/AppData/Local on Windows
Fixes https://github.com/sbt/sbt/issues/5206

Problem
--------
Coursier uses directories-jvm to determine its default cache directory.
Currently directories-jvm shells out to Powershell to call the [Known Folders API](https://docs.microsoft.com/en-us/windows/win32/shell/knownfolderid), which doesn't work in various environments, and instead of an error, it apparently returns `null/Coursier/cache` as the directory name.

Solution
--------
With due respect to the heroic effort directories-jvm is making to comply to the directory standards on all operating systems, including that of Microsoft, I don't think the majority of the sbt users care exactly where that directory is as long as it is well-documented, and calculated in a fast and predictable way.

Instead of shelling out to Powershell, or using JNI, to hit the Known Folders API, I propose we first look at `LOCALAPPDATA` environment variable. When it is not found, it will fall back to `$HOME/AppData/Local`. Per discussion in https://github.com/dirs-dev/directories-jvm/issues/43, `LOCALAPPDATA` environment variable may NOT represent the one-true Known Folders API value of the AppData directory in case the user happened to have set the `LOCALAPPDATA` environmental variable. For the purpose of picking a directory for Coursier cache, I don't find that to be a problem because it will be faster, more reliable, and predictable.
2021-03-21 20:50:03 -04:00
eugene yokota b8691cba88
Merge pull request #6397 from arixmkii/bsp-env-var
Environment variables support in BSP debug session
2021-03-19 11:45:01 -04:00
Arthur Sengileyev 75a5135417 Adding env vars at ScalaMainClass creation time 2021-03-18 23:13:03 +02:00
Adrien Piquerez 332b53735e Silence unused-nowarn in meta-build 2021-03-18 18:27:26 +01:00
Arthur Sengileyev 970ce22aca Environment variables support in BSP debug session 2021-03-15 13:41:50 +02:00
eugene yokota 3d784b9217
Merge pull request #6378 from adpi2/bsp-logging
Improve BSP processing logs
2021-03-09 09:46:31 -05:00
Adrien Piquerez 93afa7e892 Improve BSP processing logs
The processing log is sent when a command issued by a request is being
processed, if the request has not yet been responded. In particular,
the processing log of sbtReportResult is filtered out if the client has
already received a response.

The processing log severity is the lowest so that it can be ignored by
the BSP client.
2021-03-09 10:18:12 +01:00
Ethan Atkins 7dc5590190 Don't use deprecated `in` inside of macros
The inputFileChanges, inputFiles and outputFiles macros all used the now
deprecated `in` syntax, which causes warnings for builds that use these
apis. SlashSyntax doesn't naively work in these macros so it was easier
to just reimplement the logic in this file.

Fixes #6330
2021-03-08 10:54:01 -08:00
Matthias Kurz 6fbed26d22 Make sure to also pass absolute sourceFile to sourceMappers 2021-03-07 14:44:42 -05:00
eugene yokota ff6cbf2e1f
Merge pull request #6351 from steinybot/scripted-publish-deps
Publish all plugin dependencies
2021-03-04 23:35:59 -05:00
Ondra Pelech 81457e60ec
Give an explanation in case of ServerAlreadyBootingException (#6353)
Give and explanation in case of ServerAlreadyBootingException
2021-03-04 23:21:42 -05:00
eugene yokota 5f24664c0d
Merge pull request #6355 from marcospereira/updates/semanticdb-4.4.10
Update semanticdb to version 4.4.10
2021-03-04 20:17:06 -05:00
Marcos Pereira c9941aeabc
Update semanticdb to version 4.4.10 2021-03-04 16:38:00 -05:00
Matthias Kurz de313bbdde
Never set a default for sourcePositionMappers 2021-03-04 22:30:35 +01:00
Jason Pickens 6e0da94d91
Publish all plugin dependencies 2021-03-04 12:09:12 +13:00
eugene yokota 0972b7fa17
Merge pull request #6336 from adpi2/fix-tasty-test
Fix TastyFiles added twice in Test
2021-02-24 13:28:51 -05:00
eugene yokota c5eda8c7ce
Merge pull request #6332 from adpi2/fix-scala3-doc
Fix scaladoc resolution without JCenter
2021-02-24 11:25:20 -05:00
Adrien Piquerez c1e7b9c3f8 Fix TastyFiles added twice in Test 2021-02-24 15:58:31 +01:00
Julien Richard-Foy fad8e8c3c9 Add MUnit test framework 2021-02-24 10:42:30 +01:00
Adrien Piquerez ff12c87367 fix scaladoc resolution without JCenter 2021-02-23 16:24:49 +01:00
eugene yokota ab2b396543
Merge pull request #6329 from eed3si9n/fport/6326
[fport] synchronize access to stamps in testQuickFilter
2021-02-22 00:42:50 -05:00
Rafał Sumisławski d3080ee3f0 synchronise access to stamps in testQuickFilter 2021-02-22 00:15:51 -05:00
Eugene Yokota 695261a068 Migrate most of the internal usage of in 2021-02-22 00:09:36 -05:00
Eugene Yokota 6c18a37d3f integrate assumedVersionScheme and assumedEvictionErrorLevel
Fixes https://github.com/sbt/sbt/issues/6301
Fixes https://github.com/sbt/sbt/issues/6302

```scala
ThisBuild / assumedVersionScheme := VersionScheme.PVP
ThisBuild / assumedVersionSchemeJava := VersionScheme.EarlySemVer
ThisBuild / assumedEvictionErrorLevel := Level.Warn
```
2021-02-21 19:17:34 -05:00
Adrien Piquerez 9a2b0f5f06 Move sbtDependency in pluginCrossBuild to JvmPlugin 2021-02-20 13:22:30 +01:00
Adrien Piquerez be1e756104 Upgrade semanticdb default version 2021-02-20 11:36:58 +01:00
Eugene Yokota 5495524e60 Fix "-Yrangepos" disappearing from Test / scalacOptions
Fixes https://github.com/sbt/sbt/issues/5934

In #5886 adpi2 reported that Test / scalacOptions could have unwanted duplicated flags from Compile / scalacOptions. So #5887 added

```diff
+    // remove duplicated semanticdbOptions
+    scalacOptions --= (Compile / semanticdbOptions).value
```

Notice that it's subtracting (Compile / semanticdbOptions).value regardless of the semanticdbEnabled value. If semanticdbEnabled is set to true I am guessing that it would all work out, but when it's false, it's just subtracting "-Yrangepos".

This fixes that by checking for semanticdbEnabled.
2021-02-17 00:45:41 -05:00
eugene yokota 6c6df88d1e
Merge pull request #6309 from eed3si9n/wip/deprecate_old_shell_syntax
Deprecate old shell syntax
2021-02-16 10:08:13 -05:00
Eugene Yokota 9cde1dfcaa Warn on missing versionScheme
Fixes https://github.com/sbt/sbt/issues/6303

This will print warning on publishing when versionScheme is not set.

```
[warn] versionScheme setting is empty; set `ThisBuild / versionScheme := Some("early-semver")` or `Some("pvp")`
[warn] so tooling can use it for evction errors etc - https://www.scala-sbt.org/1.x/docs/Publishing.html
```
2021-02-15 16:53:57 -05:00
Eugene Yokota 2305abd81e Deprecate old shell syntax
Unified slash syntax was added in sbt 1.1.x (https://github.com/sbt/sbt/pull/3434).
This deprecates the older shell syntax: `proj/cofing:intask::key`.

### Example

```
sbt:hello> it:compile
[warn] sbt 0.13 shell syntax is deprecated use slash syntax instead: IntegrationTest / compile
[info] compiling 1 Scala source to /private/tmp/hello/target/scala-2.13/classes ...

sbt:hello> compile:console::scalacOptions
[warn] sbt 0.13 shell syntax is deprecated use slash syntax instead: Compile / console / scalacOptions
```
2021-02-15 13:40:47 -05:00
eugene yokota da4e1d3711
Merge pull request #6296 from bjaglin/semanticdb-confs
better support of custom configurations in SemanticdbPlugin
2021-02-15 12:12:48 -05:00
Eugene Yokota a25d9e7114 dependency-graph fixes 2021-02-06 22:58:12 -05:00
Eugene Yokota 587d821828 Override filter method on the FilteringReporter 2021-02-06 22:32:14 -05:00
Eugene Yokota 22d12f6618 Use nowarn annotation 2021-02-06 22:31:47 -05:00
Brice Jaglin 145966e3f3 better support of custom configurations in SemanticdbPlugin
Second take at https://github.com/sbt/sbt/issues/5886, which fixed the
problem for Test specifically but not for custom configurations.

* Any child of Compile (like Custom in the scripted) had to use
  testSettings, whether they were related to testing or not
* Custom configurations with grand parents (like SystemTest in the
  scripted) would get duplicated scalacOptions no matter what they used
2021-02-06 23:52:55 +01:00
Eugene Yokota 5ebb3da150 Override warning + error method
Scala compiler changed the implementation of reporter in 2.12.13 such that overriding `info0` no longer increments the error count in the delegating reporter.
See https://github.com/scala/bug/issues/12317 for details.
2021-02-01 01:20:20 -05:00
Eugene Yokota 61a077e3a6 Scala 2.12.13 2021-01-31 12:59:31 -05:00
Eugene Yokota 1275051974 Deprecate externalPom
Ref #5493
2021-01-24 23:36:02 -05:00
eugene yokota 83012a9644
Merge pull request #6237 from eed3si9n/wip/package
packageTimestamp setting
2021-01-24 23:24:09 -05:00
Eugene Yokota 628d908a5c packageTimestamp setting
Fixes https://github.com/sbt/sbt/issues/6235

In sbt 1.4.0 (https://github.com/sbt/sbt/pull/5344) we started wiping out the timestamps in JAR
to make the builds more repeatable.
This had an unintended consequence of breaking Play's last-modified response header (https://github.com/playframework/playframework/issues/10572).

This adds a global setting called `packageTimestamp`, which is
initialized as follows:

```scala
packageTimestamp :== Package.defaultTimestamp,
```

Here the `Package.defaultTimestamp` would pick either the value from the
`SOURCE_DATE_EPOCH` environment variable or 2010-01-01.

To opt out of this default, the user can use:

```scala
ThisBuild / packageTimestamp := Package.keepTimestamps

// or

ThisBuild / packageTimestamp := Package.gitCommitDateTimestamp
```

Before (sbt 1.4.6)
------------------

```
$ ll example
total 32
-rw-r--r--  1 eed3si9n  wheel   901 Jan  1  1970 Greeting.class
-rw-r--r--  1 eed3si9n  wheel  3079 Jan  1  1970 Hello$.class
-rw-r--r--  1 eed3si9n  wheel   738 Jan  1  1970 Hello$delayedInit$body.class
-rw-r--r--  1 eed3si9n  wheel   875 Jan  1  1970 Hello.class
```

After (using Package.gitCommitDateTimestamp)
--------------------------------------------

```
$ unzip -v target/scala-2.13/root_2.13-0.1.0-SNAPSHOT.jar
Archive:  target/scala-2.13/root_2.13-0.1.0-SNAPSHOT.jar
 Length   Method    Size  Cmpr    Date    Time   CRC-32   Name
--------  ------  ------- ---- ---------- ----- --------  ----
     288  Defl:N      136  53% 01-25-2021 03:09 888682a9  META-INF/MANIFEST.MF
       0  Stored        0   0% 01-25-2021 03:09 00000000  example/
     901  Defl:N      601  33% 01-25-2021 03:09 3543f377  example/Greeting.class
    3079  Defl:N     1279  59% 01-25-2021 03:09 848b4386  example/Hello$.class
     738  Defl:N      464  37% 01-25-2021 03:09 571f4288  example/Hello$delayedInit$body.class
     875  Defl:N      594  32% 01-25-2021 03:09 ad295259  example/Hello.class
--------          -------  ---                            -------
    5881             3074  48%                            6 files
```
2021-01-24 22:14:31 -05:00
eugene yokota feaea5d943
Merge pull request #6265 from adpi2/scala3-doc
[1.5.0-M1] Improve error report for scala3doc missing
2021-01-24 21:36:26 -05:00
eugene yokota 43409fcc6f
Update main/src/main/scala/sbt/Defaults.scala 2021-01-24 18:02:50 -05:00
Eugene Yokota c5d65fe3c7 Cache configuration parser 2021-01-23 22:27:25 -05:00
Eugene Yokota 5deb1f5994 Fix configuration identifier completion
Fixes https://github.com/sbt/sbt/issues/6282
2021-01-23 22:15:06 -05:00
Marko Elezovic 79645dfee7 Fix ExitCode calc on StashOnFailure
Previous sbt.Exec != String match would never fail
2021-01-19 11:37:00 +01:00
Adrien Piquerez 67689e0bbd Improve error report for scala3doc missing 2021-01-18 20:20:03 +01:00
Eugene Yokota 98450fe743 Add half-failing tests for completions 2021-01-16 03:48:57 -05:00
Eugene Yokota 1c6a5d21bb Port mutable.Specification to verify.BasicTestSuite 2021-01-16 00:47:53 -05:00
Naoki Takezoe 5ce3a174e8 Reset ZipEntry timestamps to 2010-01-01 in order to prevent negative value 2021-01-14 08:32:50 +09:00
Adrien Piquerez fdcfe87dbf
Merge branch 'develop' into client-launch-jar 2021-01-11 13:20:49 +01:00
Eugene Yokota 8f5759e48d Cross build to Scala 2.13 2021-01-10 20:24:05 -05:00
Eugene Yokota f8c158291d Work around Scala parallel collections situation
Ref https://github.com/scala/scala-parallel-collections/issues/22

Parallel collection got split off without source-compatible library, so apparently we need to roll our own compat hack, which causes import not used, so it needs to be paired with silencer.
2021-01-10 18:02:18 -05:00
Eugene Yokota ab402543d3 Replace the unicode arrows 2021-01-10 14:20:43 -05:00