Skip to content

Conversation

@kXborg
Copy link

@kXborg kXborg commented Dec 30, 2025

  • I'm the package's author and/or maintainer.
  • I have have read the docs.
  • I have tagged a release with a semver version number.
  • My package repo has a description and a README describing what it's for and how to use it.
  • My package doesn't add context menu entries. *
  • My package doesn't add key bindings. **
  • Any commands are available via the command palette.
  • Preferences and keybindings (if any) are listed in the menu and the command palette, and open in split view.
  • If my package is a syntax it doesn't also add a color scheme. ***
  • I use .gitattributes to exclude files from the package: images, test files, sublime-project/workspace.

My package is codeContinue.

  • It's build to provide LLM powered code completion.
  • Just start with 1-2 line of comments and continue coding, it suggest next line of code instantly
  • Use any OpenAI compatible endpoint to serve a model and use the same here. I use Qwen2.5-Coder-1.5B-Instruct on a jetson orin nano from vLLM. It works decent.
  • The goal is to have control over the models we use, and keep data local.

Disclaimer: I am aware of potential key binding conflicts, however Tab key rarely will be creating issue. Also it is only triggered when suggested code phantom appears while coding. We have tested it rigorously, and we beleive it should not create issues. Having said that, the instructions have been added to change it in the first run -- in case any conflicts exists. I hope the package will not be declined.

There are no packages like it in Package Control.

*) If you do need a context menu, make sure the menu applies to the cursor
context, and the commands are conditional. Space in this menu is limited!
**) There aren't enough keys for all packages, so you risk overriding those
of other packages. You can put commented out suggestions in a keymap file,
and/or explain how to create bindings in your README.
***) Syntaxes should work in any color scheme the user chooses.

For bonus points also consider how the review guidelines apply to your package:
https://docs.sublimetext.io/reference/package-control/reviewing.html

@github-actions
Copy link

github-actions bot commented Feb 2, 2026

Package Review

Channel Diff

Removed (none), changed (none), added CodeContinue.

Review for CodeContinue 1.0.6

2 failures:
- The binding ['tab'] unconditionally overrides a default binding
    File: Default.sublime-keymap
- File 'messages/1.0.0.txt', as specified by key '1.0.0', does not exist
    File: messages.json

2 warnings:
- It looks like you're using platform-dependent code. Make sure you thought about the platform key in your pull request. Also consider replacing the platform module with sublime.platform() and sublime.arch().
    File: install_gui.py
    Line: 11, Column: 1
- It looks like you're using platform-dependent code. Make sure you thought about the platform key in your pull request. Also consider replacing the platform module with sublime.platform() and sublime.arch().
    File: install.py
    Line: 12, Column: 1


For more details on the report messages (for example how to resolve them), go to:
https://github.com/packagecontrol/st_package_reviewer/wiki

@braver
Copy link
Collaborator

braver commented Feb 2, 2026

Thanks for clarifying the tab key conflict. That's fine, it's normal for a "completions provider" to want to use that, and if it can be changed that's even better.

The CI report does have a few other important points though.

I would also strongly recommend opting into python 3.8 (example).

Your requirements in the readme state ST4, so put the minimum build version here as 4000.

You could exclude the videos from the package using the .gitattributes file.

Instead of languages and matching syntax files by the name, it's usually more robust to match on syntax scopes (using scope_name and match_selector). And "in" check also risks matching dialects that don't actually work. Also consider languages like Go, where you perhaps don't want to match "Go HTML templates".

I'm not sure I've seen a package with an installer GUI before. How is the Tkinter dependency loaded (I don't see a dependencies.json for example)? If this is just about configuring the package, we don't usually recommend packages introducing new UI patterns that obscure the standard way users interact with Sublime Text and its settings. Perhaps that could even be a separate package. @FichteFoll have thoughts on this topic?

How does the node project in the experiments subdirectory figure into this?

@FichteFoll
Copy link
Collaborator

FichteFoll commented Feb 3, 2026

Regarding the tab key binding: That is an actual problem because of the way key bindings are resolved. I see no reason to believe that this key binding would not eat all "tab" key presses and thus prevent committing completions via tab or adjusting indentation. This may not conflict with a lot of plugins (because they are also not allowed to blindly bind tab), but it will conflict with default bindings.

Regarding tkinter: afaik tkinter is not included in the bundled Python runtime, so it needs to be executed in the system Python runtime.

Regardless, from what I saw, the installers (GUI or not) are not supposed to be used as Python plugins and are rather some custom entry point to install the very package. This seems very roundabout, though, because:

  1. Installing the package is much easier via Package Control or git-cloning into the right directory, imo.
  2. When the install script is loaded by ST, fails to import tkinter and then attempts to sys.exit(1), the plugin host will crash/exit. This is not desired and such a package cannot be accepted. You should either move your install scripts to a sub-folder or delete them.

I did not check much more of the internals of the package, so this is not a thorough review from me.

@kXborg
Copy link
Author

kXborg commented Feb 3, 2026

Hi @braver and @FichteFoll , Thanks for your valuable feedback. I have decided to remove the keybindings (user can set up as required). The installers were for tests and easy setup of v1 endpoints. They do not interfare with ST. But yes it's better to remove them. They have been moved to a subfolder as suggested.

Update Summary

  • Keybinding removed
  • Min. python version and ST4 version info added
  • Gitattribute updated
  • Scope selector instead of syntax names

Let me know if anything else requires review.

@@ -4,7 +4,10 @@
{
"name": "C Improved",
"details": "https://github.com/abusalimov/SublimeCImproved",
"labels": ["language syntax", "c"],
"labels": [
Copy link
Collaborator

Choose a reason for hiding this comment

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

Looks like you formatted the entire file, please restrict that to just your package.

Copy link
Author

Choose a reason for hiding this comment

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

Yeah, sorry got carried away with Tab completions. Let me fix.

@braver
Copy link
Collaborator

braver commented Feb 4, 2026

Alright, that's a lot easier to read at least 😄 Some small bits remaining then:

While your preferred mode of configuration is via the wizard, I would still expose the user's "raw" settings via the package settings menu. That makes it easier to reference specific settings later, or make a correction, without going through the entire wizard. (example)

Similarly, the keybindings file is now invisible to users. You should expose that in the package settings menu, and preferably also via the command palette. (example)

Also remember that the default package settings are not writable and will not persist... I'm actually not sure if sublime.save_settings writes to the User package automatically? Don't think I've used that much personally.

Please put a debug settings around writing to the console. Under normal conditions (ie. when nothing's wrong) packages should be mostly silent there.

@kXborg
Copy link
Author

kXborg commented Feb 6, 2026

@braver,
Thanks again. Made the following changes.

  • Added Package Settings menu with Settings, Key Bindings, and Configure Wizard entries
  • Added 2 new commands: Preferences: CodeContinue Settings and Preferences: CodeContinue Key Bindings
  • Added "debug": false and "api_key": "" with documentation comments
  • log() now only prints when debug setting is true

Please check and let me know.

@FichteFoll
Copy link
Collaborator

I'm actually not sure if sublime.save_settings writes to the User package automatically?

It does.

@braver
Copy link
Collaborator

braver commented Feb 7, 2026

It does.

Interesting. The API is so extensive right now (and the docs for it so overwhelming) I don't think I've ever used more than 10% of it 😅

@braver
Copy link
Collaborator

braver commented Feb 7, 2026

Please check and let me know.

For keybindings it's usually preferable to open the user's global (ie. not package-specific) keybindings file on the right. You usually want to manage all your bindings in one place, because you've only got one keyboard and typically want to have a clear overview of what you've set to which key combo. example

Also please revert the formatting of the repository file in this PR.

@braver braver added the feedback provided The changes and package have been seen by a reviewer label Feb 7, 2026
@kXborg
Copy link
Author

kXborg commented Feb 11, 2026

@braver ,

Pushed the fix for keybinding ( tested on Windows for now -- hope it should be fine for Mac and Ubuntu ). Please check now.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

feedback provided The changes and package have been seen by a reviewer

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants