docs(xmldoc): fill missing XML docs + strip tracking-ID comments across src
v2-ci / build (push) Failing after 41s
v2-ci / unit-tests (tests/Core/ZB.MOM.WW.OtOpcUa.Cluster.Tests) (push) Has been skipped
v2-ci / unit-tests (tests/Server/ZB.MOM.WW.OtOpcUa.ControlPlane.Tests) (push) Has been skipped
v2-ci / unit-tests (tests/Server/ZB.MOM.WW.OtOpcUa.OpcUaServer.Tests) (push) Has been skipped
v2-ci / unit-tests (tests/Server/ZB.MOM.WW.OtOpcUa.Runtime.Tests) (push) Has been skipped
v2-ci / unit-tests (tests/Server/ZB.MOM.WW.OtOpcUa.Security.Tests) (push) Has been skipped
v2-ci / integration (tests/Server/ZB.MOM.WW.OtOpcUa.Host.IntegrationTests) (push) Has been skipped
v2-ci / integration (tests/Server/ZB.MOM.WW.OtOpcUa.OpcUaServer.IntegrationTests) (push) Has been skipped
v2-ci / build (push) Failing after 41s
v2-ci / unit-tests (tests/Core/ZB.MOM.WW.OtOpcUa.Cluster.Tests) (push) Has been skipped
v2-ci / unit-tests (tests/Server/ZB.MOM.WW.OtOpcUa.ControlPlane.Tests) (push) Has been skipped
v2-ci / unit-tests (tests/Server/ZB.MOM.WW.OtOpcUa.OpcUaServer.Tests) (push) Has been skipped
v2-ci / unit-tests (tests/Server/ZB.MOM.WW.OtOpcUa.Runtime.Tests) (push) Has been skipped
v2-ci / unit-tests (tests/Server/ZB.MOM.WW.OtOpcUa.Security.Tests) (push) Has been skipped
v2-ci / integration (tests/Server/ZB.MOM.WW.OtOpcUa.Host.IntegrationTests) (push) Has been skipped
v2-ci / integration (tests/Server/ZB.MOM.WW.OtOpcUa.OpcUaServer.IntegrationTests) (push) Has been skipped
Adds <summary>/<param>/<returns>/<inheritdoc> where missing and removes project bookkeeping IDs (task/tracking refs) from shipped code comments, so the docs read cleanly and CommentChecker is quiet except for known false positives (PLC/protocol terms, event/IEqualityComparer inheritdoc). Doc/comment-only; no logic changed; solution builds clean.
This commit is contained in:
@@ -14,9 +14,13 @@ public interface IScriptTagCatalog
|
||||
/// ctx.GetTag/SetVirtualTag), optionally filtered by a literal prefix.</summary>
|
||||
/// <param name="filter">Case-insensitive StartsWith prefix; <c>null</c>/empty returns all (bounded).</param>
|
||||
/// <param name="ct">Cancellation token.</param>
|
||||
/// <returns>The matching configured tag + virtual-tag paths.</returns>
|
||||
Task<IReadOnlyList<string>> GetPathsAsync(string? filter, CancellationToken ct);
|
||||
|
||||
/// <summary>Exact (case-sensitive, Ordinal) lookup of a resolvable tag path; null when not a known configured path.</summary>
|
||||
/// <param name="path">The exact tag/virtual-tag path to look up.</param>
|
||||
/// <param name="ct">Cancellation token.</param>
|
||||
/// <returns>The resolved tag info, or <see langword="null"/> when <paramref name="path"/> is not a known configured path.</returns>
|
||||
Task<ScriptTagInfo?> GetTagInfoAsync(string path, CancellationToken ct);
|
||||
|
||||
/// <summary>Distinct attribute leaf names — the substring after the first dot of each
|
||||
|
||||
@@ -8,6 +8,9 @@ namespace ZB.MOM.WW.OtOpcUa.AdminUI.ScriptAnalysis;
|
||||
|
||||
public static class ScriptAnalysisEndpoints
|
||||
{
|
||||
/// <summary>Maps the <c>/api/script-analysis</c> endpoint group (diagnostics, completions, hover, signature help, format), gated to the Administrator/Designer roles.</summary>
|
||||
/// <param name="endpoints">The route builder to map the endpoints onto.</param>
|
||||
/// <returns>The same route builder, for chaining.</returns>
|
||||
public static IEndpointRouteBuilder MapScriptAnalysisEndpoints(this IEndpointRouteBuilder endpoints)
|
||||
{
|
||||
// Require Administrator or Designer — matches the Script page gate and the /deployments gate.
|
||||
|
||||
@@ -33,6 +33,9 @@ public sealed class ScriptAnalysisService
|
||||
|
||||
private readonly IScriptTagCatalog? _catalog;
|
||||
private readonly ILogger<ScriptAnalysisService>? _logger;
|
||||
/// <summary>Creates the script-analysis service.</summary>
|
||||
/// <param name="catalog">The tag catalog used to resolve tag-path completions/hover, or null to disable tag-path features.</param>
|
||||
/// <param name="logger">The logger used to record analysis failures, or null to disable logging.</param>
|
||||
public ScriptAnalysisService(IScriptTagCatalog? catalog = null, ILogger<ScriptAnalysisService>? logger = null)
|
||||
{
|
||||
_catalog = catalog;
|
||||
@@ -81,6 +84,10 @@ public sealed class ScriptAnalysisService
|
||||
|
||||
private static string Normalize(string? s) => (s ?? "").Replace("\r\n", "\n").Replace("\r", "\n");
|
||||
|
||||
/// <summary>Compiles the script and returns compile-error diagnostics plus sandbox-policy violations
|
||||
/// (forbidden types, disallowed dynamic tag paths).</summary>
|
||||
/// <param name="req">The diagnose request carrying the script source.</param>
|
||||
/// <returns>The list of diagnostic markers, empty when the script is clean or analysis fails.</returns>
|
||||
public DiagnoseResponse Diagnose(DiagnoseRequest req)
|
||||
{
|
||||
if (string.IsNullOrEmpty(req.Code)) return new DiagnoseResponse(Array.Empty<DiagnosticMarker>());
|
||||
@@ -149,6 +156,9 @@ public sealed class ScriptAnalysisService
|
||||
if (code[i] == '\n') { line++; col = 1; } else col++;
|
||||
return (line, col);
|
||||
}
|
||||
/// <summary>Computes completion items (tag-path, dot-member, or in-scope symbol completions) at the caret position.</summary>
|
||||
/// <param name="req">The completions request carrying the script source and caret position.</param>
|
||||
/// <returns>The resolved list of completion items, empty when none apply.</returns>
|
||||
public async Task<CompletionsResponse> CompleteAsync(CompletionsRequest req)
|
||||
{
|
||||
if (string.IsNullOrEmpty(req.CodeText)) return new CompletionsResponse(Array.Empty<CompletionItem>());
|
||||
@@ -245,6 +255,9 @@ public sealed class ScriptAnalysisService
|
||||
return new CompletionItem(symbol.Name, symbol.Name,
|
||||
symbol.ToDisplayString(SymbolDisplayFormat.MinimallyQualifiedFormat), kind);
|
||||
}
|
||||
/// <summary>Computes hover information (tag-path info or C# symbol info) for the position under the caret.</summary>
|
||||
/// <param name="req">The hover request carrying the script source and caret position.</param>
|
||||
/// <returns>The resolved hover markdown, or a response with a null value when nothing resolves.</returns>
|
||||
public async Task<HoverResponse> Hover(HoverRequest req)
|
||||
{
|
||||
if (string.IsNullOrWhiteSpace(req.CodeText)) return new HoverResponse(null);
|
||||
@@ -339,6 +352,9 @@ public sealed class ScriptAnalysisService
|
||||
catch { return null; }
|
||||
}
|
||||
|
||||
/// <summary>Computes signature help for the method invocation at the caret position.</summary>
|
||||
/// <param name="req">The signature-help request carrying the script source and caret position.</param>
|
||||
/// <returns>The resolved signature and active-parameter index, or an empty response when none applies.</returns>
|
||||
public SignatureHelpResponse SignatureHelp(SignatureHelpRequest req)
|
||||
{
|
||||
var empty = new SignatureHelpResponse(null, null, 0);
|
||||
@@ -373,7 +389,10 @@ public sealed class ScriptAnalysisService
|
||||
}
|
||||
catch (Exception ex) { _logger?.LogWarning(ex, "Script signature help failed."); return empty; }
|
||||
}
|
||||
public FormatResponse Format(FormatRequest req) // Task 8
|
||||
/// <summary>Formats a script's source code using Roslyn's syntax-tree whitespace normalization.</summary>
|
||||
/// <param name="req">The format request carrying the script source to format.</param>
|
||||
/// <returns>The formatted source, or the original source unchanged if parsing/formatting fails.</returns>
|
||||
public FormatResponse Format(FormatRequest req)
|
||||
{
|
||||
if (string.IsNullOrEmpty(req.Code)) return new FormatResponse(req.Code);
|
||||
try
|
||||
@@ -389,5 +408,9 @@ public sealed class ScriptAnalysisService
|
||||
return new FormatResponse(req.Code);
|
||||
}
|
||||
}
|
||||
public InlayHintsResponse InlayHints(InlayHintsRequest req) => new(Array.Empty<InlayHint>()); // Task 8 (stays empty)
|
||||
/// <summary>Returns editor inlay hints for the script. Currently a no-op (always empty) — the endpoint
|
||||
/// exists for future use but the feature is not implemented.</summary>
|
||||
/// <param name="req">The inlay-hints request (unused).</param>
|
||||
/// <returns>An always-empty inlay-hints response.</returns>
|
||||
public InlayHintsResponse InlayHints(InlayHintsRequest req) => new(Array.Empty<InlayHint>());
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user