Review of "Habit Streak Tracker" version 1

Details Page Preview

A clean GNOME Shell habit tracker with daily streaks, add/edit/delete, and history.

Extension Homepage
https://github.com/talhasiddique7/habit-tracker

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 7

Shexli found 7 issues that may need reviewer attention.

EGO-X-005 warning

extensions should not manually load the default stylesheet.css

Extensions should not manually load or unload the default `stylesheet.css`; GNOME Shell handles it automatically.

`stylesheet.css`

  • extension.js:1398
    theme.load_stylesheet(stylesheetFile)

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

  • lib/HabitStore.js:35
    file.load_contents(null)

EGO-P-006 warning

unnecessary build and translation artifacts should not be shipped

Compiled GSettings schemas should not be shipped for 45+ packages.

Don't include unnecessary files

  • schemas/gschemas.compiled
    schemas/gschemas.compiled

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:396
          this._emojiGrid = new St.BoxLayout({
            vertical: true,
            style_class: "habit-emoji-grid",
          })
  • extension.js:382
          this._searchEntry = new St.Entry({
            hint_text: "Search emojis...",
            can_focus: true,
            style_class: "habit-emoji-search",
            x_expand: true,
          })
  • extension.js:626
          this._emojiGrid = new St.BoxLayout({
            vertical: true,
            style_class: "habit-emoji-grid",
          })
  • extension.js:620
          this._emojiScroll = new St.ScrollView({
            style_class: "habit-emoji-scroll habit-emoji-scroll-inline",
            x_expand: true,
            y_expand: true,
            visible: false,
          })
  • extension.js:608
          this._emojiSearch = new St.Entry({
            hint_text: "Search all emojis...",
            can_focus: true,
            style_class: "habit-emoji-search",
            x_expand: true,
            visible: false,
          })
  • extension.js:518
          this._entry = new St.Entry({
            text: habit?.name ?? "",
            hint_text: "New Habit",
            can_focus: true,
            style_class: "habit-entry",
            x_expand: true,
          })
  • extension.js:501
          this._preview = new St.Label({
            text: this._icon,
            style_class: "habit-big-icon",
          })
  • extension.js:551
    this._quickColorRow = colorRow
  • extension.js:602
    emojiRow
  • extension.js:892
          this._calendarBox = new St.BoxLayout({
            vertical: true,
            style_class: "habit-calendar",
          })
  • extension.js:834
          this._iconLabel = new St.Label({
            text: habit.icon,
            style_class: "habit-history-icon",
          })
  • extension.js:860
          this._monthLabel = new St.Label({
            text: this._viewDate.toLocaleString(undefined, {
              month: "long",
              year: "numeric",
            }),
            style_class: "habit-month",
            x_expand: true,
            x_align: Clutter.ActorAlign.CENTER,
          })
  • extension.js:842
          this._nameLabel = new St.Label({
            text: habit.name,
            style_class: "habit-history-name",
          })
  • extension.js:847
          this._streakLabel = new St.Label({
            text: `${currentStreak(habit)} day streak`,
            style_class: "habit-history-streak",
          })

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:396
          this._emojiGrid = new St.BoxLayout({
            vertical: true,
            style_class: "habit-emoji-grid",
          })
  • extension.js:382
          this._searchEntry = new St.Entry({
            hint_text: "Search emojis...",
            can_focus: true,
            style_class: "habit-emoji-search",
            x_expand: true,
          })
  • extension.js:626
          this._emojiGrid = new St.BoxLayout({
            vertical: true,
            style_class: "habit-emoji-grid",
          })
  • extension.js:620
          this._emojiScroll = new St.ScrollView({
            style_class: "habit-emoji-scroll habit-emoji-scroll-inline",
            x_expand: true,
            y_expand: true,
            visible: false,
          })
  • extension.js:608
          this._emojiSearch = new St.Entry({
            hint_text: "Search all emojis...",
            can_focus: true,
            style_class: "habit-emoji-search",
            x_expand: true,
            visible: false,
          })
  • extension.js:518
          this._entry = new St.Entry({
            text: habit?.name ?? "",
            hint_text: "New Habit",
            can_focus: true,
            style_class: "habit-entry",
            x_expand: true,
          })
  • extension.js:501
          this._preview = new St.Label({
            text: this._icon,
            style_class: "habit-big-icon",
          })
  • extension.js:551
    this._quickColorRow = colorRow
  • extension.js:892
          this._calendarBox = new St.BoxLayout({
            vertical: true,
            style_class: "habit-calendar",
          })
  • extension.js:834
          this._iconLabel = new St.Label({
            text: habit.icon,
            style_class: "habit-history-icon",
          })
  • extension.js:860
          this._monthLabel = new St.Label({
            text: this._viewDate.toLocaleString(undefined, {
              month: "long",
              year: "numeric",
            }),
            style_class: "habit-month",
            x_expand: true,
            x_align: Clutter.ActorAlign.CENTER,
          })
  • extension.js:842
          this._nameLabel = new St.Label({
            text: habit.name,
            style_class: "habit-history-name",
          })
  • extension.js:847
          this._streakLabel = new St.Label({
            text: `${currentStreak(habit)} day streak`,
            style_class: "habit-history-streak",
          })

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:780
    button.connect("clicked", () => this._toggleEmojiPicker())

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:1328
          GLib.idle_add(GLib.PRIORITY_DEFAULT, () => {
            new HistoryDialog(habit).open();
            return GLib.SOURCE_REMOVE;
          })

All Versions

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

Previous Reviews on this Version

Talha Siddique auto- rejected
Auto-rejected because of new version 2 was uploaded