diff --git a/cmd/asciidoc/asciidoc.go b/cmd/asciidoc/asciidoc.go index 55a60bf..df1b966 100644 --- a/cmd/asciidoc/asciidoc.go +++ b/cmd/asciidoc/asciidoc.go @@ -21,13 +21,13 @@ func NewCommand(config *cli.Config) *cobra.Command { } // flags - cmd.PersistentFlags().BoolVar(&config.Settings.Required, "required", true, "show \"Required\" column or section") - cmd.PersistentFlags().BoolVar(&config.Settings.Sensitive, "sensitive", true, "show \"Sensitive\" column or section") + cmd.PersistentFlags().BoolVar(&config.Settings.Required, "required", true, "show Required column or section") + cmd.PersistentFlags().BoolVar(&config.Settings.Sensitive, "sensitive", true, "show Sensitive column or section") cmd.PersistentFlags().IntVar(&config.Settings.Indent, "indent", 2, "indention level of AsciiDoc sections [1, 2, 3, 4, 5]") // deprecation - cmd.PersistentFlags().BoolVar(new(bool), "no-required", false, "do not show \"Required\" column or section") - cmd.PersistentFlags().BoolVar(new(bool), "no-sensitive", false, "do not show \"Sensitive\" column or section") + cmd.PersistentFlags().BoolVar(&config.Settings.Deprecated.NoRequired, "no-required", false, "do not show \"Required\" column or section") + cmd.PersistentFlags().BoolVar(&config.Settings.Deprecated.NoSensitive, "no-sensitive", false, "do not show \"Sensitive\" column or section") cmd.PersistentFlags().MarkDeprecated("no-required", "use '--required=false' instead") //nolint:errcheck cmd.PersistentFlags().MarkDeprecated("no-sensitive", "use '--sensitive=false' instead") //nolint:errcheck diff --git a/cmd/json/json.go b/cmd/json/json.go index 72975a0..33a7415 100644 --- a/cmd/json/json.go +++ b/cmd/json/json.go @@ -21,7 +21,7 @@ func NewCommand(config *cli.Config) *cobra.Command { cmd.PersistentFlags().BoolVar(&config.Settings.Escape, "escape", true, "escape special characters") // deprecation - cmd.PersistentFlags().BoolVar(new(bool), "no-escape", false, "do not escape special characters") + cmd.PersistentFlags().BoolVar(&config.Settings.Deprecated.NoEscape, "no-escape", false, "do not escape special characters") cmd.PersistentFlags().MarkDeprecated("no-escape", "use '--escape=false' instead") //nolint:errcheck return cmd diff --git a/cmd/markdown/markdown.go b/cmd/markdown/markdown.go index 7d95d47..4b4cec1 100644 --- a/cmd/markdown/markdown.go +++ b/cmd/markdown/markdown.go @@ -21,15 +21,15 @@ func NewCommand(config *cli.Config) *cobra.Command { } // flags - cmd.PersistentFlags().BoolVar(&config.Settings.Required, "required", true, "show \"Required\" column or section") - cmd.PersistentFlags().BoolVar(&config.Settings.Sensitive, "sensitive", true, "show \"Sensitive\" column or section") + cmd.PersistentFlags().BoolVar(&config.Settings.Required, "required", true, "show Required column or section") + cmd.PersistentFlags().BoolVar(&config.Settings.Sensitive, "sensitive", true, "show Sensitive column or section") cmd.PersistentFlags().BoolVar(&config.Settings.Escape, "escape", true, "escape special characters") cmd.PersistentFlags().IntVar(&config.Settings.Indent, "indent", 2, "indention level of Markdown sections [1, 2, 3, 4, 5]") // deprecation - cmd.PersistentFlags().BoolVar(new(bool), "no-required", false, "do not show \"Required\" column or section") - cmd.PersistentFlags().BoolVar(new(bool), "no-sensitive", false, "do not show \"Sensitive\" column or section") - cmd.PersistentFlags().BoolVar(new(bool), "no-escape", false, "do not escape special characters") + cmd.PersistentFlags().BoolVar(&config.Settings.Deprecated.NoRequired, "no-required", false, "do not show \"Required\" column or section") + cmd.PersistentFlags().BoolVar(&config.Settings.Deprecated.NoSensitive, "no-sensitive", false, "do not show \"Sensitive\" column or section") + cmd.PersistentFlags().BoolVar(&config.Settings.Deprecated.NoEscape, "no-escape", false, "do not escape special characters") cmd.PersistentFlags().MarkDeprecated("no-required", "use '--required=false' instead") //nolint:errcheck cmd.PersistentFlags().MarkDeprecated("no-sensitive", "use '--sensitive=false' instead") //nolint:errcheck cmd.PersistentFlags().MarkDeprecated("no-escape", "use '--escape=false' instead") //nolint:errcheck diff --git a/cmd/pretty/pretty.go b/cmd/pretty/pretty.go index 748111b..9a3bf92 100644 --- a/cmd/pretty/pretty.go +++ b/cmd/pretty/pretty.go @@ -21,7 +21,7 @@ func NewCommand(config *cli.Config) *cobra.Command { cmd.PersistentFlags().BoolVar(&config.Settings.Color, "color", true, "colorize printed result") // deprecation - cmd.PersistentFlags().BoolVar(new(bool), "no-color", false, "do not colorize printed result") + cmd.PersistentFlags().BoolVar(&config.Settings.Deprecated.NoColor, "no-color", false, "do not colorize printed result") cmd.PersistentFlags().MarkDeprecated("no-color", "use '--color=false' instead") //nolint:errcheck return cmd diff --git a/cmd/root.go b/cmd/root.go index 1289a3f..2b3db8c 100644 --- a/cmd/root.go +++ b/cmd/root.go @@ -42,7 +42,10 @@ func NewCommand() *cobra.Command { } // flags + cmd.PersistentFlags().StringSliceVar(&config.Sections.Show, "show", []string{}, "show section [header, inputs, outputs, providers, requirements]") cmd.PersistentFlags().StringSliceVar(&config.Sections.Hide, "hide", []string{}, "hide section [header, inputs, outputs, providers, requirements]") + cmd.PersistentFlags().BoolVar(&config.Sections.ShowAll, "show-all", true, "show all sections") + cmd.PersistentFlags().BoolVar(&config.Sections.HideAll, "hide-all", false, "hide all sections (default false)") cmd.PersistentFlags().BoolVar(&config.Sort.Enabled, "sort", true, "sort items") cmd.PersistentFlags().BoolVar(&config.Sort.By.Required, "sort-by-required", false, "sort items by name and print required ones first (default false)") @@ -54,12 +57,12 @@ func NewCommand() *cobra.Command { cmd.PersistentFlags().StringVar(&config.OutputValues.From, "output-values-from", "", "inject output values from file into outputs (default \"\")") // deprecation - cmd.PersistentFlags().BoolVar(new(bool), "no-header", false, "do not show module header") - cmd.PersistentFlags().BoolVar(new(bool), "no-inputs", false, "do not show inputs") - cmd.PersistentFlags().BoolVar(new(bool), "no-outputs", false, "do not show outputs") - cmd.PersistentFlags().BoolVar(new(bool), "no-providers", false, "do not show providers") - cmd.PersistentFlags().BoolVar(new(bool), "no-requirements", false, "do not show module requirements") - cmd.PersistentFlags().BoolVar(new(bool), "no-sort", false, "do no sort items") + cmd.PersistentFlags().BoolVar(&config.Sections.Deprecated.NoHeader, "no-header", false, "do not show module header") + cmd.PersistentFlags().BoolVar(&config.Sections.Deprecated.NoInputs, "no-inputs", false, "do not show inputs") + cmd.PersistentFlags().BoolVar(&config.Sections.Deprecated.NoOutputs, "no-outputs", false, "do not show outputs") + cmd.PersistentFlags().BoolVar(&config.Sections.Deprecated.NoProviders, "no-providers", false, "do not show providers") + cmd.PersistentFlags().BoolVar(&config.Sections.Deprecated.NoRequirements, "no-requirements", false, "do not show module requirements") + cmd.PersistentFlags().BoolVar(&config.Sort.Deprecated.NoSort, "no-sort", false, "do no sort items") cmd.PersistentFlags().MarkDeprecated("no-header", "use '--hide header' instead") //nolint:errcheck cmd.PersistentFlags().MarkDeprecated("no-inputs", "use '--hide inputs' instead") //nolint:errcheck diff --git a/docs/FORMATS_GUIDE.md b/docs/FORMATS_GUIDE.md index 2679f2d..bac9bc5 100644 --- a/docs/FORMATS_GUIDE.md +++ b/docs/FORMATS_GUIDE.md @@ -12,8 +12,11 @@ A utility to generate documentation from Terraform modules in various output for --header-from string relative path of a file to read header from (default "main.tf") -h, --help help for terraform-docs --hide strings hide section [header, inputs, outputs, providers, requirements] + --hide-all hide all sections (default false) --output-values inject output values into outputs (default false) --output-values-from string inject output values from file into outputs (default "") + --show strings show section [header, inputs, outputs, providers, requirements] + --show-all show all sections (default true) --sort sort items (default true) --sort-by-required sort items by name and print required ones first (default false) --sort-by-type sort items by type of them (default false) @@ -36,4 +39,4 @@ A utility to generate documentation from Terraform modules in various output for * [terraform-docs xml](/docs/formats/xml.md) - Generate XML of inputs and outputs * [terraform-docs yaml](/docs/formats/yaml.md) - Generate YAML of inputs and outputs -###### Auto generated by spf13/cobra on 20-May-2020 +###### Auto generated by spf13/cobra on 24-May-2020 diff --git a/docs/USER_GUIDE.md b/docs/USER_GUIDE.md index e95d67c..66f791d 100644 --- a/docs/USER_GUIDE.md +++ b/docs/USER_GUIDE.md @@ -8,6 +8,15 @@ Support for Terraform `v0.12.x` has been added in `terraform-docs` version `v0.8 Please refer to [Formats Guide](/docs/FORMATS_GUIDE.md) for guidance on output formats, execution syntax, CLI options, etc. +## Control Visibility of Sections + +Output generated by `terraform-docs` consists of different sections (header, requirements, providers, inputs, outputs) which are visible by default. The visibility of these can be controlled by one or combination of : `--show-all`, `--hide-all`, `--show ` and `--hide `. For example: + +```bash +terraform-docs --show-all --hide header ... # show all sections except 'header' +terraform-docs --hide-all --show inputs --show outputs ... # hide all sections except 'inputs' and 'outputs' +``` + ## Generate terraform.tfvars You can generate `terraform.tfvars` in both `hcl` and `json` format by executing the following: diff --git a/docs/formats/asciidoc-document.md b/docs/formats/asciidoc-document.md index 30f8cbb..a83d5d4 100644 --- a/docs/formats/asciidoc-document.md +++ b/docs/formats/asciidoc-document.md @@ -21,11 +21,14 @@ terraform-docs asciidoc document [PATH] [flags] ``` --header-from string relative path of a file to read header from (default "main.tf") --hide strings hide section [header, inputs, outputs, providers, requirements] + --hide-all hide all sections (default false) --indent int indention level of AsciiDoc sections [1, 2, 3, 4, 5] (default 2) --output-values inject output values into outputs (default false) --output-values-from string inject output values from file into outputs (default "") - --required show "Required" column or section (default true) - --sensitive show "Sensitive" column or section (default true) + --required show Required column or section (default true) + --sensitive show Sensitive column or section (default true) + --show strings show section [header, inputs, outputs, providers, requirements] + --show-all show all sections (default true) --sort sort items (default true) --sort-by-required sort items by name and print required ones first (default false) --sort-by-type sort items by type of them (default false) @@ -416,4 +419,4 @@ generates the following output: -###### Auto generated by spf13/cobra on 20-May-2020 +###### Auto generated by spf13/cobra on 24-May-2020 diff --git a/docs/formats/asciidoc-table.md b/docs/formats/asciidoc-table.md index 2fba3cd..64f6b3f 100644 --- a/docs/formats/asciidoc-table.md +++ b/docs/formats/asciidoc-table.md @@ -21,11 +21,14 @@ terraform-docs asciidoc table [PATH] [flags] ``` --header-from string relative path of a file to read header from (default "main.tf") --hide strings hide section [header, inputs, outputs, providers, requirements] + --hide-all hide all sections (default false) --indent int indention level of AsciiDoc sections [1, 2, 3, 4, 5] (default 2) --output-values inject output values into outputs (default false) --output-values-from string inject output values from file into outputs (default "") - --required show "Required" column or section (default true) - --sensitive show "Sensitive" column or section (default true) + --required show Required column or section (default true) + --sensitive show Sensitive column or section (default true) + --show strings show section [header, inputs, outputs, providers, requirements] + --show-all show all sections (default true) --sort sort items (default true) --sort-by-required sort items by name and print required ones first (default false) --sort-by-type sort items by type of them (default false) @@ -372,4 +375,4 @@ generates the following output: -###### Auto generated by spf13/cobra on 20-May-2020 +###### Auto generated by spf13/cobra on 24-May-2020 diff --git a/docs/formats/asciidoc.md b/docs/formats/asciidoc.md index 88491de..b0e5f16 100644 --- a/docs/formats/asciidoc.md +++ b/docs/formats/asciidoc.md @@ -15,8 +15,8 @@ terraform-docs asciidoc [PATH] [flags] ``` -h, --help help for asciidoc --indent int indention level of AsciiDoc sections [1, 2, 3, 4, 5] (default 2) - --required show "Required" column or section (default true) - --sensitive show "Sensitive" column or section (default true) + --required show Required column or section (default true) + --sensitive show Sensitive column or section (default true) ``` ### Options inherited from parent commands @@ -24,8 +24,11 @@ terraform-docs asciidoc [PATH] [flags] ``` --header-from string relative path of a file to read header from (default "main.tf") --hide strings hide section [header, inputs, outputs, providers, requirements] + --hide-all hide all sections (default false) --output-values inject output values into outputs (default false) --output-values-from string inject output values from file into outputs (default "") + --show strings show section [header, inputs, outputs, providers, requirements] + --show-all show all sections (default true) --sort sort items (default true) --sort-by-required sort items by name and print required ones first (default false) --sort-by-type sort items by type of them (default false) @@ -36,4 +39,4 @@ terraform-docs asciidoc [PATH] [flags] * [terraform-docs asciidoc document](/docs/formats/asciidoc-document.md) - Generate AsciiDoc document of inputs and outputs * [terraform-docs asciidoc table](/docs/formats/asciidoc-table.md) - Generate AsciiDoc tables of inputs and outputs -###### Auto generated by spf13/cobra on 20-May-2020 +###### Auto generated by spf13/cobra on 24-May-2020 diff --git a/docs/formats/json.md b/docs/formats/json.md index b6da476..715f2e1 100644 --- a/docs/formats/json.md +++ b/docs/formats/json.md @@ -22,8 +22,11 @@ terraform-docs json [PATH] [flags] ``` --header-from string relative path of a file to read header from (default "main.tf") --hide strings hide section [header, inputs, outputs, providers, requirements] + --hide-all hide all sections (default false) --output-values inject output values into outputs (default false) --output-values-from string inject output values from file into outputs (default "") + --show strings show section [header, inputs, outputs, providers, requirements] + --show-all show all sections (default true) --sort sort items (default true) --sort-by-required sort items by name and print required ones first (default false) --sort-by-type sort items by type of them (default false) @@ -335,4 +338,4 @@ generates the following output: } -###### Auto generated by spf13/cobra on 20-May-2020 +###### Auto generated by spf13/cobra on 24-May-2020 diff --git a/docs/formats/markdown-document.md b/docs/formats/markdown-document.md index e46b2be..b92f688 100644 --- a/docs/formats/markdown-document.md +++ b/docs/formats/markdown-document.md @@ -22,11 +22,14 @@ terraform-docs markdown document [PATH] [flags] --escape escape special characters (default true) --header-from string relative path of a file to read header from (default "main.tf") --hide strings hide section [header, inputs, outputs, providers, requirements] + --hide-all hide all sections (default false) --indent int indention level of Markdown sections [1, 2, 3, 4, 5] (default 2) --output-values inject output values into outputs (default false) --output-values-from string inject output values from file into outputs (default "") - --required show "Required" column or section (default true) - --sensitive show "Sensitive" column or section (default true) + --required show Required column or section (default true) + --sensitive show Sensitive column or section (default true) + --show strings show section [header, inputs, outputs, providers, requirements] + --show-all show all sections (default true) --sort sort items (default true) --sort-by-required sort items by name and print required ones first (default false) --sort-by-type sort items by type of them (default false) @@ -417,4 +420,4 @@ generates the following output: -###### Auto generated by spf13/cobra on 20-May-2020 +###### Auto generated by spf13/cobra on 24-May-2020 diff --git a/docs/formats/markdown-table.md b/docs/formats/markdown-table.md index 1756e9d..fa918e4 100644 --- a/docs/formats/markdown-table.md +++ b/docs/formats/markdown-table.md @@ -22,11 +22,14 @@ terraform-docs markdown table [PATH] [flags] --escape escape special characters (default true) --header-from string relative path of a file to read header from (default "main.tf") --hide strings hide section [header, inputs, outputs, providers, requirements] + --hide-all hide all sections (default false) --indent int indention level of Markdown sections [1, 2, 3, 4, 5] (default 2) --output-values inject output values into outputs (default false) --output-values-from string inject output values from file into outputs (default "") - --required show "Required" column or section (default true) - --sensitive show "Sensitive" column or section (default true) + --required show Required column or section (default true) + --sensitive show Sensitive column or section (default true) + --show strings show section [header, inputs, outputs, providers, requirements] + --show-all show all sections (default true) --sort sort items (default true) --sort-by-required sort items by name and print required ones first (default false) --sort-by-type sort items by type of them (default false) @@ -143,4 +146,4 @@ generates the following output: -###### Auto generated by spf13/cobra on 20-May-2020 +###### Auto generated by spf13/cobra on 24-May-2020 diff --git a/docs/formats/markdown.md b/docs/formats/markdown.md index 545ba95..6ef534d 100644 --- a/docs/formats/markdown.md +++ b/docs/formats/markdown.md @@ -16,8 +16,8 @@ terraform-docs markdown [PATH] [flags] --escape escape special characters (default true) -h, --help help for markdown --indent int indention level of Markdown sections [1, 2, 3, 4, 5] (default 2) - --required show "Required" column or section (default true) - --sensitive show "Sensitive" column or section (default true) + --required show Required column or section (default true) + --sensitive show Sensitive column or section (default true) ``` ### Options inherited from parent commands @@ -25,8 +25,11 @@ terraform-docs markdown [PATH] [flags] ``` --header-from string relative path of a file to read header from (default "main.tf") --hide strings hide section [header, inputs, outputs, providers, requirements] + --hide-all hide all sections (default false) --output-values inject output values into outputs (default false) --output-values-from string inject output values from file into outputs (default "") + --show strings show section [header, inputs, outputs, providers, requirements] + --show-all show all sections (default true) --sort sort items (default true) --sort-by-required sort items by name and print required ones first (default false) --sort-by-type sort items by type of them (default false) @@ -37,4 +40,4 @@ terraform-docs markdown [PATH] [flags] * [terraform-docs markdown document](/docs/formats/markdown-document.md) - Generate Markdown document of inputs and outputs * [terraform-docs markdown table](/docs/formats/markdown-table.md) - Generate Markdown tables of inputs and outputs -###### Auto generated by spf13/cobra on 20-May-2020 +###### Auto generated by spf13/cobra on 24-May-2020 diff --git a/docs/formats/pretty.md b/docs/formats/pretty.md index 53ec56e..0df42ff 100644 --- a/docs/formats/pretty.md +++ b/docs/formats/pretty.md @@ -22,8 +22,11 @@ terraform-docs pretty [PATH] [flags] ``` --header-from string relative path of a file to read header from (default "main.tf") --hide strings hide section [header, inputs, outputs, providers, requirements] + --hide-all hide all sections (default false) --output-values inject output values into outputs (default false) --output-values-from string inject output values from file into outputs (default "") + --show strings show section [header, inputs, outputs, providers, requirements] + --show-all show all sections (default true) --sort sort items (default true) --sort-by-required sort items by name and print required ones first (default false) --sort-by-type sort items by type of them (default false) @@ -239,4 +242,4 @@ generates the following output: -###### Auto generated by spf13/cobra on 20-May-2020 +###### Auto generated by spf13/cobra on 24-May-2020 diff --git a/docs/formats/tfvars-hcl.md b/docs/formats/tfvars-hcl.md index e5c254e..5aeb91c 100644 --- a/docs/formats/tfvars-hcl.md +++ b/docs/formats/tfvars-hcl.md @@ -21,8 +21,11 @@ terraform-docs tfvars hcl [PATH] [flags] ``` --header-from string relative path of a file to read header from (default "main.tf") --hide strings hide section [header, inputs, outputs, providers, requirements] + --hide-all hide all sections (default false) --output-values inject output values into outputs (default false) --output-values-from string inject output values from file into outputs (default "") + --show strings show section [header, inputs, outputs, providers, requirements] + --show-all show all sections (default true) --sort sort items (default true) --sort-by-required sort items by name and print required ones first (default false) --sort-by-type sort items by type of them (default false) @@ -95,4 +98,4 @@ generates the following output: with-url = "" -###### Auto generated by spf13/cobra on 20-May-2020 +###### Auto generated by spf13/cobra on 24-May-2020 diff --git a/docs/formats/tfvars-json.md b/docs/formats/tfvars-json.md index 3ea12a4..aded015 100644 --- a/docs/formats/tfvars-json.md +++ b/docs/formats/tfvars-json.md @@ -21,8 +21,11 @@ terraform-docs tfvars json [PATH] [flags] ``` --header-from string relative path of a file to read header from (default "main.tf") --hide strings hide section [header, inputs, outputs, providers, requirements] + --hide-all hide all sections (default false) --output-values inject output values into outputs (default false) --output-values-from string inject output values from file into outputs (default "") + --show strings show section [header, inputs, outputs, providers, requirements] + --show-all show all sections (default true) --sort sort items (default true) --sort-by-required sort items by name and print required ones first (default false) --sort-by-type sort items by type of them (default false) @@ -97,4 +100,4 @@ generates the following output: } -###### Auto generated by spf13/cobra on 20-May-2020 +###### Auto generated by spf13/cobra on 24-May-2020 diff --git a/docs/formats/tfvars.md b/docs/formats/tfvars.md index 19af717..01b2856 100644 --- a/docs/formats/tfvars.md +++ b/docs/formats/tfvars.md @@ -17,8 +17,11 @@ Generate terraform.tfvars of inputs ``` --header-from string relative path of a file to read header from (default "main.tf") --hide strings hide section [header, inputs, outputs, providers, requirements] + --hide-all hide all sections (default false) --output-values inject output values into outputs (default false) --output-values-from string inject output values from file into outputs (default "") + --show strings show section [header, inputs, outputs, providers, requirements] + --show-all show all sections (default true) --sort sort items (default true) --sort-by-required sort items by name and print required ones first (default false) --sort-by-type sort items by type of them (default false) @@ -29,4 +32,4 @@ Generate terraform.tfvars of inputs * [terraform-docs tfvars hcl](/docs/formats/tfvars-hcl.md) - Generate HCL format of terraform.tfvars of inputs * [terraform-docs tfvars json](/docs/formats/tfvars-json.md) - Generate JSON format of terraform.tfvars of inputs -###### Auto generated by spf13/cobra on 20-May-2020 +###### Auto generated by spf13/cobra on 24-May-2020 diff --git a/docs/formats/toml.md b/docs/formats/toml.md index b63e639..adc776d 100644 --- a/docs/formats/toml.md +++ b/docs/formats/toml.md @@ -21,8 +21,11 @@ terraform-docs toml [PATH] [flags] ``` --header-from string relative path of a file to read header from (default "main.tf") --hide strings hide section [header, inputs, outputs, providers, requirements] + --hide-all hide all sections (default false) --output-values inject output values into outputs (default false) --output-values-from string inject output values from file into outputs (default "") + --show strings show section [header, inputs, outputs, providers, requirements] + --show-all show all sections (default true) --sort sort items (default true) --sort-by-required sort items by name and print required ones first (default false) --sort-by-type sort items by type of them (default false) @@ -312,4 +315,4 @@ generates the following output: -###### Auto generated by spf13/cobra on 20-May-2020 +###### Auto generated by spf13/cobra on 24-May-2020 diff --git a/docs/formats/xml.md b/docs/formats/xml.md index 0a9fa50..b9b75a7 100644 --- a/docs/formats/xml.md +++ b/docs/formats/xml.md @@ -21,8 +21,11 @@ terraform-docs xml [PATH] [flags] ``` --header-from string relative path of a file to read header from (default "main.tf") --hide strings hide section [header, inputs, outputs, providers, requirements] + --hide-all hide all sections (default false) --output-values inject output values into outputs (default false) --output-values-from string inject output values from file into outputs (default "") + --show strings show section [header, inputs, outputs, providers, requirements] + --show-all show all sections (default true) --sort sort items (default true) --sort-by-required sort items by name and print required ones first (default false) --sort-by-type sort items by type of them (default false) @@ -334,4 +337,4 @@ generates the following output: -###### Auto generated by spf13/cobra on 20-May-2020 +###### Auto generated by spf13/cobra on 24-May-2020 diff --git a/docs/formats/yaml.md b/docs/formats/yaml.md index 5120443..346ec18 100644 --- a/docs/formats/yaml.md +++ b/docs/formats/yaml.md @@ -21,8 +21,11 @@ terraform-docs yaml [PATH] [flags] ``` --header-from string relative path of a file to read header from (default "main.tf") --hide strings hide section [header, inputs, outputs, providers, requirements] + --hide-all hide all sections (default false) --output-values inject output values into outputs (default false) --output-values-from string inject output values from file into outputs (default "") + --show strings show section [header, inputs, outputs, providers, requirements] + --show-all show all sections (default true) --sort sort items (default true) --sort-by-required sort items by name and print required ones first (default false) --sort-by-type sort items by type of them (default false) @@ -286,4 +289,4 @@ generates the following output: version: '>= 2.2.0' -###### Auto generated by spf13/cobra on 20-May-2020 +###### Auto generated by spf13/cobra on 24-May-2020 diff --git a/internal/cli/config.go b/internal/cli/config.go index 3642fd8..eae0a0b 100644 --- a/internal/cli/config.go +++ b/internal/cli/config.go @@ -4,14 +4,26 @@ import ( "fmt" "strings" - "github.com/spf13/pflag" - "github.com/segmentio/terraform-docs/internal/module" "github.com/segmentio/terraform-docs/pkg/print" ) +// list of flagset items which explicitly changed from CLI +var changedfs = make(map[string]bool) + +type _sections struct { + NoHeader bool + NoInputs bool + NoOutputs bool + NoProviders bool + NoRequirements bool +} type sections struct { - Hide []string + Show []string + Hide []string + ShowAll bool + HideAll bool + Deprecated *_sections header bool inputs bool @@ -20,40 +32,101 @@ type sections struct { requirements bool } -func (s *sections) contains(section string) bool { - for _, item := range s.Hide { - if item == section { - return true - } +func defaultSections() *sections { + return §ions{ + Show: []string{}, + Hide: []string{}, + ShowAll: true, + HideAll: false, + Deprecated: &_sections{ + NoHeader: false, + NoInputs: false, + NoOutputs: false, + NoProviders: false, + NoRequirements: false, + }, + + header: false, + inputs: false, + outputs: false, + providers: false, + requirements: false, } - return false } -func (s *sections) validate(fs *pflag.FlagSet) error { - sections := []string{"header", "inputs", "outputs", "providers", "requirements"} - for _, h := range s.Hide { - switch h { - case sections[0], sections[1], sections[2], sections[3], sections[4]: +func (s *sections) validate() error { + items := []string{"header", "inputs", "outputs", "providers", "requirements"} + for _, item := range s.Show { + switch item { + case items[0], items[1], items[2], items[3], items[4]: default: - return fmt.Errorf("'%s' is not a valid section", h) + return fmt.Errorf("'%s' is not a valid section", item) } } - for _, section := range sections { - if fs.Changed("no-"+section) && s.contains(section) { - return fmt.Errorf("'--no-%s' and '--hide %s' cannot be used together", section, section) + for _, item := range s.Hide { + switch item { + case items[0], items[1], items[2], items[3], items[4]: + default: + return fmt.Errorf("'%s' is not a valid section", item) + } + } + if s.ShowAll && s.HideAll { + return fmt.Errorf("'--show-all' and '--hide-all' can't be used together") + } + if s.ShowAll && len(s.Show) != 0 { + return fmt.Errorf("'--show-all' and '--show' can't be used together") + } + if s.HideAll && len(s.Hide) != 0 { + return fmt.Errorf("'--hide-all' and '--hide' can't be used together") + } + for _, section := range items { + if changedfs["no-"+section] && contains(s.Hide, section) { + return fmt.Errorf("'--no-%s' and '--hide %s' can't be used together", section, section) } } return nil } +func (s *sections) visibility(section string) bool { + if s.ShowAll && !s.HideAll { + for _, n := range s.Hide { + if n == section { + return false + } + } + return true + } + for _, n := range s.Show { + if n == section { + return true + } + } + for _, n := range s.Hide { + if n == section { + return false + } + } + return false +} + type outputvalues struct { Enabled bool From string } +func defaultOutputValues() *outputvalues { + return &outputvalues{ + Enabled: false, + From: "", + } +} + func (o *outputvalues) validate() error { if o.Enabled && o.From == "" { - return fmt.Errorf("value of '--output-values-from' cannot be empty") + if changedfs["output-values-from"] { + return fmt.Errorf("value of '--output-values-from' can't be empty") + } + return fmt.Errorf("value of '--output-values-from' is missing") } return nil } @@ -62,37 +135,77 @@ type sortby struct { Required bool Type bool } +type _sort struct { + NoSort bool +} type sort struct { - Enabled bool - By *sortby + Enabled bool + By *sortby + Deprecated *_sort } -func (s *sort) validate(fs *pflag.FlagSet) error { +func defaultSort() *sort { + return &sort{ + Enabled: true, + By: &sortby{ + Required: false, + Type: false, + }, + Deprecated: &_sort{ + NoSort: false, + }, + } +} + +func (s *sort) validate() error { items := []string{"sort"} for _, item := range items { - if fs.Changed("no-"+item) && fs.Changed(item) { - return fmt.Errorf("'--no-%s' and '--%s' cannot be used together", item, item) + if changedfs[item] && changedfs["no-"+item] { + return fmt.Errorf("'--%s' and '--no-%s' can't be used together", item, item) } } - if fs.Changed("sort-by-required") && fs.Changed("sort-by-type") { - return fmt.Errorf("'--sort-by-required' and '--sort-by-type' cannot be used together") + if s.By.Required && s.By.Type { + return fmt.Errorf("'--sort-by-required' and '--sort-by-type' can't be used together") } return nil } +type _settings struct { + NoColor bool + NoEscape bool + NoRequired bool + NoSensitive bool +} type settings struct { - Color bool - Escape bool - Indent int - Required bool - Sensitive bool + Color bool + Escape bool + Indent int + Required bool + Sensitive bool + Deprecated *_settings } -func (s *settings) validate(fs *pflag.FlagSet) error { +func defaultSettings() *settings { + return &settings{ + Color: true, + Escape: true, + Indent: 2, + Required: true, + Sensitive: true, + Deprecated: &_settings{ + NoColor: false, + NoEscape: false, + NoRequired: false, + NoSensitive: false, + }, + } +} + +func (s *settings) validate() error { items := []string{"escape", "color", "required", "sensitive"} for _, item := range items { - if fs.Changed("no-"+item) && fs.Changed(item) { - return fmt.Errorf("'--no-%s' and '--%s' cannot be used together", item, item) + if changedfs[item] && changedfs["no-"+item] { + return fmt.Errorf("'--%s' and '--no-%s' can't be used together", item, item) } } return nil @@ -111,40 +224,84 @@ type Config struct { // DefaultConfig returns new instance of Config with default values set func DefaultConfig() *Config { return &Config{ - Formatter: "", - HeaderFrom: "main.tf", - Sections: §ions{ - Hide: []string{}, - - header: true, - inputs: true, - outputs: true, - providers: true, - requirements: true, - }, - OutputValues: &outputvalues{ - Enabled: false, - From: "", - }, - Sort: &sort{ - Enabled: true, - By: &sortby{ - Required: false, - Type: false, - }, - }, - Settings: &settings{ - Color: true, - Escape: true, - Indent: 2, - Required: false, - Sensitive: false, - }, + Formatter: "", + HeaderFrom: "main.tf", + Sections: defaultSections(), + OutputValues: defaultOutputValues(), + Sort: defaultSort(), + Settings: defaultSettings(), } } +// normalize provided Config +func (c *Config) normalize(command string) { + c.Formatter = strings.Replace(command, "terraform-docs ", "", -1) + + // sections + if c.Sections.HideAll && !changedfs["show-all"] { + c.Sections.ShowAll = false + } + if !c.Sections.ShowAll && !changedfs["hide-all"] { + c.Sections.HideAll = true + } + c.Sections.header = c.Sections.visibility("header") + c.Sections.inputs = c.Sections.visibility("inputs") + c.Sections.outputs = c.Sections.visibility("outputs") + c.Sections.providers = c.Sections.visibility("providers") + c.Sections.requirements = c.Sections.visibility("requirements") + + // sort + if !changedfs["sort"] { + c.Sort.Enabled = !c.Sort.Deprecated.NoSort + } + + // settings + if !changedfs["escape"] { + c.Settings.Escape = !c.Settings.Deprecated.NoEscape + } + if !changedfs["color"] { + c.Settings.Color = !c.Settings.Deprecated.NoColor + } + if !changedfs["required"] { + c.Settings.Required = !c.Settings.Deprecated.NoRequired + } + if !changedfs["sensitive"] { + c.Settings.Sensitive = !c.Settings.Deprecated.NoSensitive + } +} + +// validate config and check for any misuse or misconfiguration +func (c *Config) validate() error { + // header-from + if c.HeaderFrom == "" { + return fmt.Errorf("value of '--header-from' can't be empty") + } + + // sections + if err := c.Sections.validate(); err != nil { + return err + } + + // output values + if err := c.OutputValues.validate(); err != nil { + return err + } + + // sort + if err := c.Sort.validate(); err != nil { + return err + } + + // settings + if err := c.Settings.validate(); err != nil { + return err + } + + return nil +} + // extract and build print.Settings and module.Options out of Config -func (c *Config) extract() (*print.Settings, *module.Options, error) { +func (c *Config) extract() (*print.Settings, *module.Options) { settings := print.NewSettings() options := module.NewOptions() @@ -179,57 +336,14 @@ func (c *Config) extract() (*print.Settings, *module.Options, error) { settings.ShowRequired = c.Settings.Required settings.ShowSensitivity = c.Settings.Sensitive - return settings, options, nil + return settings, options } -// normalize provided Config and check for any misuse or misconfiguration -func normalize(command string, fs *pflag.FlagSet, config *Config) error { - config.Formatter = strings.Replace(command, "terraform-docs ", "", -1) - - // header-from - if fs.Changed("header-from") && config.HeaderFrom == "" { - return fmt.Errorf("value of '--header-from' cannot be empty") +func contains(list []string, name string) bool { + for _, i := range list { + if i == name { + return true + } } - - // sections - if err := config.Sections.validate(fs); err != nil { - return err - } - config.Sections.header = !(config.Sections.contains("header") || fs.Changed("no-header")) - config.Sections.inputs = !(config.Sections.contains("inputs") || fs.Changed("no-inputs")) - config.Sections.outputs = !(config.Sections.contains("outputs") || fs.Changed("no-outputs")) - config.Sections.providers = !(config.Sections.contains("providers") || fs.Changed("no-providers")) - config.Sections.requirements = !(config.Sections.contains("requirements") || fs.Changed("no-requirements")) - - // output values - if err := config.OutputValues.validate(); err != nil { - return err - } - - // sort - if err := config.Sort.validate(fs); err != nil { - return err - } - if !fs.Changed("sort") { - config.Sort.Enabled = !fs.Changed("no-sort") - } - - // settings - if err := config.Settings.validate(fs); err != nil { - return err - } - if !fs.Changed("escape") { - config.Settings.Escape = !fs.Changed("no-escape") - } - if !fs.Changed("color") { - config.Settings.Color = !fs.Changed("no-color") - } - if !fs.Changed("required") { - config.Settings.Required = !fs.Changed("no-required") - } - if !fs.Changed("sensitive") { - config.Settings.Sensitive = !fs.Changed("no-sensitive") - } - - return nil + return false } diff --git a/internal/cli/run.go b/internal/cli/run.go index 8e47834..e3696b6 100644 --- a/internal/cli/run.go +++ b/internal/cli/run.go @@ -4,6 +4,7 @@ import ( "fmt" "github.com/spf13/cobra" + "github.com/spf13/pflag" "github.com/segmentio/terraform-docs/internal/format" "github.com/segmentio/terraform-docs/internal/module" @@ -14,7 +15,17 @@ import ( // flags and arguments passed through CLI execution. func PreRunEFunc(config *Config) func(*cobra.Command, []string) error { return func(cmd *cobra.Command, args []string) error { - return normalize(cmd.CommandPath(), cmd.Flags(), config) + cmd.Flags().VisitAll(func(f *pflag.Flag) { + changedfs[f.Name] = f.Changed + }) + + config.normalize(cmd.CommandPath()) + + if err := config.validate(); err != nil { + return err + } + + return nil } } @@ -24,24 +35,28 @@ func PreRunEFunc(config *Config) func(*cobra.Command, []string) error { // initializes required print.Format instance and executes it. func RunEFunc(config *Config) func(*cobra.Command, []string) error { return func(cmd *cobra.Command, args []string) error { - settings, options, err := config.extract() - if err != nil { - return err - } + settings, options := config.extract() + printer, err := format.Factory(config.Formatter, settings) if err != nil { return err } + options.Path = args[0] + tfmodule, err := module.LoadWithOptions(options) if err != nil { return err + } + output, err := printer.Print(tfmodule, settings) if err != nil { return err } + fmt.Println(output) + return nil } }