Skip to content

Conversation

@lazysegtree
Copy link
Collaborator

@lazysegtree lazysegtree commented May 9, 2025

Summary by CodeRabbit

  • Refactor
    • Improved handling of directory paths and path resolution for file panels, enhancing clarity and consistency when opening or navigating panels.
    • Simplified and unified path normalization and tilde expansion logic.
  • New Features
    • Introduced a utility for resolving and normalizing file paths, including support for ~ expansion.
  • Bug Fixes
    • Improved error handling for invalid or inaccessible directories when configuring start directories.
  • Tests
    • Added tests to verify correct path resolution and normalization behavior.

@coderabbitai
Copy link
Contributor

coderabbitai bot commented May 9, 2025

Important

Review skipped

Auto reviews are disabled on base/target branches other than the default branch.

Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Walkthrough

The changes introduce a new utility function for resolving and normalizing file paths, refactor internal logic to use this function, and update error handling and path resolution in directory-related operations. A new test suite is added for the utility function, and some internal methods are split for clarity. Minor comments and unused imports are also addressed.

Changes

File(s) Change Summary
src/internal/utils/file_utils.go Added ResolveAbsPath utility function for absolute path resolution and tilde expansion.
src/internal/utils/file_utils_test.go Introduced tests for ResolveAbsPath covering normalization, tilde expansion, and relative/absolute path handling.
src/internal/config_function.go Refactored directory path resolution to use ResolveAbsPath, updated error handling for non-existent paths, improved debug logging, and removed unused imports.
src/internal/model.go Split directory update logic into creteNewFilePanelRelativeToCurrent and a revised updateCurrentFilePanelDir. Updated usage and error messages for clarity and consistency.
src/internal/handle_panel_navigation.go Added a TODO comment to define a specific error constant for file panel limits. No logic changes.

Sequence Diagram(s)

sequenceDiagram
    participant User
    participant Model
    participant Utils

    User->>Model: Request to open new file panel (relative path)
    Model->>Utils: ResolveAbsPath(currentDir, path)
    Utils-->>Model: Absolute, cleaned path
    Model->>Model: Check if path exists and is directory
    Model-->>User: Success or error response
Loading

Poem

In the warren where paths intertwine,
A rabbit hops, making each line fine.
Tilde expands, slashes are cleaned,
With tests to ensure all bugs are gleaned.
Panels open wide, errors now defined—
In this patch, neat code is enshrined!
🐇✨


Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share
🪧 Tips

Chat

There are 3 ways to chat with CodeRabbit:

  • Review comments: Directly reply to a review comment made by CodeRabbit. Example:
    • I pushed a fix in commit <commit_id>, please review it.
    • Generate unit testing code for this file.
    • Open a follow-up GitHub issue for this discussion.
  • Files and specific lines of code (under the "Files changed" tab): Tag @coderabbitai in a new review comment at the desired location with your query. Examples:
    • @coderabbitai generate unit testing code for this file.
    • @coderabbitai modularize this function.
  • PR comments: Tag @coderabbitai in a new PR comment to ask questions about the PR branch. For the best results, please provide a very specific query, as very limited context is provided in this mode. Examples:
    • @coderabbitai gather interesting stats about this repository and render them as a table. Additionally, render a pie chart showing the language distribution in the codebase.
    • @coderabbitai read src/utils.ts and generate unit testing code.
    • @coderabbitai read the files in the src/scheduler package and generate a class diagram using mermaid and a README in the markdown format.
    • @coderabbitai help me debug CodeRabbit configuration file.

Support

Need help? Create a ticket on our support page for assistance with any issues or questions.

Note: Be mindful of the bot's finite context window. It's strongly recommended to break down tasks such as reading entire modules into smaller chunks. For a focused discussion, use review comments to chat about specific files and their changes, instead of using the PR comments.

CodeRabbit Commands (Invoked using PR comments)

  • @coderabbitai pause to pause the reviews on a PR.
  • @coderabbitai resume to resume the paused reviews.
  • @coderabbitai review to trigger an incremental review. This is useful when automatic reviews are disabled for the repository.
  • @coderabbitai full review to do a full review from scratch and review all the files again.
  • @coderabbitai summary to regenerate the summary of the PR.
  • @coderabbitai generate docstrings to generate docstrings for this PR.
  • @coderabbitai generate sequence diagram to generate a sequence diagram of the changes in this PR.
  • @coderabbitai resolve resolve all the CodeRabbit review comments.
  • @coderabbitai configuration to show the current CodeRabbit configuration for the repository.
  • @coderabbitai help to get help.

Other keywords and placeholders

  • Add @coderabbitai ignore anywhere in the PR description to prevent this PR from being reviewed.
  • Add @coderabbitai summary to generate the high-level summary at a specific location in the PR description.
  • Add @coderabbitai anywhere in the PR title to generate the title automatically.

CodeRabbit Configuration File (.coderabbit.yaml)

  • You can programmatically configure CodeRabbit by adding a .coderabbit.yaml file to the root of your repository.
  • Please see the configuration documentation for more information.
  • If your editor has YAML language server enabled, you can add the path at the top of this file to enable auto-completion and validation: # yaml-language-server: $schema=https://coderabbit.ai/integrations/schema.v2.json

Documentation and Community

  • Visit our Documentation for detailed information on how to use CodeRabbit.
  • Join our Discord Community to get help, request features, and share feedback.
  • Follow us on X/Twitter for updates and announcements.

@lazysegtree lazysegtree force-pushed the prompt_improvements branch 2 times, most recently from bf1aa41 to 3e8e9b4 Compare May 9, 2025 15:29
@lazysegtree
Copy link
Collaborator Author

@coderabbitai full review

@coderabbitai
Copy link
Contributor

coderabbitai bot commented May 10, 2025

✅ Actions performed

Full review triggered.

Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

📜 Review details

Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 54aee46 and 3e8e9b4.

📒 Files selected for processing (5)
  • src/internal/config_function.go (1 hunks)
  • src/internal/handle_panel_navigation.go (1 hunks)
  • src/internal/model.go (2 hunks)
  • src/internal/utils/file_utils.go (2 hunks)
  • src/internal/utils/file_utils_test.go (1 hunks)
🧰 Additional context used
🧬 Code Graph Analysis (3)
src/internal/utils/file_utils_test.go (1)
src/internal/utils/file_utils.go (1)
  • ResolveAbsPath (105-115)
src/internal/config_function.go (3)
src/internal/common/default_config.go (1)
  • Config (11-11)
src/internal/utils/file_utils.go (1)
  • ResolveAbsPath (105-115)
src/config/fixed_variable.go (1)
  • HomeDir (27-27)
src/internal/model.go (1)
src/internal/utils/file_utils.go (1)
  • ResolveAbsPath (105-115)
🔇 Additional comments (7)
src/internal/utils/file_utils.go (1)

101-115: Well implemented utility function for path resolution!

The new ResolveAbsPath utility function correctly handles path resolution, including tilde expansion, relative path resolution, and path cleaning. The implementation follows good practices by:

  1. Clearly documenting the function purpose and expectations
  2. Handling edge cases appropriately (tilde expansion, relative vs absolute paths)
  3. Using standard library functions for path manipulation
  4. Avoiding dependencies that could create circular references (using xdg.Home directly)
src/internal/handle_panel_navigation.go (1)

28-29: Good suggestion to centralize error definitions.

Centralizing error definitions in a dedicated errors.go file would improve maintainability and allow for better error handling throughout the application.

src/internal/config_function.go (2)

57-69: Excellent refactoring of path resolution logic.

The refactoring simplifies the code by:

  1. Getting the current working directory once instead of repeatedly
  2. Using the new ResolveAbsPath utility function for consistent path handling
  3. Improving error handling by checking path existence with os.Stat
  4. Providing a clean fallback to home directory when paths are invalid

This centralizes path resolution logic and makes the code more maintainable.


72-72: Improved debug logging.

Adding the current working directory to the debug log provides more context for troubleshooting path resolution issues.

src/internal/utils/file_utils_test.go (1)

10-60: Comprehensive test coverage for the new utility function.

The test cases are well-designed and cover key scenarios:

  1. Path cleaning (removing redundant slashes)
  2. Resolving relative paths against a current directory
  3. Preserving absolute paths
  4. Handling tilde expansion
  5. Ensuring tilde is only expanded when it appears at the beginning of the path

Each test case has a clear name that describes its purpose, making the tests self-documenting.

src/internal/model.go (2)

316-316: Function call correctly updated to use new path resolution method.

The call to create a new file panel has been updated to use creteNewFilePanelRelativeToCurrent which properly resolves paths relative to the current panel's directory.


353-365: Improved path resolution in CD action.

The updateCurrentFilePanelDir function now correctly resolves paths relative to the current directory using utils.ResolveAbsPath, which handles tilde expansion and relative paths. The error messages are also clear and helpful.

@lazysegtree lazysegtree force-pushed the prompt_improvements branch from 3e8e9b4 to ed9ef6e Compare May 10, 2025 03:45
@lazysegtree lazysegtree merged commit ac7914a into lazysegtree_dev May 10, 2025
1 check passed
tmeijn pushed a commit to tmeijn/dotfiles that referenced this pull request May 23, 2025
This MR contains the following updates:

| Package | Update | Change |
|---|---|---|
| [yorukot/superfile](https://github.com/yorukot/superfile) | minor | `v1.2.1` -> `v1.3.0` |

MR created with the help of [el-capitano/tools/renovate-bot](https://gitlab.com/el-capitano/tools/renovate-bot).

**Proposed changes to behavior should be submitted there as MRs.**

---

### Release Notes

<details>
<summary>yorukot/superfile (yorukot/superfile)</summary>

### [`v1.3.0`](https://github.com/yorukot/superfile/releases/tag/v1.3.0)

[Compare Source](yorukot/superfile@v1.2.1...v1.3.0)

We are excited to release v1.3.0 for superfile, with new features, key bug fixes, and lots of polish under the hood.

#### Install:

[**Click me to know how to install**](https://github.com/yorukot/superfile?tab=readme-ov-file#installation)

#### Highlights

-   We have revamped the command prompt and added built-in commands for SuperFile-specific actions. Check out yorukot/superfile#745

-   Multi-panel startup support. You can now open multiple panels right from startup, making your workflow even more efficient.

-   Added new configurations :  --chooser-file option, show_panel_footer_info config flag and many command prompt specific flags.

#### Improvements & Fixes

-   The sidebar code was refactored and separated for better maintainability and various linter fixes and CI/CD improvements were made to keep the codebase clean and robust.

-   A new Rendering package is implemented, centralising border, content, and section rendering logic into reusable renderer components, fixing many layout bugs.

-   Model behaviour, file operations and rendering-related unit tests were added to improve test coverage.

#### Detailed Change Summary

<details><summary>Details</summary>
<p>

#### New Features

-   Added a Command-Prompt for SuperFile specific actions [`#752`](yorukot/superfile#752) by [@&#8203;Rocco-Gossmann](https://github.com/Rocco-Gossmann), [@&#8203;yorukot](https://github.com/yorukot)  and [@&#8203;lazysegtree](https://github.com/lazysegtree)
-   Allow specifying multiple panels at startup [`#759`](yorukot/superfile#759) by [@&#8203;lazysegtree](https://github.com/lazysegtree)
-   Initial draft of rendering package [`#775`](yorukot/superfile#775) by [@&#8203;lazysegtree](https://github.com/lazysegtree)
-   Render unit tests for prompt model [`#809`](yorukot/superfile#809) by [@&#8203;lazysegtree](https://github.com/lazysegtree)
-   Chooser file option, --lastdir-file option, and improvements in quit, and bug fixes [`#812`](yorukot/superfile#812) by [@&#8203;lazysegtree](https://github.com/lazysegtree)
-   Prompt feature leftover items [`#804`](yorukot/superfile#804) by [@&#8203;lazysegtree](https://github.com/lazysegtree)
-   SPF Prompt tutorial and fixes [`#814`](yorukot/superfile#814) by [@&#8203;lazysegtree](https://github.com/lazysegtree)
-   Write prompt tutorial, rename prompt mode to spf mode, add develop branch in GitHub workflow, show_panel_footer_info flag [`#815`](yorukot/superfile#815) by [@&#8203;lazysegtree](https://github.com/lazysegtree)
-   Theme: Add gruvbox-dark-hard [`#828`](yorukot/superfile#828) by [@&#8203;Frost-Phoenix](https://github.com/Frost-Phoenix)

#### Updates & Improvements

-   Sidebar separation [`#767`](yorukot/superfile#767) by [@&#8203;lazysegtree](https://github.com/lazysegtree)
-   Sidebar code separation [`#770`](yorukot/superfile#770) by [@&#8203;lazysegtree](https://github.com/lazysegtree)
-   Rendering package and rendering bug fixes [`#781`](yorukot/superfile#781) by [@&#8203;lazysegtree](https://github.com/lazysegtree)
-   Refactor CheckForUpdates [`#797`](yorukot/superfile#797) by [@&#8203;JassonCordones](https://github.com/JassonCordones)
-   Rename metadata strings [`#731`](yorukot/superfile#731) by [@&#8203;booth-w](https://github.com/booth-w)

#### Bug Fixes

-   Fix crash with opening file with editor on an empty panel [`#730`](yorukot/superfile#730) by [@&#8203;booth-w](https://github.com/booth-w)
-   Fix: Add some of the remaining linter and fix errors [`#756`](yorukot/superfile#756) by [@&#8203;lazysegtree](https://github.com/lazysegtree)
-   Golangci lint fixes [`#757`](yorukot/superfile#757) by [@&#8203;lazysegtree](https://github.com/lazysegtree)
-   Fix: Remove redundant function containsKey [`#765`](yorukot/superfile#765) by [@&#8203;lazysegtree](https://github.com/lazysegtree)
-   Fix: Correctly resolve path in open and cd prompt actions [`#802`](yorukot/superfile#802) by [@&#8203;lazysegtree](https://github.com/lazysegtree)
-   Prompt dynamic dimensions and unit tests fix [`#805`](yorukot/superfile#805) by [@&#8203;lazysegtree](https://github.com/lazysegtree)
-   Fix: Convert unicode space to normal space, use rendered in file preview to fix layout bugs, Release 1.3.0 [`#825`](yorukot/superfile#825) by [@&#8203;lazysegtree](https://github.com/lazysegtree)

#### Optimization & Code Quality

-   Adding linter to CI/CD and fix some lint issues [`#739`](yorukot/superfile#739) by [@&#8203;lazysegtree](https://github.com/lazysegtree)
-   Linter fixes, new feature of allowing multiple directories at startup, other code improvements [`#764`](yorukot/superfile#764) by [@&#8203;lazysegtree](https://github.com/lazysegtree)
-   Model unit tests [`#803`](yorukot/superfile#803) by [@&#8203;lazysegtree](https://github.com/lazysegtree)

#### Dependency Updates

-   fix(deps): update dependency astro to v5.7.7 [`#726`](yorukot/superfile#726) by [@&#8203;renovate](https://github.com/renovate)
-   fix(deps): update module github.com/shirou/gopsutil/v4 to v4.25.3 [`#749`](yorukot/superfile#749) by [@&#8203;renovate](https://github.com/renovate)
-   fix(deps): update module github.com/pelletier/go-toml/v2 to v2.2.4 [`#760`](yorukot/superfile#760) by [@&#8203;renovate](https://github.com/renovate)
-   fix(deps): update module github.com/alecthomas/chroma/v2 to v2.16.0 [`#751`](yorukot/superfile#751) by [@&#8203;renovate](https://github.com/renovate)
-   fix(deps): update dependency sharp to ^0.34.0 [`#755`](yorukot/superfile#755) by [@&#8203;renovate](https://github.com/renovate)
-   fix(deps): update dependency [@&#8203;astrojs/starlight](https://github.com/astrojs/starlight) to ^0.34.0 [`#761`](yorukot/superfile#761) by [@&#8203;renovate](https://github.com/renovate)

</p>
</details> 

#### New Contributors
* @&#8203;Rocco-Gossmann made their first contribution in yorukot/superfile#736
* @&#8203;Frost-Phoenix made their first contribution in yorukot/superfile#828

**Full Changelog**: yorukot/superfile@v1.2.1...v1.3.0

</details>

---

### Configuration

📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined).

🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied.

♻ **Rebasing**: Whenever MR becomes conflicted, or you tick the rebase/retry checkbox.

🔕 **Ignore**: Close this MR and you won't be reminded about this update again.

---

 - [ ] <!-- rebase-check -->If you want to rebase/retry this MR, check this box

---

This MR has been generated by [Renovate Bot](https://github.com/renovatebot/renovate).
<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0MC4yMi4wIiwidXBkYXRlZEluVmVyIjoiNDAuMjMuMSIsInRhcmdldEJyYW5jaCI6Im1haW4iLCJsYWJlbHMiOlsiUmVub3ZhdGUgQm90Il19-->
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants