Files
2026-06-01 13:23:34 +09:00

96 lines
3.1 KiB
C#
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
using KssSmaPlaLib.Encryption;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;
using System.Threading.Tasks;
namespace KssSmaPlaLib.Tools.ClaraHack.NamespaceAdjust
{
public static class NamespaceAdjusterUxer
{
public static bool TuckIntoMain(string[] args)
{
if (args.Length != 3) return false;
if (args[0].ToLower() != "/namespaceadjuster") return false;
var projectTopFolderPath = args[1];
var projectName = args[2];
if (NamespaceAdjusterUxer.Try(
projectTopFolderPath,
projectName,
out var updatedCount,
out var resultMessage) == false)
{
Console.WriteLine(resultMessage);
}
else
{
Console.WriteLine($"namespace調整完了。[更新ファイル数:{updatedCount}]");
}
return true;
}
public static bool Try(
string projectRootPath,
string projectName,
out int updatedCount,
out string resultMessage)
{
updatedCount = 0;
resultMessage = string.Empty;
// フォルダバリデ
if (!Directory.Exists(projectRootPath))
{
resultMessage = $"プロジェクトルートフォルダが存在しません。[プロジェクトルートフォルダ:{projectRootPath}]";
return false;
}
// 配下全どり
var csFiles = Directory.GetFiles(
projectRootPath,
"*.cs",
SearchOption.AllDirectories);
foreach (var filePath in csFiles)
{
// トップ下相対フォルダパス
var relativeDir = Path.GetDirectoryName(filePath)?.Substring(projectRootPath.Length).TrimStart(Path.DirectorySeparatorChar);
// セパレータ変換('\'→'.'
var namespaceSuffix = relativeDir?.Replace(Path.DirectorySeparatorChar, '.');
// トップノード(PJ名)つけてフル化
var fullNamespace = string.IsNullOrEmpty(namespaceSuffix)
// PJ名のみ(カレントはトップ下)
? projectName
// PJ名+配下
: $"{projectName}.{namespaceSuffix}";
// フル読み
var content = File.ReadAllText(filePath);
// namespace行の置換
var newContent = Regex.Replace(
content,
@"namespace\s+[\w\.]+",
$"namespace {fullNamespace}");
if (newContent != content)
{
// 内容変わった時だけ書き込み
File.WriteAllText(filePath, newContent);
updatedCount++;
}
}
return true;
}
}
}