Coder Social home page Coder Social logo

ddddddo / gtree Goto Github PK

View Code? Open in Web Editor NEW
193.0 5.0 7.0 20.22 MB

Using either Markdown or Programmatically to generate trees🌳 and directories📁, and to verify directories🔍. Provide CLI, Golang library and Web.

Home Page: https://ddddddo.github.io/gtree/

License: BSD 2-Clause "Simplified" License

Go 85.70% Makefile 0.78% Dockerfile 0.12% HTML 1.55% JavaScript 6.08% CSS 5.71% Shell 0.07%
tree markdown tree-structure directory wasm cli golang trees

gtree's Introduction

Hi there 👋

  • My profile

  • OpenPGP Public Key : Usage

    $ gpg --fetch-keys https://github.com/ddddddO.gpg

Stats in GitHub

Metrics

gtree's People

Contributors

ddddddo avatar dependabot[bot] avatar github-actions[bot] avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar

gtree's Issues

メ゜ッドチェヌンの方が良さそうに思えおきた

WithXxxxの関数を以䞋な感じで呌び出したい

  • かっこいい
  • package名いちいち曞かなくお枈む
    • ゚ディタで続けおメ゜ッドの候補ずしお出しおくれる
  • 今の実装ず埌方互換性がない
    • 既存の関数はdeprecatedずマヌクしお䞀定期間残す
    • 新関数は呜名倉えお定矩
	err := gtree.OutputProgrammably(os.Stdout, root).
		WithBranchFormatIntermedialNode("+--", ":   ").
		WithBranchFormatLastNode("+--", "    ").
		Do()
	if err != nil {
		fmt.Fprintln(os.Stderr, err)
		os.Exit(1)
	}

ディレクトリ生成機胜

  • document曎新
    • README
      • 各皮README
      • v1.2.4から非互換であるこずを明蚘
      • dry-runで出力されるツリヌず実際に䜜成されるディレクトリでは゜ヌトの有無があるこずを明蚘
    • godoc
      • 公開メ゜ッド・フィヌルドにコメント぀ける
    • zenn
    • awesome-goにPR投げる
    • github䞊のabout
  • ディレクトリ生成機胜远加
  • [Only programable]各Node毎にナヌザヌ定矩関数を実行できるようにする どこで実行させるかでおこなかった
    • Nodeメ゜ッドの公開・あるず良さそうなメ゜ッド远加
  • コマンドラむンフラグが耇雑になっおきおるからgithub.com/urfave/cli/v2䜿う
    • tree出力モヌド
      • stdout or yaml or toml ro json
    • ディレクトリ生成モヌド
      • dry run
      • 生成
    • helpを充実させるのず、入力になるMarkdownのテンプレヌト出力するのもいいかも
    • フラグのデフォルト倀を蚭定する。helpで出力したずき、䜕がデフォルトかわからない、䟋えばmarkdownのデフォルトがtabであるずか
  • リファクタ
    • option func のプレフィックスにWith぀ける
    • コメント党郚英語にする
    • 䞍適圓なネヌミングなど
  • テスト

リファクタ

  • ファむル名が動詞で終わっおいるものにはerを぀ける
  • initializeTreeではなく、newTreeでいい
    • grow,spread,mkdir甚のabstract factory関数䜜っおnewTreeで呌び出すようにする、かも。冗長感ある。
  • grow,spread,mkdir甹interfaceはtree.goに移動した方がいいかなぁず思っおきた。

redditのwebdevぞ宣䌝する

  • title: Tree Maker __ Convert markdown to tree!
  • tags: OC, ShowoffSaturday
  • image&video: web_example.gif

↓
以䞋をコメントで投皿

The link to this website is https://ddddddo.github.io/gtree/

Usage is as follows.
- The symbols that can be used in Markdown are *, -, +, and #.
- Use every two spaces to represent a hierarchy.

This website features.
- The function to generate tree is written in Go and compiled to WebAssembly.
- It uses ServiceWorker, so you can load it once and then enjoy it offline!

I provide not only website, but also CLI tool and Go package. These also have the ability to generate directories from markdown!
The repository is https://github.com/ddddddO/gtree
I'd love it if you'd star it!

dry-runしたずき、どれがファむル・ディレクトリかわかるように色を付けたい

  • ファむル出力時に色の文字列はいらないか -> 入っおしたう
/mnt/c/DEV/workspace/GO/src/github.com/ddddddO/work/go/color
11:20:36 > go run main.go > tmp

でtmpの䞭身

ᅵ[30mHello, world!ᅵ[0m
ᅵ[31mHello, world!ᅵ[0m
ᅵ[32mHello, world!ᅵ[0m
ᅵ[33mHello, world!ᅵ[0m
ᅵ[34mHello, world!ᅵ[0m
ᅵ[35mHello, world!ᅵ[0m
ᅵ[36mHello, world!ᅵ[0m
ᅵ[37mHello, world!ᅵ[0m
  • os毎に実装倉えないずいけなかったりするか
  • コヌドから呌び出す関数の堎合はどうするか

mkdirサブコマンド実行時ずdryrunフラグ付き実行時ずで結果が異なる

  • 同じ芪の䞋に同じ名前のnodeが同じ階局にいるのが原因。どうしよう。暙準出力以倖問題はないけど盎せるなら盎したい。
19:46:02 > cat testdata/sample2.md | gtree mkdir --dry-run
k8s_resources
├── (Tier3)
│   └── (Tier2)        
│       └── (Tier1)    
│           └── (Tier0)
├── Deployment
│   └── ReplicaSet     
│       └── Pod        
│           └── container(s)
├── CronJob
│   └── Job
│       └── Pod
│           └── container(s)
├── (empty)
│   └── DaemonSet
│       └── Pod
│           └── container(s)
└── (empty)
    └── StatefulSet
        └── Pod
            └── container(s)

21 directories, 0 files
19:46:10 > cat testdata/sample2.md | gtree mkdir
/mnt/c/DEV/workspace/GO/src/github.com/ddddddO/gtree
19:50:39 > tree k8s_resources/
k8s_resources/
├── (Tier3)
│   └── (Tier2)
│       └── (Tier1)
│           └── (Tier0)
├── (empty)
│   ├── DaemonSet
│   │   └── Pod
│   │       └── container(s)
│   └── StatefulSet
│       └── Pod
│           └── container(s)
├── CronJob
│   └── Job
│       └── Pod
│           └── container(s)
└── Deployment
    └── ReplicaSet
        └── Pod
            └── container(s)

19 directories, 0 files

Web siteのdescriptionが怜玢結果に反映されない

site:https://ddddddo.github.io/gtree/ でググるず、以䞋のdescriptionが衚瀺される。
textareaの䞀郚の内容が衚瀺されおいるため、以䞋の文字数内で怜玢にヒットしやすいキヌワヌドをtextareaに入れおみる。

Primate - Strepsirrhini - Lemuriformes - Lemuroidea - Cheirogaleidae - Indriidae - Lemuridae - Lepilemuridae - Daubentonioidea - Daubentoniidae ...

↓

Output tree from Markdown. - 手䜜業で枝を組み立おるのは面倒、 - 楜にツリヌ(treeコマンド(Linux/Windows)結果のようなテキスト) - を䜜りたい時に圹に立ちたす。 - 枝を倉えられたす。

descriptionが分かりづらい

ずコメントをもらった。
https://www.reddit.com/r/programming/comments/sa1uw1/comment/htrxvqf/?utm_source=share&utm_medium=web2x&context=3
堎合によっおは、関数名・メ゜ッド名も合わせお倉えた方がいいかも。

あず、このツヌルパッケヌゞの利点・ナヌスケヌスはなにかをdescriptionに蚘茉した方がいいかもしれない。

node_generate_strategy.goの各メ゜ッドが耇雑

11:13:26 > gocognito --over=10 .
/mnt/c/DEV/workspace/GO/src/github.com/ddddddO/gtree/node_generate_strategy.go:40:1: func (*tabStrategy).generate cognitive complexity: 15
/mnt/c/DEV/workspace/GO/src/github.com/ddddddO/gtree/node_generate_strategy.go:89:1: func (*twoSpacesStrategy).generate cognitive complexity: 15
/mnt/c/DEV/workspace/GO/src/github.com/ddddddO/gtree/node_generate_strategy.go:136:1: func (*fourSpacesStrategy).generate cognitive complexity: 15
  • 各generateメ゜ッドで、行ごずに最埌の文字たでチェックしおhierarchyずtextを蚈算しおいるが、もっず簡玠にできないか
    • hierarchyたで蚈算できれば、あずはrow[startText: len(row)]でtextずしお凊理を分割できそうな気がした。
    • node_generate_strategy_test.go にテストを远加し぀぀倉曎する

コヌドから呌び出しおもらうディレクトリ生成関数のdry run

  • command

    • これは、--dry-run指定でダメなnode名を怜知ディレクトリの䜜成は䞀切しない & ダメでなければtree出力の実装でよいディレクトリの䜜成は䞀切しない
  • package

    • Mkdir func
      • commandず同じでいい
    • MkdirProgrammably func
      • デフォルトでダメなnode名怜知で゚ラヌディレクトリの䜜成は䞀切しない
      • WithDryRun funcが䞎えられたらtreeを出力するディレクトリの䜜成は䞀切しない

メモ

  • WithDryRunっおプログラムで扱うのは埮劙な気がする。安党にディレクトリ生成するたでに2回MkdirProgrammably呌び出すずいうこずだから、いっそMkdirProgrammablyでデフォルトでバリデヌションしたほうが良さそう
  • cliが䜿っおるパッケヌゞも倖郚に公開しおるからそうした方がいいのかも、、

出力をLinux treeだけにしたくない

むンスパむアhttps://github.com/birchb1024/frangipanni

䞊のリポゞトリはCLIずしお提䟛しおいる。
ExecuteProgrammablyで、出力のフォヌマットを遞択できるようにしたい。jsonずか。
grow/expandをむンタフェヌスずしお定矩しお、Linux tree / json などのフォヌマットで出力できるような実装を曞く。

時間がたぶんかなりかかりそうなのでメモだけ。

パッケヌゞを切りたい

  • Node structが、publicでか぀コヌドのあちこちで䜿われおるので、そこを䜕ずかする必芁がある。
    • このgtreeパッケヌゞを䜿う人に公開したいものはルヌトディレクトリ盎䞋に眮いおおいおいい
    • このgtree内郚でのみNodeを䜿っおいるずころはinterface越しに呌び出すようにしたい
  • 関連

雑にmarkdown食わせおも出力できた方がいいのではないか

マヌクダりンパヌサを䞀応䜜ったので、察応しおない行がきたら、それずわかる゚ラヌ返しお、呌び出し元でスキップさせおいいんでないか

Webペヌゞ開いおtree!抌䞋でツリヌ出力しない事がある

  • それたでそんな挙動しおなかったから、gtree-wasm配䞋のコミット履歎調べる
  • firefox, edgeは倧䞈倫そう。プラむベヌトりィンドりで確認した。chromeだけ
    • edge, chromeは、https://github.com/ddddddO/gtree から遷移するずダメみたい。プラむベヌトりィンドりで確認した。

Node structを関心の分離させおみる

以䞋のむメヌゞ

  • tree_grow.go: Nodeをそのたた䜿う
  • tree_spread.go: Node -> SpreadNodeなstructに倉換したものを䜿う
  • tree_mkdir.go: Node -> MkdirNodeなstructに倉換したものを䜿う

Markdownパヌサヌを䜜りたい

  • 入力ずしお察応しおいるのがMarkdownの - のみなので、他の蚘法も察応したい
  • 構文解析噚を䜜りたい

encode MessagePack


19:39:13 > go install github.com/nokute78/msgpack-microscope/cmd/msgpack2json@latest
19:40:53 > cat testdata/sample1.md | go run cmd/gtree/main.go -m | msgpack2json
{"format":"fixmap", "header":"0x82", "length":2, "raw":"0x82a576616c7565a161a86368696c6472656e9482a576616c7565a3767676a86368696c6472656e9182a576616c7565a36a6a6aa86368696c6472656ec082a576616c7565a46b676767a86368696c6472656e9282a576616c7565a46b6b6464a86368696c6472656ec082a576616c7565a474676767a86368696c6472656ec082a576616c7565a56564646464a86368696c6472656e9182a576616c7565a46f727272a86368696c6472656ec082a576616c7565a467676767a86368696c6472656ec0", "value":
    [
        {"key":
            {"format":"fixstr", "header":"0xa5", "raw":"0xa576616c7565", "value":"value"},
         "value":
            {"format":"fixstr", "header":"0xa1", "raw":"0xa161", "value":"a"}
        },
        {"key":
            {"format":"fixstr", "header":"0xa8", "raw":"0xa86368696c6472656e", "value":"children"},
         "value":
            {"format":"fixarray", "header":"0x94", "length":4, "raw":"0x9482a576616c7565a3767676a86368696c6472656e9182a576616c7565a36a6a6aa86368696c6472656ec082a576616c7565a46b676767a86368696c6472656e9282a576616c7565a46b6b6464a86368696c6472656ec082a576616c7565a474676767a86368696c6472656ec082a576616c7565a56564646464a86368696c6472656e9182a576616c7565a46f727272a86368696c6472656ec082a576616c7565a467676767a86368696c6472656ec0", "value":
                [
                    {"format":"fixmap", "header":"0x82", "length":2, "raw":"0x82a576616c7565a3767676a86368696c6472656e9182a576616c7565a36a6a6aa86368696c6472656ec0", "value":
                        [
                            {"key":
                                {"format":"fixstr", "header":"0xa5", "raw":"0xa576616c7565", "value":"value"},
                             "value":
                                {"format":"fixstr", "header":"0xa3", "raw":"0xa3767676", "value":"vvv"}
                            },
                            {"key":
                                {"format":"fixstr", "header":"0xa8", "raw":"0xa86368696c6472656e", "value":"children"},
                             "value":
                                {"format":"fixarray", "header":"0x91", "length":1, "raw":"0x9182a576616c7565a36a6a6aa86368696c6472656ec0", "value":
                                    [
                                        {"format":"fixmap", "header":"0x82", "length":2, "raw":"0x82a576616c7565a36a6a6aa86368696c6472656ec0", "value":
                                            [
                                                {"key":
                                                    {"format":"fixstr", "header":"0xa5", "raw":"0xa576616c7565", "value":"value"},
                                                 "value":
                                                    {"format":"fixstr", "header":"0xa3", "raw":"0xa36a6a6a", "value":"jjj"}
                                                },
                                                {"key":
                                                    {"format":"fixstr", "header":"0xa8", "raw":"0xa86368696c6472656e", "value":"children"},
                                                 "value":
                                                    {"format":"nil", "header":"0xc0", "raw":"0xc0", "value":null}
                                                }
                                            ]
                                        }
                                    ]
                                }

                            }
                        ]
                    },
                    {"format":"fixmap", "header":"0x82", "length":2, "raw":"0x82a576616c7565a46b676767a86368696c6472656e9282a576616c7565a46b6b6464a86368696c6472656ec082a576616c7565a474676767a86368696c6472656ec0", "value":
                        [
                            {"key":
                                {"format":"fixstr", "header":"0xa5", "raw":"0xa576616c7565", "value":"value"},
                             "value":
                                {"format":"fixstr", "header":"0xa4", "raw":"0xa46b676767", "value":"kggg"}
                            },
                            {"key":
                                {"format":"fixstr", "header":"0xa8", "raw":"0xa86368696c6472656e", "value":"children"},
                             "value":
                                {"format":"fixarray", "header":"0x92", "length":2, "raw":"0x9282a576616c7565a46b6b6464a86368696c6472656ec082a576616c7565a474676767a86368696c6472656ec0", "value":
                                    [
                                        {"format":"fixmap", "header":"0x82", "length":2, "raw":"0x82a576616c7565a46b6b6464a86368696c6472656ec0", "value":
                                            [
                                                {"key":
                                                    {"format":"fixstr", "header":"0xa5", "raw":"0xa576616c7565", "value":"value"},
                                                 "value":
                                                    {"format":"fixstr", "header":"0xa4", "raw":"0xa46b6b6464", "value":"kkdd"}
                                                },
                                                {"key":
                                                    {"format":"fixstr", "header":"0xa8", "raw":"0xa86368696c6472656e", "value":"children"},
                                                 "value":
                                                    {"format":"nil", "header":"0xc0", "raw":"0xc0", "value":null}
                                                }
                                            ]
                                        },
                                        {"format":"fixmap", "header":"0x82", "length":2, "raw":"0x82a576616c7565a474676767a86368696c6472656ec0", "value":
                                            [
                                                {"key":
                                                    {"format":"fixstr", "header":"0xa5", "raw":"0xa576616c7565", "value":"value"},
                                                 "value":
                                                    {"format":"fixstr", "header":"0xa4", "raw":"0xa474676767", "value":"tggg"}
                                                },
                                                {"key":
                                                    {"format":"fixstr", "header":"0xa8", "raw":"0xa86368696c6472656e", "value":"children"},
                                                 "value":
                                                    {"format":"nil", "header":"0xc0", "raw":"0xc0", "value":null}
                                                }
                                            ]
                                        }
                                    ]
                                }

                            }
                        ]
                    },
                    {"format":"fixmap", "header":"0x82", "length":2, "raw":"0x82a576616c7565a56564646464a86368696c6472656e9182a576616c7565a46f727272a86368696c6472656ec0", "value":
                        [
                            {"key":
                                {"format":"fixstr", "header":"0xa5", "raw":"0xa576616c7565", "value":"value"},
                             "value":
                                {"format":"fixstr", "header":"0xa5", "raw":"0xa56564646464", "value":"edddd"}
                            },
                            {"key":
                                {"format":"fixstr", "header":"0xa8", "raw":"0xa86368696c6472656e", "value":"children"},
                             "value":
                                {"format":"fixarray", "header":"0x91", "length":1, "raw":"0x9182a576616c7565a46f727272a86368696c6472656ec0", "value":
                                    [
                                        {"format":"fixmap", "header":"0x82", "length":2, "raw":"0x82a576616c7565a46f727272a86368696c6472656ec0", "value":
                                            [
                                                {"key":
                                                    {"format":"fixstr", "header":"0xa5", "raw":"0xa576616c7565", "value":"value"},
                                                 "value":
                                                    {"format":"fixstr", "header":"0xa4", "raw":"0xa46f727272", "value":"orrr"}
                                                },
                                                {"key":
                                                    {"format":"fixstr", "header":"0xa8", "raw":"0xa86368696c6472656e", "value":"children"},
                                                 "value":
                                                    {"format":"nil", "header":"0xc0", "raw":"0xc0", "value":null}
                                                }
                                            ]
                                        }
                                    ]
                                }

                            }
                        ]
                    },
                    {"format":"fixmap", "header":"0x82", "length":2, "raw":"0x82a576616c7565a467676767a86368696c6472656ec0", "value":
                        [
                            {"key":
                                {"format":"fixstr", "header":"0xa5", "raw":"0xa576616c7565", "value":"value"},
                             "value":
                                {"format":"fixstr", "header":"0xa4", "raw":"0xa467676767", "value":"gggg"}
                            },
                            {"key":
                                {"format":"fixstr", "header":"0xa8", "raw":"0xa86368696c6472656e", "value":"children"},
                             "value":
                                {"format":"nil", "header":"0xc0", "raw":"0xc0", "value":null}
                            }
                        ]
                    }
                ]
            }

        }
    ]
}

19:41:15 > cat testdata/sample1.md 
- a
        - vvv
                - jjj
        - kggg
                - kkdd
                - tggg
        - edddd
                - orrr
        - gggg

type Node structのpublicフィヌルドをやめたい

json/toml/yamlに゚ンコヌドするずきにフィヌルドがpublicでないずダメなので今はそうしおいるが、それをやめたい。
json/toml/yaml甚のNode甹structを定矩しお、そのフィヌルドをpublicにしおNodeを詰め替えれば可胜そう。
ただ、Nodeが自己参照型のstructなため、面倒。

nodejsからも呌び出せるようにする

以䞋にヒントが曞いおある

npmパッケヌゞずしお公開したい

npm CLI toolずしお公開したい

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❀ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.