/// <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)
        {
        }
示例#2
0
 /// <nodoc/>
 public MsBuildFrontEnd(
     GlobalConstants constants,
     ModuleRegistry sharedModuleRegistry,
     IFrontEndStatistics statistics,
     Logger logger = null)
     : base(constants, sharedModuleRegistry, statistics, logger)
 {
     Name = nameof(MsBuildFrontEnd);
 }
示例#3
0
        /// <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);
        }
示例#5
0
        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);
        }
示例#6
0
 /// <nodoc />
 public ConfigurationProcessor(
     IFrontEndStatistics statistics,
     Logger logger)
     : base(statistics, logger)
 {
 }