Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
78 commits
Select commit Hold shift + click to select a range
d9a937f
Tests: extract 'should update baselines' checks (#19734)
auduchinok May 20, 2026
6c03a2d
Fix #19596: unit-parameter member conformance with signature (#19615)
T-Gro May 20, 2026
eb7f368
Harden AI review quality: subagent dispatch, inline-only, no wall-of-…
T-Gro May 20, 2026
3797fc6
Gate exception field serialization behind langversion 11 (#19746)
T-Gro May 20, 2026
d58742f
Clean up state-machine workflow: remove stale refs, fix numbering (#1…
T-Gro May 21, 2026
a690556
Honor --nowarn for command-line option warnings (#19776)
T-Gro May 21, 2026
f6e1f42
Add CCR-OptOut review instruction (#19787)
T-Gro May 22, 2026
957d614
Switch CCR opt-out to check PR body for 'SKIP CCR REVIEW' (#19789)
T-Gro May 22, 2026
bdb847a
Bump system versions (#19790)
T-Gro May 22, 2026
1def978
Fix nullness narrowing in match inside comprehensions (#19743)
T-Gro May 26, 2026
14ad911
Narrow overload-error and symbol-use ranges to terminal identifier (#…
Copilot May 26, 2026
563bd0e
[main] Update dependencies from dotnet/arcade (#19794)
dotnet-maestro[bot] May 26, 2026
c6d4a5c
Update dependencies from https://dev.azure.com/dnceng/internal/_git/d…
dotnet-maestro[bot] May 26, 2026
2bd96da
[main] Update dependencies from dotnet/roslyn (#19780)
dotnet-maestro[bot] May 26, 2026
7d5c771
[main] Update dependencies from dotnet/msbuild (#19779)
dotnet-maestro[bot] May 26, 2026
5d50ace
Override System.Security.Cryptography.Xml to 10.0.8 (#19830)
T-Gro May 27, 2026
e11c2fb
Change protected-files policy to 'allowed' for labelops-pr-maintenanc…
Copilot May 28, 2026
69b1309
Fix Repo Assist: recompile lock files to v0.76.1, harden data fetch s…
Copilot May 28, 2026
da3960f
Fix overload resolution of static member extension (#19698)
evgTSV May 28, 2026
b70df2c
[Auto Update] Agentic workflows — fix safe-outputs config and apply p…
Copilot May 28, 2026
93ba0ea
Parser: recover on unfinished if and binary expressions (#19724)
auduchinok May 28, 2026
6b2a50e
Fix ValueOption optional args via ?param caller syntax (#19711) (#19742)
T-Gro May 28, 2026
fc0e130
Disable noop issue reporting for labelops-pr-maintenance workflow (#1…
Copilot May 28, 2026
3aa584a
Fix delegate Invoke semantic classification (in the IDE)(#19813)
T-Gro May 28, 2026
2d7b9e8
Fix #19657: MeasureAnnotatedAbbreviation over ref type + | null (#19775)
T-Gro May 28, 2026
ccaa44a
Make aw-auto-update detection-only and delegate workflow PRs to Copil…
Copilot May 28, 2026
ffa661a
Fix state-machine workflow: add protected-files: allowed for .github/…
T-Gro May 28, 2026
1454c92
Fix source-build: track Cryptography.Xml via Version.Details (#19839)
T-Gro May 28, 2026
f711440
docs: update state-machine with security scan workflow and infra chan…
github-actions[bot] May 29, 2026
c8e6e45
Fix #18841: let _ = &expr now compiles like let x = &expr (#19811)
T-Gro May 29, 2026
565bcdb
Fix docs path exclusion to use recursive wildcard in azure-pipelines-…
Copilot May 29, 2026
d5364f2
Add concurrency group to PR Tooling Safety Check workflow (#19841)
Copilot May 29, 2026
0d2b018
Symbols: add ObsoleteDiagnosticInfo (#19359)
auduchinok May 29, 2026
85e2e21
Fix non-deterministic reference assembly MVIDs (#19751) (#19801)
T-Gro May 29, 2026
7e8f7bb
Fix colorization of type name in MyType<Qualified.Name>.StaticMember …
T-Gro May 29, 2026
aefec6b
Reject non-function bindings for single-case and partial active patte…
Copilot May 29, 2026
80607ff
Add InlineIfLambda to Array.init (#19869)
kerams Jun 1, 2026
a62e57b
Update state-machine.md for security scan draft filter and repo rules…
github-actions[bot] Jun 2, 2026
c0bc8de
Fix SRTP `get_Item` witness resolution for `string` indexers (#19757)
Copilot Jun 2, 2026
a421267
Glossary improvement (#19881)
T-Gro Jun 3, 2026
3f2ef65
Remove duplicate and unused file (#19886)
majocha Jun 3, 2026
87f9bb7
[main] Update dependencies from dotnet/roslyn (#19827)
dotnet-maestro[bot] Jun 3, 2026
74802de
Update dependencies from https://dev.azure.com/dnceng/internal/_git/d…
dotnet-maestro[bot] Jun 3, 2026
d6558b2
[main] Update dependencies from dotnet/arcade (#19825)
dotnet-maestro[bot] Jun 3, 2026
eb038f0
Dedup format specifier locations in computation expressions (#19791)
T-Gro Jun 3, 2026
3cf85be
Preserve type aliases in match | null refinement (#19745)
T-Gro Jun 3, 2026
c81bc85
Suppress hover/symbol resolution for wildcard `_` patterns inside `me…
Copilot Jun 3, 2026
96ac8a0
Make PR Tooling Safety Check resilient to GitHub MCP list_pull_reques…
Copilot Jun 3, 2026
f15535b
Fix XmlDoc validation for get/set property pairs (#13684) (#19884)
T-Gro Jun 3, 2026
0fb7052
Fix #16360: stop duplicating editor diagnostics (revert Roslyn workar…
T-Gro Jun 4, 2026
022cd1a
chore: update actions/github-script from v6 to v7 (#19843)
T-Gro Jun 4, 2026
d6db771
Fix #18086: suppress NuGet restore stdout under FSI --quiet (#19808)
T-Gro Jun 4, 2026
24e36c9
[main] Source code updates from dotnet/dotnet (#19887)
dotnet-maestro[bot] Jun 4, 2026
37e58b0
Make fsharp-diagnostics skill cross-platform (#19893)
T-Gro Jun 4, 2026
bc8a51b
Fix parser error for anonymous record type aliases with postfix type …
Copilot Jun 4, 2026
9bb6b56
Emit debug points at a stack-empty position (#19877)
auduchinok Jun 4, 2026
f7be8d0
Unify baseline checking behind a single checkBaseline helper (#19888)
auduchinok Jun 5, 2026
c854edd
Remove unused variable group (#19899)
abonie Jun 5, 2026
b858ef4
Update dependencies from https://github.com/dotnet/arcade build 20260…
dotnet-maestro[bot] Jun 8, 2026
abd099b
Restore github.dev editor link in release-notes check comment (#19898)
T-Gro Jun 8, 2026
e9b7dad
Add pr-description skill for short GitHub write-ups (#19891)
T-Gro Jun 8, 2026
d0e593f
Debug: rework `for` expressions stepping (#19894)
auduchinok Jun 8, 2026
b8b40f5
Warn on inconsistent [<CompiledName>] across extension overloads (#19…
T-Gro Jun 10, 2026
ee4793e
Fix quotations leaking empty-string match lowering into AST (#19873) …
T-Gro Jun 12, 2026
b2070ab
Fix degraded codegen for inner recursive functions under realsig (#19…
T-Gro Jun 12, 2026
42e9b57
Update dependencies from https://dev.azure.com/dnceng/internal/_git/d…
dotnet-maestro[bot] Jun 12, 2026
6127daa
docs: update state-machine diagram for security scan pagination + dat…
github-actions[bot] Jun 12, 2026
276708b
Update dependencies from https://github.com/dotnet/arcade build 20260…
dotnet-maestro[bot] Jun 12, 2026
fb9e190
[main] Update dependencies from dotnet/roslyn (#19889)
dotnet-maestro[bot] Jun 12, 2026
b2319f7
[main] Update dependencies from dotnet/msbuild (#19826)
dotnet-maestro[bot] Jun 12, 2026
14c4ced
Warn FS3888 when consumer-visible attributes are missing from .fsi (#…
T-Gro Jun 12, 2026
464e37b
Fix SymStore PDB conversion failure for ComponentTests
Jun 12, 2026
dadebc5
Merge remote-tracking branch 'origin/main' into darc-feature/net11-sc…
Jun 12, 2026
fe8e346
Suppress MSB3277 for fsc/fsi net472 builds
Jun 12, 2026
439bfb9
Fix FS1182 not reported for unused let functions in class types (#19805)
T-Gro Jun 12, 2026
eb4a993
Fix CI: add agent name field to agentic-workflows frontmatter
Jun 12, 2026
c8db64f
Merge remote-tracking branch 'origin/main' into darc-feature/net11-sc…
Jun 12, 2026
8ebd8aa
Update dependencies from https://github.com/dotnet/arcade build 20260…
dotnet-maestro[bot] Jun 15, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions .github/copilot-instructions.md
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,8 @@ Before submitting: `./build.sh -c Release --testcoreclr`
.fs: implementation
.fsi: declarations, API docs, context comments

Abbreviations (`ad`, `cenv`, `m`, `tcref`, `eenv`, `cgbuf`, `ncenv`, `tau`, …): see `docs/coding-standards.md` for the canonical glossary before guessing what a short identifier means.

## Rules

Public API change → update .fsi
Expand Down
17 changes: 12 additions & 5 deletions .github/docs/state-machine.md
Original file line number Diff line number Diff line change
Expand Up @@ -134,17 +134,24 @@ stateDiagram-v2
[*] --> ScanQueue: ⏰ labelops-pr-security-scan (1h)

state "Per-PR Classification" as ScanLoop {
ScanQueue --> ReadRules: 🤖 security-scan reads repo rules
ReadRules --> CheckDraft: 🤖 security-scan checks isDraft
ScanQueue --> ReadRules: 🤖 security-scan reads repo rules + memory
ReadRules --> CheckDate: 🤖 security-scan paginates PRs (newest first)

state datecheck <<choice>>
CheckDate --> datecheck
datecheck --> SkipOld: PR before date cutoff
datecheck --> CheckDraft: PR within scan window

SkipOld --> [*]: skip

state draftcheck <<choice>>
CheckDraft --> draftcheck
CheckDraft --> draftcheck: 🤖 security-scan checks isDraft
draftcheck --> SkipDraft: draft PR
draftcheck --> CheckMemory: non-draft PR

SkipDraft --> [*]: skip

CheckMemory --> CheckMemory2: 🤖 security-scan reads state.json
CheckMemory --> CheckMemory2: 🤖 security-scan checks state.json sha

state memcheck <<choice>>
CheckMemory2 --> memcheck
Expand Down Expand Up @@ -255,7 +262,7 @@ stateDiagram-v2
aw-auto-update.md: da8c5e340a43d73616e3a0203c7e56de9ca4b82ee78b1902afe466a49a08bc17
labelops-flake-fix.md: 7dca5b8faa60f947204f8925c6238fbecf42aa8cbf3144a166120501b0eef1e4
labelops-pr-maintenance.md: 59ba52fc625e0b9112c31864e92154cdf09acf0bc0f2b167aa30a0d76baa898f
labelops-pr-security-scan.md: 675430850eaf8edaa86b4d26c9d381ac48e13536469f17748e7104f6e75937c2
labelops-pr-security-scan.md: 7dd4063d35d2bac6b0edf238e72a1ffe2570d0102340dab8064bf1de9ec73ac7
regression-pr-shepherd.md: 18a65fe1cdf8aa219158f1d610db14078e5ff2f1ac912df2566bf796792395b5
repo-assist.md: 3775b51d142d22c98e87e48e8ac9d46cdf69e9c8306d5787758a35578dcb1119
-->
55 changes: 55 additions & 0 deletions .github/instructions/NoBloat.instructions.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
---
applyTo:
- "src/Compiler/**/*.{fs,fsi}"
- "vsintegration/src/**/*.{fs,fsi}"
- "tests/FSharp.Compiler.ComponentTests/**/*.fs"
- "tests/FSharp.Compiler.Service.Tests/**/*.fs"
- "vsintegration/tests/**/*.fs"
---

# Code Style: No Bloat

Reviewers read code, not prose. Add bytes only when they pay for themselves.

## Comments

Good names **always** beat comments. Before writing a comment, ask: *can I rename a value, extract a function, or use an active pattern so the comment becomes unnecessary?* If yes, do that instead.

- **Do not** restate what the code says (variable name, type name, attribute name, function signature).
- **Do not** narrate the algorithm step-by-step. The diff is the algorithm.
- **Do not** justify design decisions inline ("we chose X over Y because…"). Put rationale in the commit message or PR body.
- **Do not** leave war-story comments ("previously we did Z, but…", "counter-example: …"). The history is in `git log`.
- **Do not** write multi-line `///` doc comments for internal helpers whose body is one expression.

Acceptable comments answer **why**, not **what**, and only when the *why* is non-obvious and cannot be expressed by renaming:
- Workarounds for compiler/runtime bugs (link the bug).
- Performance constraints invisible from the code shape ("inner loop runs 50M times per typecheck").
- Cross-file invariants the code itself can't enforce.

If you are tempted to write `// This is intentional`, change the code so the intent is structural, not decorative.

## Code shape

- Compact, idiomatic F#: pattern matching over `if`/`elif` ladders; active patterns where they remove duplication.
- Low cyclomatic complexity per function. Extract helpers — even one-line ones — when a name clarifies a step.
- Prefer module-level `let` over big bodies with nested locals.
- New file > bloating an existing 5000-line file when adding a self-contained concept.

## Test code

Tests get a touch more leeway for explanation, but the same rules largely apply:

- One parametrized test (`[<Theory>]`, `[<InlineData>]`, or a `for/yield` over inputs) > five copy-pasted tests.
- Module-level constants for shared paths (`Path.Combine` for OS neutrality), shared source strings, and shared expected outputs.
- Helpers like `parseAndCheck code` over reinventing the setup per test.
- Don't reinvent an entire `.fs` file inside each test when one shared module-level binding will do.

## PR scope

**Not paid by LOC.** Large PRs are typically shitty PRs. If the diff has 1000+ lines, split it.
- Cleanup commits separate from feature commits.
- No "phase tag" / "transitional measure" / "follow-up" comments left behind — either do it now in a follow-up commit, or file an issue. Don't leave breadcrumbs in the code.

## When in doubt

Delete the comment, rename the value, and re-read. If the code is still unclear, *that* is what needs fixing — not the comment.
56 changes: 32 additions & 24 deletions .github/skills/fsharp-diagnostics/SKILL.md
Original file line number Diff line number Diff line change
@@ -1,48 +1,56 @@
---
name: fsharp-diagnostics
description: "Always invoke after editing .fs files. Provides fast parse/typecheck feedback without a full dotnet build. Prefer this over dotnet build for iterative changes. Also finds symbol references and inferred type hints."
description: Always invoke after editing `.fs` files under `src/Compiler/`. Fast parse/typecheck without `dotnet build`, plus symbol references and inferred type hints. Use whenever the user asks about F# errors, compile errors, type inference, finding usages, or renaming a symbol in the compiler tree.
---

# F# Diagnostics

**Scope:** `src/Compiler/` files only (`FSharp.Compiler.Service.fsproj`, Release, net10.0).
**Scope:** `src/Compiler/` files only.

## Setup (run once per shell session)
## Setup (once per session)

```bash
GetErrors() { "$(git rev-parse --show-toplevel)/.github/skills/fsharp-diagnostics/scripts/get-fsharp-errors.sh" "$@"; }
Requires pwsh 7+ (`brew install powershell` / `winget install Microsoft.PowerShell` / `apt install powershell`).

```pwsh
function GetErrors { & "$(git rev-parse --show-toplevel)/.github/skills/fsharp-diagnostics/scripts/get-fsharp-errors.ps1" @args }
```

From bash/zsh without a function: `pwsh -File <repo>/.github/skills/fsharp-diagnostics/scripts/get-fsharp-errors.ps1 <args>`.

## Parse first, typecheck second

```bash
GetErrors --parse-only src/Compiler/Checking/CheckBasics.fs
```
If errors → fix syntax. Do NOT typecheck until parse is clean.
```bash
GetErrors src/Compiler/Checking/CheckBasics.fs
```pwsh
GetErrors -ParseOnly src/Compiler/Checking/CheckBasics.fs # syntax only
GetErrors src/Compiler/Checking/CheckBasics.fs # full typecheck
```
Fix all parse errors before typechecking; type errors on top of bad syntax are noise.

## Find references for a single symbol (line 1-based, col 0-based)
## Symbol references (line 1-based, col 0-based)

Before renaming or to understand call sites:
```bash
GetErrors --find-refs src/Compiler/Checking/CheckBasics.fs 30 5
```pwsh
GetErrors -FindRefs src/Compiler/Checking/CheckBasics.fs 30 5
```
Use before any rename.

## Type hints for a range selection (begin and end line numbers, 1-based)
## Type hints (line range, 1-based)

To see inferred types as inline `// (name: Type)` comments:
```bash
GetErrors --type-hints src/Compiler/TypedTree/TypedTreeOps.fs 1028 1032
Returns the range with inferred types as inline `// (name: Type)` comments:
```pwsh
GetErrors -TypeHints src/Compiler/TypedTree/TypedTreeOps.Transforms.fs 100 120
```

## Other

```bash
GetErrors --check-project # typecheck entire project
GetErrors --ping
GetErrors --shutdown
```pwsh
GetErrors -CheckProject # typecheck entire project
GetErrors -Ping # liveness check, no side effects
GetErrors -Shutdown
```

First call starts server (~70s cold start, set initial_wait=600). Auto-shuts down after 4h idle. ~3 GB RAM.
## Timing

- First real call after a fresh clone: server build + in-memory warmup, 5–15 min → `initial_wait=1200`.
- After warmup: real commands answer in seconds → `initial_wait=180`.
- `-Ping` / `-Shutdown`: sub-second; never trigger build or warmup.

Auto-shuts down after 4h idle; ~3 GB RAM while running.
Loading
Loading