Ejemplo n.º 1
0
        /// <summary>
        /// Convert language spec enum value to code
        /// </summary>
        /// <param name="languageSpec">Language spec enum value</param>
        /// <returns>Language spec code</returns>
        internal static string ConvertLanguageSpecEnumValueToCode(ExperimentalLanguageSpec languageSpec)
        {
            string code;

            switch (languageSpec)
            {
            case ExperimentalLanguageSpec.EcmaScript3:
                code = "ECMASCRIPT3";
                break;

            case ExperimentalLanguageSpec.EcmaScript5:
                code = "ECMASCRIPT5";
                break;

            case ExperimentalLanguageSpec.EcmaScript5Strict:
                code = "ECMASCRIPT5_STRICT";
                break;

            case ExperimentalLanguageSpec.EcmaScript6:
                code = "ECMASCRIPT6";
                break;

            case ExperimentalLanguageSpec.EcmaScript6Strict:
                code = "ECMASCRIPT6_STRICT";
                break;

            case ExperimentalLanguageSpec.EcmaScript6Typed:
                code = "ECMASCRIPT6_TYPED";
                break;

            default:
                throw new InvalidCastException(string.Format(CoreStrings.Common_EnumValueToCodeConversionFailed,
                                                             languageSpec.ToString(), typeof(LanguageSpec)));
            }

            return(code);
        }
Ejemplo n.º 2
0
        /// <summary>
        /// Converts a compilation options to command line arguments
        /// </summary>
        /// <param name="options">Compilation options</param>
        /// <returns>Command line arguments</returns>
        private static string ConvertCompilationOptionsToArgs(LocalJsCompilationOptions options)
        {
            var           stringBuilderPool = StringBuilderPool.Shared;
            StringBuilder argsBuilder       = stringBuilderPool.Rent();

            if (options.AcceptConstKeyword)
            {
                argsBuilder.Append("--accept_const_keyword ");
            }

            if (options.AllowEs6Output)
            {
                argsBuilder.Append("--allow_es6_out ");
            }

            if (options.AngularPass)
            {
                argsBuilder.Append("--angular_pass ");
            }

            if (!string.IsNullOrWhiteSpace(options.Charset))
            {
                argsBuilder.AppendFormat("--charset {0} ", options.Charset);
            }

            argsBuilder.AppendFormat("--compilation_level {0} ", ConvertCompilationLevelEnumValueToCode(options.CompilationLevel));

            IDictionary <string, string> defs = ParseDefinitions(options.DefinitionList);

            if (defs.Count > 0)
            {
                foreach (KeyValuePair <string, string> def in defs)
                {
                    string variableName  = def.Key;
                    string variableValue = def.Value;

                    argsBuilder.Append("--define ");
                    argsBuilder.Append(variableName);
                    if (variableValue != null)
                    {
                        argsBuilder.AppendFormat("={0}", variableValue);
                    }
                    argsBuilder.Append(" ");
                }
            }

            string[] errors = Utils.ConvertToStringCollection(options.ErrorList, ',',
                                                              trimItemValues: true, removeEmptyItems: true);
            if (errors.Length > 0)
            {
                foreach (string warningClassName in errors)
                {
                    argsBuilder.AppendFormat("--jscomp_error {0} ", warningClassName);
                }
            }

            if (options.ExportLocalPropertyDefinitions)
            {
                argsBuilder.Append("--export_local_property_definitions ");
            }

            string[] extraAnnotationNames = Utils.ConvertToStringCollection(options.ExtraAnnotationNameList, ',',
                                                                            trimItemValues: true, removeEmptyItems: true);
            if (extraAnnotationNames.Length > 0)
            {
                foreach (string extraAnnotationName in extraAnnotationNames)
                {
                    argsBuilder.AppendFormat("--extra_annotation_name {0} ", extraAnnotationName);
                }
            }

            if (options.GenerateExports)
            {
                argsBuilder.Append("--generate_exports ");
            }

            ExperimentalLanguageSpec languageInput = options.LanguageInput;

            if (languageInput != ExperimentalLanguageSpec.None)
            {
                argsBuilder.AppendFormat("--language_in {0} ", ConvertLanguageSpecEnumValueToCode(languageInput));
            }

            ExperimentalLanguageSpec languageOutput = (options.LanguageOutput != ExperimentalLanguageSpec.None) ?
                                                      options.LanguageOutput : languageInput;

            if (languageOutput != ExperimentalLanguageSpec.None)
            {
                argsBuilder.AppendFormat("--language_out {0} ", ConvertLanguageSpecEnumValueToCode(languageOutput));
            }

            if (options.PrettyPrint)
            {
                argsBuilder.Append("--formatting PRETTY_PRINT ");
            }

            if (options.ProcessClosurePrimitives)
            {
                argsBuilder.Append("--process_closure_primitives ");
            }

            if (options.ProcessJqueryPrimitives)
            {
                argsBuilder.Append("--process_jquery_primitives ");
            }

            if (options.SingleQuotes)
            {
                argsBuilder.Append("--formatting SINGLE_QUOTES ");
            }

            if (options.ThirdParty)
            {
                argsBuilder.Append("--third_party ");
            }

            if (options.TranspileOnly)
            {
                argsBuilder.Append("--transpile_only ");
            }

            string[] turnOffWarningClasses = Utils.ConvertToStringCollection(options.TurnOffWarningClassList, ',',
                                                                             trimItemValues: true, removeEmptyItems: true);
            if (turnOffWarningClasses.Length > 0)
            {
                foreach (string warningClassName in turnOffWarningClasses)
                {
                    argsBuilder.AppendFormat("--jscomp_off {0} ", warningClassName);
                }
            }

            if (options.UseOnlyCustomExterns)
            {
                argsBuilder.Append("--use_only_custom_externs ");
            }

            if (options.UseTypesForOptimization)
            {
                argsBuilder.Append("--use_types_for_optimization ");
            }

            string[] warnings = Utils.ConvertToStringCollection(options.WarningList, ',',
                                                                trimItemValues: true, removeEmptyItems: true);
            if (warnings.Length > 0)
            {
                foreach (string warningClassName in warnings)
                {
                    argsBuilder.AppendFormat("--jscomp_warning {0} ", warningClassName);
                }
            }

            int severity = options.Severity;

            if (severity >= 0 && severity <= 3)
            {
                argsBuilder.Append("--warning_level ");

                switch (severity)
                {
                case 0:
                case 1:
                    argsBuilder.Append("QUIET ");
                    break;

                case 2:
                    argsBuilder.Append("DEFAULT ");
                    break;

                case 3:
                    argsBuilder.Append("VERBOSE ");
                    break;
                }
            }

            string args = argsBuilder.ToString();

            stringBuilderPool.Return(argsBuilder);

            return(args);
        }
		/// <summary>
		/// Convert language spec enum value to code
		/// </summary>
		/// <param name="languageSpec">Language spec enum value</param>
		/// <returns>Language spec code</returns>
		internal static string ConvertLanguageSpecEnumValueToCode(ExperimentalLanguageSpec languageSpec)
		{
			string code;

			switch (languageSpec)
			{
				case ExperimentalLanguageSpec.EcmaScript3:
					code = "ECMASCRIPT3";
					break;
				case ExperimentalLanguageSpec.EcmaScript5:
					code = "ECMASCRIPT5";
					break;
				case ExperimentalLanguageSpec.EcmaScript5Strict:
					code = "ECMASCRIPT5_STRICT";
					break;
				case ExperimentalLanguageSpec.EcmaScript6:
					code = "ECMASCRIPT6";
					break;
				case ExperimentalLanguageSpec.EcmaScript6Strict:
					code = "ECMASCRIPT6_STRICT";
					break;
				case ExperimentalLanguageSpec.EcmaScript6Typed:
					code = "ECMASCRIPT6_TYPED";
					break;
				default:
					throw new InvalidCastException(string.Format(CoreStrings.Common_EnumValueToCodeConversionFailed,
						languageSpec.ToString(), typeof(LanguageSpec)));
			}

			return code;
		}