Conversation
Signed-off-by: Dave Skender <[email protected]>
|
Note Reviews pausedUse the following commands to manage reviews:
Use the checkboxes below for quick actions:
📝 WalkthroughWalkthroughReplaces explicit global .NET tool installs across multiple GitHub Actions workflows and VS Code tasks with manifest-based Possibly related PRs
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
Signed-off-by: Dave Skender <[email protected]>
Signed-off-by: Dave Skender <[email protected]>
Signed-off-by: Dave Skender <[email protected]>
There was a problem hiding this comment.
Actionable comments posted: 2
Caution
Some comments are outside the diff and can’t be posted inline due to platform limitations.
⚠️ Outside diff range comments (1)
.github/workflows/copilot-setup-steps.yml (1)
67-67:⚠️ Potential issue | 🟡 Minor
dotnet tool list --globalreports the wrong tool count after migrating to local restoreAfter
dotnet tool restore, tools are installed locally (not globally).--globalqueries the global tool store, which is unrelated and will typically return 0 for the restored tools. Usedotnet tool list(defaults to local) instead.🛠️ Proposed fix
- echo "- .NET Tools: $(dotnet tool list --global | wc -l) installed" >> $GITHUB_STEP_SUMMARY + echo "- .NET Tools: $(dotnet tool list | wc -l) installed" >> $GITHUB_STEP_SUMMARY🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In @.github/workflows/copilot-setup-steps.yml at line 67, The workflow currently uses the global query "dotnet tool list --global" which reports the wrong count after running "dotnet tool restore" because restored tools are local; replace the command invocation "dotnet tool list --global" with "dotnet tool list" so it queries the local manifest-installed tools (keep the rest of the echo and summary append logic unchanged and run this after "dotnet tool restore" completes).
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.
Inline comments:
In @.coderabbit.yaml:
- Line 128: The glob pattern "!*.g.cs" only matches generated files in the repo
root; update the pattern to use a recursive glob so generated files in
subdirectories are excluded—replace "!*.g.cs" with "!**/*.g.cs" (matching the
adjacent "**/" style) to ensure .g.cs files under src/, obj/ and other nested
directories are properly ignored.
In @.github/workflows/test-indicators.yml:
- Around line 84-85: The workflow installs tools with the "Install .NET tools"
step using dotnet tool restore but later calls the bare roslynator analyze
command which won't be on PATH after a local restore; change the workflow to
either (A) invoke the tool via dotnet tool run roslynator analyze wherever
roslynator analyze is used, or (B) after dotnet tool restore add the local tool
folder to PATH (e.g., export PATH="$PATH:./.config/dotnet/tools" or
./dotnet/tools as appropriate) so roslynator analyze can be found; update all
occurrences (the Install .NET tools step and subsequent roslynator analyze
invocations) accordingly and remove the ||/continue-on-error masking if you want
failures to surface.
---
Outside diff comments:
In @.github/workflows/copilot-setup-steps.yml:
- Line 67: The workflow currently uses the global query "dotnet tool list
--global" which reports the wrong count after running "dotnet tool restore"
because restored tools are local; replace the command invocation "dotnet tool
list --global" with "dotnet tool list" so it queries the local
manifest-installed tools (keep the rest of the echo and summary append logic
unchanged and run this after "dotnet tool restore" completes).
Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com> Signed-off-by: Dave Skender <[email protected]>
Signed-off-by: Dave Skender <[email protected]>
There was a problem hiding this comment.
Actionable comments posted: 1
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.
Inline comments:
In @.vscode/tasks.json:
- Line 141: The task currently runs "dotnet restore && dotnet restore
docs/Examples && dotnet tool run dotnet-outdated --exclude FluentAssertions",
which will fail on a fresh clone because local tools aren't restored; either
make the task self-contained by prepending "dotnet tool restore &&" before
"dotnet tool run dotnet-outdated --exclude FluentAssertions", or remove the
"dotnet tool run dotnet-outdated" invocation from the task labeled "Restore
NuGet packages for solution" and instead place that tool-run step into the
existing "Inspect: .NET packages" task so restoration and inspection are
separated.
Signed-off-by: Dave Skender <[email protected]>
There was a problem hiding this comment.
Actionable comments posted: 1
🧹 Nitpick comments (2)
.agents/skills/code-completion/SKILL.md (1)
226-226: "Last updated" date is stale.Line 226 still reads
January 2, 2026; consider bumping it to reflect today's changes.🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In @.agents/skills/code-completion/SKILL.md at line 226, Update the stale "Last updated: January 2, 2026" line in SKILL.md to the current date by replacing the exact string "Last updated: January 2, 2026" with "Last updated: February 22, 2026".tests/README.md (1)
92-108: LGTM —dotnet tool runinvocations are correct.Both blocks correctly switch to the manifest-based invocation and pass consistent options. The prerequisite
dotnet tool restore(documented indocs/CONTRIBUTING.md) is not referenced here, which could trip up developers landing on this README directly without having read the contributing guide. A brief forward-reference would help.📝 Optional: add a `dotnet tool restore` prerequisite note
+> [!NOTE] +> Run `dotnet tool restore` once before using the commands below. + To run Roslynator analysis:🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@tests/README.md` around lines 92 - 108, Add a short prerequisite note before the two roslynator code blocks stating that developers should run "dotnet tool restore" (or restore global/manifest tools) first and reference docs/CONTRIBUTING.md; update the README.md near the "dotnet tool run roslynator analyze" and "dotnet tool run roslynator fix" blocks to include a one-line forward-reference to that prerequisite so users who land on this page know to restore tools before invoking the commands.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.
Inline comments:
In @.agents/skills/code-completion/SKILL.md:
- Line 60: The quick reference table entry for the Roslynator fix command must
include the same verbosity flag as the individual checks; update the
quick-reference row so it matches the full command "dotnet tool run roslynator
fix --properties TargetFramework=net10.0 --severity-level info --verbosity
normal" (i.e., add "--verbosity normal" to the table entry) so both locations
are identical.
---
Nitpick comments:
In @.agents/skills/code-completion/SKILL.md:
- Line 226: Update the stale "Last updated: January 2, 2026" line in SKILL.md to
the current date by replacing the exact string "Last updated: January 2, 2026"
with "Last updated: February 22, 2026".
In `@tests/README.md`:
- Around line 92-108: Add a short prerequisite note before the two roslynator
code blocks stating that developers should run "dotnet tool restore" (or restore
global/manifest tools) first and reference docs/CONTRIBUTING.md; update the
README.md near the "dotnet tool run roslynator analyze" and "dotnet tool run
roslynator fix" blocks to include a one-line forward-reference to that
prerequisite so users who land on this page know to restore tools before
invoking the commands.
Signed-off-by: Dave Skender <[email protected]>
There was a problem hiding this comment.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.
Duplicate comments:
In @.vscode/tasks.json:
- Around line 147-149: The task command that runs "dotnet restore && dotnet
restore docs/Examples && dotnet tool run dotnet-outdated --exclude
FluentAssertions" now correctly declares dependsOn "Install: .NET tools", so
ensure the dependsOn entry remains (it guarantees dotnet tool restore runs
before dotnet tool run), no further code changes required—keep the dependsOn:
"Install: .NET tools" and dependsOrder: "sequence" intact for the task.
Signed-off-by: Dave Skender <[email protected]>
Signed-off-by: Dave Skender <[email protected]>
There was a problem hiding this comment.
Actionable comments posted: 1
Caution
Some comments are outside the diff and can’t be posted inline due to platform limitations.
⚠️ Outside diff range comments (1)
src/s-z/Stoch/Stoch.BufferList.cs (1)
46-46:⚠️ Potential issue | 🟡 MinorPre-existing bug:
Nameuses hardcoded literals instead of constructor parameters.
STOCH({14}, {3}, {3}, {3}, {2}, {MaType.SMA})always emits the default values regardless of the arguments passed to the constructor.new StochList(5, 2, 1)would reportSTOCH(14, 3, 3, 3, 2, SMA).🐛 Proposed fix
- Name = $"STOCH({14}, {3}, {3}, {3}, {2}, {MaType.SMA})"; + Name = $"STOCH({lookbackPeriods}, {signalPeriods}, {smoothPeriods}, {kFactor}, {dFactor}, {movingAverageType})";🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@src/s-z/Stoch/Stoch.BufferList.cs` at line 46, The Name property is using hardcoded literals instead of the instance’s constructor values; update the assignment of Name in StochList (currently set to $"STOCH({14}, {3}, {3}, {3}, {2}, {MaType.SMA})") to interpolate the actual instance fields or constructor parameters (the values passed into the StochList constructor) — e.g. use the internal fields that store the indicator settings (periods/smoothing/signal and the maType field) so Name reflects those variables (for example: $"STOCH({kPeriod}, {dPeriod}, {kSmooth}, {dSmooth}, {signalPeriod}, {maType})"). Ensure you reference the same field names used to initialize the object rather than literals and keep MaType printed from the instance’s maType field.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.
Inline comments:
In `@docs/examples/UseQuoteApi/Program.cs`:
- Around line 72-75: The null check for the sequence is after calling
results.Any(), which can throw if results is null; change the condition in the
guard so you test for null first (e.g., results == null || !results.Any())
before throwing the InvalidOperationException in this block where results is
produced (from ToSma or related call).
---
Outside diff comments:
In `@src/s-z/Stoch/Stoch.BufferList.cs`:
- Line 46: The Name property is using hardcoded literals instead of the
instance’s constructor values; update the assignment of Name in StochList
(currently set to $"STOCH({14}, {3}, {3}, {3}, {2}, {MaType.SMA})") to
interpolate the actual instance fields or constructor parameters (the values
passed into the StochList constructor) — e.g. use the internal fields that store
the indicator settings (periods/smoothing/signal and the maType field) so Name
reflects those variables (for example: $"STOCH({kPeriod}, {dPeriod}, {kSmooth},
{dSmooth}, {signalPeriod}, {maType})"). Ensure you reference the same field
names used to initialize the object rather than literals and keep MaType printed
from the instance’s maType field.
---
Duplicate comments:
In @.agents/skills/code-completion/SKILL.md:
- Line 60: The quick reference table is missing the --verbosity normal flag
causing an inconsistency with the example command; update the quick reference
table entry (the table row around the earlier mention) to include "--verbosity
normal" so it matches the example "dotnet tool run roslynator fix --properties
TargetFramework=net10.0 --severity-level hidden --verbosity normal" and verify
both occurrences of "--verbosity normal" are identical text-wise in SKILL.md
(search for that flag and the table header "quick reference" to locate the exact
row to edit).
Signed-off-by: Dave Skender <[email protected]>
Signed-off-by: Dave Skender <[email protected]>
There was a problem hiding this comment.
🧹 Nitpick comments (2)
src/_common/QuotePart/QuotePart.Utilities.cs (1)
95-97: Unnecessary allocation for reference-type T — add a covariant fast-pathThe new
Cast<IReusable>().ToList()fixes a real latent bug: the old direct cast(IReadOnlyList<IReusable>)itemswould have thrownInvalidCastExceptionwhenTis a value type (covariance only applies to reference types). However, it now pays an O(n) heap allocation unconditionally, even for the far more common reference-type path where the runtime already satisfiesIReadOnlyList<IReusable>through covariance.A pattern-match gives you the zero-allocation fast path for reference types while keeping the safe LINQ fallback for value types:
♻️ Proposed fix: covariant fast-path + value-type fallback
- : items - .Cast<IReusable>() - .ToList(); + : items is IReadOnlyList<IReusable> reusables + ? reusables + : items.Cast<IReusable>().ToList();As per coding guidelines, unnecessary allocations should be avoided in indicator code.
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@src/_common/QuotePart/QuotePart.Utilities.cs` around lines 95 - 97, In QuotePart.Utilities.cs replace the unconditional allocation by adding a covariant fast-path: check whether the existing items variable already implements IReadOnlyList<IReusable> (pattern-match or "as" + null check) and if so reuse that reference, otherwise fall back to the current Cast<IReusable>().ToList() path; target the expression that produces the IReadOnlyList<IReusable> (the code using items.Cast<IReusable>().ToList()) so value-type T still uses the safe LINQ fallback while reference-type sequences avoid the extra O(n) allocation.tools/performance/Perf.ManualTestDirect.cs (1)
135-135: Consider annotating the type-anchor arms to prevent accidental removal.The residual
(object)casts on these three arms ("ZIGZAG"inSeries,"WMA"inBufferandStreamHub) are the only thing that keeps each switch expression well-typed asobject. Removing any of them without adding a replacement anchor will cause a CS0173 compile error. A short comment documents the intent.♻️ Suggested annotation
- "ZIGZAG" => (object)Quotes.ToZigZag(), + "ZIGZAG" => (object)Quotes.ToZigZag(), // type anchor: keeps switch expr typed as object- "WMA" => (object)Quotes.ToWmaList(14), + "WMA" => (object)Quotes.ToWmaList(14), // type anchor: keeps switch expr typed as object- "WMA" => (object)quoteHub.ToWmaHub(14).Results, + "WMA" => (object)quoteHub.ToWmaHub(14).Results, // type anchor: keeps switch expr typed as objectAlso applies to: 219-219, 307-307
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@tools/performance/Perf.ManualTestDirect.cs` at line 135, The switch-expression arms that currently use a residual cast to object (e.g. the "ZIGZAG" arm using (object)Quotes.ToZigZag(), and the "WMA" arms in Buffer and StreamHub) should be explicitly annotated so future editors don't remove the cast and break typing; update each of those arms to either keep the explicit (object) cast and add a short inline comment like "// type-anchor: object" or replace the cast with an explicit comment-only anchor (e.g. append "/* type-anchor: object */") so the switch expression remains well-typed as object (refer to the "ZIGZAG" arm and the "WMA" arms in Buffer and StreamHub to locate the spots).
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.
Nitpick comments:
In `@src/_common/QuotePart/QuotePart.Utilities.cs`:
- Around line 95-97: In QuotePart.Utilities.cs replace the unconditional
allocation by adding a covariant fast-path: check whether the existing items
variable already implements IReadOnlyList<IReusable> (pattern-match or "as" +
null check) and if so reuse that reference, otherwise fall back to the current
Cast<IReusable>().ToList() path; target the expression that produces the
IReadOnlyList<IReusable> (the code using items.Cast<IReusable>().ToList()) so
value-type T still uses the safe LINQ fallback while reference-type sequences
avoid the extra O(n) allocation.
In `@tools/performance/Perf.ManualTestDirect.cs`:
- Line 135: The switch-expression arms that currently use a residual cast to
object (e.g. the "ZIGZAG" arm using (object)Quotes.ToZigZag(), and the "WMA"
arms in Buffer and StreamHub) should be explicitly annotated so future editors
don't remove the cast and break typing; update each of those arms to either keep
the explicit (object) cast and add a short inline comment like "// type-anchor:
object" or replace the cast with an explicit comment-only anchor (e.g. append
"/* type-anchor: object */") so the switch expression remains well-typed as
object (refer to the "ZIGZAG" arm and the "WMA" arms in Buffer and StreamHub to
locate the spots).
Signed-off-by: Dave Skender <[email protected]>
There was a problem hiding this comment.
Actionable comments posted: 2
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.
Inline comments:
In `@tools/performance/Perf.ManualTestDirect.cs`:
- Line 244: Update the two implicit calls to use the explicit period parameter
to match the existing explicit call: change the call to Quotes.ToDonchian to
pass 20 (reference: Quotes.ToDonchian) and change the call to
Quotes.ToDonchianList to pass 20 (reference: Quotes.ToDonchianList) so all three
implementations (Quotes.ToDonchian(20), Quotes.ToDonchianList(20),
quoteHub.ToDonchianHub(20).Results) consistently use an explicit lookback period
of 20.
- Around line 189-190: The RENKO-ATR benchmarks are incorrectly using the
fixed-brick overloads ToRenko(14), ToRenkoHub(14) and ToRenkoList(14m) instead
of the ATR-based variant; update the Series benchmark to call ToRenkoAtr(14)
(the ATR-based method) and remove the RENKO-ATR entries for Buffer and StreamHub
(since BufferList and StreamHub have no ToRenkoAtrList/ToRenkoAtrHub
implementations), ensuring you replace the Series use of ToRenko(14) with
ToRenkoAtr(14) and delete the RENKO-ATR lines that call ToRenkoList(14m) and
ToRenkoHub(14).
|
@coderabbitai pause |
✅ Actions performedReviews paused. |
Signed-off-by: Dave Skender <[email protected]>
No description provided.