示例#1
0
        public static void WriteImport(CodeTextBuilder code, ImportDirective import)
        {
            code.Write("import ");

            if (import.AsDefault != null)
            {
                code.Write(import.AsDefault.Name);
            }
            else if (import.AsNamespace != null)
            {
                code.Write($"* as {import.AsNamespace.Name}");
            }
            else if (import.AsTuple != null)
            {
                JavaScriptExpressionWriter.WriteTuple(code, import.AsTuple);
            }

            if (import.From != null)
            {
                code.Write($" from '{import.From.GetModulePath()}'");
            }
            else if (import.What != null)
            {
                code.Write($"'{import.What.GetModulePath()}'");
            }

            code.WriteLine(";");
        }
示例#2
0
        public static void WriteClass(CodeTextBuilder code, TypeMember type)
        {
            code.WriteLine($"class {type.Name} {{");
            code.Indent(1);

            type.Members.ForEach((member, index) => {
                if (index > 0)
                {
                    code.WriteLine();
                }

                JavaScriptMemberWriter.WriteMember(code, member);
            });

            code.Indent(-1);
            code.WriteLine("}");
        }
示例#3
0
 private void WriteMembers(ModuleMember module)
 {
     foreach (var member in module.Members)
     {
         _code.WriteLine();
         JavaScriptMemberWriter.WriteMember(_code, member);
     }
 }
示例#4
0
        public static void WriteStatementLine(CodeTextBuilder code, AbstractStatement statement)
        {
            WriteStatement(code, statement);

            if (!(statement is BlockStatement))
            {
                code.WriteLine(";");
            }
        }
示例#5
0
        public static void WriteFunction(CodeTextBuilder code, MethodMember method)
        {
            WriteModifiers(code, method);
            code.Write(method.Name.GetSealedOrCased(
                           CasingStyle.Camel,
                           sealOrigin: IdentifierName.OriginKind.Generator,
                           sealLanguage: LanguageInfo.Entries.JavaScript()));

            WriteParameters(code, method.Signature);
            WriteBody(code, method.Body);
            code.WriteLine();
        }
示例#6
0
        private static void WriteIf(CodeTextBuilder code, IfStatement statement)
        {
            code.Write("if (");
            JavaScriptExpressionWriter.WriteExpression(code, statement.Condition);
            code.WriteLine(") ");

            WriteBlockInsideBraces(code, statement.ThenBlock);

            if (statement.ElseBlock != null)
            {
                WriteBlockInsideBraces(code, statement.ElseBlock);
            }
        }
示例#7
0
        private static void WriteBody(CodeTextBuilder code, BlockStatement body)
        {
            code.WriteLine("{");
            code.Indent(1);

            foreach (var statement in body.Statements)
            {
                JavaScriptStatementWriter.WriteStatementLine(code, statement);
            }

            code.Indent(-1);
            code.Write("}");
        }
示例#8
0
        public void WriteModule(ModuleMember module, bool privateScope = false)
        {
            _code = new CodeTextBuilder(_output.TextOptions);

            WriteImports(module);

            if (privateScope)
            {
                _code.WriteLine("(function() {");
                _code.Indent(1);
            }

            WriteMembers(module);
            WriteGlobalBlock(module);

            if (privateScope)
            {
                _code.Indent(-1);
                _code.WriteLine("}());");
            }

            _output.AddSourceFile(module.FolderPath, $"{module.Name.ToString(CasingStyle.Kebab)}.js", _code.ToString());
        }
示例#9
0
 private static void WriteRawCode(CodeTextBuilder code, RawCodeStatement raw)
 {
     code.WriteLine(raw.Code);
 }