tree-plus-BIONICLES


Nametree-plus-BIONICLES JSON
Version 1.0.0 PyPI version JSON
download
home_page
Summarytree util plus file components as leaves and token, line counts
upload_time2023-12-18 21:10:40
maintainer
docs_urlNone
author
requires_python>=3.8
license
keywords tree util cli
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            # Tree Plus

[![License](https://img.shields.io/badge/license-MIT%2FApache--2.0-brightgreen)](https://choosealicense.com/licenses/)
[![Docs](https://img.shields.io/badge/docs-README-blue)](https://github.com/bionicles/tree_plus/blob/main/README.md)
[![Linux & MacOS](https://github.com/bionicles/tree_plus/actions/workflows/unix.yml/badge.svg)](https://github.com/bionicles/tree_plus/actions/workflows/unix.yml)
[![Microsoft](https://github.com/bionicles/tree_plus/actions/workflows/microsoft.yml/badge.svg)](https://github.com/bionicles/tree_plus/actions/workflows/microsoft.yml)

**Supported Operating Systems:**
![Ubuntu](https://img.shields.io/badge/Supports-Ubuntu-orange)
![MacOS](https://img.shields.io/badge/Supports-MacOS-orange)
![Windows](https://img.shields.io/badge/Supports-Windows-orange)

**Supported Python Versions:**
![Python 3.8](https://img.shields.io/badge/Python-3.8-blue)
![Python 3.9](https://img.shields.io/badge/Python-3.9-blue)
![Python 3.10](https://img.shields.io/badge/Python-3.10-blue)
![Python 3.11](https://img.shields.io/badge/Python-3.11-blue)
![Python 3.12](https://img.shields.io/badge/Python-3.12-blue)

A simple command line interface (CLI) tool for developers to show a `tree` enhanced with token counts, line counts, and source code components.

## Example Output:
- [ ] Demonstrate Parsed Checkboxes
```sh
~/hax/tree_plus (main) $
> tp -i tests
paths=('.',)
📁 tree_plus (11526 tokens, 1012 lines)
┣━━ 📁 .github
┃   ┗━━ 📁 workflows (523 tokens, 70 lines)
┃       ┣━━ 📄 microsoft.yml (272 tokens, 36 lines)
┃       ┃   ┣━━ Microsoft
┃       ┃   ┣━━   job: build
┃       ┃   ┣━━     - Set up Python ${{ matrix.python-version }}
┃       ┃   ┣━━     - Install tree_plus
┃       ┃   ┣━━     - Set PYTHONUTF8 for Windows
┃       ┃   ┣━━     - Run generic tests
┃       ┃   ┗━━     - Run specific test
┃       ┗━━ 📄 unix.yml (251 tokens, 34 lines)
┃           ┣━━ Ubuntu & MacOS
┃           ┣━━   job: build
┃           ┣━━     - Set up Python ${{ matrix.python-version }}
┃           ┣━━     - Install tree_plus
┃           ┣━━     - Run generic tests
┃           ┗━━     - Run specific test
┣━━ 📁 tree_plus_src (12997 tokens, 1542 lines)
┃   ┣━━ 📁 scripts (6661 tokens, 861 lines)
┃   ┃   ┣━━ 📄 alias_tree_plus.sh (277 tokens, 31 lines)
┃   ┃   ┣━━ 📄 Microsoft.PowerShell_profile.ps1 (3238 tokens, 419 lines)
┃   ┃   ┃   ┣━━ function Log($message)
┃   ┃   ┃   ┗━━ function Show-Error($err)
┃   ┃   ┣━━ 📄 profile.toml (1192 tokens, 126 lines)
┃   ┃   ┣━━ 📄 scratch.ps1 (1317 tokens, 197 lines)
┃   ┃   ┗━━ 📄 scratch.sh (637 tokens, 88 lines)
┃   ┣━━ 📄 count_tokens_lines.py (575 tokens, 78 lines)
┃   ┃   ┣━━ TODO (Line 11): show off how well we parse_todo!
┃   ┃   ┣━━ class TokenLineCount
┃   ┃   ┣━━ def add_tokens_lines
┃   ┃   ┣━━ def count_tokens_lines
┃   ┃   ┗━━ def count_directory_tokens_lines
┃   ┣━━ 📄 default_ignore.py (538 tokens, 94 lines)
┃   ┃   ┣━━ def make_ignore
┃   ┃   ┣━━ def is_binary_string
┃   ┃   ┗━━ def is_binary
┃   ┣━━ 📄 parse_file.py (11631 tokens, 1333 lines)
┃   ┃   ┣━━ TODO (Line 15): convert this to an environment variable and share across the modules
┃   ┃   ┣━━ def debug_print
┃   ┃   ┣━━ def parse_file
┃   ┃   ┣━━ def parse_d_dot_ts
┃   ┃   ┣━━ def parse_angular_app_module
┃   ┃   ┣━━ def parse_angular_component_ts
┃   ┃   ┣━━ def parse_angular_routes
┃   ┃   ┣━━ def parse_angular_spec
┃   ┃   ┣━━ def parse_environment_ts
┃   ┃   ┣━━ def parse_dot_env
┃   ┃   ┣━━ def parse_requirements_txt
┃   ┃   ┣━━ def parse_json_schema
┃   ┃   ┣━━ def parse_package_json
┃   ┃   ┣━━ def parse_ts
┃   ┃   ┣━━ def parse_makefile
┃   ┃   ┣━━ def parse_sql
┃   ┃   ┣━━ def is_k8s_yml
┃   ┃   ┣━━ def is_ansible_yml
┃   ┃   ┣━━ def is_github_yml
┃   ┃   ┣━━ def parse_github_yml
┃   ┃   ┣━━ def parse_k8s
┃   ┃   ┣━━ def parse_ansible
┃   ┃   ┣━━ def parse_yml
┃   ┃   ┣━━ def extract_nodes
┃   ┃   ┣━━ def is_typing_construct
┃   ┃   ┣━━ def is_builtin_type
┃   ┃   ┣━━ def parse_py
┃   ┃   ┣━━ def parse_db
┃   ┃   ┣━━ def parse_cobol
┃   ┃   ┣━━ def parse_java
┃   ┃   ┣━━ def parse_julia
┃   ┃   ┣━━ def parse_kotlin
┃   ┃   ┣━━ def parse_lisp
┃   ┃   ┣━━ def parse_lua
┃   ┃   ┣━━ def parse_objective_c
┃   ┃   ┣━━ def parse_ocaml
┃   ┃   ┣━━ def parse_apl
┃   ┃   ┣━━ def parse_perl
┃   ┃   ┣━━ def parse_php
┃   ┃   ┣━━ def parse_powershell
┃   ┃   ┣━━ def parse_matlab
┃   ┃   ┣━━ def parse_scala
┃   ┃   ┣━━ def parse_c
┃   ┃   ┣━━ def parse_tf
┃   ┃   ┣━━ def parse_js
┃   ┃   ┣━━ def parse_md
┃   ┃   ┣━━ def parse_txt
┃   ┃   ┣━━ def parse_markers
┃   ┃   ┗━━ def parse_rs
┃   ┗━━ 📄 traverse_directory.py (253 tokens, 37 lines)
┃       ┗━━ def traverse_directory
┣━━ 📄 .gitignore (111 tokens, 32 lines)
┣━━ 📄 LICENSE (2123 tokens, 81 lines)
┣━━ 📄 Makefile (193 tokens, 26 lines)
┃   ┣━━ SHELL := /bin/bash
┃   ┣━━ debug
┃   ┣━━ .PHONY: debug_command
┃   ┣━━ debug_command: cli test
┃   ┣━━ cli
┃   ┣━━ test_s: test_tp_dotdot_s
┃   ┣━━ test_tp_dotdot_s: test_tp_dotdot
┃   ┣━━ test: test_tp_dotdot
┃   ┣━━ test_tp_dotdot
┃   ┗━━ move_powershell_profile
┣━━ 📄 nodemon.json (64 tokens, 13 lines)
┣━━ 📄 README.md (2682 tokens, 230 lines)
┃   ┣━━ # Tree Plus
┃   ┣━━ ## Example Output:
┃   ┣━━ - [ ] Demonstrate Parsed Checkboxes
┃   ┣━━ ## Start Quick!
┃   ┣━━ ### Prerequisites
┃   ┣━━ ### Install Tree Plus
┃   ┣━━ #### Local Hackable Install
┃   ┣━━ ### Usage
┃   ┗━━ ## Moar Languages
┣━━ 📄 sample_output.sh (3039 tokens, 184 lines)
┣━━ 📄 setup.py (608 tokens, 97 lines)
┃   ┗━━ TODO (Line 44): automatically install tree-sitter-{language} grammars
┣━━ 📄 TODO.md (393 tokens, 41 lines)
┃   ┣━━ # Do First
┃   ┣━━ # Backlog
┃   ┣━━ - [ ] Fix ordering of leaves by line number consistently across languages
┃   ┣━━     - [ ] Fix Python ordering
┃   ┣━━     - [ ] Fix JavaScript / TypeScript ordering
┃   ┣━━     - [ ] Review other language unit tests for ordering
┃   ┣━━ - [ ] expand test cases for the supported languages to verify ordering & completeness
┃   ┣━━ - [ ] Upgrade CICD GitHub Action
┃   ┣━━     - [ ] Build and deploy to PyPi if tests pass
┃   ┣━━ - [ ] test file input instead of directory
┃   ┣━━ - [ ] measure test coverage
┃   ┣━━ - [ ] test named lambdas in python
┃   ┣━━ - [ ] autoinstall tree-sitter grammars to enable real parsing instead of regex if available
┃   ┣━━ - [ ] modularize the tree_plus function to separate index creation from tree creation
┃   ┣━━ - [ ] brainstorm and integrate more flags / options to control results
┃   ┣━━     - [ ] add a todo flag to only show todos and unchecked checkboxes
┃   ┣━━     - [ ] add a search / filter input to filter results
┃   ┣━━ - [ ] make a tree_scan to apply AI LLMs to the tree
┃   ┣━━     - [ ] e.g. to suggest todos
┃   ┣━━     - [ ] to write docs
┃   ┣━━     - [ ] to write tests
┃   ┣━━     - [ ] to write code
┃   ┣━━     - [ ] to translate languages (e.g. 'rewrite it in rust' example)
┃   ┣━━ # Nice to have
┃   ┣━━ - [ ] Support more languages
┃   ┣━━     - [ ] SQL (create tables, procedures)
┃   ┣━━     - [ ] C#
┃   ┣━━     - [ ] C++
┃   ┣━━     - [ ] OpenAPI yaml
┃   ┣━━     - [ ] Json RPC 2.0 schemas
┃   ┣━━     - [ ] GRPC schemas
┃   ┣━━     - [ ] GraphQL schemas
┃   ┣━━     - [ ] Go
┃   ┣━━     - [ ] Dart
┃   ┣━━     - [ ] Swift
┃   ┗━━ # Done
┗━━ 📄 tree_plus_cli.py (2313 tokens, 308 lines)
    ┣━━ NOTE (Line 275): parent_count unused, is that ok?
    ┣━━ def debug_print
    ┣━━ def tree_to_string
    ┣━━ def clean_string
    ┣━━ def safe_print
    ┣━━ def main
    ┣━━ def tree_plus
    ┣━━ def _parse_paths
    ┣━━ def flatten_to_str
    ┣━━ def _handle_paths
    ┗━━ def _handle_path
```
- [x] Demonstrate Parsed Checkboxes


## Start Quick!

### Prerequisites

Ensure you have the following tools installed:

- [Miniconda3 (conda)](https://docs.conda.io/en/latest/miniconda.html)
- [GitHub CLI (gh)](https://cli.github.com/manual/installation)

### Install Tree Plus

#### Local Hackable Install

1. Clone the repository and cd into the tree_plus directory
```bash
gh repo clone https://github.com/bionicles/tree_plus.git && cd tree_plus
```

2. Install tree_plus using Makefile
```bash
make cli
```

Alternatively, if `make` is not installed, use `pip`:
```bash
pip install -e .
```

Now, you can use the `tree_plus` command.

3. Add slick aliases like `tp` to your RC file
Typical RC_FILE values `~/.bash_profile`, `~/.bashrc`, or `~/.zshrc`
```bash
RC_FILE=~/.bash_profile source alias_tree_plus.sh
```
```bash
RC_FILE=~/.bashrc source alias_tree_plus.sh
```
```zsh
RC_FILE=~/.zshrc source alias_tree_plus.sh
```

Soon, you'll be able to simply run 'pip install tree_plus'. Stay tuned!

### Usage

```bash
# Use tree_plus
tp
```

If you make changes to `tree_plus` and need to reinstall it quickly, use the `tpcli` alias:

```bash
# Reinstall tree_plus quickly after making changes
tpcli
```

## Moar Languages

```sh
/home/bion/hax/tree_plus/tests/more_languages (0 tokens, 0 lines)
┣━━ 📁 group1 (402 tokens, 88 lines)
┃   ┣━━ 📄 COBOL_TEST.CBL (57 tokens, 11 lines)
┃   ┃   ┣━━ IDENTIFICATION DIVISION -> PROGRAM-ID. HELLO
┃   ┃   ┣━━ DATA DIVISION -> 01 GREETING
┃   ┃   ┗━━ PROCEDURE DIVISION
┃   ┣━━ 📄 JavaTest.java (47 tokens, 12 lines)
┃   ┃   ┣━━ class Person
┃   ┃   ┣━━ class Person -> Person(String name)
┃   ┃   ┗━━ class Person -> void greet()
┃   ┣━━ 📄 JuliaTest.jl (42 tokens, 12 lines)
┃   ┃   ┣━━ module JuliaTest
┃   ┃   ┣━━ module JuliaTest -> struct Person
┃   ┃   ┗━━ module JuliaTest -> greet(p::Person)
┃   ┣━━ 📄 KotlinTest.kt (29 tokens, 4 lines)
┃   ┃   ┣━━ data class Person(val name: String)
┃   ┃   ┗━━ fun greet(person: Person)
┃   ┣━━ 📄 LispTest.lisp (31 tokens, 5 lines)
┃   ┃   ┣━━ defstruct person
┃   ┃   ┗━━ defun greet
┃   ┣━━ 📄 LuaTest.lua (84 tokens, 16 lines)
┃   ┃   ┣━━ function HelloWorld.new
┃   ┃   ┣━━ function HelloWorld.greet
┃   ┃   ┗━━ function say_hello
┃   ┣━━ 📄 ObjectiveCTest.m (59 tokens, 16 lines)
┃   ┃   ┣━━ @interface HelloWorld
┃   ┃   ┣━━ @interface HelloWorld -> (void) sayHello
┃   ┃   ┣━━ @implementation HelloWorld
┃   ┃   ┣━━ @implementation HelloWorld -> (void) sayHello
┃   ┃   ┗━━ void sayHelloWorld()
┃   ┗━━ 📄 OcamlTest.ml (53 tokens, 12 lines)
┃       ┣━━ type color
┃       ┣━━ class hello
┃       ┣━━ class hello -> method say_hello
┃       ┗━━ let main ()
┣━━ 📁 group2 (754 tokens, 164 lines)
┃   ┣━━ 📄 apl_test.apl (44 tokens, 5 lines)
┃   ┃   ┣━━ :Namespace HelloWorld
┃   ┃   ┣━━ :Namespace HelloWorld -> hello ← 'Hello, World!'
┃   ┃   ┗━━ :Namespace HelloWorld -> plus ← {⍺+⍵}
┃   ┣━━ 📄 c_test.c (256 tokens, 69 lines)
┃   ┃   ┣━━ struct Point
┃   ┃   ┣━━ struct Point getOrigin()
┃   ┃   ┣━━ float mul_two_floats(float x1, float x2)
┃   ┃   ┣━━ enum days
┃   ┃   ┣━━ long add_two_longs(long x1, long x2)
┃   ┃   ┣━━ double multiplyByTwo(double num)
┃   ┃   ┣━━ char getFirstCharacter(char *str)
┃   ┃   ┣━━ void greet(Person p)
┃   ┃   ┣━━ typedef struct Person
┃   ┃   ┣━━ int main()
┃   ┃   ┗━━ int* getArrayStart(int arr[], int size)
┃   ┣━━ 📄 PerlTest.pl (75 tokens, 20 lines)
┃   ┃   ┣━━ package PerlTest
┃   ┃   ┣━━ package PerlTest -> sub new
┃   ┃   ┣━━ package PerlTest -> sub hello
┃   ┃   ┗━━ package PerlTest -> sub say_hello
┃   ┣━━ 📄 PhpTest.php (74 tokens, 19 lines)
┃   ┃   ┣━━ class HelloWorld
┃   ┃   ┣━━ class HelloWorld -> function sayHello
┃   ┃   ┣━━ function greet
┃   ┃   ┣━━ class Person
┃   ┃   ┗━━ class Person -> function __construct
┃   ┣━━ 📄 PowershellTest.ps1 (169 tokens, 27 lines)
┃   ┃   ┣━━ function Test-Ordering($foo)
┃   ┃   ┣━━ class Person
┃   ┃   ┣━━ class Person -> Person($name)
┃   ┃   ┣━━ class Person -> Greet()
┃   ┃   ┣━━ class Person -> GreetMany($times)
┃   ┃   ┣━━ class Person -> NoReturn($times)
┃   ┃   ┣━━ class Person -> NoReturnNoArgs()
┃   ┃   ┗━━ function Say-Hello([Person]$person)
┃   ┗━━ 📄 ScalaTest.scala (136 tokens, 24 lines)
┃       ┣━━ def sumOfSquares(x: Int, y: Int): Int
┃       ┣━━ trait Bark
┃       ┣━━ trait Bark -> def bark: String
┃       ┣━━ case class Person(name: String)
┃       ┣━━ object HelloWorld
┃       ┣━━ object HelloWorld -> def greet(person: Person): Unit
┃       ┣━━ object HelloWorld -> def main(args: Array[String]): Unit
┃       ┗━━ def sumOfSquaresShort(x: Int, y: Int): Int
┣━━ 📁 group4 (944 tokens, 166 lines)
┃   ┣━━ 📄 matlab_test.m (45 tokens, 12 lines)
┃   ┃   ┣━━ classdef HelloWorld -> function greet
┃   ┃   ┗━━ function loneFun
┃   ┣━━ 📄 rust_test.rs (611 tokens, 115 lines)
┃   ┃   ┣━━ enum Days
┃   ┃   ┣━━ struct Point
┃   ┃   ┣━━ impl Point
┃   ┃   ┣━━ fn get_origin() -> Point
┃   ┃   ┣━━ struct Person
┃   ┃   ┣━━ impl Person
┃   ┃   ┣━━ fn greet(&self)
┃   ┃   ┣━━ fn add_two_longs(x1: i64, x2: i64) -> i64
┃   ┃   ┣━━ fn add_two_longs_longer(
┃   ┃   ┃       x1: i64,
┃   ┃   ┃       x2: i64,
┃   ┃   ┃   ) -> i64
┃   ┃   ┣━━ fn multiply_by_two(num: f64) -> f64
┃   ┃   ┣━━ fn get_first_character(s: &str) -> Option<char>
┃   ┃   ┣━━ trait Drawable
┃   ┃   ┣━━ fn draw(&self)
┃   ┃   ┣━━ impl Drawable for Point
┃   ┃   ┣━━ fn draw(&self)
┃   ┃   ┣━━ fn main()
┃   ┃   ┣━━ pub struct VisibleStruct
┃   ┃   ┣━━ mod my_module
┃   ┃   ┣━━ macro_rules! say_hello
┃   ┃   ┣━━ pub mod lib
┃   ┃   ┣━━ pub mod interfaces
┃   ┃   ┣━━ mod engine
┃   ┃   ┗━━ pub fn flow<S1, S2, S3, S4, E, T, L>(
┃   ┃           source: S1,
┃   ┃           extractor: E,
┃   ┃           inbox: S2,
┃   ┃           transformer: T,
┃   ┃           outbox: S3,
┃   ┃           loader: L,
┃   ┃           sink: &mut S4,
┃   ┃       ) -> Result<(), Box<dyn Error>>
┃   ┃       where
┃   ┃           S1: Extractable,
┃   ┃           S2: Extractable + Loadable,
┃   ┃           S3: Extractable + Loadable,
┃   ┃           S4: Loadable,
┃   ┃           E: Extractor<S1, S2>,
┃   ┃           T: Transformer<S2, S3>,
┃   ┃           L: Loader<S3, S4>,
┃   ┗━━ 📄 tf_test.tf (288 tokens, 39 lines)
┃       ┣━━ provider "aws"
┃       ┣━━ resource "aws_instance" "example"
┃       ┣━━ data "aws_ami" "ubuntu"
┃       ┣━━ variable "instance_type"
┃       ┣━━ output "instance_public_ip"
┃       ┣━━ locals
┃       ┗━━ module "vpc"
┗━━ 📁 group5 (4442 tokens, 600 lines)
    ┣━━ 📄 ansible_test.yml (60 tokens, 15 lines)
    ┃   ┣━━ Install package
    ┃   ┣━━ Start service
    ┃   ┗━━ Create user
    ┣━━ 📄 app-routing.module.ts (242 tokens, 28 lines)
    ┃   ┣━━ const routes: Routes = [
    ┃   ┃       { path: '', redirectTo: 'login', pathMatch: 'full' },
    ┃   ┃       { path: '*', redirectTo: 'login' },
    ┃   ┃       { path: 'home', component: HomeComponent },
    ┃   ┃       { path: 'login', component: LoginComponent },
    ┃   ┃       { path: 'register', component: RegisterComponent },
    ┃   ┃       { path: 'events', component: EventsComponent },
    ┃   ┃       { path: 'invites', component: InvitesComponent },
    ┃   ┃       { path: 'rewards', component: RewardsComponent },
    ┃   ┃       { path: 'profile', component: ProfileComponent },
    ┃   ┃   ];
    ┃   ┗━━ class AppRoutingModule
    ┣━━ 📄 app.component.spec.ts (307 tokens, 48 lines)
    ┃   ┣━━ describe 'AppComponent'
    ┃   ┣━━     it should create the app
    ┃   ┣━━     it should welcome the user
    ┃   ┣━━     it should welcome 'Jimbo'
    ┃   ┗━━     it should request login if not logged in
    ┣━━ 📄 app.component.ts (243 tokens, 44 lines)
    ┃   ┣━━ class AppComponent
    ┃   ┣━━     title: string = 'promo-app'
    ┃   ┣━━     user: any
    ┃   ┣━━     events: any
    ┃   ┣━━     events_list: any
    ┃   ┣━━     clientSecret: string
    ┃   ┣━━     card?: StripePaymentElementComponent
    ┃   ┣━━     cardOptions: StripePaymentElementOptions
    ┃   ┣━━     constructor(
    ┃   ┃           private http: HttpClient,
    ┃   ┃           private loginService: LoginService,
    ┃   ┃           private stripeService: StripeService
    ┃   ┃       )
    ┃   ┣━━     constructor(private loginService: LoginService)
    ┃   ┣━━     checkSession()
    ┃   ┣━━     async goToEvent(event_id: string)
    ┃   ┗━━     valInvitedBy(event: any, event_id: string)
    ┣━━ 📄 app.module.ts (269 tokens, 43 lines)
    ┃   ┣━━ @NgModule({
    ┃   ┃       declarations: [
    ┃   ┃           AppComponent,
    ┃   ┃           HomeComponent,
    ┃   ┃           LoginComponent,
    ┃   ┃           RegisterComponent,
    ┃   ┃           EventsComponent,
    ┃   ┃           InvitesComponent,
    ┃   ┃           RewardsComponent,
    ┃   ┃           ProfileComponent
    ┃   ┗━━ class AppModule
    ┣━━ 📄 checkbox_test.md (263 tokens, 22 lines)
    ┃   ┣━━ # My Checkbox Test
    ┃   ┣━━ ## My No Parens Test
    ┃   ┣━━ ## My Empty href Test
    ┃   ┣━━ ## My other url Test [Q&A]
    ┃   ┣━━ ## My other other url Test [Q&A]
    ┃   ┣━━ ## My 2nd other url Test [Q&A]
    ┃   ┣━━ ## My 3rd other url Test [Q&A]
    ┃   ┣━━ - [ ] Task 1
    ┃   ┣━━     - [ ] No Space Task 1.1
    ┃   ┣━━     - [ ] Two Spaces Task 1.2
    ┃   ┣━━         - [ ] Subtask 1.2.1
    ┃   ┣━━ - [ ] Task 2
    ┃   ┣━━ -  Task 3
    ┃   ┣━━     - [ ] Subtask 3.1
    ┃   ┣━━ -  Task 6
    ┃   ┣━━     -  Subtask 6.1
    ┃   ┗━━         - [ ] Handle edge cases
    ┣━━ 📄 checkbox_test.txt (276 tokens, 33 lines)
    ┃   ┣━━ - [ ] fix phone number format +1
    ┃   ┣━━ - [ ] add forgot password
    ┃   ┣━━ - [ ] ? add email verification
    ┃   ┣━━ - [ ] store token the right way
    ┃   ┣━━ - [ ] test nesting of checkboxes
    ┃   ┣━━ - [ ] user can use option to buy ticket at 2-referred price
    ┃   ┣━━ - [ ] CTA refer 2 people to get instant lower price
    ┃   ┗━━ - [ ] form to send referrals
    ┣━━ 📄 environment.test.ts (193 tokens, 19 lines)
    ┃   ┣━━ environment:
    ┃   ┣━━    production
    ┃   ┣━━    cognitoUserPoolId
    ┃   ┣━━    cognitoAppClientId
    ┃   ┗━━    apiurl
    ┣━━ 📄 k8s_test.yaml (171 tokens, 38 lines)
    ┃   ┣━━ apps/v1.Deployment -> my-app
    ┃   ┣━━ v1.Service -> my-service
    ┃   ┗━━ v1.ConfigMap -> my-config
    ┣━━ 📄 Makefile (882 tokens, 85 lines)
    ┃   ┣━━ include dotenv/dev.env
    ┃   ┣━━ .PHONY: dev
    ┃   ┣━━ dev
    ┃   ┣━━ services-down
    ┃   ┣━━ services-stop: services-down
    ┃   ┣━━ define CHECK_POSTGRES
    ┃   ┣━━ damage-report
    ┃   ┣━━ tail-logs
    ┃   ┗━━ cloud
    ┣━━ 📄 requirements_test.txt (40 tokens, 10 lines)
    ┃   ┣━━ psycopg2-binary
    ┃   ┣━━ pytest
    ┃   ┣━━ coverage
    ┃   ┣━━ flask
    ┃   ┣━━ flask_cors
    ┃   ┣━━ stripe
    ┃   ┣━━ pyjwt
    ┃   ┣━━ cognitojwt
    ┃   ┗━━ flask-lambda
    ┣━━ 📄 rust_todo_test.rs (109 tokens, 27 lines)
    ┃   ┣━━ TODO (Line 23): This todo tests parse_todo
    ┃   ┣━━ enum Color
    ┃   ┣━━ struct Point
    ┃   ┣━━ trait Drawable
    ┃   ┣━━ fn draw(&self)
    ┃   ┣━━ impl Drawable for Point
    ┃   ┣━━ fn draw(&self)
    ┃   ┗━━ fn main()
    ┣━━ 📄 sql_test.sql (300 tokens, 52 lines)
    ┃   ┣━━ CREATE TABLE promoters
    ┃   ┣━━    user_id serial PRIMARY KEY,
    ┃   ┣━━    type varchar(20) NOT NULL,
    ┃   ┣━━    username varchar(20) NOT NULL,
    ┃   ┣━━    password varchar(20) NOT NULL,
    ┃   ┣━━    email varchar(30) NOT NULL,
    ┃   ┣━━    phone varchar(20) NOT NULL,
    ┃   ┣━━    promocode varchar(20),
    ┃   ┣━━    info json,
    ┃   ┣━━    going text[],
    ┃   ┣━━    invites text[],
    ┃   ┣━━    balance integer NOT NULL,
    ┃   ┣━━    rewards text[],
    ┃   ┣━━    created timestamp
    ┃   ┣━━ CREATE TABLE events
    ┃   ┣━━    event_id serial PRIMARY KEY,
    ┃   ┣━━    name varchar(64) NOT NULL,
    ┃   ┣━━    date varchar(64) NOT NULL,
    ┃   ┣━━    location varchar(64) NOT NULL,
    ┃   ┣━━    performer varchar(64) NOT NULL,
    ┃   ┣━━    rewards json,
    ┃   ┗━━    created timestamp
    ┣━━ 📄 standard-app-routing.module.ts (93 tokens, 17 lines)
    ┃   ┗━━ const routes: Routes = [
    ┃         { path: '', component: HomeComponent },
    ┃         {
    ┃           path: 'heroes',
    ┃           component: HeroesListComponent,
    ┃           children: [
    ┃             { path: ':id', component: HeroDetailComponent },
    ┃             { path: 'new', component: HeroFormComponent },
    ┃           ],
    ┃         },
    ┃         { path: '**', component: PageNotFoundComponent },
    ┃       ];
    ┣━━ 📄 test.env (242 tokens, 26 lines)
    ┃   ┣━━ PROMO_PATH
    ┃   ┣━━ PRODUCTION
    ┃   ┣━━ SQL_SCHEMA_PATH
    ┃   ┣━━ DB_LOGS
    ┃   ┣━━ DB_LOG
    ┃   ┣━━ PGPASSWORD
    ┃   ┣━━ PGDATABASE
    ┃   ┣━━ PGHOST
    ┃   ┣━━ PGPORT
    ┃   ┣━━ PGUSER
    ┃   ┣━━ SERVER_LOG
    ┃   ┣━━ SERVER_LOGS
    ┃   ┣━━ API_URL
    ┃   ┣━━ APP_LOGS
    ┃   ┣━━ APP_LOG
    ┃   ┣━━ APP_URL
    ┃   ┣━━ COGNITO_USER_POOL_ID
    ┃   ┣━━ COGNITO_APP_CLIENT_ID
    ┃   ┣━━ AWS_REGION
    ┃   ┗━━ STRIPE_SECRET_KEY
    ┣━━ 📄 testJsonSchema.json (294 tokens, 49 lines)
    ┃   ┣━━ $schema: http://json-schema.org/draft-07/schema#
    ┃   ┣━━ type: object
    ┃   ┣━━ title: random_test
    ┃   ┗━━ description: A promoter's activites related to events
    ┗━━ 📄 testPackage.json (458 tokens, 44 lines)
        ┣━━ name: 'promo-app'
        ┣━━ version: 0.0.0
        ┣━━ scripts:
        ┣━━     ng: 'ng'
        ┣━━     start: 'ng serve'
        ┣━━     build: 'ng build'
        ┣━━     watch: 'ng build --watch --configuration development'
        ┗━━     test: 'ng test'
```

## Support Free, Open-Source Software:

Please consider contacting the authorities to report the issue described in this document:

[California OpenAI Complaint - Customer Noncompete Clause](https://www.tinyurl.com/cali-openai-complaint)

<a href="https://www.buymeacoffee.com/bionicles" target="_blank"><img src="https://cdn.buymeacoffee.com/buttons/default-orange.png" alt="Buy Me A Coffee" height="41" width="174"></a>

            

Raw data

            {
    "_id": null,
    "home_page": "",
    "name": "tree-plus-BIONICLES",
    "maintainer": "",
    "docs_url": null,
    "requires_python": ">=3.8",
    "maintainer_email": "",
    "keywords": "tree,util,cli",
    "author": "",
    "author_email": "Bion Howard <bion@atomiclogic.com>",
    "download_url": "https://files.pythonhosted.org/packages/7d/e9/9dda3f1cd88845823b32a4ff6940af7a11e498e6ec85c0a3653283ae9002/tree_plus_BIONICLES-1.0.0.tar.gz",
    "platform": null,
    "description": "# Tree Plus\n\n[![License](https://img.shields.io/badge/license-MIT%2FApache--2.0-brightgreen)](https://choosealicense.com/licenses/)\n[![Docs](https://img.shields.io/badge/docs-README-blue)](https://github.com/bionicles/tree_plus/blob/main/README.md)\n[![Linux & MacOS](https://github.com/bionicles/tree_plus/actions/workflows/unix.yml/badge.svg)](https://github.com/bionicles/tree_plus/actions/workflows/unix.yml)\n[![Microsoft](https://github.com/bionicles/tree_plus/actions/workflows/microsoft.yml/badge.svg)](https://github.com/bionicles/tree_plus/actions/workflows/microsoft.yml)\n\n**Supported Operating Systems:**\n![Ubuntu](https://img.shields.io/badge/Supports-Ubuntu-orange)\n![MacOS](https://img.shields.io/badge/Supports-MacOS-orange)\n![Windows](https://img.shields.io/badge/Supports-Windows-orange)\n\n**Supported Python Versions:**\n![Python 3.8](https://img.shields.io/badge/Python-3.8-blue)\n![Python 3.9](https://img.shields.io/badge/Python-3.9-blue)\n![Python 3.10](https://img.shields.io/badge/Python-3.10-blue)\n![Python 3.11](https://img.shields.io/badge/Python-3.11-blue)\n![Python 3.12](https://img.shields.io/badge/Python-3.12-blue)\n\nA simple command line interface (CLI) tool for developers to show a `tree` enhanced with token counts, line counts, and source code components.\n\n## Example Output:\n- [ ] Demonstrate Parsed Checkboxes\n```sh\n~/hax/tree_plus (main) $\n> tp -i tests\npaths=('.',)\n\ud83d\udcc1 tree_plus (11526 tokens, 1012 lines)\n\u2523\u2501\u2501 \ud83d\udcc1 .github\n\u2503   \u2517\u2501\u2501 \ud83d\udcc1 workflows (523 tokens, 70 lines)\n\u2503       \u2523\u2501\u2501 \ud83d\udcc4 microsoft.yml (272 tokens, 36 lines)\n\u2503       \u2503   \u2523\u2501\u2501 Microsoft\n\u2503       \u2503   \u2523\u2501\u2501   job: build\n\u2503       \u2503   \u2523\u2501\u2501     - Set up Python ${{ matrix.python-version }}\n\u2503       \u2503   \u2523\u2501\u2501     - Install tree_plus\n\u2503       \u2503   \u2523\u2501\u2501     - Set PYTHONUTF8 for Windows\n\u2503       \u2503   \u2523\u2501\u2501     - Run generic tests\n\u2503       \u2503   \u2517\u2501\u2501     - Run specific test\n\u2503       \u2517\u2501\u2501 \ud83d\udcc4 unix.yml (251 tokens, 34 lines)\n\u2503           \u2523\u2501\u2501 Ubuntu & MacOS\n\u2503           \u2523\u2501\u2501   job: build\n\u2503           \u2523\u2501\u2501     - Set up Python ${{ matrix.python-version }}\n\u2503           \u2523\u2501\u2501     - Install tree_plus\n\u2503           \u2523\u2501\u2501     - Run generic tests\n\u2503           \u2517\u2501\u2501     - Run specific test\n\u2523\u2501\u2501 \ud83d\udcc1 tree_plus_src (12997 tokens, 1542 lines)\n\u2503   \u2523\u2501\u2501 \ud83d\udcc1 scripts (6661 tokens, 861 lines)\n\u2503   \u2503   \u2523\u2501\u2501 \ud83d\udcc4 alias_tree_plus.sh (277 tokens, 31 lines)\n\u2503   \u2503   \u2523\u2501\u2501 \ud83d\udcc4 Microsoft.PowerShell_profile.ps1 (3238 tokens, 419 lines)\n\u2503   \u2503   \u2503   \u2523\u2501\u2501 function Log($message)\n\u2503   \u2503   \u2503   \u2517\u2501\u2501 function Show-Error($err)\n\u2503   \u2503   \u2523\u2501\u2501 \ud83d\udcc4 profile.toml (1192 tokens, 126 lines)\n\u2503   \u2503   \u2523\u2501\u2501 \ud83d\udcc4 scratch.ps1 (1317 tokens, 197 lines)\n\u2503   \u2503   \u2517\u2501\u2501 \ud83d\udcc4 scratch.sh (637 tokens, 88 lines)\n\u2503   \u2523\u2501\u2501 \ud83d\udcc4 count_tokens_lines.py (575 tokens, 78 lines)\n\u2503   \u2503   \u2523\u2501\u2501 TODO (Line 11): show off how well we parse_todo!\n\u2503   \u2503   \u2523\u2501\u2501 class TokenLineCount\n\u2503   \u2503   \u2523\u2501\u2501 def add_tokens_lines\n\u2503   \u2503   \u2523\u2501\u2501 def count_tokens_lines\n\u2503   \u2503   \u2517\u2501\u2501 def count_directory_tokens_lines\n\u2503   \u2523\u2501\u2501 \ud83d\udcc4 default_ignore.py (538 tokens, 94 lines)\n\u2503   \u2503   \u2523\u2501\u2501 def make_ignore\n\u2503   \u2503   \u2523\u2501\u2501 def is_binary_string\n\u2503   \u2503   \u2517\u2501\u2501 def is_binary\n\u2503   \u2523\u2501\u2501 \ud83d\udcc4 parse_file.py (11631 tokens, 1333 lines)\n\u2503   \u2503   \u2523\u2501\u2501 TODO (Line 15): convert this to an environment variable and share across the modules\n\u2503   \u2503   \u2523\u2501\u2501 def debug_print\n\u2503   \u2503   \u2523\u2501\u2501 def parse_file\n\u2503   \u2503   \u2523\u2501\u2501 def parse_d_dot_ts\n\u2503   \u2503   \u2523\u2501\u2501 def parse_angular_app_module\n\u2503   \u2503   \u2523\u2501\u2501 def parse_angular_component_ts\n\u2503   \u2503   \u2523\u2501\u2501 def parse_angular_routes\n\u2503   \u2503   \u2523\u2501\u2501 def parse_angular_spec\n\u2503   \u2503   \u2523\u2501\u2501 def parse_environment_ts\n\u2503   \u2503   \u2523\u2501\u2501 def parse_dot_env\n\u2503   \u2503   \u2523\u2501\u2501 def parse_requirements_txt\n\u2503   \u2503   \u2523\u2501\u2501 def parse_json_schema\n\u2503   \u2503   \u2523\u2501\u2501 def parse_package_json\n\u2503   \u2503   \u2523\u2501\u2501 def parse_ts\n\u2503   \u2503   \u2523\u2501\u2501 def parse_makefile\n\u2503   \u2503   \u2523\u2501\u2501 def parse_sql\n\u2503   \u2503   \u2523\u2501\u2501 def is_k8s_yml\n\u2503   \u2503   \u2523\u2501\u2501 def is_ansible_yml\n\u2503   \u2503   \u2523\u2501\u2501 def is_github_yml\n\u2503   \u2503   \u2523\u2501\u2501 def parse_github_yml\n\u2503   \u2503   \u2523\u2501\u2501 def parse_k8s\n\u2503   \u2503   \u2523\u2501\u2501 def parse_ansible\n\u2503   \u2503   \u2523\u2501\u2501 def parse_yml\n\u2503   \u2503   \u2523\u2501\u2501 def extract_nodes\n\u2503   \u2503   \u2523\u2501\u2501 def is_typing_construct\n\u2503   \u2503   \u2523\u2501\u2501 def is_builtin_type\n\u2503   \u2503   \u2523\u2501\u2501 def parse_py\n\u2503   \u2503   \u2523\u2501\u2501 def parse_db\n\u2503   \u2503   \u2523\u2501\u2501 def parse_cobol\n\u2503   \u2503   \u2523\u2501\u2501 def parse_java\n\u2503   \u2503   \u2523\u2501\u2501 def parse_julia\n\u2503   \u2503   \u2523\u2501\u2501 def parse_kotlin\n\u2503   \u2503   \u2523\u2501\u2501 def parse_lisp\n\u2503   \u2503   \u2523\u2501\u2501 def parse_lua\n\u2503   \u2503   \u2523\u2501\u2501 def parse_objective_c\n\u2503   \u2503   \u2523\u2501\u2501 def parse_ocaml\n\u2503   \u2503   \u2523\u2501\u2501 def parse_apl\n\u2503   \u2503   \u2523\u2501\u2501 def parse_perl\n\u2503   \u2503   \u2523\u2501\u2501 def parse_php\n\u2503   \u2503   \u2523\u2501\u2501 def parse_powershell\n\u2503   \u2503   \u2523\u2501\u2501 def parse_matlab\n\u2503   \u2503   \u2523\u2501\u2501 def parse_scala\n\u2503   \u2503   \u2523\u2501\u2501 def parse_c\n\u2503   \u2503   \u2523\u2501\u2501 def parse_tf\n\u2503   \u2503   \u2523\u2501\u2501 def parse_js\n\u2503   \u2503   \u2523\u2501\u2501 def parse_md\n\u2503   \u2503   \u2523\u2501\u2501 def parse_txt\n\u2503   \u2503   \u2523\u2501\u2501 def parse_markers\n\u2503   \u2503   \u2517\u2501\u2501 def parse_rs\n\u2503   \u2517\u2501\u2501 \ud83d\udcc4 traverse_directory.py (253 tokens, 37 lines)\n\u2503       \u2517\u2501\u2501 def traverse_directory\n\u2523\u2501\u2501 \ud83d\udcc4 .gitignore (111 tokens, 32 lines)\n\u2523\u2501\u2501 \ud83d\udcc4 LICENSE (2123 tokens, 81 lines)\n\u2523\u2501\u2501 \ud83d\udcc4 Makefile (193 tokens, 26 lines)\n\u2503   \u2523\u2501\u2501 SHELL := /bin/bash\n\u2503   \u2523\u2501\u2501 debug\n\u2503   \u2523\u2501\u2501 .PHONY: debug_command\n\u2503   \u2523\u2501\u2501 debug_command: cli test\n\u2503   \u2523\u2501\u2501 cli\n\u2503   \u2523\u2501\u2501 test_s: test_tp_dotdot_s\n\u2503   \u2523\u2501\u2501 test_tp_dotdot_s: test_tp_dotdot\n\u2503   \u2523\u2501\u2501 test: test_tp_dotdot\n\u2503   \u2523\u2501\u2501 test_tp_dotdot\n\u2503   \u2517\u2501\u2501 move_powershell_profile\n\u2523\u2501\u2501 \ud83d\udcc4 nodemon.json (64 tokens, 13 lines)\n\u2523\u2501\u2501 \ud83d\udcc4 README.md (2682 tokens, 230 lines)\n\u2503   \u2523\u2501\u2501 # Tree Plus\n\u2503   \u2523\u2501\u2501 ## Example Output:\n\u2503   \u2523\u2501\u2501 - [ ] Demonstrate Parsed Checkboxes\n\u2503   \u2523\u2501\u2501 ## Start Quick!\n\u2503   \u2523\u2501\u2501 ### Prerequisites\n\u2503   \u2523\u2501\u2501 ### Install Tree Plus\n\u2503   \u2523\u2501\u2501 #### Local Hackable Install\n\u2503   \u2523\u2501\u2501 ### Usage\n\u2503   \u2517\u2501\u2501 ## Moar Languages\n\u2523\u2501\u2501 \ud83d\udcc4 sample_output.sh (3039 tokens, 184 lines)\n\u2523\u2501\u2501 \ud83d\udcc4 setup.py (608 tokens, 97 lines)\n\u2503   \u2517\u2501\u2501 TODO (Line 44): automatically install tree-sitter-{language} grammars\n\u2523\u2501\u2501 \ud83d\udcc4 TODO.md (393 tokens, 41 lines)\n\u2503   \u2523\u2501\u2501 # Do First\n\u2503   \u2523\u2501\u2501 # Backlog\n\u2503   \u2523\u2501\u2501 - [ ] Fix ordering of leaves by line number consistently across languages\n\u2503   \u2523\u2501\u2501     - [ ] Fix Python ordering\n\u2503   \u2523\u2501\u2501     - [ ] Fix JavaScript / TypeScript ordering\n\u2503   \u2523\u2501\u2501     - [ ] Review other language unit tests for ordering\n\u2503   \u2523\u2501\u2501 - [ ] expand test cases for the supported languages to verify ordering & completeness\n\u2503   \u2523\u2501\u2501 - [ ] Upgrade CICD GitHub Action\n\u2503   \u2523\u2501\u2501     - [ ] Build and deploy to PyPi if tests pass\n\u2503   \u2523\u2501\u2501 - [ ] test file input instead of directory\n\u2503   \u2523\u2501\u2501 - [ ] measure test coverage\n\u2503   \u2523\u2501\u2501 - [ ] test named lambdas in python\n\u2503   \u2523\u2501\u2501 - [ ] autoinstall tree-sitter grammars to enable real parsing instead of regex if available\n\u2503   \u2523\u2501\u2501 - [ ] modularize the tree_plus function to separate index creation from tree creation\n\u2503   \u2523\u2501\u2501 - [ ] brainstorm and integrate more flags / options to control results\n\u2503   \u2523\u2501\u2501     - [ ] add a todo flag to only show todos and unchecked checkboxes\n\u2503   \u2523\u2501\u2501     - [ ] add a search / filter input to filter results\n\u2503   \u2523\u2501\u2501 - [ ] make a tree_scan to apply AI LLMs to the tree\n\u2503   \u2523\u2501\u2501     - [ ] e.g. to suggest todos\n\u2503   \u2523\u2501\u2501     - [ ] to write docs\n\u2503   \u2523\u2501\u2501     - [ ] to write tests\n\u2503   \u2523\u2501\u2501     - [ ] to write code\n\u2503   \u2523\u2501\u2501     - [ ] to translate languages (e.g. 'rewrite it in rust' example)\n\u2503   \u2523\u2501\u2501 # Nice to have\n\u2503   \u2523\u2501\u2501 - [ ] Support more languages\n\u2503   \u2523\u2501\u2501     - [ ] SQL (create tables, procedures)\n\u2503   \u2523\u2501\u2501     - [ ] C#\n\u2503   \u2523\u2501\u2501     - [ ] C++\n\u2503   \u2523\u2501\u2501     - [ ] OpenAPI yaml\n\u2503   \u2523\u2501\u2501     - [ ] Json RPC 2.0 schemas\n\u2503   \u2523\u2501\u2501     - [ ] GRPC schemas\n\u2503   \u2523\u2501\u2501     - [ ] GraphQL schemas\n\u2503   \u2523\u2501\u2501     - [ ] Go\n\u2503   \u2523\u2501\u2501     - [ ] Dart\n\u2503   \u2523\u2501\u2501     - [ ] Swift\n\u2503   \u2517\u2501\u2501 # Done\n\u2517\u2501\u2501 \ud83d\udcc4 tree_plus_cli.py (2313 tokens, 308 lines)\n    \u2523\u2501\u2501 NOTE (Line 275): parent_count unused, is that ok?\n    \u2523\u2501\u2501 def debug_print\n    \u2523\u2501\u2501 def tree_to_string\n    \u2523\u2501\u2501 def clean_string\n    \u2523\u2501\u2501 def safe_print\n    \u2523\u2501\u2501 def main\n    \u2523\u2501\u2501 def tree_plus\n    \u2523\u2501\u2501 def _parse_paths\n    \u2523\u2501\u2501 def flatten_to_str\n    \u2523\u2501\u2501 def _handle_paths\n    \u2517\u2501\u2501 def _handle_path\n```\n- [x] Demonstrate Parsed Checkboxes\n\n\n## Start Quick!\n\n### Prerequisites\n\nEnsure you have the following tools installed:\n\n- [Miniconda3 (conda)](https://docs.conda.io/en/latest/miniconda.html)\n- [GitHub CLI (gh)](https://cli.github.com/manual/installation)\n\n### Install Tree Plus\n\n#### Local Hackable Install\n\n1. Clone the repository and cd into the tree_plus directory\n```bash\ngh repo clone https://github.com/bionicles/tree_plus.git && cd tree_plus\n```\n\n2. Install tree_plus using Makefile\n```bash\nmake cli\n```\n\nAlternatively, if `make` is not installed, use `pip`:\n```bash\npip install -e .\n```\n\nNow, you can use the `tree_plus` command.\n\n3. Add slick aliases like `tp` to your RC file\nTypical RC_FILE values `~/.bash_profile`, `~/.bashrc`, or `~/.zshrc`\n```bash\nRC_FILE=~/.bash_profile source alias_tree_plus.sh\n```\n```bash\nRC_FILE=~/.bashrc source alias_tree_plus.sh\n```\n```zsh\nRC_FILE=~/.zshrc source alias_tree_plus.sh\n```\n\nSoon, you'll be able to simply run 'pip install tree_plus'. Stay tuned!\n\n### Usage\n\n```bash\n# Use tree_plus\ntp\n```\n\nIf you make changes to `tree_plus` and need to reinstall it quickly, use the `tpcli` alias:\n\n```bash\n# Reinstall tree_plus quickly after making changes\ntpcli\n```\n\n## Moar Languages\n\n```sh\n/home/bion/hax/tree_plus/tests/more_languages (0 tokens, 0 lines)\n\u2523\u2501\u2501 \ud83d\udcc1 group1 (402 tokens, 88 lines)\n\u2503   \u2523\u2501\u2501 \ud83d\udcc4 COBOL_TEST.CBL (57 tokens, 11 lines)\n\u2503   \u2503   \u2523\u2501\u2501 IDENTIFICATION DIVISION -> PROGRAM-ID. HELLO\n\u2503   \u2503   \u2523\u2501\u2501 DATA DIVISION -> 01 GREETING\n\u2503   \u2503   \u2517\u2501\u2501 PROCEDURE DIVISION\n\u2503   \u2523\u2501\u2501 \ud83d\udcc4 JavaTest.java (47 tokens, 12 lines)\n\u2503   \u2503   \u2523\u2501\u2501 class Person\n\u2503   \u2503   \u2523\u2501\u2501 class Person -> Person(String name)\n\u2503   \u2503   \u2517\u2501\u2501 class Person -> void greet()\n\u2503   \u2523\u2501\u2501 \ud83d\udcc4 JuliaTest.jl (42 tokens, 12 lines)\n\u2503   \u2503   \u2523\u2501\u2501 module JuliaTest\n\u2503   \u2503   \u2523\u2501\u2501 module JuliaTest -> struct Person\n\u2503   \u2503   \u2517\u2501\u2501 module JuliaTest -> greet(p::Person)\n\u2503   \u2523\u2501\u2501 \ud83d\udcc4 KotlinTest.kt (29 tokens, 4 lines)\n\u2503   \u2503   \u2523\u2501\u2501 data class Person(val name: String)\n\u2503   \u2503   \u2517\u2501\u2501 fun greet(person: Person)\n\u2503   \u2523\u2501\u2501 \ud83d\udcc4 LispTest.lisp (31 tokens, 5 lines)\n\u2503   \u2503   \u2523\u2501\u2501 defstruct person\n\u2503   \u2503   \u2517\u2501\u2501 defun greet\n\u2503   \u2523\u2501\u2501 \ud83d\udcc4 LuaTest.lua (84 tokens, 16 lines)\n\u2503   \u2503   \u2523\u2501\u2501 function HelloWorld.new\n\u2503   \u2503   \u2523\u2501\u2501 function HelloWorld.greet\n\u2503   \u2503   \u2517\u2501\u2501 function say_hello\n\u2503   \u2523\u2501\u2501 \ud83d\udcc4 ObjectiveCTest.m (59 tokens, 16 lines)\n\u2503   \u2503   \u2523\u2501\u2501 @interface HelloWorld\n\u2503   \u2503   \u2523\u2501\u2501 @interface HelloWorld -> (void) sayHello\n\u2503   \u2503   \u2523\u2501\u2501 @implementation HelloWorld\n\u2503   \u2503   \u2523\u2501\u2501 @implementation HelloWorld -> (void) sayHello\n\u2503   \u2503   \u2517\u2501\u2501 void sayHelloWorld()\n\u2503   \u2517\u2501\u2501 \ud83d\udcc4 OcamlTest.ml (53 tokens, 12 lines)\n\u2503       \u2523\u2501\u2501 type color\n\u2503       \u2523\u2501\u2501 class hello\n\u2503       \u2523\u2501\u2501 class hello -> method say_hello\n\u2503       \u2517\u2501\u2501 let main ()\n\u2523\u2501\u2501 \ud83d\udcc1 group2 (754 tokens, 164 lines)\n\u2503   \u2523\u2501\u2501 \ud83d\udcc4 apl_test.apl (44 tokens, 5 lines)\n\u2503   \u2503   \u2523\u2501\u2501 :Namespace HelloWorld\n\u2503   \u2503   \u2523\u2501\u2501 :Namespace HelloWorld -> hello \u2190 'Hello, World!'\n\u2503   \u2503   \u2517\u2501\u2501 :Namespace HelloWorld -> plus \u2190 {\u237a+\u2375}\n\u2503   \u2523\u2501\u2501 \ud83d\udcc4 c_test.c (256 tokens, 69 lines)\n\u2503   \u2503   \u2523\u2501\u2501 struct Point\n\u2503   \u2503   \u2523\u2501\u2501 struct Point getOrigin()\n\u2503   \u2503   \u2523\u2501\u2501 float mul_two_floats(float x1, float x2)\n\u2503   \u2503   \u2523\u2501\u2501 enum days\n\u2503   \u2503   \u2523\u2501\u2501 long add_two_longs(long x1, long x2)\n\u2503   \u2503   \u2523\u2501\u2501 double multiplyByTwo(double num)\n\u2503   \u2503   \u2523\u2501\u2501 char getFirstCharacter(char *str)\n\u2503   \u2503   \u2523\u2501\u2501 void greet(Person p)\n\u2503   \u2503   \u2523\u2501\u2501 typedef struct Person\n\u2503   \u2503   \u2523\u2501\u2501 int main()\n\u2503   \u2503   \u2517\u2501\u2501 int* getArrayStart(int arr[], int size)\n\u2503   \u2523\u2501\u2501 \ud83d\udcc4 PerlTest.pl (75 tokens, 20 lines)\n\u2503   \u2503   \u2523\u2501\u2501 package PerlTest\n\u2503   \u2503   \u2523\u2501\u2501 package PerlTest -> sub new\n\u2503   \u2503   \u2523\u2501\u2501 package PerlTest -> sub hello\n\u2503   \u2503   \u2517\u2501\u2501 package PerlTest -> sub say_hello\n\u2503   \u2523\u2501\u2501 \ud83d\udcc4 PhpTest.php (74 tokens, 19 lines)\n\u2503   \u2503   \u2523\u2501\u2501 class HelloWorld\n\u2503   \u2503   \u2523\u2501\u2501 class HelloWorld -> function sayHello\n\u2503   \u2503   \u2523\u2501\u2501 function greet\n\u2503   \u2503   \u2523\u2501\u2501 class Person\n\u2503   \u2503   \u2517\u2501\u2501 class Person -> function __construct\n\u2503   \u2523\u2501\u2501 \ud83d\udcc4 PowershellTest.ps1 (169 tokens, 27 lines)\n\u2503   \u2503   \u2523\u2501\u2501 function Test-Ordering($foo)\n\u2503   \u2503   \u2523\u2501\u2501 class Person\n\u2503   \u2503   \u2523\u2501\u2501 class Person -> Person($name)\n\u2503   \u2503   \u2523\u2501\u2501 class Person -> Greet()\n\u2503   \u2503   \u2523\u2501\u2501 class Person -> GreetMany($times)\n\u2503   \u2503   \u2523\u2501\u2501 class Person -> NoReturn($times)\n\u2503   \u2503   \u2523\u2501\u2501 class Person -> NoReturnNoArgs()\n\u2503   \u2503   \u2517\u2501\u2501 function Say-Hello([Person]$person)\n\u2503   \u2517\u2501\u2501 \ud83d\udcc4 ScalaTest.scala (136 tokens, 24 lines)\n\u2503       \u2523\u2501\u2501 def sumOfSquares(x: Int, y: Int): Int\n\u2503       \u2523\u2501\u2501 trait Bark\n\u2503       \u2523\u2501\u2501 trait Bark -> def bark: String\n\u2503       \u2523\u2501\u2501 case class Person(name: String)\n\u2503       \u2523\u2501\u2501 object HelloWorld\n\u2503       \u2523\u2501\u2501 object HelloWorld -> def greet(person: Person): Unit\n\u2503       \u2523\u2501\u2501 object HelloWorld -> def main(args: Array[String]): Unit\n\u2503       \u2517\u2501\u2501 def sumOfSquaresShort(x: Int, y: Int): Int\n\u2523\u2501\u2501 \ud83d\udcc1 group4 (944 tokens, 166 lines)\n\u2503   \u2523\u2501\u2501 \ud83d\udcc4 matlab_test.m (45 tokens, 12 lines)\n\u2503   \u2503   \u2523\u2501\u2501 classdef HelloWorld -> function greet\n\u2503   \u2503   \u2517\u2501\u2501 function loneFun\n\u2503   \u2523\u2501\u2501 \ud83d\udcc4 rust_test.rs (611 tokens, 115 lines)\n\u2503   \u2503   \u2523\u2501\u2501 enum Days\n\u2503   \u2503   \u2523\u2501\u2501 struct Point\n\u2503   \u2503   \u2523\u2501\u2501 impl Point\n\u2503   \u2503   \u2523\u2501\u2501 fn get_origin() -> Point\n\u2503   \u2503   \u2523\u2501\u2501 struct Person\n\u2503   \u2503   \u2523\u2501\u2501 impl Person\n\u2503   \u2503   \u2523\u2501\u2501 fn greet(&self)\n\u2503   \u2503   \u2523\u2501\u2501 fn add_two_longs(x1: i64, x2: i64) -> i64\n\u2503   \u2503   \u2523\u2501\u2501 fn add_two_longs_longer(\n\u2503   \u2503   \u2503       x1: i64,\n\u2503   \u2503   \u2503       x2: i64,\n\u2503   \u2503   \u2503   ) -> i64\n\u2503   \u2503   \u2523\u2501\u2501 fn multiply_by_two(num: f64) -> f64\n\u2503   \u2503   \u2523\u2501\u2501 fn get_first_character(s: &str) -> Option<char>\n\u2503   \u2503   \u2523\u2501\u2501 trait Drawable\n\u2503   \u2503   \u2523\u2501\u2501 fn draw(&self)\n\u2503   \u2503   \u2523\u2501\u2501 impl Drawable for Point\n\u2503   \u2503   \u2523\u2501\u2501 fn draw(&self)\n\u2503   \u2503   \u2523\u2501\u2501 fn main()\n\u2503   \u2503   \u2523\u2501\u2501 pub struct VisibleStruct\n\u2503   \u2503   \u2523\u2501\u2501 mod my_module\n\u2503   \u2503   \u2523\u2501\u2501 macro_rules! say_hello\n\u2503   \u2503   \u2523\u2501\u2501 pub mod lib\n\u2503   \u2503   \u2523\u2501\u2501 pub mod interfaces\n\u2503   \u2503   \u2523\u2501\u2501 mod engine\n\u2503   \u2503   \u2517\u2501\u2501 pub fn flow<S1, S2, S3, S4, E, T, L>(\n\u2503   \u2503           source: S1,\n\u2503   \u2503           extractor: E,\n\u2503   \u2503           inbox: S2,\n\u2503   \u2503           transformer: T,\n\u2503   \u2503           outbox: S3,\n\u2503   \u2503           loader: L,\n\u2503   \u2503           sink: &mut S4,\n\u2503   \u2503       ) -> Result<(), Box<dyn Error>>\n\u2503   \u2503       where\n\u2503   \u2503           S1: Extractable,\n\u2503   \u2503           S2: Extractable + Loadable,\n\u2503   \u2503           S3: Extractable + Loadable,\n\u2503   \u2503           S4: Loadable,\n\u2503   \u2503           E: Extractor<S1, S2>,\n\u2503   \u2503           T: Transformer<S2, S3>,\n\u2503   \u2503           L: Loader<S3, S4>,\n\u2503   \u2517\u2501\u2501 \ud83d\udcc4 tf_test.tf (288 tokens, 39 lines)\n\u2503       \u2523\u2501\u2501 provider \"aws\"\n\u2503       \u2523\u2501\u2501 resource \"aws_instance\" \"example\"\n\u2503       \u2523\u2501\u2501 data \"aws_ami\" \"ubuntu\"\n\u2503       \u2523\u2501\u2501 variable \"instance_type\"\n\u2503       \u2523\u2501\u2501 output \"instance_public_ip\"\n\u2503       \u2523\u2501\u2501 locals\n\u2503       \u2517\u2501\u2501 module \"vpc\"\n\u2517\u2501\u2501 \ud83d\udcc1 group5 (4442 tokens, 600 lines)\n    \u2523\u2501\u2501 \ud83d\udcc4 ansible_test.yml (60 tokens, 15 lines)\n    \u2503   \u2523\u2501\u2501 Install package\n    \u2503   \u2523\u2501\u2501 Start service\n    \u2503   \u2517\u2501\u2501 Create user\n    \u2523\u2501\u2501 \ud83d\udcc4 app-routing.module.ts (242 tokens, 28 lines)\n    \u2503   \u2523\u2501\u2501 const routes: Routes = [\n    \u2503   \u2503       { path: '', redirectTo: 'login', pathMatch: 'full' },\n    \u2503   \u2503       { path: '*', redirectTo: 'login' },\n    \u2503   \u2503       { path: 'home', component: HomeComponent },\n    \u2503   \u2503       { path: 'login', component: LoginComponent },\n    \u2503   \u2503       { path: 'register', component: RegisterComponent },\n    \u2503   \u2503       { path: 'events', component: EventsComponent },\n    \u2503   \u2503       { path: 'invites', component: InvitesComponent },\n    \u2503   \u2503       { path: 'rewards', component: RewardsComponent },\n    \u2503   \u2503       { path: 'profile', component: ProfileComponent },\n    \u2503   \u2503   ];\n    \u2503   \u2517\u2501\u2501 class AppRoutingModule\n    \u2523\u2501\u2501 \ud83d\udcc4 app.component.spec.ts (307 tokens, 48 lines)\n    \u2503   \u2523\u2501\u2501 describe 'AppComponent'\n    \u2503   \u2523\u2501\u2501     it should create the app\n    \u2503   \u2523\u2501\u2501     it should welcome the user\n    \u2503   \u2523\u2501\u2501     it should welcome 'Jimbo'\n    \u2503   \u2517\u2501\u2501     it should request login if not logged in\n    \u2523\u2501\u2501 \ud83d\udcc4 app.component.ts (243 tokens, 44 lines)\n    \u2503   \u2523\u2501\u2501 class AppComponent\n    \u2503   \u2523\u2501\u2501     title: string = 'promo-app'\n    \u2503   \u2523\u2501\u2501     user: any\n    \u2503   \u2523\u2501\u2501     events: any\n    \u2503   \u2523\u2501\u2501     events_list: any\n    \u2503   \u2523\u2501\u2501     clientSecret: string\n    \u2503   \u2523\u2501\u2501     card?: StripePaymentElementComponent\n    \u2503   \u2523\u2501\u2501     cardOptions: StripePaymentElementOptions\n    \u2503   \u2523\u2501\u2501     constructor(\n    \u2503   \u2503           private http: HttpClient,\n    \u2503   \u2503           private loginService: LoginService,\n    \u2503   \u2503           private stripeService: StripeService\n    \u2503   \u2503       )\n    \u2503   \u2523\u2501\u2501     constructor(private loginService: LoginService)\n    \u2503   \u2523\u2501\u2501     checkSession()\n    \u2503   \u2523\u2501\u2501     async goToEvent(event_id: string)\n    \u2503   \u2517\u2501\u2501     valInvitedBy(event: any, event_id: string)\n    \u2523\u2501\u2501 \ud83d\udcc4 app.module.ts (269 tokens, 43 lines)\n    \u2503   \u2523\u2501\u2501 @NgModule({\n    \u2503   \u2503       declarations: [\n    \u2503   \u2503           AppComponent,\n    \u2503   \u2503           HomeComponent,\n    \u2503   \u2503           LoginComponent,\n    \u2503   \u2503           RegisterComponent,\n    \u2503   \u2503           EventsComponent,\n    \u2503   \u2503           InvitesComponent,\n    \u2503   \u2503           RewardsComponent,\n    \u2503   \u2503           ProfileComponent\n    \u2503   \u2517\u2501\u2501 class AppModule\n    \u2523\u2501\u2501 \ud83d\udcc4 checkbox_test.md (263 tokens, 22 lines)\n    \u2503   \u2523\u2501\u2501 # My Checkbox Test\n    \u2503   \u2523\u2501\u2501 ## My No Parens Test\n    \u2503   \u2523\u2501\u2501 ## My Empty href Test\n    \u2503   \u2523\u2501\u2501 ## My other url Test [Q&A]\n    \u2503   \u2523\u2501\u2501 ## My other other url Test [Q&A]\n    \u2503   \u2523\u2501\u2501 ## My 2nd other url Test [Q&A]\n    \u2503   \u2523\u2501\u2501 ## My 3rd other url Test [Q&A]\n    \u2503   \u2523\u2501\u2501 - [ ] Task 1\n    \u2503   \u2523\u2501\u2501     - [ ] No Space Task 1.1\n    \u2503   \u2523\u2501\u2501     - [ ] Two Spaces Task 1.2\n    \u2503   \u2523\u2501\u2501         - [ ] Subtask 1.2.1\n    \u2503   \u2523\u2501\u2501 - [ ] Task 2\n    \u2503   \u2523\u2501\u2501 -  Task 3\n    \u2503   \u2523\u2501\u2501     - [ ] Subtask 3.1\n    \u2503   \u2523\u2501\u2501 -  Task 6\n    \u2503   \u2523\u2501\u2501     -  Subtask 6.1\n    \u2503   \u2517\u2501\u2501         - [ ] Handle edge cases\n    \u2523\u2501\u2501 \ud83d\udcc4 checkbox_test.txt (276 tokens, 33 lines)\n    \u2503   \u2523\u2501\u2501 - [ ] fix phone number format +1\n    \u2503   \u2523\u2501\u2501 - [ ] add forgot password\n    \u2503   \u2523\u2501\u2501 - [ ] ? add email verification\n    \u2503   \u2523\u2501\u2501 - [ ] store token the right way\n    \u2503   \u2523\u2501\u2501 - [ ] test nesting of checkboxes\n    \u2503   \u2523\u2501\u2501 - [ ] user can use option to buy ticket at 2-referred price\n    \u2503   \u2523\u2501\u2501 - [ ] CTA refer 2 people to get instant lower price\n    \u2503   \u2517\u2501\u2501 - [ ] form to send referrals\n    \u2523\u2501\u2501 \ud83d\udcc4 environment.test.ts (193 tokens, 19 lines)\n    \u2503   \u2523\u2501\u2501 environment:\n    \u2503   \u2523\u2501\u2501    production\n    \u2503   \u2523\u2501\u2501    cognitoUserPoolId\n    \u2503   \u2523\u2501\u2501    cognitoAppClientId\n    \u2503   \u2517\u2501\u2501    apiurl\n    \u2523\u2501\u2501 \ud83d\udcc4 k8s_test.yaml (171 tokens, 38 lines)\n    \u2503   \u2523\u2501\u2501 apps/v1.Deployment -> my-app\n    \u2503   \u2523\u2501\u2501 v1.Service -> my-service\n    \u2503   \u2517\u2501\u2501 v1.ConfigMap -> my-config\n    \u2523\u2501\u2501 \ud83d\udcc4 Makefile (882 tokens, 85 lines)\n    \u2503   \u2523\u2501\u2501 include dotenv/dev.env\n    \u2503   \u2523\u2501\u2501 .PHONY: dev\n    \u2503   \u2523\u2501\u2501 dev\n    \u2503   \u2523\u2501\u2501 services-down\n    \u2503   \u2523\u2501\u2501 services-stop: services-down\n    \u2503   \u2523\u2501\u2501 define CHECK_POSTGRES\n    \u2503   \u2523\u2501\u2501 damage-report\n    \u2503   \u2523\u2501\u2501 tail-logs\n    \u2503   \u2517\u2501\u2501 cloud\n    \u2523\u2501\u2501 \ud83d\udcc4 requirements_test.txt (40 tokens, 10 lines)\n    \u2503   \u2523\u2501\u2501 psycopg2-binary\n    \u2503   \u2523\u2501\u2501 pytest\n    \u2503   \u2523\u2501\u2501 coverage\n    \u2503   \u2523\u2501\u2501 flask\n    \u2503   \u2523\u2501\u2501 flask_cors\n    \u2503   \u2523\u2501\u2501 stripe\n    \u2503   \u2523\u2501\u2501 pyjwt\n    \u2503   \u2523\u2501\u2501 cognitojwt\n    \u2503   \u2517\u2501\u2501 flask-lambda\n    \u2523\u2501\u2501 \ud83d\udcc4 rust_todo_test.rs (109 tokens, 27 lines)\n    \u2503   \u2523\u2501\u2501 TODO (Line 23): This todo tests parse_todo\n    \u2503   \u2523\u2501\u2501 enum Color\n    \u2503   \u2523\u2501\u2501 struct Point\n    \u2503   \u2523\u2501\u2501 trait Drawable\n    \u2503   \u2523\u2501\u2501 fn draw(&self)\n    \u2503   \u2523\u2501\u2501 impl Drawable for Point\n    \u2503   \u2523\u2501\u2501 fn draw(&self)\n    \u2503   \u2517\u2501\u2501 fn main()\n    \u2523\u2501\u2501 \ud83d\udcc4 sql_test.sql (300 tokens, 52 lines)\n    \u2503   \u2523\u2501\u2501 CREATE TABLE promoters\n    \u2503   \u2523\u2501\u2501    user_id serial PRIMARY KEY,\n    \u2503   \u2523\u2501\u2501    type varchar(20) NOT NULL,\n    \u2503   \u2523\u2501\u2501    username varchar(20) NOT NULL,\n    \u2503   \u2523\u2501\u2501    password varchar(20) NOT NULL,\n    \u2503   \u2523\u2501\u2501    email varchar(30) NOT NULL,\n    \u2503   \u2523\u2501\u2501    phone varchar(20) NOT NULL,\n    \u2503   \u2523\u2501\u2501    promocode varchar(20),\n    \u2503   \u2523\u2501\u2501    info json,\n    \u2503   \u2523\u2501\u2501    going text[],\n    \u2503   \u2523\u2501\u2501    invites text[],\n    \u2503   \u2523\u2501\u2501    balance integer NOT NULL,\n    \u2503   \u2523\u2501\u2501    rewards text[],\n    \u2503   \u2523\u2501\u2501    created timestamp\n    \u2503   \u2523\u2501\u2501 CREATE TABLE events\n    \u2503   \u2523\u2501\u2501    event_id serial PRIMARY KEY,\n    \u2503   \u2523\u2501\u2501    name varchar(64) NOT NULL,\n    \u2503   \u2523\u2501\u2501    date varchar(64) NOT NULL,\n    \u2503   \u2523\u2501\u2501    location varchar(64) NOT NULL,\n    \u2503   \u2523\u2501\u2501    performer varchar(64) NOT NULL,\n    \u2503   \u2523\u2501\u2501    rewards json,\n    \u2503   \u2517\u2501\u2501    created timestamp\n    \u2523\u2501\u2501 \ud83d\udcc4 standard-app-routing.module.ts (93 tokens, 17 lines)\n    \u2503   \u2517\u2501\u2501 const routes: Routes = [\n    \u2503         { path: '', component: HomeComponent },\n    \u2503         {\n    \u2503           path: 'heroes',\n    \u2503           component: HeroesListComponent,\n    \u2503           children: [\n    \u2503             { path: ':id', component: HeroDetailComponent },\n    \u2503             { path: 'new', component: HeroFormComponent },\n    \u2503           ],\n    \u2503         },\n    \u2503         { path: '**', component: PageNotFoundComponent },\n    \u2503       ];\n    \u2523\u2501\u2501 \ud83d\udcc4 test.env (242 tokens, 26 lines)\n    \u2503   \u2523\u2501\u2501 PROMO_PATH\n    \u2503   \u2523\u2501\u2501 PRODUCTION\n    \u2503   \u2523\u2501\u2501 SQL_SCHEMA_PATH\n    \u2503   \u2523\u2501\u2501 DB_LOGS\n    \u2503   \u2523\u2501\u2501 DB_LOG\n    \u2503   \u2523\u2501\u2501 PGPASSWORD\n    \u2503   \u2523\u2501\u2501 PGDATABASE\n    \u2503   \u2523\u2501\u2501 PGHOST\n    \u2503   \u2523\u2501\u2501 PGPORT\n    \u2503   \u2523\u2501\u2501 PGUSER\n    \u2503   \u2523\u2501\u2501 SERVER_LOG\n    \u2503   \u2523\u2501\u2501 SERVER_LOGS\n    \u2503   \u2523\u2501\u2501 API_URL\n    \u2503   \u2523\u2501\u2501 APP_LOGS\n    \u2503   \u2523\u2501\u2501 APP_LOG\n    \u2503   \u2523\u2501\u2501 APP_URL\n    \u2503   \u2523\u2501\u2501 COGNITO_USER_POOL_ID\n    \u2503   \u2523\u2501\u2501 COGNITO_APP_CLIENT_ID\n    \u2503   \u2523\u2501\u2501 AWS_REGION\n    \u2503   \u2517\u2501\u2501 STRIPE_SECRET_KEY\n    \u2523\u2501\u2501 \ud83d\udcc4 testJsonSchema.json (294 tokens, 49 lines)\n    \u2503   \u2523\u2501\u2501 $schema: http://json-schema.org/draft-07/schema#\n    \u2503   \u2523\u2501\u2501 type: object\n    \u2503   \u2523\u2501\u2501 title: random_test\n    \u2503   \u2517\u2501\u2501 description: A promoter's activites related to events\n    \u2517\u2501\u2501 \ud83d\udcc4 testPackage.json (458 tokens, 44 lines)\n        \u2523\u2501\u2501 name: 'promo-app'\n        \u2523\u2501\u2501 version: 0.0.0\n        \u2523\u2501\u2501 scripts:\n        \u2523\u2501\u2501     ng: 'ng'\n        \u2523\u2501\u2501     start: 'ng serve'\n        \u2523\u2501\u2501     build: 'ng build'\n        \u2523\u2501\u2501     watch: 'ng build --watch --configuration development'\n        \u2517\u2501\u2501     test: 'ng test'\n```\n\n## Support Free, Open-Source Software:\n\nPlease consider contacting the authorities to report the issue described in this document:\n\n[California OpenAI Complaint - Customer Noncompete Clause](https://www.tinyurl.com/cali-openai-complaint)\n\n<a href=\"https://www.buymeacoffee.com/bionicles\" target=\"_blank\"><img src=\"https://cdn.buymeacoffee.com/buttons/default-orange.png\" alt=\"Buy Me A Coffee\" height=\"41\" width=\"174\"></a>\n",
    "bugtrack_url": null,
    "license": "",
    "summary": "tree util plus file components as leaves and token, line counts",
    "version": "1.0.0",
    "project_urls": {
        "Homepage": "https://github.com/bionicles/tree_plus",
        "Issues": "https://github.com/bionicles/tree_plus/issues",
        "documentation": "https://www.github.com/bionicles/tree_plus/README.md",
        "repository": "https://www.github.com/bionicles/tree_plus"
    },
    "split_keywords": [
        "tree",
        "util",
        "cli"
    ],
    "urls": [
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "d7b8b17c32a97cbf9a0ebc98c330fe405c44fc442fce4132e427998627efd295",
                "md5": "7ff40d9c5178be4c48804087968917d7",
                "sha256": "90211b31a7e72002dace1ff0fcf46f4815bb1ba981f505bc30c672df81bb0589"
            },
            "downloads": -1,
            "filename": "tree_plus_BIONICLES-1.0.0-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "7ff40d9c5178be4c48804087968917d7",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": ">=3.8",
            "size": 29013,
            "upload_time": "2023-12-18T21:10:34",
            "upload_time_iso_8601": "2023-12-18T21:10:34.592868Z",
            "url": "https://files.pythonhosted.org/packages/d7/b8/b17c32a97cbf9a0ebc98c330fe405c44fc442fce4132e427998627efd295/tree_plus_BIONICLES-1.0.0-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "7de99dda3f1cd88845823b32a4ff6940af7a11e498e6ec85c0a3653283ae9002",
                "md5": "9a666997846daff7a0fbb43c9cf5bb38",
                "sha256": "8968bf054d0ab6422f4ea7d38b165ffb6abbf65b0ab9c4fe6f91e35f486e3a21"
            },
            "downloads": -1,
            "filename": "tree_plus_BIONICLES-1.0.0.tar.gz",
            "has_sig": false,
            "md5_digest": "9a666997846daff7a0fbb43c9cf5bb38",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": ">=3.8",
            "size": 43494,
            "upload_time": "2023-12-18T21:10:40",
            "upload_time_iso_8601": "2023-12-18T21:10:40.395476Z",
            "url": "https://files.pythonhosted.org/packages/7d/e9/9dda3f1cd88845823b32a4ff6940af7a11e498e6ec85c0a3653283ae9002/tree_plus_BIONICLES-1.0.0.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2023-12-18 21:10:40",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "bionicles",
    "github_project": "tree_plus",
    "travis_ci": false,
    "coveralls": false,
    "github_actions": true,
    "lcname": "tree-plus-bionicles"
}
        
Elapsed time: 0.17050s