Review of "Spotlight Search" version 1.3 (1)

Details Page Preview

The most powerful search bar! macOS-style Spotlight quick launcher: instant search for apps, files, calculator with unit conversion, hotwords, timers, emoji, web suggestions and system actions. Copy-and-paste and the clipboard history uses the system clipboard.

Extension Homepage
https://github.com/beastzy/Spotlight-Search

No comments.

FAQ

Files

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

Shexli (experimental) warning 6 manual_review 1

Shexli found 7 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:5176
    f.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:951
    St.Clipboard.get_default()
  • extension.js:1121
    St.Clipboard.get_default()
  • extension.js:3054
    St.Clipboard.get_default()
  • extension.js:3143
    St.Clipboard.get_default()
  • extension.js:3163
    St.Clipboard.get_default()
  • extension.js:3210
    St.Clipboard.get_default()
  • extension.js:7157
    St.Clipboard.get_default()

EGO-P-006 warning

unnecessary build and translation artifacts should not be shipped

Package contains files that often should not be shipped for review.

Don't include unnecessary files

  • install.sh
    install.sh

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:1315
            this._entry = new St.Entry({
                style: 'background-color: transparent; border: none;' +
                        'font-size: 24px; color: white;',
                can_focus: true,
                hint_text: 'Spotlight Search',
            })
  • extension.js:1308
            this._entryIcon = new St.Icon({
                icon_name: 'system-search-symbolic',
                icon_size: 22,
                style: 'margin-right: 10px; color: rgba(255,255,255,0.55);',
            })
  • extension.js:1468
            this._footer = new St.Label({
                style: 'padding: 10px 14px 4px 14px; font-size: 11px;' +
                        'color: rgba(255,255,255,0.4);',
                text: '↑↓ Navigate    ↵ Open    Esc Close',
            })
  • extension.js:1344
            this._ghostProbe = new St.Label({
                text: '',
                style: 'font-size: 24px; color: white;',
                opacity: 0,
                visible: true,
                reactive: false,
                can_focus: false,
            })
  • extension.js:1285
            this._glowBand = new St.DrawingArea({
                reactive: false,
                style: 'background-color: transparent;',
            })
  • extension.js:1454
            this._gridScroll = new St.ScrollView({
                hscrollbar_policy: St.PolicyType.NEVER,
                vscrollbar_policy: St.PolicyType.AUTOMATIC,
                visible: true,
            })
  • extension.js:1437
            this._lsCrumb = new St.BoxLayout({
                orientation: Clutter.Orientation.HORIZONTAL,
                style: 'padding: 6px 12px 2px 14px; min-height: 26px;',
                reactive: true,
                visible: false,
            })
  • extension.js:1329
            this._lsGhost = new St.Label({
                text: '',
                style: 'font-size: 24px; color: rgba(255,255,255,0.30);' +
                        'background-color: transparent;',
                visible: false,
                reactive: false,
                can_focus: false,
            })
  • extension.js:1446
            this._lsGrid = new St.BoxLayout({
                orientation: Clutter.Orientation.VERTICAL,
                style: 'padding: 2px 8px 6px 8px;',
                visible: false,
            })
  • extension.js:1461
            this._lsMsg = new St.Label({
                style: 'padding: 12px 14px; font-size: 14px;' +
                        'color: rgba(255,255,255,0.5);',
                visible: false,
            })
  • extension.js:1276
            this._panel = new St.BoxLayout({
                orientation: Clutter.Orientation.VERTICAL,
                style: 'background-color: rgba(28, 29, 33, 0.97);' +
                        'border-radius: 18px;' +
                        'box-shadow: 0 24px 60px rgba(0, 0, 0, 0.45);' +
                        'padd
  • extension.js:1398
            this._results = new St.BoxLayout({
                orientation: Clutter.Orientation.VERTICAL,
                style: 'padding: 0px 6px;',
            })
  • extension.js:1406
            this._resultsScroll = new St.ScrollView({
                hscrollbar_policy: St.PolicyType.NEVER,
                vscrollbar_policy: St.PolicyType.AUTOMATIC,
                visible: true,
            })
  • extension.js:1392
            this._separator = new St.Widget({
                style: 'min-height: 1px; background-color: rgba(255,255,255,0.09);' +
                        'margin: 2px 6px 6px 6px;',
            })
  • extension.js:1422
            this._termBox = new St.BoxLayout({
                orientation: Clutter.Orientation.VERTICAL,
                style: 'padding: 4px 14px 8px 14px;',
            })
  • extension.js:1417
            this._termScroll = new St.ScrollView({
                hscrollbar_policy: St.PolicyType.NEVER,
                vscrollbar_policy: St.PolicyType.AUTOMATIC,
                visible: false,
            })
  • extension.js:4765
    row

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:1315
            this._entry = new St.Entry({
                style: 'background-color: transparent; border: none;' +
                        'font-size: 24px; color: white;',
                can_focus: true,
                hint_text: 'Spotlight Search',
            })
  • extension.js:1308
            this._entryIcon = new St.Icon({
                icon_name: 'system-search-symbolic',
                icon_size: 22,
                style: 'margin-right: 10px; color: rgba(255,255,255,0.55);',
            })
  • extension.js:906
                this._fileSearch = new FileSearch(
                    this._settings.get_int('search-depth'),
                    this._settings.get_int('max-entries'),
                    this._settings.get_int('max-matches'))
  • extension.js:1468
            this._footer = new St.Label({
                style: 'padding: 10px 14px 4px 14px; font-size: 11px;' +
                        'color: rgba(255,255,255,0.4);',
                text: '↑↓ Navigate    ↵ Open    Esc Close',
            })
  • extension.js:1344
            this._ghostProbe = new St.Label({
                text: '',
                style: 'font-size: 24px; color: white;',
                opacity: 0,
                visible: true,
                reactive: false,
                can_focus: false,
            })
  • extension.js:1285
            this._glowBand = new St.DrawingArea({
                reactive: false,
                style: 'background-color: transparent;',
            })
  • extension.js:1454
            this._gridScroll = new St.ScrollView({
                hscrollbar_policy: St.PolicyType.NEVER,
                vscrollbar_policy: St.PolicyType.AUTOMATIC,
                visible: true,
            })
  • extension.js:1437
            this._lsCrumb = new St.BoxLayout({
                orientation: Clutter.Orientation.HORIZONTAL,
                style: 'padding: 6px 12px 2px 14px; min-height: 26px;',
                reactive: true,
                visible: false,
            })
  • extension.js:1329
            this._lsGhost = new St.Label({
                text: '',
                style: 'font-size: 24px; color: rgba(255,255,255,0.30);' +
                        'background-color: transparent;',
                visible: false,
                reactive: false,
                can_focus: false,
            })
  • extension.js:1446
            this._lsGrid = new St.BoxLayout({
                orientation: Clutter.Orientation.VERTICAL,
                style: 'padding: 2px 8px 6px 8px;',
                visible: false,
            })
  • extension.js:1461
            this._lsMsg = new St.Label({
                style: 'padding: 12px 14px; font-size: 14px;' +
                        'color: rgba(255,255,255,0.5);',
                visible: false,
            })
  • extension.js:1276
            this._panel = new St.BoxLayout({
                orientation: Clutter.Orientation.VERTICAL,
                style: 'background-color: rgba(28, 29, 33, 0.97);' +
                        'border-radius: 18px;' +
                        'box-shadow: 0 24px 60px rgba(0, 0, 0, 0.45);' +
                        'padd
  • extension.js:1398
            this._results = new St.BoxLayout({
                orientation: Clutter.Orientation.VERTICAL,
                style: 'padding: 0px 6px;',
            })
  • extension.js:1406
            this._resultsScroll = new St.ScrollView({
                hscrollbar_policy: St.PolicyType.NEVER,
                vscrollbar_policy: St.PolicyType.AUTOMATIC,
                visible: true,
            })
  • extension.js:1392
            this._separator = new St.Widget({
                style: 'min-height: 1px; background-color: rgba(255,255,255,0.09);' +
                        'margin: 2px 6px 6px 6px;',
            })
  • extension.js:1422
            this._termBox = new St.BoxLayout({
                orientation: Clutter.Orientation.VERTICAL,
                style: 'padding: 4px 14px 8px 14px;',
            })
  • extension.js:1417
            this._termScroll = new St.ScrollView({
                hscrollbar_policy: St.PolicyType.NEVER,
                vscrollbar_policy: St.PolicyType.AUTOMATIC,
                visible: false,
            })

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:1290
            this._glowBand.connect('repaint', area => {
                try {
                    this._drawBand(area.get_context());
                } catch (e) {
                    /* ignore */
                }
            })
  • extension.js:1480
            this._overlay.connect('button-press-event', (actor, event) => {
                const [px, py] = event.get_coords();
                const [bx, by] = this._panel.get_transformed_position();
                const [bw, bh] = this._panel.get_transformed_size();
                if (px >= bx && px <= bx + bw && 
  • extension.js:1303
    this._panel.connect('notify::allocation', () => this._syncGlow())
  • extension.js:4738
                cell.box.connect('button-press-event', () => {
                    this._gridActivate(idx);
                    return Clutter.EVENT_STOP;
                })
  • extension.js:4742
                cell.box.connect('enter-event', () => {
                    this._gridHover(idx);
                    return Clutter.EVENT_PROPAGATE;
                })

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:4127
                this._termRenderTimer = GLib.timeout_add(
                    GLib.PRIORITY_DEFAULT, 80, () => {
                        this._termRenderTimer = 0;
                        if (this._term && this._term.runId === runId &&
                            this._term.status === 'running') {
                         

All Versions

Version Status
1.3 (1) Unreviewed