Review of "QuickNotes" version 3

Details Page Preview

A quick notes and tasks panel menu for GNOME Shell with markdown formatting. This extension uses the system clipboard for copy, cut and paste operations.

Extension Homepage
https://gitlab.gnome.org/josechu/quicknotes

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 5 manual_review 1

Shexli found 6 issues that may need reviewer attention.

EGO-X-004 warning

extensions should avoid synchronous file IO in shell code

Shell code should avoid synchronous file IO APIs like `GLib.file_get_contents()` and `Gio.File.load_contents()`.

File Operations

  • extension.js:105
    this._saveFile.load_contents(null)

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:346
    St.Clipboard.get_default()
  • extension.js:355
    St.Clipboard.get_default()
  • extension.js:366
    St.Clipboard.get_default()

EGO-A-004 warning

extension files should not contain excessive ungated console logging

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

No excessive logging

  • extension.js:738
    console.warn(`QuickNotes: Markdown error — ${e}`)
  • extension.js:780
    console.warn(`QuickNotes: Theme colors unavailable — ${e}`)
  • extension.js:116
    console.error(`QuickNotes: Load failed — ${e}`)
  • extension.js:159
    console.error(`QuickNotes: Async save — ${e}`)
  • extension.js:162
    console.error(`QuickNotes: Save error — ${e}`)
  • extension.js:172
    console.error(`QuickNotes: Sync save — ${e}`)
  • extension.js:185
    console.error(`QuickNotes: Bad tab-definitions — ${e}`)

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:234
            this._contentArea = new St.BoxLayout({
                vertical: true, x_expand: true, y_expand: true,
            })
  • extension.js:661
    this._focusTarget = textActor
  • extension.js:217
    this._headerBar = new St.BoxLayout({ x_expand: true, style: 'padding-bottom: 6px;' })
  • extension.js:213
            this._mainBox = new St.BoxLayout({
                vertical: true, style: 'width: 350px; min-height: 250px;',
            })
  • extension.js:662
    this._notesTextActor = textActor
  • extension.js:218
    this._tabBar = new St.BoxLayout({ x_expand: true })

EGO-L-005 warning

owned object references should be released in disable()

Owned references that are cleaned up in `disable()` should also be released with `null` or `undefined`.

Destroy all objects

  • extension.js:234
            this._contentArea = new St.BoxLayout({
                vertical: true, x_expand: true, y_expand: true,
            })
  • extension.js:217
    this._headerBar = new St.BoxLayout({ x_expand: true, style: 'padding-bottom: 6px;' })
  • extension.js:213
            this._mainBox = new St.BoxLayout({
                vertical: true, style: 'width: 350px; min-height: 250px;',
            })
  • extension.js:218
    this._tabBar = new St.BoxLayout({ x_expand: true })

EGO-L-003 warning

signals connected by extension should be disconnected in disable()

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

Disconnect all signals

  • extension.js:823
                    entry.clutter_text.connect('activate', () => {
                        this._pushUndo();
                        content.tasks.splice(i + 1, 0, '');
                        this._queueSave();
                        renderTasks(i + 1);
                    })
  • extension.js:830
                    entry.clutter_text.connect('key-press-event', (_a, event) => {
                        if (event.get_key_symbol() === Clutter.KEY_BackSpace
                            && entry.get_text() === ''
                            && content.tasks.length > 1) {
                            this._pushUndo();
    
  • extension.js:816
                    entry.clutter_text.connect('text-changed', () => {
                        if (this._isMutating) return;
                        content.tasks[i] = entry.get_text();
                        this._queueSave();
                        this._scheduleUndoCapture();
                    })

All Versions

Version Status
4 Active
3 Rejected
2 Rejected
1 Rejected

Previous Reviews on this Version

JustPerfection rejected
1. Please remove `schemas/.gitkeep`. 2. Please use aysnc for reading file content since you are in shell process (line 105 `extension.js`): [Gio.File.load_contents_async](https://gjs-docs.gnome.org/gio20~2.0/gio.file#method-load_contents_async)
JustPerfection posted a review
3. Also use the correct `url` in `metadata.json`. The repo seems to be empty.