protected virtual RoslynEnvironment createEnvironment(IPersistentStorage storage) { var result = new RoslynEnvironment(_scope, storage, null); result.dependency <object>(new[] { "System", "System.Collections" }); result.dependency <Queue <object> >(new[] { "System.Collections.Generic" }); result.dependency <Expression>(new[] { "System.Linq" }); return(result); }
public RoslynCompiler(ICompilerEnvironment environment, Scope scope = null) : base(new RoslynLexicalAnalysis(), new RoslynSyntaxAnalysis(), new RoslynSemanticAnalysis(), environment ?? scope?.get <ICompilerEnvironment>(), new InstanceAnalisysBase <SyntaxToken, SyntaxNode, SemanticModel>(), scope) { _scope.set <ICompilerService <SyntaxToken, SyntaxNode, SemanticModel> >(new CompilerService()); if (_environment == null) { _environment = new RoslynEnvironment(_scope, null); _scope.set <ICompilerEnvironment>(_environment); } }
private ExcessDocument loadDocument(Project project, string fileName, out RoslynCompiler compiler) { if (_extensions == null || !_extensions.Any()) { throw new InvalidOperationException("no extensions registered, plain c#?"); } var source = File.ReadAllText(fileName); var document = new RoslynDocument(new Scope(_scope), source, fileName); var enviroment = new RoslynEnvironment(_scope, new SolutionStorage(project)); var compilerResult = new RoslynCompiler(enviroment, _scope); var tree = CSharpSyntaxTree.ParseText(source); var usings = (tree.GetRoot() as CompilationUnitSyntax) ?.Usings .Where(@using => { var usingId = @using.Name.ToString(); if (!usingId.StartsWith("xs.")) { return(false); } usingId = usingId.Substring("xs.".Length); var action = null as ExtensionFunc; if (_extensions.TryGetValue(usingId, out action)) { action(compilerResult, null); //td: props? return(true); } return(false); }) .ToArray(); compiler = compilerResult; return(document); }