doc: hide hidden parent flags (#686)

* fixes #685
diff --git a/doc/man_docs.go b/doc/man_docs.go
index ce92332..baa4811 100644
--- a/doc/man_docs.go
+++ b/doc/man_docs.go
@@ -176,13 +176,13 @@
 
 func manPrintOptions(buf *bytes.Buffer, command *cobra.Command) {
 	flags := command.NonInheritedFlags()
-	if flags.HasFlags() {
+	if flags.HasAvailableFlags() {
 		buf.WriteString("# OPTIONS\n")
 		manPrintFlags(buf, flags)
 		buf.WriteString("\n")
 	}
 	flags = command.InheritedFlags()
-	if flags.HasFlags() {
+	if flags.HasAvailableFlags() {
 		buf.WriteString("# OPTIONS INHERITED FROM PARENT COMMANDS\n")
 		manPrintFlags(buf, flags)
 		buf.WriteString("\n")
diff --git a/doc/man_docs_test.go b/doc/man_docs_test.go
index 62f85e4..2c400f5 100644
--- a/doc/man_docs_test.go
+++ b/doc/man_docs_test.go
@@ -47,6 +47,42 @@
 	checkStringContains(t, output, translate("Auto generated"))
 }
 
+func TestGenManNoHiddenParents(t *testing.T) {
+	header := &GenManHeader{
+		Title:   "Project",
+		Section: "2",
+	}
+
+	// We generate on a subcommand so we have both subcommands and parents
+	for _, name := range []string{"rootflag", "strtwo"} {
+		f := rootCmd.PersistentFlags().Lookup(name)
+		f.Hidden = true
+		defer func() { f.Hidden = false }()
+	}
+	buf := new(bytes.Buffer)
+	if err := GenMan(echoCmd, header, buf); err != nil {
+		t.Fatal(err)
+	}
+	output := buf.String()
+
+	// Make sure parent has - in CommandPath() in SEE ALSO:
+	parentPath := echoCmd.Parent().CommandPath()
+	dashParentPath := strings.Replace(parentPath, " ", "-", -1)
+	expected := translate(dashParentPath)
+	expected = expected + "(" + header.Section + ")"
+	checkStringContains(t, output, expected)
+
+	checkStringContains(t, output, translate(echoCmd.Name()))
+	checkStringContains(t, output, translate(echoCmd.Name()))
+	checkStringContains(t, output, "boolone")
+	checkStringOmits(t, output, "rootflag")
+	checkStringContains(t, output, translate(rootCmd.Name()))
+	checkStringContains(t, output, translate(echoSubCmd.Name()))
+	checkStringOmits(t, output, translate(deprecatedCmd.Name()))
+	checkStringContains(t, output, translate("Auto generated"))
+	checkStringOmits(t, output, "OPTIONS INHERITED FROM PARENT COMMANDS")
+}
+
 func TestGenManNoGenTag(t *testing.T) {
 	echoCmd.DisableAutoGenTag = true
 	defer func() { echoCmd.DisableAutoGenTag = false }()
diff --git a/doc/md_docs.go b/doc/md_docs.go
index d7a2c2b..d76f6d5 100644
--- a/doc/md_docs.go
+++ b/doc/md_docs.go
@@ -29,7 +29,7 @@
 func printOptions(buf *bytes.Buffer, cmd *cobra.Command, name string) error {
 	flags := cmd.NonInheritedFlags()
 	flags.SetOutput(buf)
-	if flags.HasFlags() {
+	if flags.HasAvailableFlags() {
 		buf.WriteString("### Options\n\n```\n")
 		flags.PrintDefaults()
 		buf.WriteString("```\n\n")
@@ -37,7 +37,7 @@
 
 	parentFlags := cmd.InheritedFlags()
 	parentFlags.SetOutput(buf)
-	if parentFlags.HasFlags() {
+	if parentFlags.HasAvailableFlags() {
 		buf.WriteString("### Options inherited from parent commands\n\n```\n")
 		parentFlags.PrintDefaults()
 		buf.WriteString("```\n\n")
diff --git a/doc/md_docs_test.go b/doc/md_docs_test.go
index b0fa68c..c060f32 100644
--- a/doc/md_docs_test.go
+++ b/doc/md_docs_test.go
@@ -25,6 +25,30 @@
 	checkStringContains(t, output, rootCmd.Short)
 	checkStringContains(t, output, echoSubCmd.Short)
 	checkStringOmits(t, output, deprecatedCmd.Short)
+	checkStringContains(t, output, "Options inherited from parent commands")
+}
+
+func TestGenMdNoHiddenParents(t *testing.T) {
+	// We generate on subcommand so we have both subcommands and parents.
+	for _, name := range []string{"rootflag", "strtwo"} {
+		f := rootCmd.PersistentFlags().Lookup(name)
+		f.Hidden = true
+		defer func() { f.Hidden = false }()
+	}
+	buf := new(bytes.Buffer)
+	if err := GenMarkdown(echoCmd, buf); err != nil {
+		t.Fatal(err)
+	}
+	output := buf.String()
+
+	checkStringContains(t, output, echoCmd.Long)
+	checkStringContains(t, output, echoCmd.Example)
+	checkStringContains(t, output, "boolone")
+	checkStringOmits(t, output, "rootflag")
+	checkStringContains(t, output, rootCmd.Short)
+	checkStringContains(t, output, echoSubCmd.Short)
+	checkStringOmits(t, output, deprecatedCmd.Short)
+	checkStringOmits(t, output, "Options inherited from parent commands")
 }
 
 func TestGenMdNoTag(t *testing.T) {
diff --git a/doc/rest_docs.go b/doc/rest_docs.go
index 4913e3e..051d8dc 100644
--- a/doc/rest_docs.go
+++ b/doc/rest_docs.go
@@ -29,7 +29,7 @@
 func printOptionsReST(buf *bytes.Buffer, cmd *cobra.Command, name string) error {
 	flags := cmd.NonInheritedFlags()
 	flags.SetOutput(buf)
-	if flags.HasFlags() {
+	if flags.HasAvailableFlags() {
 		buf.WriteString("Options\n")
 		buf.WriteString("~~~~~~~\n\n::\n\n")
 		flags.PrintDefaults()
@@ -38,7 +38,7 @@
 
 	parentFlags := cmd.InheritedFlags()
 	parentFlags.SetOutput(buf)
-	if parentFlags.HasFlags() {
+	if parentFlags.HasAvailableFlags() {
 		buf.WriteString("Options inherited from parent commands\n")
 		buf.WriteString("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\n::\n\n")
 		parentFlags.PrintDefaults()
diff --git a/doc/rest_docs_test.go b/doc/rest_docs_test.go
index aa3186e..330a2e5 100644
--- a/doc/rest_docs_test.go
+++ b/doc/rest_docs_test.go
@@ -27,6 +27,29 @@
 	checkStringOmits(t, output, deprecatedCmd.Short)
 }
 
+func TestGenRSTNoHiddenParents(t *testing.T) {
+	// We generate on a subcommand so we have both subcommands and parents
+	for _, name := range []string{"rootflag", "strtwo"} {
+		f := rootCmd.PersistentFlags().Lookup(name)
+		f.Hidden = true
+		defer func() { f.Hidden = false }()
+	}
+	buf := new(bytes.Buffer)
+	if err := GenReST(echoCmd, buf); err != nil {
+		t.Fatal(err)
+	}
+	output := buf.String()
+
+	checkStringContains(t, output, echoCmd.Long)
+	checkStringContains(t, output, echoCmd.Example)
+	checkStringContains(t, output, "boolone")
+	checkStringOmits(t, output, "rootflag")
+	checkStringContains(t, output, rootCmd.Short)
+	checkStringContains(t, output, echoSubCmd.Short)
+	checkStringOmits(t, output, deprecatedCmd.Short)
+	checkStringOmits(t, output, "Options inherited from parent commands")
+}
+
 func TestGenRSTNoTag(t *testing.T) {
 	rootCmd.DisableAutoGenTag = true
 	defer func() { rootCmd.DisableAutoGenTag = false }()