Ejemplo n.º 1
0
        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);
        }
Ejemplo n.º 2
0
        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);
            }
        }
Ejemplo n.º 3
0
        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);
        }