aboutsummaryrefslogtreecommitdiff
path: root/runtime
Commit message (Collapse)AuthorAge
...
| * | feat: add __call typing for vim.inspect()Lewis Russell2024-01-17
| |/
| * docs: various fixes (#26929)dundargoc2024-01-17
| | | | | | | | Co-authored-by: Patrick Bollinger <owner@pjbollinger.com> Co-authored-by: vilo1839 <139687192+vilo1839@users.noreply.github.com>
| * vim-patch:211211052d04 (#27048)Sean Dewar2024-01-16
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | runtime(odin): include ftplugin, syntax and indent script (vim/vim#13867) https://github.com/vim/vim/commit/211211052d0426394cbd5f42f3f3f78a64822e2a Translate the files from Vim9 script to legacy Vim script. Notably: - Prefer case-matching comparisons where needed. - Save and restore `&cpo`. - Make the functions script-local. (Pretty easy to use these in expr options now since Vim 9.0 anyways) Add a note after the header for each file stating that they're manually translated. Co-authored-by: Maxim Kim <habamax@gmail.com>
| * refactor(lsp): deprecate `vim.lsp.util.lookup_section`Jongwook Choi2024-01-16
| | | | | | | | | | | | | | | | This function is used only in the `workspace/configuration` handler, and does not warrant a public API because of its confusing return types. The only caller `vim.lsp.handlers["workspace.configuration"]` is also refactored to use `vim.tbl_get()` instead.
| * vim-patch:9.1.0013: Modula2 filetype support lacking (#27020)Sean Dewar2024-01-16
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Problem: Modula2 filetype support lacking Solution: Improve the Modula-2 runtime support, add additional modula2 dialects, add compiler plugin, update syntax highlighting, include syntax tests, update Makefiles (Doug Kearns) closes: vim/vim#6796 closes: vim/vim#8115 https://github.com/vim/vim/commit/68a89470693c7687d4e736ca056c05de632e3ac7 - Luaify the detection script: - Split the `(*!m2foo*)` and `(*!m2foo+bar*)` detection into two Lua patterns, as Lua capture groups cannot be used with `?` and friends (as they only work on character classes). - Use `vim.api.nvim_buf_call()` (ew) to call `modula2#SetDialect()` to ensure `b:modula2` is set for the given bufnr. - Skip the syntax screendump tests. (A shame as they test some of the detection from `(*!m2foo+bar*)` tags, but I tested this locally and it seems to work) - Port the synmenu.vim changes from Vim9 script. (Also tested this locally) - (And also add the missing comma for `b:browsefilter` from earlier.) Co-authored-by: Doug Kearns <dougkearns@gmail.com>
| * docs(column): 'statuscolumn' redraw interaction with 'relativenumber'Luuk van Baal2024-01-16
| |
| * fix(diagnostic): typingLewis Russell2024-01-16
| |
| * vim-patch:ef79c5783782Christian Clason2024-01-16
| | | | | | | | | | | | | | | | | | | | | | | | runtime(fortran): update fortran syntax (vim/vim#13870) Support most remaining features of Fortran 2018/2023 Small improvements to folding etc, Code cleanup: use \? instead of mix of \= and \? https://github.com/vim/vim/commit/ef79c5783782d12bdc6c40cf24d578cc6a1f2a8c Co-authored-by: Ajit-Thakkar <142174202+Ajit-Thakkar@users.noreply.github.com>
| * docs(builtin): remove signatures of undocumented functions (#27039)zeertzjq2024-01-16
| | | | | | | | | | | | Having an empty signature causes an empty line in generated docs, so remove it. Also change ">" to ">vim" in foreach() docs.
| * vim-patch:partial:9.1.0027: Vim is missing a foreach() func (#27037)zeertzjq2024-01-16
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Problem: Vim is missing a foreach() func Solution: Implement foreach({expr1}, {expr2}) function, which applies {expr2} for each item in {expr1} without changing it (Ernie Rael) closes: vim/vim#12166 https://github.com/vim/vim/commit/e79e2077607e8f829ba823308c91104a795736ba Partial port as this doesn't handle non-materialized range() lists. vim-patch:c92b8bed1fa6 runtime(help): delete duplicate help tag E741 (vim/vim#13861) https://github.com/vim/vim/commit/c92b8bed1fa632569c8358feb3b72dd6a0844ef7 Co-authored-by: Ernie Rael <errael@raelity.com>
| * vim-patch:9.1.0009: Cannot easily get the list of matches (#27028)zeertzjq2024-01-16
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Problem: Cannot easily get the list of matches Solution: Add the matchstrlist() and matchbufline() Vim script functions (Yegappan Lakshmanan) closes: vim/vim#13766 Omit CHECK_LIST_MATERIALIZE(): it populates a List with numbers only, and there is a check for strings below. https://github.com/vim/vim/commit/f93b1c881a99fa847a1bafa71877d7e16f18e6ef vim-patch:eb3475df0d92 runtime(doc): Replace non-breaking space with normal space (vim/vim#13868) https://github.com/vim/vim/commit/eb3475df0d927a178789cf8e7fc4983932e1cdbe Co-authored-by: Yegappan Lakshmanan <4298407+yegappan@users.noreply.github.com>
| * feat(terminal): respond to OSC background and foreground request (#17197)Daniel Steinberg2024-01-15
| | | | | | | | | | | | | | | | | | | | | | | | The motivation for this update is Issue #15365, where background=light is not properly set for Nvim running from an Nvim :terminal. This can be encountered when e.g., opening a terminal to make git commits, which opens EDITOR=nvim in the nested terminal. Under the implementation of this commit, the OSC response always indicates a black or white foreground/background. While this may not reflect the actual foreground/background color, it permits 'background' to be retained for a nested Nvim instance running in the terminal emulator. The behaviour matches Vim.
| * vim-patch:93197fde0f1dChristian Clason2024-01-15
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | runtime(ftplugin): Use "*" browsefilter pattern to match "All Files" Problem: The "*.*" browsefilter pattern only matches all files on Windows (Daryl Lee) Solution: Use "*" to filter on all platforms but keep "*.*" as the label text on Windows. (Fixes vim/vim#12685, Doug Kearns) The *.* browsefilter pattern used to match "All Files" on Windows is a legacy of the DOS 8.3 filename wildcard matching algorithm. For reasons of backward compatibility this still works on Windows to match all files, even those without an extension. However, this pattern only matches filenames containing a dot on other platforms. This often makes files without an extension difficult to access from the file dialog, e.g., "Makefile" On Windows it is still standard practice to use "*.*" for the filter label so ftplugins should use "All Files (*.*)" on Windows and "All Files (*)" on other platforms. This matches Vim's default browsefilter values. This commit also normalises the browsefilter conditional test to check for the Win32 and GTK GUI features and an unset b:browsefilter. closes: vim/vim#12759 https://github.com/vim/vim/commit/93197fde0f1db09b1e495cf3eb14a8f42c318b80 Co-authored-by: Doug Kearns <dougkearns@gmail.com>
| * docs(vvars): fix wrong lua types in vim.v variablesJongwook Choi2024-01-15
| | | | | | | | | | | | | | | | - cmdarg: string[] -> string - shell_error: string -> int - stderr: string -> int - Add types for: cmdbang, errors, exception, false, true
| * docs: add lua typing for `vim.NIL`Jongwook Choi2024-01-15
| |
| * docs(builtin): overload functions with union return typesaltermo2024-01-14
| |
| * docs: auto-generate docs for `vim.lpeg` and `vim.re`Jongwook Choi2024-01-14
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | - Add section `VIM.LPEG` and `VIM.RE` to docs/lua.txt. - Add `_meta/re.lua` which adds luadoc and type annotations, for the vendored `vim.re` package. - Fix minor style issues on `_meta/lpeg.lua` luadoc for better vimdocs generation. - Fix a bug on `gen_vimdoc` where non-helptags in verbatim code blocks were parsed as helptags, affecting code examples on `vim.lpeg.Cf`, etc. - Also move the `vim.regex` section below so that it can be located closer to `vim.lpeg` and `vim.re`.
| * fix(lsp): fix incorrect typing and doc for `vim.lsp.rpc`Jongwook Choi2024-01-14
| | | | | | | | | | | | | | | | | | | | | | | | Typings introduced in #26032 and #26552 have a few conflicts, so we merge and clean them up. We also fix some incorrect type annotation in the `vim.lsp.rpc` package. See the associated PR for more details. Summary: - vim.rpc.Dispatchers -> vim.lsp.rpc.Dispatchers - vim.lsp.rpc.Error -> lsp.ResponseError - Revise docs
| * docs(builtin): fix mapset() signature (#27008)zeertzjq2024-01-14
| |
| * fix(colorscheme): default statusline groups usability #26921Evgeni Chasnovski2024-01-13
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Problem: Current values of `StatusLine` and `StatusLineNC` are currently designed to be visually distinctive while being not intrusive. However, the compromise was more shifted towards "not intrusive". After the feedback, statusline highlight groups should be designed to: - Make current window clearly noticeable. Meaning `StatusLine` and `StatusLineNC` should obviously differ. - Make non-current windows clearly separable. Meaning `StatusLineNC` and `Normal`/`NormalNC` should obviously differ. Solution: - Update `StatusLineNC` to have more visible background. - Update `StatusLine` to be inverted variant of `StatusLineNC`. - Update `WinBar` and `WinBarNC` to not link to `StatusLine` and `StatusLineNC` because it makes two goals harder to achieve. - Update `TabLine` to link to `StatusLineNC` instead of `StatusLine` to not be very visually intrusive.
| * vim-patch:9.1.0015: i_CTRL-R- no longer works in replace modezeertzjq2024-01-13
| | | | | | | | | | | | | | | | | | | | | | | | | | | | Problem: i_CTRL-R- no longer works in replace mode Solution: delete characters in replace mode before putting, add a test, add a bit warning into the documentation, that i_CTRL-R-P/O is not supported in Replace mode for now fixes: vim/vim#13792 closes: vim/vim#13816 https://github.com/vim/vim/commit/5d5cbb2b9ac526fb6fad2116e24a282affc45efe Co-authored-by: Christian Brabandt <cb@256bit.org>
| * vim-patch:9.1.0025: A few typos in tests and justify.vimdundargoc2024-01-12
| | | | | | | | | | | | | | | | | | | | | | Problem: A few typos in tests and justify.vim Solution: fix them closes: vim/vim#13848 https://github.com/vim/vim/commit/dc4c37b9d5130c777b377287b8b38cd24da084cb Co-authored-by: dundargoc <gocdundar@gmail.com>
| * vim-patch:2357765304e4Christian Clason2024-01-12
| | | | | | | | | | | | | | | | | | | | | | | | runtime(netrw): Decode multibyte percent-encoding filename correctly (vim/vim#13842) Use `printf("%c")` instead of `nr2char()` to handle '%xx' as a byte. Close vim/vim#13787 https://github.com/vim/vim/commit/2357765304e4c55935b5cc853ffb98ae82d64a01 Co-authored-by: K.Takata <kentkt@csc.jp>
| * vim-patch:5f4cc8ea65e8Christian Clason2024-01-12
| | | | | | | | | | | | | | | | | | | | runtime(colorschemes): Add initial support for Added/Removed/Changed highlight groups (vim/vim#13830) For some of the colorschemes where diffAdded and diffRemoved were explicitly set up. https://github.com/vim/vim/commit/5f4cc8ea65e80efa35f84fe9a9985a42c3c96bae Co-authored-by: Maxim Kim <habamax@gmail.com>
| * vim-patch:9.1.0016: default diff highlighting is too noisyChristian Clason2024-01-12
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Problem: default diff highlighting is too noisy Solution: Link diff highlighting groups to new Added/Removed/Changed, revert previous change (Romain Lafourcade) Remove diff* links added in vim/vim#13776 and doc added in commit b1392be The links added in vim/vim#13776 are way too noisy for the contexts in which the `diff` syntax is applied (git commits, patches, etc.). This commit: - removes those links - adds new default highlighting groups Added, Changed and Removed - links the diff highlighting groups to those new defaults - removes the doc changes - adjusts the syntax_completion test for those newly added group names Note: Changes to the default color schemes will be handled separately, by adding links to those newly created Added/Removed/Changed highlighting groups. related: vim/vim#13776 closes vim/vim#13825 https://github.com/vim/vim/commit/124371c5a149a8c0c75c04b6c90ac11e71a0aa97 Co-authored-by: Romain Lafourcade <romain.lafourcade@razorfish.fr>
| * fix(doc): improve doc generation of types using lpegLewis Russell2024-01-11
| | | | | | | | Added a lpeg grammar for LuaCATS and use it in lua2dox.lua
| * feat(vim.iter): add Iter:flatten (#26786)JD2024-01-10
| | | | | | | | | | Co-authored-by: Gregory Anders <greg@gpanders.com> Co-authored-by: Jongwook Choi <wookayin@gmail.com>
| * fix(health): improve python executable check error handling (#26954)Barrett Ruth2024-01-10
| | | | | | Credit to @wookayin for the fix.
| * fix(health): correctly expand and resolve PYENV_ROOT (#26953)Barrett Ruth2024-01-10
| |
| * vim-patch:71d0ba07a33aChristian Clason2024-01-09
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | runtime(netrw): Sync with netrw 174b (vim/vim#13836) * Import netrw v174b * Revert unwanted changes * Fix indent * Revert some changes * Update tags * Break long line https://github.com/vim/vim/commit/71d0ba07a33a750e9834cd42b7acc619043dedb1 Co-authored-by: K.Takata <kentkt@csc.jp>
| * vim-patch:3a5b3df7764d (#26956)dundargoc2024-01-10
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | runtime(tar): fix a few problems with the tar plugin From: vim/vim#138331: - Updating .tar.zst files was broken. Fixes vim/vim#12639. - Extracting files from .tar.zst / .tzs files was also broken and works now. From: vim/vim#12637: - Fixes variable assignment and typo From: vim/vim#8109: - Rename .tzs to the more standard .tzst fixes: vim/vim#12639 fixes: vim/vim#8105 closes: vim/vim#8109 closes: vim/vim#12637 closes: vim/vim#13831 https://github.com/vim/vim/commit/3a5b3df7764daa058a3e779183e8f38a8418b164 Co-authored-by: Christian Brabandt <cb@256bit.org> Co-authored-by: Martin Rys <martin@rys.pw> Co-authored-by: Eisuke Kawashima <e-kwsm@users.noreply.github.com> Co-authored-by: Carlo Teubner <carlo@cteubner.net>
| * feat(terminal): trigger TermRequest autocommand events (#22159)Ghjuvan Lacambre2024-01-09
| | | | | | | | | | | | | | | | | | | | This commit implements a new TermRequest autocommand event and has Neovim emit this event when children of terminal buffers emit an OSC or DCS sequence libvterm does not handle. The TermRequest autocommand event has additional data in the v:termrequest variable. Co-authored-by: Gregory Anders <greg@gpanders.com>
| * fix(docs): make lines not overflow in vim docsJongwook Choi2024-01-09
| | | | | | | | | | | | | | | | | | Problem: Some lines in the generated vim doc are overflowing, not correctly wrapped at 78 characters. This happens when docs body contains several consecutive 'inline' elements generated by doxygen. Solution: Take into account the current column offset of the last line, and prepend some padding before doc_wrap().
| * docs(treesitter): improve 'no parser' error message for InspectTreeJongwook Choi2024-01-08
| | | | | | | | | | | | | | | | | | | | | | | | | | Improve error messages for `:InspectTree`, when no parsers are available for the current buffer and filetype. We can show more informative and helpful error message for users (e.g., which lang was searched for): ``` ... No parser available for the given buffer: +... no parser for 'custom_ft' language, see :help treesitter-parsers ``` Also improve the relevant docs for *treesitter-parsers*.
| * fix(defaults): use augroup for default autocommands (#26933)Gregory Anders2024-01-06
| |
| * docs(luvref): update to version bumpChristian Clason2024-01-06
| |
| * vim-patch:9.1.0007: can select empty inner text blockszeertzjq2024-01-06
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Problem: can select empty inner text blocks (laurentalacoque) Solution: make selecting empty inner text blocks an error textobjects: Make selecting inner empty blocks an error fixes: vim/vim#13514 closes: vim/vim#13523 https://github.com/vim/vim/commit/ad4d7f446dc6754bde212234d46f4849b520b6e0 Co-authored-by: Christian Brabandt <cb@256bit.org>
| * vim-patch:9.1.0010: Keymap completion is not available (#26888)zeertzjq2024-01-05
| | | | | | | | | | | | | | | | | | | | | | | | | | Problem: Keymap completion is not available Solution: Add keymap completion (Doug Kearns) Add keymap completion to the 'keymap' option, user commands and builtin completion functions. closes: vim/vim#13692 https://github.com/vim/vim/commit/81642d9d6ff5cd6a90a012b1b98632ce51eeb1a8 Co-authored-by: Doug Kearns <dougkearns@gmail.com>
| * fix(health): fix tmux RGB capability detection (#26886)Tristan Partin2024-01-04
| | | | | | | | | | | | | | tmux indicates its RGB support via setrgbb and setrgbf. In modern tmux code, Tc and RGB just set setrgbb and setrgbf, so we can just check for them. Link: https://github.com/tmux/tmux/commit/7eb496c00c313c2f8ab8debe6d154d5ac0db277b
| * Merge pull request #26791 from wookayin/gendocLewis Russell2024-01-04
| |\ | | | | | | refactor(gen_vimdoc): general refactoring on vimdoc generation
| | * refactor(gen_vimdoc): generate function doc from metadata, not from xmlJongwook Choi2024-01-02
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Problem: For function definitions to be included in the vimdoc (formatted) and to be exported as mpack data (unformatted), we had two internal representations of the same function/API metadata in duplicate; one is FunctionDoc (which was previously a dict), and the other is doxygen XML DOM from which vimdoc (functions sections) was generated. Solution: We should have a single path and unified data representation (i.e. FunctionDoc) that contains all the metadata and information about function APIs, from which both of mpack export and vimdoc are generated. I.e., vimdocs are no longer generated directly from doxygen XML nodes, but generated via: (XML DOM Nodes) ------------> FunctionDoc ------> mpack (unformatted) Recursive Internal | Formatting Metadata +---> vimdoc (formatted) This refactoring eliminates the hacky and ugly use of `fmt_vimhelp` in `fmt_node_as_vimhelp()` and all other helper functions! This way, `fmt_node_as_vimhelp()` can simplified as it no longer needs to handle generating of function docs, which needs to be done only in the topmost level of recursion.
| | * fix(docs): clean up non-docstring comments for vimdoc genJongwook Choi2024-01-02
| | | | | | | | | | | | | | | These non-docstring comments can be included into doxygen's brief description and then appear in the succeeding function documentation.
| * | refactor(column): define and use maximum 'statuscolumn' widthLuuk van Baal2024-01-04
| | | | | | | | | | | | | | | Problem: The maximum 'statuscolumn' width and grow behavior is undocumented. Solution: Define, use and document the maximum 'statuscolumn' width and grow behavior.
| * | fix(decorations): validate botline for on_winJaehwang Jung2024-01-04
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Problem: Many decoration providers (treesitter injection highlighting, semantic token highlighting, inlay hint) rely on the correctness of the `botline` argument of `on_win` callback. However, `botline` can be smaller than the actual line number of the last displayed line if some lines are folded. In such cases, some decorations will be missing in the lines not covered by `botline`. Solution: Validate `botline` when invoking `on_win`. NOTE: It seems that the old code was deliberately avoiding this presumably due to performance reasons. However, I haven't experienced noticeable lag after this change, and I believe the cost of botline computation would be much smaller than the cost of decoration providers.
| * | vim-patch:d94ca966ca6dChristian Clason2024-01-04
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | runtime(fortran): syntax and documentation updates (vim/vim#13811) closes: vim/vim#13802 https://github.com/vim/vim/commit/d94ca966ca6d85d3dd03c8b68ff6a4cbae4da1af Co-authored-by: Ajit-Thakkar <142174202+Ajit-Thakkar@users.noreply.github.com>
| * | vim-patch:b1392bee701dChristian Clason2024-01-04
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | runtime(doc): document that the diff filetype uses Diff hl groups related: vim/vim#13776 https://github.com/vim/vim/commit/b1392bee701d887b66b596c9af26bfcb6f0614b8 Co-authored-by: Christian Brabandt <cb@256bit.org>
| * | vim-patch:80beeef0c6a4Christian Clason2024-01-04
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | runtime(vim): Add support for <ScriptCmd> syntax (vim/vim#10686) Adding `<ScriptCmd>` to list of angle-bracket notation syntax, just like `<Cmd>` `<Cmd>` is already highlighted. ```vim nnoremap <leader>o <Cmd>Oldfiles()<CR> ``` `<ScriptCmd>` is not. https://github.com/vim/vim/commit/80beeef0c6a4c44b190631725bce3dcc5635e3ee Co-authored-by: dezza <402927+dezza@users.noreply.github.com>
| * | vim-patch:d4634a26cdcdChristian Clason2024-01-04
| | | | | | | | | | | | | | | | | | | | | | | | runtime(vim): Add support for `syntax foldlevel` command (vim/vim#6182) https://github.com/vim/vim/commit/d4634a26cdcdbd0f22ec608bb4954cd7eb8db528 Co-authored-by: Brad King <brad.king@kitware.com>
| * | vim-patch:9.1.0004: reloading colorscheme when not changing 'background' ↵zeertzjq2024-01-04
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | (#26877) Problem: reloading colorscheme when not changing 'background' Solution: Check, if the background option value actually changed, if not, return early. Only reload colorscheme when bg is changed Currently the highlight groups are re-initialized and the colorscheme (if any) is reloaded anytime 'background' is set, even if it is not changed. This is unnecessary, because if the value was not changed then there is no need to change highlight groups or do anything with the colorscheme. Instead, only reload the colorscheme if the value of 'background' was actually changed. closes: vim/vim#13700 https://github.com/vim/vim/commit/83ad2726ff56db70cb2da78e1e4ea0e09941c73b Co-authored-by: Gregory Anders <greg@gpanders.com>
| * | feat(lua): add noref to deepcopyLewis Russell2024-01-03
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Problem: Currently `deepcopy` hashes every single tables it copies so it can be reused. For tables of mostly unique items that are non recursive, this hashing is unnecessarily expensive Solution: Port the `noref` argument from Vimscripts `deepcopy()`. The below benchmark demonstrates the results for two extreme cases of tables of different sizes. One table that uses the same table lots of times and one with all unique tables. | test | `noref=false` (ms) | `noref=true` (ms) | | -------------------- | ------------------ | ----------------- | | unique tables (50) | 6.59 | 2.62 | | shared tables (50) | 3.24 | 6.40 | | unique tables (2000) | 23381.48 | 2884.53 | | shared tables (2000) | 3505.54 | 14038.80 | The results are basically the inverse of each other where `noref` is much more performance on tables with unique fields, and `not noref` is more performant on tables that reuse fields.