/// <summary> /// Runs AST conversion on the given target path. /// </summary> /// <remarks> /// The target path is assumed to already be part of the workspace contained by the given host /// </remarks> public static Task <SourceFileParseResult> RunAstConversionAsync(FrontEndHost host, FrontEndContext context, Script.Tracing.Logger logger, IFrontEndStatistics stats, Package package, AbsolutePath conversionTarget) { Contract.RequiresNotNull(host); Contract.RequiresNotNull(context); Contract.RequiresNotNull(logger); Contract.RequiresNotNull(stats); Contract.RequiresNotNull(package); Contract.Requires(conversionTarget.IsValid); var configuration = AstConversionConfiguration.FromConfiguration(host.Configuration.FrontEnd); var linter = DiagnosticAnalyzer.Create( logger, context.LoggingContext, new HashSet <string>(configuration.PolicyRules), configuration.DisableLanguagePolicies); var workspace = (Workspace)host.Workspace; var factory = new RuntimeModelFactory(stats, configuration, linter, workspace); var parserContext = new RuntimeModelContext( host, frontEndContext: context, logger, package: package, origin: default(LocationData)); var sourceFile = workspace.GetSourceFile(conversionTarget); return(factory.ConvertSourceFileAsync(parserContext, sourceFile)); }
/// <summary> /// Creates a linter given <see cref="AstConversionConfiguration"/>. /// </summary> protected DiagnosticAnalyzer CreateLinter(AstConversionConfiguration configuration) { return(DiagnosticAnalyzer.Create( Logger, Context.LoggingContext, new HashSet <string>(configuration.PolicyRules), configuration.DisableLanguagePolicies)); }
/// <summary> /// Creates a parser based on the front end configuration passed at initialization time. /// </summary> /// <remarks> /// The created parser schedules parsing imports as it finds them /// </remarks> protected RuntimeModelFactory CreateRuntimeModelFactory(Workspace workspace) { var configuration = AstConversionConfiguration.FromConfiguration(FrontEndConfiguration); return(new RuntimeModelFactory( FrontEndStatistics, configuration, GetOrCreateLinter(configuration), workspace)); }
/// <nodoc /> public DScriptExprEvaluator(LoggingContext loggingContext) { var configuration = new AstConversionConfiguration( policyRules: Enumerable.Empty <string>(), disableLanguagePolicies: false); s_parser = new RuntimeModelFactory( m_logger, loggingContext, new FrontEndStatistics(), configuration, workspace: null); }
/// <nodoc /> public ConfigurationConversionHelper( [CanBeNull] FrontEndEngineAbstraction engine, ConfigurationKind kind, Logger logger, FrontEndHost host, FrontEndContext context, IConfiguration configuration, IFrontEndStatistics statistics) : base(statistics, logger, host, context, configuration) { Engine = engine ?? new SimpleFrontEndEngineAbstraction(context.PathTable, context.FileSystem, configuration); Kind = kind; ConversionConfiguration = AstConversionConfiguration.ForConfiguration(FrontEndConfiguration); Linter = Lazy.Create(() => CreateLinter(ConversionConfiguration)); }
/// <nodoc /> public ExpressionEvaluator(DebuggerState state) { m_state = state; var configuration = new AstConversionConfiguration( policyRules: Enumerable.Empty <string>(), disableLanguagePolicies: false); s_parser = new RuntimeModelFactory( m_logger, m_state.LoggingContext, new FrontEndStatistics(), configuration, workspace: null); }
/// <nodoc /> public ConfigurationConversionHelper( [CanBeNull] FrontEndEngineAbstraction engine, ConfigurationKind kind, GlobalConstants constants, ModuleRegistry sharedModuleRegistry, Logger logger, FrontEndHost host, FrontEndContext context, IConfiguration configuration, IFrontEndStatistics statistics = null) : base(constants, sharedModuleRegistry, statistics ?? new FrontEndStatistics(), logger, host, context, configuration) { Engine = engine ?? new SimpleFrontEndEngineAbstraction(context.PathTable, context.FileSystem, configuration); Kind = kind; ConversionConfiguration = AstConversionConfiguration.ForConfiguration(FrontEndConfiguration); Linter = Lazy.Create(() => CreateLinter(ConversionConfiguration)); }
/// <summary> /// If a linter has already been created by this method (for any given configuration), /// returns the existing linter; otherwise, creates a linter given <see cref="AstConversionConfiguration"/>, /// saves it, and returns it. /// </summary> protected DiagnosticAnalyzer GetOrCreateLinter(AstConversionConfiguration configuration) { return(m_linter ?? (m_linter = CreateLinter(configuration))); }