#region Copyright & License Information /* * Copyright 2007-2011 The OpenRA Developers (see AUTHORS) * This file is part of OpenRA, which is free software. It is made * available to you under the terms of the GNU General Public License * as published by the Free Software Foundation. For more information, * see COPYING. */ #endregion using System; using System.Linq; using OpenRA.FileFormats; using OpenRA.Traits; namespace OpenRA.Lint { static class YamlChecker { static int errors = 0; static void EmitError(string e) { Console.WriteLine("OpenRA.Lint(1,1): Error: {0}", e); ++errors; } static void EmitWarning(string e) { Console.WriteLine("OpenRA.Lint(1,1): Warning: {0}", e); } static int Main(string[] args) { try { var options = args.Where(a => a.StartsWith("-")); var mod = args.Where(a => !options.Contains(a)).First(); var map = args.Where(a => !options.Contains(a)).Skip(1).FirstOrDefault(); var verbose = options.Contains("-v") || options.Contains("--verbose"); // bind some nonfatal error handling into FieldLoader, so we don't just *explode*. ObjectCreator.MissingTypeAction = s => EmitError("Missing Type: {0}".F(s)); FieldLoader.UnknownFieldAction = (s, f) => EmitError("FieldLoader: Missing field `{0}` on `{1}`".F(s, f.Name)); AppDomain.CurrentDomain.AssemblyResolve += FileSystem.ResolveAssembly; Game.modData = new ModData(mod); var testMap = string.IsNullOrEmpty(map) ? new Map() : new Map(map); if (verbose && !string.IsNullOrEmpty(map)) Console.WriteLine("Map: {0}".F(testMap.Title)); Rules.LoadRules(Game.modData.Manifest, testMap); foreach (var customPassType in Game.modData.ObjectCreator .GetTypesImplementing()) { try { var customPass = (ILintPass)Game.modData.ObjectCreator .CreateBasic(customPassType); if (verbose) Console.WriteLine("Pass: {0}".F(customPassType.ToString())); customPass.Run(EmitError, EmitWarning); } catch (Exception e) { EmitError("Failed with exception: {0}".F(e)); } } if (errors > 0) { Console.WriteLine("Errors: {0}", errors); return 1; } return 0; } catch (Exception e) { EmitError("Failed with exception: {0}".F(e)); return 1; } } } }