Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

fix(core.summary): bugs + flexibility around incomplete metadata #927

Merged
merged 2 commits into from
Jun 3, 2023

Conversation

laher
Copy link
Contributor

@laher laher commented Jun 3, 2023

A few bugfixes & added flexibility, after trying to use :Neorg generate-workspace-summary on my workspace.

Bugs and inconveniences

  • Currently the metadata strategy is making assumptions about the metadata in your doc, and failing with an error if specific key is not present.

    • e.g. if you :Neorg inject-metadata and your metadata doesn't specify a description or categories, then it just errors.
    • If you don't have a title, you get nothing.
    • It also doesn't like numeric titles like in a journal, e.g. I had 06 for 6th May. It fails in this case too.
  • The generated summary always uses a ** heading regardless of what level of heading your cursor is on.

  • If you have inconsistent title casing in your metadata categories, the alphabetic ordering doesn't work (even though the categories are rendered with title case)

Fixes

  • Avoid errors when category or description or title is vim.NIL or numeric. I made a default category 'Uncategorised' for .norg files without a category, and I gave a default title of vim.fn.basename(filename) if none was defined.
  • Heading is now 1 deeper than the node under cursor.
  • Categories are title-cased before being sorted by vim.spairs().

Results

Some example output. My cursor was over the ** Summary heading.

index.norg was the only file in my workspace with a category (homebase) in the metadata, and it didn't have a title. Those journal entries had a numeric title like 06, etc.

** Summary
*** Homebase
   - {:/Users/xxx/notes/work/index.norg:}[Index.norg]
*** Uncategorised
   - {:/Users/xxx/notes/work/main.norg:}[Neorg Notes]
   - {:/Users/xxx/notes/work/journal/template.norg:}[Template]
   - {:/Users/xxx/notes/work/journal/2023/05/06.norg:}[6]
   - {:/Users/xxx/notes/work/journal/2023/05/07.norg:}[7]
   - {:/Users/xxx/notes/work/journal/2023/05/08.norg:}[8]
   - {:/Users/xxx/notes/work/journal/2023/05/18.norg:}[18]

@laher
Copy link
Contributor Author

laher commented Jun 3, 2023

I'm also wondering ...

Maybe whenever this metadata strategy doesn't find a metadata.title, it could just read the first heading instead and use that. Then at that point, do we even need a headings strategy? Maybe just remove the strategy concept altogether & represent all files in the workspace (maybe there could be configurable globs for inclusion/exclusion, and/or maybe document metadata tags for exclusion too).

It's not something for this PR, but it's my 5c after using the module a little bit.

@vhyrro
Copy link
Member

vhyrro commented Jun 3, 2023

Thanks a lot for this! I think strategies are still useful in terms of long-term extensibility (there may be more interesting strategies like sorting by GTD context etc.), but I agree we could refactor the metadata strategy into maybe a default strategy that pulls from both the metadata and the first heading as a fallback? Would be more flexible that way :)

@vhyrro vhyrro changed the title core.summary: bugfixes and flexibility around incomplete metadata fix(core.summary): bugs + flexibility around incomplete metadata Jun 3, 2023
@vhyrro vhyrro merged commit 30343db into nvim-neorg:main Jun 3, 2023
@laher laher deleted the summary-bugfixes branch June 3, 2023 12:37
@laher
Copy link
Contributor Author

laher commented Jun 3, 2023

nw

I think strategies are still useful in terms of long-term extensibility (there may be more interesting strategies like sorting by GTD context etc.)

Makes sense, thanks for sharing the vision

but I agree we could refactor the metadata strategy into maybe a default strategy that pulls from both the metadata and the first heading as a fallback? Would be more flexible that way :)

Cool, I'll give it a shot sometime

normful added a commit to normful/neorg that referenced this pull request Jun 4, 2023
* upstream/main:
  feat(keybinds.lua): add descriptions to all keybinds
  chore: format with stylua
  feat(keybinds.lua): add `desc` fields to task keybinds (nvim-neorg#926)
  fix(core.summary): bugs + flexibility around incomplete metadata (nvim-neorg#927)
  docs(concealer): add comments for generators an formatters
  feat: add extra nesting level, make icons specific to non-anticonceal usage
  feat(concealer): add more icon generators
  feat(concealer): add numeric anticonceal if supported
  fix(concealer): record cursor upon init to fix first line conceal (nvim-neorg#924)
  feat: conceal the `{* }` parts of links
  fix(concealer): fix concealing in anchors, don't error on broken config (nvim-neorg#923)
  docs(todo_items): old keybinds in wiki
  docs: update `breaking-changes.norg`
  refactor!: remove the `core.news` module
  docs(README): make lazy.nvim install instructions more standard (nvim-neorg#905)
  refactor(docgen): remove unused variable
  fix(docgen): fix incorrect markdown indentation in wiki
  fix(docgen): don't fail on mixed-type tables (lists and dictionaries at the same time)
  fix(docgen): propagate docgen error exit code (nvim-neorg#917)
  refactor(promo): remove notify concealer (nvim-neorg#919)
  fix(concealer): do not listen vimleavepre (nvim-neorg#920)
  fix(concealer): minor fixes, plus wiki error fix (nvim-neorg#916)
  feat(concealer)!: rewrite for performance and stability (nvim-neorg#834)
  docs(wiki/Home.md): incorrect formatting in first paragraph
  refactor(core.highlights): don't halt execution when highlights cannot be applied
  fix(core.highlights): wrongly placed bracket
  fix(core.highlights): fix disappearing highlights when opening up norg files
  fix(highlights): attempt to reenable highlighting when none is found
  fix(todo_items): don't look at child if parent is todo (nvim-neorg#909)
  perf(core.promo): don't check `v.count`, use `v.count1` instead
  feat(promo): promote/demote prefix without following text (nvim-neorg#912)
  chore(highlights): add error message to assert for easier user debugging
  fix(highlights): assert on treesitter being enabled (nvim-neorg#914)
  feat(itero): don't start newline on empty line (nvim-neorg#911)
  refactor!(todo-items): since 5.0 do not warn about deprecated keybinds
  refactor!: since 5.0 do not longer warn about deprecated `core.norg.*` modules
  feat!: move to new/improved metadata parser, change highlight queries
  refactor(hop): add nicer error messages, format with stylua
  feat(esupports.hop): link jump to line + fixes + refactoring (nvim-neorg#903)
  refactor: remove `core.syntax` from the default module list
  chore(config.lua): update version variable
  chore(main): release 4.6.0 (nvim-neorg#900)
  feat(todo-items): add missing "need input" icon and action (nvim-neorg#896)
  fix(esupports): use structured api to avoid injection (nvim-neorg#899)
  fix(tempus): supply unprovided parameters from the current date when converting to `osdate` (supercedes nvim-neorg#897)
  chore(config.lua): update version variable
  chore(main): release 4.5.0 (nvim-neorg#883)
  fix: TSInstall issues on macOS, hopefully once and for good (nvim-neorg#891)
  docs(README): add treesitter fix for macos (nvim-neorg#887)
  feat: add colouring to TODO items
  docs: update ROADMAP.md
  fix(metagen): update generation to use user config for `updated` tag (nvim-neorg#882)
  chore(config.lua): update version variable
  chore(main): release 4.4.1 (nvim-neorg#880)
  docs(concealer): mention nerd font dependency for concealer (nvim-neorg#875)
  fix(tempus): properly handle conversions w.r.t Sun-Sat/Mon-Sun
  refactor: add `number_wrap()` function to `neorg.lib`
  fix(tempus): paste correct weekday from calendar
  chore(config.lua): update version variable
  chore(main): release 4.4.0
  fix(tempus): don't use the `re` module if it doesn't exist (nvim-neorg#872)
  feat(journal): allow `custom` to take in no arguments, in which case spawn a calendar
  fix(promo): don't add whitespace to empty lines (nvim-neorg#852)
  chore(config.lua): update version variable
  chore(main): release 4.3.0
  feat(calendar): add `t` command for "today"
  fix(hop): assume <current-day> when some parameters to dates are not supplied
  feat(hop): allow users to jump to timestamps
  fix(tempus): days like `4th`/`2nd` would not get parsed properly
  refactor(calendar): allow a target date to be supplied to the view
  chore(config.lua): update version variable
  chore(main): release 4.2.0
  fix: don't allow tempus to load unless the Neovim ver is at least 0.10.0
  feat(tempus): add insert mode `<M-d>` keybind to insert a date
  fix(tempus): do not assume `osdate` has all fields set
  feat(tempus): add `,id` (insert date) keybinding
  feat(tempus): allow dates to be converted to norg-compatible dates with `tostring()`
  chore(config.lua): update version variable
  chore(main): release 4.1.1
  fix: remove calendar as a dependency of `core.ui`, fix errors for people not on nightly
  chore(config.lua): update version variable
  chore(main): release 4.1.0
  refactor: remove `core.tempus` from `core.defaults`
  docs(tempus): add top documentation comment
  docs(calendar): add top documentation comment
  fix(calendar): allow the view to be written to on rerender
  feat(calendar): add `?` help page for custom input
  feat(calendar): implement basic `i` functionality
  feat(tempus): add `to_lua_date` function
  feat: add `core.tempus` module for date management
  feat(calendar): allow many simultaneous calendars
  fix(calendar): if another calendar is open then close it instead of erroring
  feat(calendar): add basic help popup when `?` is invoked
  refactor(core.ui): do not autoclose splits made via `create_split`
  fix(calendar): prevent the buffer from being modifiable after it has been filled
  fix(calendar): fix incorrect movement with `H` across boundaries of months with different lengths
  feat(calendar): add `$` and `0`/`_` navigation keybinds
  feat(calendar): add `m`/`M`, `L`/`H` and `y`/`Y` keybinds for the monthly view
  ref(calendar): implemented distance (monthly view) and run make format (nvim-neorg#858)
  ref(calendar): refactored view outside of calendar module (nvim-neorg#815)
  Fixed style with stylua
  Added standalone mode
  Fixed style with stylua
  Converted calendar into its own module
  Select range highlight hook is now more concise
  Mode integration (WIP)
  fix(calendar): properly display "today's day" in the calendar view
  chore: format with stylua, fix LLS warnings
  ref(calendar): refactored extmark creation, fixed single month view and added month limit (nvim-neorg#796)
  ref(calendar): extract rendering logic, add and improve keybinds (nvim-neorg#790)
  ref(calendar): extract logic, fix bug with time reformatting (nvim-neorg#788)
  fix(calendar): overlapping month names in the calendar view
  chore(calendar): initial setup for the screen update functionality
  ref: use numbers instead of strings for internal date structures
  feat: correctly handle year boundaries
  feat: add left-right cursor movement
  feat: place cursor over current day when creating calendar
  fix(calendar): make distance between each month uniform and support modifying the distance between each month
  feat(calendar): render as many months as is possible on screen
  feat(calendar): generalize functions even further, allow for offsets
  fix(calendar): fix rest of highlight groups
  fix(calendar): make month rendering work again
  fix(calendar): reversed namespace names
  fix(core.ui.calendar): wrong extmark being queried in month render routine
  feat: implement `render_month` function
  ref(core.ui.calendar): extract even more logic to `module.private`
  ref(core.ui.calendar): continue small refactors
  fix(core.ui.calendar): logic error when parsing virt_text length for `set_logical_extmark`
  ref(core.calendar.ui): begin code refactor (make the codebase ready for calendar logic)
  ref(core.ui.calendar): put rendered month extmark in decorational namespace
  feat(core.ui.calendar): highlight the current day differently
  ref(core.ui.calendar): move decorational namespace out of the `do .. end` block
  feat(core.ui.calendar): add day of the month rendering
  feat(core.ui.calendar): make the calendar display full month names
  feat(core.ui.calendar): implement more of the barebones UI
  feat(core.ui): let `create_split` take in a `height` variable
  feat(core.ui.calendar): add static calendar ui
  feat: add skeleton for the calendar UI element
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants