Skip to content

Alias of "Nan" breaks the front matter parser #830

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

Open
jammus opened this issue Feb 23, 2025 · 1 comment
Open

Alias of "Nan" breaks the front matter parser #830

jammus opened this issue Feb 23, 2025 · 1 comment
Labels
bug Something isn't working

Comments

@jammus
Copy link
Contributor

jammus commented Feb 23, 2025

🐛 Describe the bug

No Bobby Tables memes, please :D

---
id: granny
aliases:
  - granny
  - Nan
---

# Granny

Funny one. If I set an alias of Nan (could be a friends name, could be the bread, could be my grandmother, could be about not numbers), the front matter parsing will fail at https://github.com/epwalsh/obsidian.nvim/blob/main/lua/obsidian/note.lua#L529 because the entry is not a string.

I tried to step through the yaml parser to see where but with my limited lua skills, it's not immediately obvious why it's happening. My assumption is that Nan gets parsed as "-nan" (0/0 is -nan) which is a number (type(0/0) is "number"), quite why though I don't know

Also, seems like generating the warning message also fails as path is a table rather than the expected string. Not sure why there either.

Anyway, not a big deal, mostly a curiosity. Sorry I couldn't be more helpful in diagnosis

Config

        require('obsidian').setup {
          workspaces = {
            {
              name = "nb",
              path = "~/nb",
              overrides = {
                daily_notes = {
                  folder = "notes/dailies/",
                },
                notes_subdir = "notes",
              },
            },
          },

  -- Optional, set the log level for Obsidian. This is an integer corresponding to one of the log
  -- levels defined by "vim.log.levels.*" or nil, which is equivalent to DEBUG (1).
  log_level = vim.log.levels.INFO,

  daily_notes = {
    -- Optional, if you keep daily notes in a separate directory.
    folder = "dailies/",
    -- Optional, if you want to change the date format for daily notes.
    date_format = "%Y-%m-%d",
    alias_format = "%B %-d, %Y"
  },

  new_notes_location = "notes_subdir",

  note_frontmatter_func = function(note)
    -- Add the title of the note as an alias.
    if note.title then
      note:add_alias(note.title)
    end

    local out = { id = note.id, aliases = note.aliases, tags = note.tags }

    -- `note.metadata` contains any manually added fields in the frontmatter.
    -- So here we just make sure those fields are kept in the frontmatter.
    if note.metadata ~= nil and not vim.tbl_isempty(note.metadata) then
      for k, v in pairs(note.metadata) do
        out[k] = v
      end
    end

    return out
  end,

  -- Optional, completion.
  completion = {
    -- If using nvim-cmp, otherwise set to false
    nvim_cmp = true,
    -- Trigger completion at 2 chars
    min_chars = 2,
    -- Where to put new notes created from completion. Valid options are
    --  * "current_dir" - put new notes in same directory as the current buffer.
    --  * "notes_subdir" - put new notes in the default notes subdirectory.
  },

  -- Optional, customize how names/IDs for new notes are created.
  note_id_func = function(title)
    -- Create note IDs in a Zettelkasten format with a timestamp and a suffix.
    -- In this case a note with the title 'My new note' will given an ID that looks
    -- like '1657296016-my-new-note', and therefore the file name '1657296016-my-new-note.md'
    local suffix = ""
    if title ~= nil then
      -- If title is given, transform it into valid file name.
      suffix = title:gsub(" ", "-"):gsub("[^A-Za-z0-9-]", ""):lower()
    else
      -- If title is nil, just add 4 random uppercase letters to the suffix.
      for _ = 1, 4 do
        suffix = suffix .. string.char(math.random(65, 90))
      end
    end
    return suffix
  end,

  -- Optional, set to true if you don't want Obsidian to manage frontmatter.
  disable_frontmatter = false,

  -- Optional, for templates (see below).
  templates = {
    subdir = "templates",
    date_format = "%Y-%m-%d-%a",
    time_format = "%H:%M",
  },

  -- Optional, by default when you use `:ObsidianFollowLink` on a link to an external
  -- URL it will be ignored but you can customize this behavior here.
  follow_url_func = function(url)
    -- Open the URL in the default web browser.
    vim.fn.jobstart({"open", url})  -- Mac OS
    -- vim.fn.jobstart({"xdg-open", url})  -- linux
  end,

  -- Optional, set to true if you use the Obsidian Advanced URI plugin.
  -- https://github.com/Vinzent03/obsidian-advanced-uri
  use_advanced_uri = true,

  -- Optional, set to true to force ':ObsidianOpen' to bring the app to the foreground.
  open_app_foreground = false,

  -- Optional, by default commands like `:ObsidianSearch` will attempt to use
  -- telescope.nvim, fzf-lua, and fzf.nvim (in that order), and use the
  -- first one they find. By setting this option to your preferred
  -- finder you can attempt it first. Note that if the specified finder
  -- is not installed, or if it the command does not support it, the
  -- remaining finders will be attempted in the original order.
  finder = "telescope.nvim",

  ui = {
    enable = true,
    checkboxes = {
      -- NOTE: the 'char' value has to be a single character, and the highlight groups are defined below.
      [" "] = { char = "󰄱", hl_group = "ObsidianTodo" },
      ["x"] = { char = "", hl_group = "ObsidianDone" },
      ["-"] = { char = "󰡖", hl_group = "ObsidianTodoPartial" },
      [">"] = { char = "", hl_group = "ObsidianRightArrow" },
      ["o"] = { char = "󰜺", hl_group = "ObsidianTodoCancel" },
    },
    hl_groups = {
      -- The options are passed directly to `vim.api.nvim_set_hl()`. See `:help nvim_set_hl`.
      ObsidianExtLinkIcon = { fg = "#d8a657" },
      ObsidianRefText = { underline = true, fg = "#d8a657" },
      ObsidianBullet = { bold = true, fg = "#7c6f64" },
      ObsidianDone = { fg = "#a9b665" },
      ObsidianTodoCancel = { fg = "#ea6962" },
    },
  },
}

Environment

NVIM v0.10.4
Build type: Release
LuaJIT 2.1.1713773202
Run "nvim -V1 -v" for more info
Obsidian.nvim v3.9.0 (unknown commit)
Status:
• buffer directory: nil
• working directory: /home/jammus/dots
Workspaces:
✓ active workspace: Workspace(name='nb', path='/home/jammus/nb', root='/home/jammus/nb')
Dependencies:
✓ plenary.nvim: unknown
✓ nvim-cmp: unknown
✓ telescope.nvim: unknown
Integrations:
✓ picker: TelescopePicker()
✓ completion: enabled (nvim-cmp) ✗ refs, ✗ tags, ✗ new
all sources:
• copilot
• nvim_lsp
• vsnip
• buffer
Tools:
✓ rg: ripgrep 14.1.1
Environment:
• operating system: Linux
Config:
• notes_subdir: notes

@jammus jammus added the bug Something isn't working label Feb 23, 2025
@neo451
Copy link

neo451 commented Mar 8, 2025

fixed it in the community fork :)
https://github.com/obsidian-nvim/obsidian.nvim/pull/22/files

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug Something isn't working
Projects
None yet
Development

No branches or pull requests

2 participants