コード例 #1
0
ファイル: Compilation.cs プロジェクト: tylike/Excess
        private void performAnalysis(CompilationAnalysis analysis_, Compilation compilation)
        {
            if (analysis_ == null)
            {
                return;
            }

            var analysis = (CompilationAnalysisBase <SyntaxToken, SyntaxNode, SemanticModel>)analysis_;

            if (!analysis.isNeeded())
            {
                return;
            }

            foreach (var document in _documents)
            {
                var root = document.Document.SyntaxRoot;
                if (root != null)
                {
                    var model   = _compilation.GetSemanticModel(root.SyntaxTree); //td: really neccesary?
                    var visitor = new CompilationAnalysisVisitor(analysis, compilation, _scope);
                    visitor.Visit(root);
                }
            }

            analysis.Finish(compilation, compilation.Scope);
        }
コード例 #2
0
 public SolutionCompilation(string solution, CompilationAnalysis analysis, IDictionary <string, ExtensionFunc> extensions)
 {
     _extensions = extensions;
     _analysis   = analysis;
     _solution   = solution;
     _workspace  = MSBuildWorkspace.Create();
 }
コード例 #3
0
        private static Compilation createCompilation(string text,
                                                     List <Diagnostic> errors     = null,
                                                     IPersistentStorage storage   = null,
                                                     CompilationAnalysis analysis = null)
        {
            var injector = new CompositeInjector <SyntaxToken, SyntaxNode, SemanticModel>(new[]
            {
                new DelegateInjector <SyntaxToken, SyntaxNode, SemanticModel>(compiler => compiler
                                                                              .Environment()
                                                                              .dependency <ExcessOwinMiddleware>("Excess.Server.Middleware")
                                                                              .dependency <IAppBuilder>("Owin")
                                                                              .dependency <IOwinRequest>("Microsoft.Owin")
                                                                              .dependency <__Scope>("Excess.Runtime")),

                new DelegateInjector <SyntaxToken, SyntaxNode, SemanticModel>(
                    compiler => ConcurrentExtension.Apply((RoslynCompiler)compiler)),

                new DelegateInjector <SyntaxToken, SyntaxNode, SemanticModel>(
                    compiler => ServerExtension.Apply(compiler, new Scope(null))),

                new DelegateInjector <SyntaxToken, SyntaxNode, SemanticModel>(
                    compiler => Functions.Apply(compiler))
            });

            if (analysis != null)
            {
                ServerExtension.Compilation(analysis);
            }

            var compilation = new Compilation(storage, analysis: analysis);

            compilation.addDocument("test", text, injector);
            return(compilation);
        }
コード例 #4
0
 public static void Compilation(CompilationAnalysis compilation)
 {
     compilation
     .match <ClassDeclarationSyntax>(isService)
     .then(jsService)
     .match <ClassDeclarationSyntax>(isConcurrentClass)
     .then(jsConcurrentClass)
     .after(addJSFiles);
 }
コード例 #5
0
ファイル: Compilation.cs プロジェクト: tylike/Excess
        public RoslynCompilation(
            IPersistentStorage storage   = null,
            CompilationAnalysis analysis = null,
            IDictionary <string, LoaderFunc> extensions = null,
            bool executable = false)
        {
            _environment = createEnvironment(storage);
            _analysis    = analysis;
            _extensions  = extensions;
            _executable  = executable;

            //setup
            _scope.set <ICompilerEnvironment>(_environment);
            _scope.set <ICompilerService <SyntaxToken, SyntaxNode, SemanticModel> >(new CompilerService());
        }
コード例 #6
0
ファイル: Extension.cs プロジェクト: tylike/Excess
        public static void AppCompilation(CompilationAnalysis compilation)
        {
            //app support
            var Programs   = new List <ClassDeclarationSyntax>();
            var Singletons = new List <ClassDeclarationSyntax>();

            compilation
            .match <ClassDeclarationSyntax>((@class, model, scpe) =>
                                            @class.Identifier.ToString() == "Program" &&
                                            @class
                                            .Members
                                            .OfType <MethodDeclarationSyntax>()
                                            .Any(method => method.Identifier.ToString() == "Main"))
            .then((node, model, scpe) => Programs.Add((ClassDeclarationSyntax)node))
            .match <ClassDeclarationSyntax>((@class, model, scpe) => isSingleton(@class))
            .then((node, model, scpe) => Singletons.Add((ClassDeclarationSyntax)node))
            .after(AddAppProgram(Programs, Singletons));
        }
コード例 #7
0
        public static void Apply(ExcessCompiler compiler, Scope scope, CompilationAnalysis compilation = null)
        {
            var options = scope?.get <ServerExtensionOptions>()
                          ?? new ServerExtensionOptions();

            var keywords = scope?.get("keywords") as List <string>;

            keywords?.Add("service");

            //compiler.Syntax()
            //    .extension("server", ExtensionKind.Type, CompileServer);

            var lexical = compiler.Lexical();

            lexical.match()
            .token("service", named: "keyword")
            .identifier(named: "ref")
            .then(lexical.transform()
                  .replace("keyword", "class ")
                  .then(CompileService));

            compiler.Environment()
            .dependency("System.Configuration")
            .dependency("System.Security.Principal")
            .dependency("Microsoft.Owin")
            .dependency("Excess.Server.Middleware")
            ;

            compiler.Lexical()
            .indented <ServerModel, ServerInstance>("server", ExtensionKind.Type, InitApp)
            .match <ServerModel, ServerInstance, ServerLocation>(new[] {
                "@{Url}",
                "on port {Port}",
                "@{Url} port {Port}",
                "@{Url}, port {Port}"
            },
                                                                 then: SetServerLocation)

            .match <ServerModel, ServerInstance, ConfigModel>("using {Threads} threads", then: SetConfiguration)
            .match <ServerModel, ServerInstance, ConfigModel>("identity @{Identity}", then: SetConfiguration)

            .match <ServerModel, ServerInstance, HostingModel>("hosting {ClassName}",
                                                               then: (server, hosting) => server.HostedClasses.Add(hosting.ClassName))

            .match <ServerModel, ServerInstance, StaticFilesModel>(new[] {
                "static files @{Directory}",
                "static files {Directory}",
            },
                                                                   then: (server, staticFiles) => server.StaticFiles = staticFiles.Directory)

            .match <ServerModel, ServerInstance, ServerInstance>("new instance",
                                                                 then: AddInstance,
                                                                 children: child => child.match_parent())

            .match <ServerModel, ServerInstance, SQLLocation>(new[] {
                "sql @{ConnectionString}",
                "sql with {ConnectionInstantiator} @{ConnectionString}",
                "sql on connection {ConnectionId}",
                "sql with {ConnectionInstantiator} on connection {ConnectionId}",
            },
                                                              then: (server, sql) => server.SetSqlLocation(sql))

            .then()
            .transform <ServerInstance>(LinkServerInstance);
        }
コード例 #8
0
 public static void ConsoleCompilation(CompilationAnalysis compilation) => ConcurrentExtension.AppCompilation(compilation);
コード例 #9
0
 public static void PerformanceCompilation(CompilationAnalysis compilation) => ConcurrentExtension.AppCompilation(compilation);
コード例 #10
0
 public CompilationAnalysisVisitor(CompilationAnalysis analysis, Compilation compilation, Scope scope)
 {
     _analysis    = analysis;
     _compilation = compilation;
     _scope       = scope;
 }