/// <nodoc /> public ConfigurationProcessor( GlobalConstants constants, ModuleRegistry sharedModuleRegistry, Logger logger) // Configuration processing is so lightweight that it won't affect overall perf statistics : base(constants, sharedModuleRegistry, new FrontEndStatistics(), logger) { }
/// <nodoc/> public MsBuildFrontEnd( GlobalConstants constants, ModuleRegistry sharedModuleRegistry, IFrontEndStatistics statistics, Logger logger = null) : base(constants, sharedModuleRegistry, statistics, logger) { Name = nameof(MsBuildFrontEnd); }
/// <inheritdoc /> IConfiguration IConfigurationProcessor.InterpretConfiguration( AbsolutePath primaryConfigurationFile, ICommandLineConfiguration commandLineConfiguration) { Contract.Requires(primaryConfigurationFile.IsValid); Contract.Requires(commandLineConfiguration != null); var configObjectLiteral = ParseAndInterpretConfigFile(primaryConfigurationFile); if (configObjectLiteral == null) { // Error has been reported already return(null); } // Apply Additional configurations from the commandline foreach (var additionalConfigurationFile in commandLineConfiguration.Startup.AdditionalConfigFiles) { configObjectLiteral = ParseAndInterpretConfigFile(additionalConfigurationFile, configObjectLiteral); } // TODO: user override is not really working now. Fix me! try { // Merge the object literal with the initial C# defaults. return(ConfigurationConverter.AugmentConfigurationWith(Context, commandLineConfiguration, configObjectLiteral)); } catch (ConversionException conversionException) { var configFileString = primaryConfigurationFile.ToString(Context.PathTable); Logger.ReportConversionException( Context.LoggingContext, new Location() { File = configFileString }, Name, GetConversionExceptionMessage(primaryConfigurationFile, conversionException)); return(null); } }
private async Task <ObjectLiteral> ParseAndInterpretConfigFileAsync(AbsolutePath configPath) { Contract.Requires(configPath.IsValid); // must create a helper NOW (instead of in 'Initialize') because the value of 'Engine' now might be different from the value in 'Initialize' var configHelper = CreateHelper(); var parsedConfig = await configHelper.ParseValidateAndConvertConfigFileAsync(configPath); if (!parsedConfig.Success) { // Errors should have been reported during parsing. return(null); } var configObjectLiteral = EvaluateConfigObjectLiteral(parsedConfig.Result); if (configObjectLiteral == null) { var configPathString = configPath.ToString(Context.PathTable); Logger.ReportSourceResolverConfigurationIsNotObjectLiteral( Context.LoggingContext, new Location() { File = configPathString }, frontEndName: null, configPath: configPathString); return(null); } // Re-create workspace without typechecking for the purpose of storing it in PrimaryConfigurationWorkspace var nonTypeCheckedWorkspace = await configHelper.ParseAndValidateConfigFileAsync(configPath, typecheck : false); Contract.Assert(nonTypeCheckedWorkspace != null && nonTypeCheckedWorkspace.Succeeded); PrimaryConfigurationWorkspace = nonTypeCheckedWorkspace; return(configObjectLiteral); }
private static IReadOnlyCollection <LinterFailure> ComputeLinterFailures(Workspace workspace, BuildXL.FrontEnd.Script.Tracing.Logger logger, PathTable pathTable) { // Unfortunately all linter rules log using the logger directly, so we need to retrieve the event, map it to a typescript diagnostic and add it to the // failure list var failures = new List <LinterFailure>(); foreach (var diagnostic in logger.CapturedDiagnostics) { var path = diagnostic.Location != null?AbsolutePath.Create(pathTable, diagnostic.Location.Value.File) : AbsolutePath.Invalid; if (path.IsValid && workspace.TryGetSourceFile(path, out var sourceFile)) { INode node; DScriptNodeUtilities.TryGetNodeAtPosition(sourceFile, diagnostic.Location.Value.GetAbsolutePosition(sourceFile), out node); Contract.Assert(node != null); var startPosition = Scanner.SkipOverTrivia(sourceFile, node.Pos); var typeScriptDiagnostic = new Diagnostic( sourceFile, startPosition, node.GetWidth(), diagnostic.FullMessage, DiagnosticCategory.Error, diagnostic.ErrorCode); var descriptor = workspace.GetModuleBySpecFileName(path).Descriptor; failures.Add(new LinterFailure(descriptor, sourceFile, typeScriptDiagnostic)); } } return(failures); }
/// <nodoc /> public ConfigurationProcessor( IFrontEndStatistics statistics, Logger logger) : base(statistics, logger) { }