Untitled

 avatar
unknown
plain_text
10 months ago
1.5 kB
13
Indexable
function Test-PluginRules($UPlugin){
  $json = (Get-Content -Raw -LiteralPath $UPlugin) | ConvertFrom-Json
  $base = Split-Path -Parent $UPlugin
  if(-not $json.Modules){ Write-Host "No Modules[] in $UPlugin" -ForegroundColor Yellow; return }
  foreach($m in $json.Modules){
    $name = [string]$m.Name
    $modDir = Join-Path $base ("Source\" + $name)
    $build = Join-Path $modDir ($name + ".Build.cs")
    if(-not (Test-Path $build)){
      Write-Host ("Missing Build.cs: " + $build) -ForegroundColor Red
      $alts = Get-ChildItem -Path (Join-Path $base "Source") -Recurse -Filter *.Build.cs -ErrorAction SilentlyContinue
      if($alts){ Write-Host "Other Build.cs files seen:"; $alts | Select-Object -Expand FullName }
      continue
    }
    $txt = Get-Content -LiteralPath $build -Raw
    if($txt -notmatch "class\s+$([regex]::Escape($name))\s*:\s*ModuleRules"){
      Write-Host ("Class name inside Build.cs does not match module '" + $name + "'") -ForegroundColor Red
      $mClasses = [regex]::Matches($txt, "class\s+([A-Za-z0-9_]+)\s*:\s*ModuleRules") | ForEach-Object { $_.Groups[1].Value } | Select-Object -Unique
      if($mClasses){ Write-Host ("Found class(es): " + ($mClasses -join ", ")); }
    } else {
      Write-Host ("OK: " + $name) -ForegroundColor Green
    }
  }
}

# Example:
Test-PluginRules "C:\...\Plugins\TimeManager\TimeManager.uplugin"
Test-PluginRules "C:\...\Plugins\DataReader\DataReader.uplugin"
Editor is loading...
Leave a Comment