Add current-draft diagnostic underlines and passive hover
Preserve raw include diagnostic provenance and derive bands from the existing shaped editor. Retain deferred tooltip paragraphs through rendering. Include source, regression, failure and native-trial evidence; corrected native acceptance remains pending.
This commit is contained in:
@@ -83,7 +83,23 @@ function Get-ArcadiaNotices([string]$Repository, [string]$Target, [string]$Notic
|
||||
}
|
||||
foreach ($id in @($selected | Sort-Object)) {
|
||||
$package = $packages[$id]
|
||||
$root = Split-Path -Parent $package.manifest_path
|
||||
$root = [IO.Path]::GetFullPath((Split-Path -Parent $package.manifest_path)).TrimEnd('\', '/')
|
||||
$isWorkspace = $metadata.workspace_members -contains $id
|
||||
$localPath = $null
|
||||
if (-not $package.source) {
|
||||
$repositoryRoot = [IO.Path]::GetFullPath($Repository).TrimEnd('\', '/')
|
||||
$repositoryPrefix = $repositoryRoot + [IO.Path]::DirectorySeparatorChar
|
||||
$manifestPath = [IO.Path]::GetFullPath($package.manifest_path)
|
||||
$comparison = if ([IO.Path]::DirectorySeparatorChar -eq '/') { [StringComparison]::Ordinal } else { [StringComparison]::OrdinalIgnoreCase }
|
||||
if (-not $manifestPath.StartsWith($repositoryPrefix, $comparison)) { throw "Local dependency is outside repository: $id" }
|
||||
$current = Get-Item -LiteralPath $manifestPath
|
||||
while ($null -ne $current) {
|
||||
if (($current.Attributes -band [IO.FileAttributes]::ReparsePoint) -ne 0) { throw "Local dependency has a reparse ancestor: $id" }
|
||||
if ($current.FullName.Equals($repositoryRoot, $comparison)) { break }
|
||||
$current = if ($current -is [IO.FileInfo]) { $current.Directory } else { $current.Parent }
|
||||
}
|
||||
$localPath = if ($root.Equals($repositoryRoot, $comparison)) { '.' } else { $root.Substring($repositoryPrefix.Length).Replace('\', '/') }
|
||||
}
|
||||
$key = "$($package.name)-$($package.version)"
|
||||
if ($key -notmatch '^[A-Za-z0-9._+-]+$') { throw "Unsafe package identity: $key" }
|
||||
$prefix = "licenses/dependencies/$key"
|
||||
@@ -101,6 +117,7 @@ function Get-ArcadiaNotices([string]$Repository, [string]$Target, [string]$Notic
|
||||
# Hash actual local files (not merely Cargo's cached checksum claims).
|
||||
$sourceHashes = [ordered]@{}
|
||||
$notices = New-Object 'Collections.Generic.List[object]'
|
||||
$hasLicenseText = $false
|
||||
$fontReferences = New-Object 'Collections.Generic.HashSet[string]'
|
||||
foreach ($file in @(Get-ChildItem -LiteralPath $root -Recurse -File | Sort-Object FullName)) {
|
||||
if (($file.Attributes -band [IO.FileAttributes]::ReparsePoint) -ne 0) { throw "Source reparse point requires review: $($file.FullName)" }
|
||||
@@ -110,6 +127,10 @@ function Get-ArcadiaNotices([string]$Repository, [string]$Target, [string]$Notic
|
||||
if ($file.Name -match '(^|[-._])(LICENSE|LICENCE|COPYING|NOTICE|OFL|UNLICENSE|COPYRIGHT)([-._]|$)') {
|
||||
$notices.Add((Add-Notice $file.FullName "$prefix/$relative"))
|
||||
}
|
||||
if ($file.Name -match '(^|[-._])(LICENSE|LICENCE|COPYING|OFL|UNLICENSE)([-._]|$)') { $hasLicenseText = $true }
|
||||
if (-not $package.source -and -not $isWorkspace -and $relative -eq 'ARCADIA-PATCH.md') {
|
||||
$notices.Add((Add-Notice $file.FullName "$prefix/$relative"))
|
||||
}
|
||||
# Literal embedded fonts in production/build source, including feature-gated ones
|
||||
# conservatively. Tests/examples/benches are excluded, never all font files by glob.
|
||||
if ($file.Extension -eq '.rs' -and $relative -notmatch '^(tests|examples|benches)/') {
|
||||
@@ -127,8 +148,10 @@ function Get-ArcadiaNotices([string]$Repository, [string]$Target, [string]$Notic
|
||||
}
|
||||
}
|
||||
}
|
||||
if (-not $package.source) { $notices.Add((Add-Notice (Under-Root $Repository 'LICENSE') "$prefix/workspace-LICENSE")) }
|
||||
$matching = @($supplements.packages | Where-Object { $_.name -eq $package.name -and $_.version -eq $package.version })
|
||||
if ($isWorkspace) { $notices.Add((Add-Notice (Under-Root $Repository 'LICENSE') "$prefix/workspace-LICENSE")) }
|
||||
# Registry supplements bind original .crate bytes, not a local patch
|
||||
# with the same name/version and no registry checksum.
|
||||
$matching = @($supplements.packages | Where-Object { $registryChecksum -and $_.name -eq $package.name -and $_.version -eq $package.version })
|
||||
foreach ($supplement in $matching) {
|
||||
if ($supplement.checksum -ne $registryChecksum) { throw "Supplement is for different registry source: $key" }
|
||||
foreach ($notice in @(Add-Supplements $supplement.notices "$prefix/supplement")) { $notices.Add($notice) }
|
||||
@@ -137,7 +160,9 @@ function Get-ArcadiaNotices([string]$Repository, [string]$Target, [string]$Notic
|
||||
if ($package.license_file) {
|
||||
$licensePath = Under-Root $root $package.license_file
|
||||
$notices.Add((Add-Notice $licensePath "$prefix/declared-license/$([IO.Path]::GetFileName($licensePath))"))
|
||||
$hasLicenseText = $true
|
||||
}
|
||||
if (-not $package.source -and -not $isWorkspace -and -not $hasLicenseText) { $failures.Add("Local dependency requires its own license text: $key") }
|
||||
if ($notices.Count -eq 0) { $failures.Add("No notice text: $key ($($package.license)); provide checksum-bound supplement") }
|
||||
$assets = New-Object 'Collections.Generic.List[object]'
|
||||
foreach ($relative in @($fontReferences | Sort-Object)) {
|
||||
@@ -148,7 +173,7 @@ function Get-ArcadiaNotices([string]$Repository, [string]$Target, [string]$Notic
|
||||
if ($assetNotices.Count -eq 0) { $failures.Add("No embedded font notice: $key/$relative") }
|
||||
$assets.Add([ordered]@{ path = $relative; sha256 = $assetHash; license = $matches[0].license; notices = $assetNotices })
|
||||
}
|
||||
$records.Add([ordered]@{ id = $id; name = $package.name; version = $package.version; license = $package.license; license_file = $package.license_file; repository = $package.repository; source = $package.source; registry_checksum = $registryChecksum; features = $nodes[$id].features; local_source_sha256 = $sourceHashes; notices = @($notices.ToArray()); embedded_fonts = @($assets.ToArray()) })
|
||||
$records.Add([ordered]@{ id = $id; name = $package.name; version = $package.version; license = $package.license; license_file = $package.license_file; repository = $package.repository; source = $package.source; local_path = $localPath; registry_checksum = $registryChecksum; features = $nodes[$id].features; local_source_sha256 = $sourceHashes; notices = @($notices.ToArray()); embedded_fonts = @($assets.ToArray()) })
|
||||
}
|
||||
$rustVersion = @(& rustc -Vv)
|
||||
if ($LASTEXITCODE -ne 0) { throw 'Unable to identify the selected Rust compiler.' }
|
||||
|
||||
Reference in New Issue
Block a user