Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
155 commits
Select commit Hold shift + click to select a range
f4710e3
Versioning for 17.14 and 9.0.300 (#18222)
vzarytovskii Jan 9, 2025
a4aacd7
Merge branch 'release/dev17.14' into merges/main-to-release/dev17.14
psfinaki Jan 20, 2025
3981d81
Merge pull request #18244 from dotnet/merges/main-to-release/dev17.14
psfinaki Jan 20, 2025
f759d6d
Merge pull request #18249 from dotnet/merges/main-to-release/dev17.14
psfinaki Jan 20, 2025
60e8032
Merge branch 'release/dev17.14' into merges/main-to-release/dev17.14
vzarytovskii Jan 20, 2025
4c4ddfd
Merge pull request #18251 from dotnet/merges/main-to-release/dev17.14
0101 Jan 21, 2025
7abe97c
Merge pull request #18258 from dotnet/merges/main-to-release/dev17.14
psfinaki Jan 22, 2025
54dcdf1
Merge branch 'release/dev17.14' into merges/main-to-release/dev17.14
KevinRansom Jan 23, 2025
2722fa8
Merge branch 'release/dev17.14' into merge/main-to-release/dev17.14
T-Gro Jan 28, 2025
387f04c
Merge pull request #18264 from dotnet/merges/main-to-release/dev17.14
0101 Jan 29, 2025
d8d06ed
Merge branch 'release/dev17.14' into merge/main-to-release/dev17.14
ViktorHofer Feb 18, 2025
41926ec
Merge pull request #18272 from dotnet/merge/main-to-release/dev17.14
T-Gro Feb 18, 2025
f7ee577
Merge branch 'release/dev17.14' into merge/main-to-release/dev17.14
T-Gro Feb 21, 2025
e4889bb
Merge pull request #18332 from dotnet/merge/main-to-release/dev17.14
T-Gro Feb 24, 2025
25edc45
Merge branch 'release/dev17.14' into merge/main-to-release/dev17.14
T-Gro Feb 25, 2025
372d464
Update MSBuild (#18347)
psfinaki Mar 4, 2025
70171b7
Update xcopy-msbuild to latest available version (#18351)
benhopkinstech Mar 5, 2025
82119a0
Fix nullness RFC link in issue template (#18369)
MangelMaxime Mar 8, 2025
55067b1
Format TypedTreePickle (#18356)
psfinaki Mar 10, 2025
b99cd60
Fix for missing parse diagnostics in TransparentCompiler.ParseAndChec…
Martin521 Mar 10, 2025
7cb2cea
Bugfix for Array.insertManyAt returns original array for empty insert…
muqiuhan Mar 10, 2025
e4950e6
add extraArgs in the end so they override the defaults (#18360)
Martin521 Mar 10, 2025
a9003e8
More misc parens fixes (#18350)
brianrourkeboll Mar 10, 2025
345742d
Merge pull request #18339 from dotnet/merge/main-to-release/dev17.14
T-Gro Mar 10, 2025
88f8041
Bugfix :: Fix 'Type inference problem too complicated' for SRTP with …
T-Gro Mar 11, 2025
1b5e389
Remove verbose syntax in pickling code (#18372)
psfinaki Mar 12, 2025
76b83e6
Reference assembly loading fixes: 1) don't try to load assemblies alr…
Thorium Mar 12, 2025
d21aa8a
cherrypick 18355 (#18367)
KevinRansom Mar 13, 2025
52843f7
Revive E2E tests, rescue CI (#18384)
psfinaki Mar 17, 2025
a58a47e
Fix delegate with option parameter (#18385)
ijklam Mar 17, 2025
d382d4a
Update dependencies from https://github.com/dotnet/source-build-refer…
dotnet-maestro[bot] Mar 17, 2025
d43a46b
Fix duplicate parse errors for GetBackgroundCheckResultsForFileInProj…
Martin521 Mar 17, 2025
4dc458c
[main] Update dependencies from dotnet/msbuild (#18363)
dotnet-maestro[bot] Mar 17, 2025
977c757
xUnit tests - improve assembly fixture (#18381)
majocha Mar 17, 2025
5dd0699
[main] Update dependencies from dotnet/arcade (#18378)
dotnet-maestro[bot] Mar 17, 2025
27aa9be
Adjust caller info attribute error message range (#18388)
ijklam Mar 17, 2025
f007405
More improve completion after method/property override (#18341)
ijklam Mar 17, 2025
3259edf
Update dependencies from https://github.com/dotnet/msbuild build 2025…
dotnet-maestro[bot] Mar 20, 2025
4e1fd37
more code flow
KevinRansom Mar 24, 2025
e92bb80
Update fantomas to 7.0.1 (#18400)
KevinRansom Mar 24, 2025
734e8a5
Investigate.nuget (#18393)
KevinRansom Mar 24, 2025
f8a550b
Update dependencies from https://github.com/dotnet/source-build-refer…
dotnet-maestro[bot] Mar 25, 2025
8359ec6
Fantomas (#18404)
KevinRansom Mar 25, 2025
561a5eb
Fix false negative [<TailCall>] warning (#18399)
dawedawe Mar 25, 2025
a305ccd
Update dependencies from https://github.com/dotnet/msbuild build 2025…
dotnet-maestro[bot] Mar 25, 2025
31fdf7b
Fix GC test that is flaky on Linux (#18408)
majocha Mar 25, 2025
c549ebf
update runtime to 9.0.3 (#18406)
majocha Mar 25, 2025
127fd83
Merge pull request #18376 from dotnet/merge/main-to-release/dev17.14
T-Gro Mar 25, 2025
fc6c4c9
Use correct TFM for source build when OfficialBuildId isn't set (#18397)
mthalman Mar 25, 2025
d4a9f13
Update dependencies coming from maintenance-packages (#18329)
carlossanlop Mar 25, 2025
3b56f75
[automated] Merge branch 'main' => 'release/dev17.14' (#18410)
T-Gro Mar 26, 2025
2408d66
update devcontainer sdk (#18412)
Martin521 Mar 26, 2025
f4b677e
deal with hanging test (#18411)
majocha Mar 26, 2025
e37ef75
typo (#18413)
KevinRansom Mar 26, 2025
46011b9
[automated] Merge branch 'main' => 'release/dev17.14' (#18415)
T-Gro Mar 26, 2025
55d736b
Remove a bunch of files from fantomas ignore (#18407)
T-Gro Mar 27, 2025
a3181c4
Fix `fcs.fs` link (#18419)
MangelMaxime Mar 27, 2025
af2ebfa
Re-enable unused bindings detection (#18420)
T-Gro Mar 27, 2025
e165bbe
Merge pull request #18418 from dotnet/merge/main-to-release/dev17.14
T-Gro Mar 31, 2025
c01bc47
Use a more accurate range for CE Combine methods (#18394)
edgarfgp Mar 31, 2025
1595946
Make unused bindings an error (#18421)
T-Gro Mar 31, 2025
dc01094
Reenable β-reduction of immediately-invoked F#-defined generic delega…
brianrourkeboll Mar 31, 2025
fdf1bdd
Create resourceManagement.yml
T-Gro Apr 1, 2025
d43577c
Fix PM (#18435)
KevinRansom Apr 2, 2025
b1490e3
Fix for #18433 (internal error during xml comment processing) (#18436)
Martin521 Apr 3, 2025
0566db0
Fix a small mistake in String.init's docs (#18438)
bbatsov Apr 3, 2025
2598fb1
Fix a bunch of typos (#18439)
bbatsov Apr 3, 2025
2a4146e
Update maintenance-packages versions (#18446)
carlossanlop Apr 7, 2025
4231126
Update dependencies from https://github.com/dotnet/source-build-refer…
dotnet-maestro[bot] Apr 7, 2025
4ba36db
Update dependencies from https://github.com/dotnet/arcade build 20250…
dotnet-maestro[bot] Apr 7, 2025
38aab8f
Update service-branch-merge.json
KevinRansom Apr 7, 2025
71691a7
Fix a copypaste checking bug in unpickling (#18430)
psfinaki Apr 8, 2025
0f9d6ea
Tooltips: fix `null` annotation highlighting (#18457)
auduchinok Apr 8, 2025
ec24379
Update dependencies from https://github.com/dotnet/arcade build 20250…
dotnet-maestro[bot] Apr 9, 2025
b847758
Update dependencies from https://github.com/dotnet/msbuild build 2025…
dotnet-maestro[bot] Apr 9, 2025
54c4b66
Make [<CallerMemberName; Struct>] combination work (#18444)
T-Gro Apr 9, 2025
be2cd93
Type checker: don't suppress errors while checking expressions (#18311)
auduchinok Apr 9, 2025
9c8efd2
Update dependencies from https://github.com/dotnet/msbuild build 2025…
dotnet-maestro[bot] Apr 10, 2025
c04f5ad
Tests: add helper `Stress` attribute for stress testing (#18452)
majocha Apr 10, 2025
b0956fe
Update dependencies from https://github.com/dotnet/source-build-refer…
dotnet-maestro[bot] Apr 10, 2025
b567966
Minor diag fixes in TypedTreePickle (#18469)
psfinaki Apr 10, 2025
54321fe
Fix resumable and non-resumable CE error ranges (#18450)
edgarfgp Apr 14, 2025
85ea990
Consolidated two `SynExpr.LetOrUseBang` patterns with `isUse = true`…
edgarfgp Apr 16, 2025
69be2cd
`and!` support in TaskBulder (#18451)
Lanayx Apr 17, 2025
a136b33
Update package Category (#18479)
mmitche Apr 23, 2025
61d7213
Update dependencies from https://github.com/dotnet/source-build-refer…
dotnet-maestro[bot] Apr 24, 2025
394083c
Fix overbuilding fsharp & define solution to build in script for VMR …
ViktorHofer Apr 24, 2025
dbf4c92
Create copilot-instructions.md (#18490)
T-Gro Apr 24, 2025
f487d45
Standardize project settings to opt-out from 'unused bindings' detect…
T-Gro Apr 24, 2025
eb00cdb
Fix PM
KevinRansom Apr 2, 2025
007c2b5
Merge branch 'main' into UpdateNuget_14.0
KevinRansom Apr 24, 2025
5065f5b
Merge pull request #18502 from KevinRansom/UpdateNuget_14.0
KevinRansom Apr 24, 2025
fa803ee
Update dependencies from https://github.com/dotnet/msbuild build 2025…
dotnet-maestro[bot] Apr 25, 2025
9b4a7ce
Consolidate `SynExpr.LetOrUseBang(isUse=false)` (#18482)
edgarfgp Apr 25, 2025
264a54e
Update dependencies from https://github.com/dotnet/arcade build 20250…
dotnet-maestro[bot] Apr 28, 2025
9995898
Allow `_` in `use!` bindings values (#18487)
edgarfgp Apr 28, 2025
54fb3da
Checker: don't capture environment for checked modules (#18519)
auduchinok Apr 30, 2025
cf6b53e
reuse fsi sessions in tests (#18527)
majocha Apr 30, 2025
34dbfc1
Code completion: fix getting qualifier expression in `do` statements …
auduchinok Apr 30, 2025
05500b8
Enable TypeSubsumptionCache for IDE use (#18499)
majocha May 1, 2025
172dc31
include accessibility range in `SynPat.Named` (#18526)
edgarfgp May 2, 2025
abffd37
Fix mixed emit-multi+/- sessions (#18465)
KevinRansom May 5, 2025
63dd8ca
[main] Update dependencies from dotnet/arcade (#18535)
dotnet-maestro[bot] May 6, 2025
aa4550e
Update VisualFSharp.Core.targets (#18536)
AlexDelepine May 7, 2025
5a239f6
Update dependencies from https://github.com/dotnet/arcade build 20250…
dotnet-maestro[bot] May 7, 2025
f78ce10
Keep parens around records in interpolated strings (#18534)
brianrourkeboll May 12, 2025
c4ed80c
Clean up Conformance UnitsOfMeasure (#18537)
KevinRansom May 13, 2025
66e1637
Scoped nowarn (#18049)
Martin521 May 14, 2025
230df0c
Make attribute target mismatch a warning and not an error. (#18492)
edgarfgp May 14, 2025
9e74c0e
Fix race in cache eviction (#18528)
majocha May 14, 2025
29bcaf1
Cancellable: always catch internal cancellations (#18531)
majocha May 14, 2025
c77db37
VS Insertion pipeline update - main (#18548)
T-Gro May 15, 2025
1a76355
[main] Update dependencies from dotnet/arcade (#18559)
dotnet-maestro[bot] May 16, 2025
5db953f
Update automerge config (#18552)
T-Gro May 16, 2025
8b7bf60
Allow `let!` and `use!` binding with type annotation without parenthe…
edgarfgp May 16, 2025
a82b23d
Shorthand lambda: fix completion for chained calls (#18560)
DedSec256 May 19, 2025
2e40a23
Update dependencies from https://github.com/dotnet/arcade build 20250…
dotnet-maestro[bot] May 19, 2025
102c517
Fix find all references for F# exceptions (#18565)
majocha May 19, 2025
2188ac9
GH workflow - use ubuntu latest for cleaning up old runs (#18573)
T-Gro May 19, 2025
ff1ca8a
Versions props - main (#18550)
T-Gro May 19, 2025
0c94261
Use .NET10p3 SDK (#18471)
vzarytovskii May 20, 2025
195e723
Add GitHub action to update ILVerify baselines via PR comments (#18578)
Copilot May 20, 2025
087ffa2
Added support for empty case in random collections (#18568)
Lanayx May 20, 2025
7aa39f3
Multi agent parallel testing in CI (#18523)
majocha May 22, 2025
c63e1ee
Update dependencies from https://github.com/dotnet/arcade build 20250…
dotnet-maestro[bot] May 22, 2025
d67ac13
Allow `return|return!` `yield|yield!` and type annotations without pa…
edgarfgp May 22, 2025
8e3bb47
Minor perf opt: (#18541)
Thorium May 22, 2025
ce2d456
add contrib.rocks to README.md (#18564)
dawedawe May 22, 2025
fb50b56
Use struct tuple instead of reference tuple for pair ordering (#18513)
brianrourkeboll May 22, 2025
10c07b3
Fix parsing errors using anonymous records and units of measures (#18…
edgarfgp May 22, 2025
13db6d3
Create copilot-setup-steps.yml (#18590)
T-Gro May 22, 2025
755e967
Run fantomas without `-r` in GH action (#18595)
T-Gro May 22, 2025
9720080
Update copilot-setup-steps.yml
T-Gro May 22, 2025
24208f0
Fix access checking for properies setters in attribute arguments (#18…
evgTSV May 22, 2025
2b0e6cd
Update dependencies from https://github.com/dotnet/msbuild build 2025…
dotnet-maestro[bot] May 23, 2025
cad478b
Update CODEOWNERS - keep fsharp-team-msft (#18600)
T-Gro May 26, 2025
d18720c
Fix misleading XML documentation for pairwise functions (#18587)
Copilot May 26, 2025
644dc23
remove deoptimizations to see if things still work (#18606)
majocha May 26, 2025
4bf3bca
Update commands.yml (#18608)
T-Gro May 26, 2025
ceb0350
fix release notes regarding #18049 (#18611)
Martin521 May 28, 2025
13fbacd
Update System+Roslyn+VS versions (#18616)
T-Gro May 28, 2025
4853ba3
Update dependencies from https://dev.azure.com/dnceng/internal/_git/d…
dotnet-maestro[bot] May 28, 2025
8a363c4
Range of SynExprRecordField should include the expression (#18617)
edgarfgp May 28, 2025
2854dfb
remove XunitSetup linked file that does nothing (#18605)
majocha May 28, 2025
a1a156d
Fix parsing errors using anonymous records and code quotations (#18603)
edgarfgp May 28, 2025
261cfda
Address CI not always logging test results (#18598)
majocha May 28, 2025
449432c
WriteCodeFragment should support IsLiteral suffix for parity with MSB…
Copilot May 28, 2025
ec503f9
Checker: report environment before checking namespace (#18609)
auduchinok May 28, 2025
ae7ee86
opt-in warning attribute not valid for union case with fields (#18532)
edgarfgp May 28, 2025
f853482
[main] Update dependencies from dotnet/msbuild (#18612)
dotnet-maestro[bot] May 29, 2025
c80ecab
Update commands.yml (#18630)
T-Gro May 29, 2025
942de60
Update copilot-instructions.md (#18622)
T-Gro May 29, 2025
567e53f
More `string` optimizations (#18546)
brianrourkeboll May 29, 2025
58696a6
Update copilot-instructions.md - include norestore (#18632)
T-Gro May 29, 2025
d0196df
[main] Update dependencies from dotnet/arcade (#18614)
dotnet-maestro[bot] May 29, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
2 changes: 1 addition & 1 deletion .config/dotnet-tools.json
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,7 @@
"rollForward": true
},
"fantomas": {
"version": "6.2.3",
"version": "7.0.1",
"commands": [
"fantomas"
],
Expand Down
12 changes: 10 additions & 2 deletions .config/service-branch-merge.json
Original file line number Diff line number Diff line change
@@ -1,13 +1,21 @@
{
"merge-flow-configurations": {
// regular branch flow
"release/dev17.12": {
"MergeToBranch": "release/dev17.13",
"ExtraSwitches": "-QuietComments"
},
"release/dev17.13": {
"MergeToBranch": "release/dev17.14",
"ExtraSwitches": "-QuietComments"
},
"release/dev17.14": {
"MergeToBranch": "main",
"ExtraSwitches": "-QuietComments"
},
"main": {
"MergeToBranch": "release/dev17.14",
"MergeToBranch": "release/dev18.0",
"ExtraSwitches": "-QuietComments"
}
}
}
}
10 changes: 5 additions & 5 deletions .devcontainer/devcontainer.json
Original file line number Diff line number Diff line change
@@ -1,12 +1,12 @@
// For format details, see https://aka.ms/vscode-remote/devcontainer.json or this file's README at:
{
"name": "F#",
"image": "mcr.microsoft.com/dotnet/sdk:9.0.200",
"image": "mcr.microsoft.com/dotnet/sdk:10.0.100-preview.3",
"features": {
"ghcr.io/devcontainers/features/common-utils:2.5.2": {},
"ghcr.io/devcontainers/features/git:1.3.2": {},
"ghcr.io/devcontainers/features/github-cli:1.0.13": {},
"ghcr.io/devcontainers/features/dotnet:2.2.0": {}
"ghcr.io/devcontainers/features/common-utils:2.5.3": {},
"ghcr.io/devcontainers/features/git:1.3.3": {},
"ghcr.io/devcontainers/features/github-cli:1.0.14": {},
"ghcr.io/devcontainers/features/dotnet:2.2.1": {}
},
"hostRequirements": {
"cpus": 2,
Expand Down
51 changes: 0 additions & 51 deletions .fantomasignore
Original file line number Diff line number Diff line change
Expand Up @@ -40,19 +40,6 @@ src/Compiler/Checking/SignatureConformance.fs
src/Compiler/Checking/TypeHierarchy.fs
src/Compiler/Checking/TypeRelations.fs

# nullness-related problems
src/Compiler/Utilities/lib.fsi
src/Compiler/Utilities/Cancellable.fsi
src/FSharp.Core/tasks.fsi
src/FSharp.Core/tasks.fs
src/FSharp.Core/resumable.fs
src/Compiler/DependencyManager/DependencyProvider.fs
src/FSharp.Core/fslib-extra-pervasives.fs
src/FSharp.Core/fslib-extra-pervasives.fsi

# Incorrectly formatted: https://github.com/dotnet/fsharp/pull/14645/commits/49443a67ea8a17670c8a7c80c8bdf91f82231e91 or https://github.com/fsprojects/fantomas/issues/2733
# This CompilerImports.fs behavior is not fixed yet, following up in https://github.com/fsprojects/fantomas/issues/2733
src/Compiler/Driver/CompilerImports.fs
# The following files were formatted, but the "format, --check" loop is not stable.
# Fantomas formats them, but still thinks they need formatting
src/Compiler/Optimize/DetupleArgs.fs
Expand Down Expand Up @@ -96,44 +83,6 @@ src/FSharp.Core/printf.fs
src/FSharp.Core/Query.fs
src/FSharp.Core/seqcore.fs


# fsharp (to investigate)

**/TypeProviders.fsi
**/tainted.fsi

# uses nullness features

**/DependencyProvider.fsi
src/FSharp.Core/array.fs
src/FSharp.Core/option.fsi
src/FSharp.Core/option.fs
src/fsi/console.fs
src/FSharp.Build/FSharpCommandLineBuilder.fs

src/Compiler/Utilities/Activity.fs
src/Compiler/Utilities/sformat.fs
src/Compiler/Utilities/illib.fsi
src/Compiler/Utilities/illib.fs


src/Compiler/Utilities/NullnessShims.fs
src/Compiler/Utilities/DependencyGraph.fs
src/Compiler/Utilities/LruCache.fsi
src/Compiler/Utilities/LruCache.fs
src/Compiler/Utilities/HashMultiMap.fsi
src/Compiler/Utilities/HashMultiMap.fs
src/Compiler/Facilities/AsyncMemoize.fsi
src/Compiler/Facilities/AsyncMemoize.fs
src/Compiler/AbstractIL/il.fs
src/Compiler/SyntaxTree/LexerStore.fs

src/Compiler/Driver/GraphChecking/Graph.fsi
src/Compiler/Driver/GraphChecking/Graph.fs

src/Compiler/DependencyManager/NativeDllResolveHandler.fsi
src/Compiler/DependencyManager/AssemblyResolveHandler.fsi

# Fantomas limitations on implementation files (to investigate)

src/Compiler/AbstractIL/ilwrite.fs
Expand Down
2 changes: 0 additions & 2 deletions .github/CODEOWNERS
Original file line number Diff line number Diff line change
@@ -1,3 +1 @@
* @dotnet/fsharp-team-msft
/eng/DotNetBuild.props @dotnet/product-construction
/eng/SourceBuild* @dotnet/source-build
4 changes: 2 additions & 2 deletions .github/ISSUE_TEMPLATE/nullness_issue.yml
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ body:
- type: markdown
attributes:
value: |
Please check at [Nullable Reference Types RFC](https://github.com/fsharp/fslang-design/blob/main/RFCs/FS-1060-nullable-reference-types.md) if this issue isn't a known limitation, such as missing flow-control analysis after branching constructs like `if` or `while`. Also check at [existing nullness issues](https://github.com/dotnet/fsharp/issues?q=is%3Aissue+label%3AArea-Nullness+) if it hasn't been reported already.
Please check at [Nullable Reference Types RFC](https://github.com/fsharp/fslang-design/blob/main/FSharp-9.0/FS-1060-nullable-reference-types.md) if this issue isn't a known limitation, such as missing flow-control analysis after branching constructs like `if` or `while`. Also check at [existing nullness issues](https://github.com/dotnet/fsharp/issues?q=is%3Aissue+label%3AArea-Nullness+) if it hasn't been reported already.
Please provide a succinct description of the issue and choose 1 or more from the following categories of impact
- type: checkboxes
id: categories
Expand Down Expand Up @@ -73,4 +73,4 @@ body:
Are there any language constructs (typically pattern matching, library constructs, Null/NonNull active patterns, explicit type annotations) allowing the same logic be expressed differently in order to mitigate the experienced nullness issue?
placeholder: Possible workaround
validations:
required: false
required: false
65 changes: 65 additions & 0 deletions .github/copilot-instructions.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,65 @@
# GitHub Copilot Instructions for F# Compiler

## Build and test steps (Linux)

Always build and test the project before submitting your solution.

1. As an initial smoke test for a quick build, run `dotnet build ./FSharp.Compiler.Service.sln --verbosity quiet --no-restore` from the repository root.
Only if this succeeds, move on.
2. From the repository root, run `./build.sh -c Release --norestore`. This creates a prototype compiler, and then the proto compiler builds itself again.
3. Only if two previous steps suceed, run automated tests with `./build.sh -c Release --testcoreclr --norestore`.


If the build fails with errors or non-zero exit code, fix it based on the error messages given and repeat the build step.

If either of the steps 1/2/3 fails, fix the errors and repeat from step 1 - up to 3 times.
After that, report all relevant build errors, error messages and specific details about failing tests and their test test failure details.

### Fixing tests

- If any of the tests fail: Check if the test, test expectation (either inline in the test or a reference file configured for the test) or implementation needs updating, and fix it
- If you see test failures for Surface area baselines: Refer to "Updating FCS surface area baselines" in devguide.md
- If you see test failures for IL baselines: Refer to "Updating ILVerify baselines" in devguide.md


## Acceptance criteria

- Code is formatted using `dotnet fantomas .` executed at the repo root.
- Builds without errors.
- Runs tests without errors. If some tests needed adjustments, those test expectations/baseline adjustments were done.
- If the acceptance criteria was not met, collect the error messages (build failures or failing tests) and report them.

## Coding standards

### Language and Environment
- Use modern F# with functional-first approach
- Target .NET Standard 2.0 for compatibility
- Avoid external dependencies - the codebase is self-contained

### Code Style and Standards
- Follow docs/coding-standards.md, especially:
- Prefer immutability and pure functions
- Use consistent naming (see abbreviation guide)
- Process complex types recursively with pattern matching
- Avoid single-character identifiers except in established patterns
- This project uses .fsi signature files. When adding a new public API to a namespace/module which will be consumed from other file, add it to the respective .fsi signature file as well
- Follow docs/overview.md for key compiler data formats and representations

### Type System Handling
- When working with `TType` instances, use appropriate stripping functions:
- `stripTyparEqns` - Removes inference equations from type parameters
- `stripTyEqns` - Removes type equations and type abbreviations
- `stripTyEqnsAndErase` - Also erases compilation representations
- Match the appropriate stripper to the context (e.g., display vs compilation)
- Check equality with `typeEquiv` after stripping rather than direct comparison

### Core Data Structures
- Use F# discriminated unions for type representations
- Respect representation hiding through access control
- Use `remapX` functions when transforming types across boundaries
- Be aware of performance implications for recursive type operations

### Documentation and Naming
- Document public APIs with XML comments
- Use descriptive function names that indicate transformation direction
- Follow established naming conventions for error messages based on FSComp.txt file. Put all error messages into the FSComp.txt file to ensure localisation
43 changes: 43 additions & 0 deletions .github/policies/resourceManagement.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
id:
name: GitOps.PullRequestIssueManagement
description: GitOps.PullRequestIssueManagement primitive
owner:
resource: repository
disabled: false
where:
configuration:
resourceManagementConfiguration:
eventResponderTasks:
- if:
- payloadType: Issues
- labelAdded:
label: Breaking-change
then:
- addReply:
reply: >-
Refer to the [.NET SDK breaking change guidelines](https://github.com/dotnet/sdk/blob/main/documentation/project-docs/breaking-change-guidelines.md#required-process-for-all-net-sdk-breaking-changes)
description: Add breaking change doc instructions to issue
- if:
- payloadType: Pull_Request
- labelAdded:
label: Breaking-change
then:
- addLabel:
label: needs-breaking-change-doc-created
- addReply:
reply: >-
Added `needs-breaking-change-doc-created` label because this PR has the `breaking-change` label.


When you commit this breaking change:


1. [ ] Create and link to this PR and the issue a matching issue in the dotnet/docs repo using the [breaking change documentation template](https://aka.ms/dotnet/docs/new-breaking-change-issue), then remove this `needs-breaking-change-doc-created` label.

2. [ ] Ask a committer to mail the `.NET SDK Breaking Change Notification` email list.


You can refer to the [.NET SDK breaking change guidelines](https://github.com/dotnet/sdk/blob/main/documentation/project-docs/breaking-change-guidelines.md)
description: Add breaking change instructions to PR.
onFailure:
onSuccess:
2 changes: 1 addition & 1 deletion .github/workflows/add_to_project.yml
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ permissions:

jobs:
cleanup_old_runs:
runs-on: ubuntu-20.04
runs-on: ubuntu-latest
if: github.event_name != 'pull_request_target'
permissions:
actions: write
Expand Down
27 changes: 18 additions & 9 deletions .github/workflows/commands.yml
Original file line number Diff line number Diff line change
Expand Up @@ -9,12 +9,12 @@ on:
permissions:
contents: write
issues: write
pull-requests: write
pull-requests: read

jobs:
cleanup_old_runs:
if: github.event.schedule == '0 13 * * *'
runs-on: ubuntu-20.04
runs-on: ubuntu-latest
permissions:
actions: write
env:
Expand All @@ -33,7 +33,7 @@ jobs:

run_command:
if: github.event.issue.pull_request != '' && contains(github.event.comment.body, '/run')
runs-on: ubuntu-20.04
runs-on: ubuntu-latest
steps:
- name: Extract command to run
uses: actions/github-script@v3
Expand Down Expand Up @@ -75,31 +75,40 @@ jobs:
- name: Process fantomas command
if: steps.command-extractor.outputs.result == 'fantomas'
id: fantomas
run: dotnet fantomas . -r
- name: Process fantomas command
run: dotnet fantomas .
- name: Process xlf command
if: steps.command-extractor.outputs.result == 'xlf'
id: xlf
run: dotnet build src/Compiler /t:UpdateXlf

- name: Commit and push changes
if: steps.fantomas.outcome == 'success' || steps.xlf.outcome == 'success'
if: steps.fantomas.outcome == 'success' || steps.xlf.outcome == 'success' || steps.ilverify.outcome == 'success'
run: |
# Only commit if there are actual changes
if git diff --quiet; then
echo "No changes to commit, skipping."
exit 0
fi

git config --local user.name "github-actions[bot]"
git config --local user.email "41898282+github-actions[bot]@users.noreply.github.com"
git commit -a -m 'Automated command ran: ${{ steps.command-extractor.outputs.result }}

Co-authored-by: ${{ github.event.comment.user.login }} <${{ github.event.comment.user.id }}+${{ github.event.comment.user.login }}@users.noreply.github.com>'
git push
git push origin HEAD:"refs/heads/$PR_HEAD_REF"\
- name: Post command comment
if: steps.fantomas.outcome == 'success' || steps.xlf.outcome == 'success'
if: steps.fantomas.outcome == 'success' || steps.xlf.outcome == 'success' || steps.ilverify.outcome == 'success'
uses: actions/github-script@v3
with:
script: |
// Probably, there's more universal way of getting outputs, but my gh-actions-fu is not that good.
var output = ""
if ("${{steps.command-extractor.outputs.result}}" == 'fantomas') {
output = "${{steps.fantomas.outputs.result}}"
} else if("${{steps.command-extractor.outputs.result}}" == 'xlf') {
} else if ("${{steps.command-extractor.outputs.result}}" == 'xlf') {
output = "${{steps.xlf.outputs.result}}"
} else if ("${{steps.command-extractor.outputs.result}}" == 'ilverify') {
output = "${{steps.ilverify.outputs.result}}"
}
const body = `Ran ${{ steps.command-extractor.outputs.result }}: https://github.com/${context.repo.owner}/${context.repo.repo}/actions/runs/${process.env.GITHUB_RUN_ID}\n${output}`;
await github.issues.createComment({
Expand Down
24 changes: 24 additions & 0 deletions .github/workflows/copilot-setup-steps.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
name: "Copilot Setup Steps"

# Allow testing of the setup steps from your repository's "Actions" tab.
on: workflow_dispatch

jobs:
# The job MUST be called `copilot-setup-steps` or it will not be picked up by Copilot.
copilot-setup-steps:
runs-on: ubuntu-latest

permissions:
contents: read

# You can define any steps you want, and they will run before the agent starts.
# If you do not check out your code, Copilot will do this for you.
steps:
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
- uses: actions/setup-dotnet@v4
with:
global-json-file: global.json
- name: Restore solution
env:
CI: false
run: dotnet build ./FSharp.Compiler.Service.sln --verbosity quiet
4 changes: 3 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -134,4 +134,6 @@ positive.exe
/tests/FSharp.Compiler.ComponentTests/FSharpChecker/StandardOutput.txt

# ilverify baseline result files
*.bsl.actual
*.bsl.actual
/src/FSharp.DependencyManager.Nuget/StandardError.txt
/src/FSharp.DependencyManager.Nuget/StandardOutput.txt
9 changes: 9 additions & 0 deletions DEVGUIDE.md
Original file line number Diff line number Diff line change
Expand Up @@ -252,6 +252,15 @@ For example:
module TimeCritical =
```

For stress testing async code you can use a custom `FSharp.Test.StressAttribute`.
For example, applied to a single xUnit test case:
```fsharp
[<Theory; Stress(Count = 1000)>]
```
it will start it many times at the same time, and execute in parallel.




### Updating FCS surface area baselines

Expand Down
7 changes: 1 addition & 6 deletions Directory.Build.props
Original file line number Diff line number Diff line change
Expand Up @@ -10,11 +10,6 @@
<IgnoreMibc Condition="'$(IgnoreMibc)' == ''">$(DotNetBuildSourceOnly)</IgnoreMibc>
</PropertyGroup>

<PropertyGroup>
<!-- TODO: These need to be removed once we merge/release the new SDK with noward and line fixes. -->
<NoWarn>$(NoWarn);FS0064;FS1182</NoWarn>
</PropertyGroup>

<!--
When developers load the FSharp.Compiler.Service solution we set FSHARPCORE_USE_PACKAGE to true if it hasn't already been set to a value.
This option ensures that building and testing uses the specified FSharp.Core nuget package instead of the local FSharp.Core project.
Expand Down Expand Up @@ -62,7 +57,7 @@
since it's a non-arcade and non-sourcebuild scenario -->
<FsLexPath>$(ArtifactsDir)/bin/fslex/$(Configuration)/$(FSharpNetCoreProductDefaultTargetFramework)/$(RuntimeIdentifier)/fslex.dll</FsLexPath>
<FsYaccPath>$(ArtifactsDir)/bin/fsyacc/$(Configuration)/$(FSharpNetCoreProductDefaultTargetFramework)/$(RuntimeIdentifier)/fsyacc.dll</FsYaccPath>
<DefineConstants>NO_CHECKNULLS;BUILDING_WITH_LKG;NO_NULLCHECKING_LIB_SUPPORT;$(DefineConstants)</DefineConstants>
<DefineConstants>BUILDING_WITH_LKG;$(DefineConstants)</DefineConstants>
</PropertyGroup>

<Import Project="$(MSBuildThisFileDirectory)/eng/Versions.props" Condition="'$(DISABLE_ARCADE)' == 'true'" />
Expand Down
Loading