Review of "DualShell" version 1.1.0 (2)

Details Page Preview

Control your system using a gamepad - navigate desktop, launch apps, control volume, and more

Extension Homepage
https://codeberg.org/inbalboa/gnome-dualshell

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-001 manual_review

extension code must not be minified or obfuscated

File appears obfuscated: 75% of identifiers are 1–2 characters (avg length 4.8).

Code must not be obfuscated

  • actionsCatalog.js
    short identifier ratio: 75%, identifiers scored: 59

EGO-A-004 warning

extension files should not contain excessive ungated console logging

File contains 6 ungated console.log/warn/error calls (threshold: 5).

No excessive logging

  • logger.js:64
    console.error(`${formattedMessage}\n  Error: ${error.message}\n  Stack: ${error.stack}`)
  • logger.js:66
    console.error(`${formattedMessage}\n  Details: ${JSON.stringify(error)}`)
  • logger.js:68
    console.error(formattedMessage)
  • logger.js:42
    console.log(this._formatMessage(LogLevel.DEBUG, message, context))
  • logger.js:48
    console.log(this._formatMessage(LogLevel.INFO, message, context))
  • logger.js:54
    console.warn(this._formatMessage(LogLevel.WARN, message, context))

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:202
    this._devicesSection = new PopupMenu.PopupMenuSection()
  • extension.js:205
            this._noDevicesMenuItem = new PopupMenu.PopupMenuItem(_('No gamepads connected'), {
                reactive: false,
                can_focus: false,
            })
  • extension.js:189
            this._panelIcon = new St.Icon({
                gicon: this._icons.getCustomIcon('icon', true),
                style_class: 'system-status-icon gamepad-panel-icon',
            })

All Versions

Version Status
1.2.0 (3) Unreviewed
1.1.0 (2) Rejected
1.0 (1) Rejected

Previous Reviews on this Version

JustPerfection rejected
1. You cannot use old `imports` for the 45+ extensions. 2. Please use `connectObject()` and `disconnectObject()` so it is easier to track for cleanup (`extension.js` only). 3. You cannot create instance of objects in global scope: - line 158 `gamecontrollerdb.js` - line 115 `logger.js` - [EGO Review Guidelines: Initialization](https://gjs.guide/extensions/review-guidelines/review-guidelines.html#only-use-initialization-for-static-resources) - [EGO Review Guidelines: Destroy](https://gjs.guide/extensions/review-guidelines/review-guidelines.html#destroy-all-objects) 4. Please use aysnc for reading file content since you are in shell process (line 8 `mappings.js`): [Gio.File.load_contents_async](https://gjs-docs.gnome.org/gio20~2.0/gio.file#method-load_contents_async) 5. No need to use `this.initTranslations()` (line 25 `extension.js`): > Consider this method deprecated. > Only specify gettext-domain in metadata.json. > GNOME Shell can automatically initiate the translation for you > when it sees the gettext-domain key in metadata.json. [Port Guide 45: Extension Utils](https://gjs.guide/extensions/upgrading/gnome-shell-45.html#extensionutils) 6. You cannot ship binary files with GNOME Shell extensions (`gamecontrollerdb`).
inbalboa posted a review
Thank you. Two objections. 4. The call on mappings.js:8 is load_contents_async() — the exact method you mentioned. 6. gamecontrollerdb is not a binary file, it's a CSV file.
JustPerfection posted a review
For 6, the file should be `gamecontrollerdb.csv` so the file format is obvious.