Review of "Superbar" version 3

Details Page Preview

Superbar is a keyboard-driven, system-wide launcher and command bar for GNOME Shell. It reads the clipboard to provide clipboard history and sends user-entered weather locations, dictionary terms, and currency conversions to open-meteo.com, dictionaryapi.dev, and frankfurter.app.

Extension Homepage
https://github.com/Furkan-rgb/superbar

No comments.

Diff Against

Files

Note: Binary files aren't shown on the web site. To see all files, please download the extension zipfile.

Shexli (experimental) warning 2 manual_review 1

Shexli found 3 issues that may need reviewer attention.

EGO-A-005 manual_review

extensions should not access the clipboard directly

Direct clipboard access via `St.Clipboard.get_default()` requires reviewer scrutiny.

Review Guidelines

  • extension.js:54
    St.Clipboard.get_default()
  • extension.js:1150
    St.Clipboard.get_default()

EGO-L-002 warning

objects created by extension should be destroyed in disable()

Objects assigned in `enable()` are missing matching `.destroy()` calls in `disable()` or its helper methods.

Destroy all objects

  • extension.js:76
        this._entry = new St.Entry({
          hint_text: "Search apps, calculate...",
          style_class: "spotlight-entry",
          can_focus: true,
          x_expand: true,
          y_align: Clutter.ActorAlign.CENTER,
        })
  • extension.js:70
        this._icon = new St.Icon({
          icon_name: "system-search-symbolic",
          style_class: "spotlight-icon",
          y_align: Clutter.ActorAlign.CENTER,
        })
  • extension.js:65
        this._inputRow = new St.BoxLayout({
          style_class: "spotlight-input-row",
          vertical: false,
        })
  • extension.js:88
        this._resultsBox = new St.BoxLayout({
          style_class: "spotlight-results-box",
          vertical: true,
          x_expand: true,
        })
  • extension.js:105
        this._resultsClip = new St.Widget({
          style_class: "spotlight-results-clip",
          layout_manager: new Clutter.BinLayout(),
          x_expand: true,
          clip_to_allocation: true,
        })
  • extension.js:94
        this._resultsScroll = new St.ScrollView({
          style_class: "spotlight-results-scroll",
          x_expand: true,
          overlay_scrollbars: true,
        })

EGO-L-004 warning

main loop sources should be removed in disable()

Main loop sources assigned in `enable()` are missing matching removals in `disable()` or its helper methods.

Remove main loop sources

  • extension.js:1116
        GLib.timeout_add(GLib.PRIORITY_DEFAULT, 0, () => {
          const [, naturalHeight] = this._resultsBox.get_preferred_height(
            this._resultsBox.width,
          );
          this._animateResultsHeight(Math.min(naturalHeight, 450));
          return GLib.SOURCE_REMOVE;
        })

All Versions

Version Status
10 Unreviewed
9 Rejected
8 Rejected
7 Rejected
6 Rejected
5 Rejected
4 Rejected
3 Rejected
2 Rejected
1 Rejected

Previous Reviews on this Version

JustPerfection rejected
1. Don't need to use any parameters for `this.getSettings()` since you already have that in `metadata.json`. 2. Please use `connectObject()` and `disconnectObject()` so it is easier to track for cleanup. 3. Timeout should be removed before creating a new one (line 505 `extension.js`). 4. Allowing to do that with spawn (line 765 `extension.js`) since you want to make it consistent with other times. But you should use gjs for d-bus. Also any other thing in `_searchSystemCommands()` can be done with gjs. 5. That can lead to security issues since the `text` is not anesthetized (line 819 `extension.js`). 6. You should add to the description that this extension is using `open-meteo.com`, `dictionaryapi.dev`, `frankfurter.app` services. 7. Timeout should be removed on disable and also before creating a new one (line 1116 `extension.js`): [EGO Review Guidelines: Timeout](https://gjs.guide/extensions/review-guidelines/review-guidelines.html#remove-main-loop-sources) 8. You have `Main.getStyleVariant()` which returns (`light`, `dark` or empty string) that you can use instead (line 1250 `extension.js`). 9. Please add to the description that this extension is using clipboard: [EGO Review Guidelines: Clipboard](https://gjs.guide/extensions/review-guidelines/review-guidelines.html#clipboard-access-must-be-declared) You can also add `donations` to the `metadata.json`, so people can donate to you if they want: [Extension Anatomy: donations](https://gjs.guide/extensions/overview/anatomy.html#donations) If you need any help with your extension you can ask us on: - [GNOME Extensions Matrix Channel](https://matrix.to/#/#extensions:gnome.org) - IRC Bridge: irc://irc.gimpnet.org/shell-extensions
furkan12 posted a review
Addressed all feedback from version 3: metadata-based settings lookup, connectObject/disconnectObject cleanup, tracked main-loop sources, GJS system actions, safe argv-based subprocesses, sanitized input handling, service and clipboard disclosures, Main.getStyleVariant(), and donation metadata.