xamarin-macios/docs/website/xamarin-analysis-doc-tool/xamarin-analysis-doc.cs

70 строки
2.5 KiB
C#

using System;
using System.Xml.Linq;
using System.IO;
namespace XamarinAnalysisDoc
{
class MainClass
{
static string analysis_path;
public static int Main (string [] args)
{
if (args.Length < 1) {
Console.WriteLine ("Usage: mono xamarin-analysis-doc.exe /path/to/Xamarin.iOS.Analysis.targets");
return 1;
}
analysis_path = args [0];
if (!File.Exists (analysis_path)) {
Console.WriteLine ($"Cannot find {analysis_path}");
return 1;
}
GenerateAnalysisDoc (analysis_path);
return 0;
}
static void GenerateAnalysisDoc (string path)
{
var section = "---\n";
section += "id: c29b69f5-08e4-4dcc-831e-7fd692ab0886\n";
section += "title: Xamarin.iOS Analysis Rules\n";
section += "dateupdated: " + DateTime.Now.ToString("yyyy-MM-dd") + "\n";
section += "---\n\n";
section += "[//]: # (The original file resides under https://github.com/xamarin/xamarin-macios/tree/main/docs/website/)\n";
section += "[//]: # (This allows all contributors (including external) to submit, using a PR, updates to the documentation that match the tools changes)\n";
section += "[//]: # (Modifications outside of xamarin-macios/main will be lost on future updates)\n\n";
section += "Xamarin.iOS analysis is a set of rules that check your project settings to help you determine if better/more optimized settings are available.\n\n";
section += "Run the analysis rules as often as possible to find possible improvements early on and save development time.\n\n";
section += "To run the rules, in Visual Studio for Mac's menu, select **Project > Run Code Analysis**.\n\n";
section += "> ⚠️ **NOTE:** Xamarin.iOS analysis only runs on your currently selected configuration. We highly recommend running the tool for debug **and** release configurations.\n\n";
var root = XDocument.Load (path);
XNamespace ns = "http://schemas.microsoft.com/developer/msbuild/2003";
foreach (XElement target in root.Descendants (ns + "Target")) {
var nameAttr = target.Attribute ("Name").Value;
var rule = nameAttr.Split ('_');
var ruleID = rule [0];
var ruleName = rule [1];
section += $"### <a name=\"{ruleID}\"/>{ruleID}: {ruleName}\n\n";
foreach (var xpaResult in target.Descendants (ns + "XamarinProjectAnalysisResult").Elements ()) {
if (xpaResult.Name.LocalName != "Category") {
section += "- **" + xpaResult.Name.LocalName + ":** ";
section += xpaResult.Value + "\n";
}
}
section += "\n";
}
File.WriteAllText ("xamarin-ios-analysis.md", section);
}
}
}