public static ScriptCompilationResult GetCompilationForLoadDirective(CompileDirection compileDirection, string path, AsmDetail asmDetail,
                                                                             List <string> namespaces, IEnumerable <MetadataReference> metadataReferences)
        {
            var targetType            = GetResolutionTargetType(path);
            var referencedCompilation = new ScriptCompilationResult();

            if (compileDirection == CompileDirection.EverythingBuiltAsClassesAndReffed)
            {
                if (targetType == ResolutionTargetType.Cs)
                {
                    var compilationUnit = GetRootMainCompilationUnit(FileUtilities.GetFileContent(path), CsRewriter.DefaultParseOptions);
                    referencedCompilation = CompileAndWriteAssembly(ImmutableList.Create(compilationUnit.SyntaxTree),
                                                                    asmDetail, namespaces, metadataReferences);
                }
            }
            else //compileDirection == CompileDirection.OnlyClassesBuiltAsScriptsAndReffed
            {
                if (targetType == ResolutionTargetType.Cs)
                {
                    var extraction = CsRewriter.ExtractCompilationDetailFromClassFile(path);
                    referencedCompilation = CompileAndWriteScript(extraction.CompilationTargets.First(),
                                                                  asmDetail, namespaces, metadataReferences);
                }
                else
                {
                    var compilationUnit = GetRootMainCompilationUnit(FileUtilities.GetFileContent(path));
                    referencedCompilation = CompileAndWriteAssembly(ImmutableList.Create(compilationUnit.SyntaxTree),
                                                                    asmDetail, namespaces, metadataReferences);
                }
            }

            Debug.Assert(referencedCompilation != null, "load directive compilation should not be null",
                         $"path '{path}' - compileDirection {compileDirection} - targetType {targetType}\n\n\n");

            return(referencedCompilation);
        }
 public static CSharpParseOptions GetParseOptions(CompileDirection compileDirection)
 {
     return(compileDirection == CompileDirection.EverythingBuiltAsClassesAndReffed
         ? CsRewriter.DefaultParseOptions
         : CsRewriter.DefaultScriptParseOptions);
 }