{"id":20781483,"url":"https://github.com/pedrorgirardi/pep","last_synced_at":"2025-04-30T21:24:31.435Z","repository":{"id":41348987,"uuid":"370648160","full_name":"pedrorgirardi/Pep","owner":"pedrorgirardi","description":"Elemental Clojure \u0026 ClojureScript code navigation, documentation, and usages analysis for Sublime Text.","archived":false,"fork":false,"pushed_at":"2024-05-21T19:28:42.000Z","size":54120,"stargazers_count":18,"open_issues_count":4,"forks_count":0,"subscribers_count":3,"default_branch":"main","last_synced_at":"2024-05-22T12:11:19.399Z","etag":null,"topics":["clojure","clojurescript","sublime-text"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/pedrorgirardi.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null},"funding":{"github":"pedrorgirardi"}},"created_at":"2021-05-25T10:08:39.000Z","updated_at":"2024-05-27T20:47:55.562Z","dependencies_parsed_at":"2024-02-27T02:37:18.445Z","dependency_job_id":"65626ae4-e1cf-4289-90a3-5f4fe4cdbeea","html_url":"https://github.com/pedrorgirardi/Pep","commit_stats":null,"previous_names":[],"tags_count":27,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pedrorgirardi%2FPep","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pedrorgirardi%2FPep/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pedrorgirardi%2FPep/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pedrorgirardi%2FPep/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/pedrorgirardi","download_url":"https://codeload.github.com/pedrorgirardi/Pep/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":251783946,"owners_count":21643184,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["clojure","clojurescript","sublime-text"],"created_at":"2024-11-17T13:44:27.687Z","updated_at":"2025-04-30T21:24:31.407Z","avatar_url":"https://github.com/pedrorgirardi.png","language":"Python","funding_links":["https://github.com/sponsors/pedrorgirardi"],"categories":[],"sub_categories":[],"readme":"# Pep\n\n![Pep](logo.png)\n\n**Pep** leverages [clj-kondo analysis data](https://github.com/clj-kondo/clj-kondo/tree/master/analysis) to provide code navigation, documentation and usages analysis.\n\n[clj-kondo](https://github.com/clj-kondo/clj-kondo) is the sole dependency, and everything else is supplied by built-in [Sublime Text APIs](https://www.sublimetext.com/docs/api_reference.html).\n\n\u003e [!NOTE]\n\u003e I have worked on **Pep** for over two years, but I still consider it alpha.\n\n| Command | Description |\n| ------- | ----------- |\n| `pg_pep_analyze` | Analyze view, paths or classpath |\n| `pg_pep_outline` | Show symbols defined in the namespace - it might also be known as 'file structure' |\n| `pg_pep_goto_anything_in_classpath` | Go to anything in the classpath |\n| `pg_pep_goto_anything_in_view_paths` | Go to anything in view or paths |\n| `pg_pep_goto_namespace` | Go to namespace in paths |\n| `pg_pep_goto_definition` | Go to definition of symbol or keyword under the cursor |\n| `pg_pep_goto_warning_error_in_view` | Go to clj-kondo analysis finding (warning or error) |\n| `pg_pep_goto_require_import_in_view` | Go to require or import for symbol under the cursor |\n| `pg_pep_goto_namespace_usage_in_view` | Go to usage of namespace in view |\n| `pg_pep_show_doc` | Show documentation in a popup for symbol under the cursor |\n| `pg_pep_jump` | Jump to occurrences of symbol or keyword under the cursor |\n| `pg_pep_find_usages` | Find usages of symbol or keyword under the cursor |\n| `pg_pep_select` | Select occurrences of symbol or keyword under the cursor |\n| `pg_pep_replace` | Replace occurrences of symbol or keyword under the cursor |\n| `pg_pep_highlight` | Highlight occurrences of symbol or keyword under the cursor |\n| `pg_pep_copy_name` | Copy name of keyword or symbol to the clipboard |\n| `pg_pep_show_name` | Show name of keyword or symbol in a popup |\n\n**Pep** is part of my Clojure(Script) development setup, combined with [Tutkain](https://github.com/eerohele/Tutkain), so I think it's developed enough to be helpful.\n\nYou're welcome to try it, and I would be happy to hear if it works for you. If it doesn't work for you, I ask you to please create an issue, and I will do my best to address it.\n\n## Installation\n\nPep is available on [PackageControl](https://packagecontrol.io/packages/Pep).\n\n\n## Annotate (Lint)\n\n![Pep Annotate](docs/Annotate.png)\n\n## Highlight\n\nHighlight the symbol or keyword under the cursor and its usage.\n\n![Pep Highlight](docs/Highlight.png)\n\n## Documentation\n\nShow documentation for var under the cursor.\n\n![Pep Show documentation](docs/Documentation.png)\n\n## Jump\n\nJump to occurrences of symbol or keyword under cursor.\n\n![Pep Jump](docs/Jump.gif)\n\n## Find Usages\n\nFind usages of symbol or keyword under cursor.\n\n![Pep Find Usages](docs/FindUsages.png)\n\n## Select\n\nSelect occurrences of symbol or keyword under cursor. \n\n![Pep Select](docs/Select.gif)\n\nIt behaves like an 'intelligent multi cursor, and you can use it to rename symbols.\n\n## Goto Definition\n\nGoto definition of a local binding, var, spec, re-frame handler.\n\n## Settings\n\n### Default settings\n\n```jsonc\n{\n    \"debug\": false,\n\n    \"clj_kondo_path\": \"clj-kondo\",\n\n    \"analysis_applicable_to\": [\"Packages/Clojure/Clojure.sublime-syntax\",\n                               \"Packages/Clojure/ClojureScript.sublime-syntax\",\n                               \"Packages/Tutkain/EDN (Tutkain).sublime-syntax\",\n                               \"Packages/Tutkain/Clojure (Tutkain).sublime-syntax\",\n                               \"Packages/Tutkain/ClojureScript (Tutkain).sublime-syntax\",\n                               \"Packages/Tutkain/Clojure Common (Tutkain).sublime-syntax\",\n                               \"Packages/Tutkain/Babashka (Tutkain).sublime-syntax\",\n                               \"Packages/Clojure Sublimed/Clojure (Sublimed).sublime-syntax\"],\n\n    // Number of seconds to delay the analysis after a view is modified.\n    \"analysis_delay\": 0.6,\n\n    // It's unlikely to need to analyze scratch views,\n    // but you can run the command to analyze a view if you need it.\n    \"analyze_scratch_view\": false,\n\n    // True if you would like to analyse your project's sources when the plugin is loaded.\n    // (Doesn't do anything if there isn't a *.sublime-project file.)\n    \"analyze_paths_on_plugin_loaded\": true,\n\n    // True if you would like to analyze your project's sources when the project is loaded.\n    // (Doesn't do anything if there isn't a *.sublime-project file.)\n    \"analyze_paths_on_load_project\": true,\n\n    // True if you would like to analyse your project's classpath when the plugin is loaded.\n    // (Doesn't do anything if there isn't a *.sublime-project file.)\n    \"analyze_classpath_on_plugin_loaded\": true,\n\n    // True if you would like to analyze your project's classpath when the project is loaded.\n    // (Doesn't do anything if there isn't a *.sublime-project file.)\n    \"analyze_classpath_on_load_project\": true,\n\n    // True if warnings/errors should be displayed right after the analysis is completed.\n    // It's a 'tighter feedback loop' to display warnings/errors after the analysis, but some might find it distracting.\n    \"annotate_view_after_analysis\": false,\n\n    // True if warnings/errors should be displayed only when a view is saved.\n    \"annotate_view_on_save\": false,\n\n    // The font-size used by view analysis annotations.\n    \"annotation_font_size\": \"0.9em\",\n\n    // True if you would like to see the number of clj-kondo errors, if any, in the status bar.\n    \"view_status_show_errors\": false,\n\n    // True if you would like to see the number of clj-kondo warnings, if any, in the status bar.\n    \"view_status_show_warnings\": false,\n\n    // True if you would like to see the number of highlighted regions in the status bar.\n    \"view_status_show_highlighted\": false,\n\n    // If you would like to add a custom prefix to the number of highlighted regions in the status bar.\n    \"view_status_show_highlighted_prefix\": \"Highlighted: \",\n\n    // If you would like to add a custom suffix to the number of highlighted regions in the status bar.\n    \"view_status_show_highlighted_suffix\": \"\",\n\n    // True if you would like to highlight vars, local bindings and keywords usages.\n    \"automatically_highlight\": false,\n\n    // True if you would like to highlight the region under the cursor.\n    \"highlight_self\": true,\n\n    // True if you would like to highlight the region with an outline.\n    \"highlight_region\": true,\n\n    // True if you would like to highlight the gutter.\n    \"highlight_gutter\": false,\n}\n```\n\n#### Recommended settings\n\n```jsonc\n{\n    // True if warnings/errors should be displayed right after the analysis is completed.\n    \"annotate_view_after_analysis\": true,\n\n    // True if you would like to see the number of clj-kondo errors, if any, in the status bar.\n    \"view_status_show_errors\": true,\n\n    // True if you would like to see the number of clj-kondo warnings, if any, in the status bar.\n    \"view_status_show_warnings\": true,\n\n    // True if you would like to highlight vars, local bindings and keywords usages.\n    \"automatically_highlight\": true\n}\n```\n\n## Sublime Project\n\nTo analyse your project's classpath and paths (your files), you need to configure Pep in your Sublime Project.\n\nIf you configure `paths`, you can go to definition, show documentation and find usages across files in your project.\nA paths analysis usually doesn't take long and will run when Pep is loaded or a project is loaded - see **Settings** `\"analyze_paths\"`.\n\nIf you configure `classpath`, you can go to definition and show documentation of vars defined in libraries.\nClasspath analysis takes a little longer and will run when Pep is loaded, or a project is loaded - see **Settings** `\"analyze_classpath\"`.\n\nSublime Project example:\n\n```json\n{\n    \"pep\": {\n        \"paths\": [\"src\"],\n        \"classpath\": \"clojure -Spath\"\n    }\n}\n```\n\n\n## Acknowledgements\n\n- Eero and [Tutkain](https://github.com/eerohele/Tutkain); without Eero and Tutkain, I would not have started this project.\n- Michiel Borkent and [clj-kondo](https://github.com/clj-kondo/clj-kondo); this project wouldn't be possible without clj-kondo.\n- Peter and [Calva](https://calva.io/); Peter was too kind and allowed me to contribute to Calva in the early days and showed me how fun it is to work on these things.\n- The Sublime Text Discord community, a magnificent bunch of volunteers and Sublime HQ employees tirelessly helping people with questions related to Sublime Text. (Copied from Tutkain because I could not say it better.)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpedrorgirardi%2Fpep","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fpedrorgirardi%2Fpep","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpedrorgirardi%2Fpep/lists"}