Stefan Monnier [Wed, 6 Apr 2016 03:48:01 +0000 (23:48 -0400)]
Various cleanup
* yasnippet/yasnippet.el: Add Package-Requires since we use cl-lib.
(yas-installed-snippets-dir, yas--default-user-snippets-dir)
(yas--load-directory-1, yas-load-snippet-buffer-and-close):
Use expand-file-name.
(yas-buffer-local-condition): Let's not quote lambdas.
(yas--modes-to-activate): Fix compiler warning about free `dfs' var and
unused return value of `mapcar'.
(yas-minor-mode): Don't confuse emulation-mode-map-alists for a hook.
(yas--font-lock-keywords): Don't hardcode the name of emacs-lisp-mode's
font-lock keywords.
(yas--calculate-group): Use file-relative-name.
(yas--subdirs): Don't mismatch \n in file name.
(yas-expand-from-trigger-key, yas-tryout-snippet): Prefer numbers to
number names.
(yas--guess-snippet-directories): Use expand-file-name rather than
removing&adding / by hand.
(yas--on-field-overlay-modification): Mark `length' as unused.
(yas--update-mirrors): Try to better fit within 80 columns.
(yas--backported-syms, yas--exported-syms): Don't mismatch \n in
symbol name.
Noam Postavsky [Sun, 31 Jan 2016 17:48:06 +0000 (12:48 -0500)]
Reduce `yas-new-snippet-default'
* yasnippet.el (yas-new-snippet-default): Remove
"require-final-newline: nil", it's redundant since `snippet-mode' already
sets that. Also remove the direct-keybinding, since it's hardly ever
used, and often the literal "# binding: direct-keybinding" ends up in
actual snippets.
Noam Postavsky [Fri, 29 Jan 2016 18:55:00 +0000 (13:55 -0500)]
Don't use yas-x-prompt by default
It is not a very pleasant method when there are many values, and
`yas-completing-prompt' will usually do a better job, in addition to
respecting customizations to `completing-read-function'.
`yas-dropdown-prompt' remains in first place, since it only takes effect
if the `dropdown' library is loaded, which likely indicates a preference
for it.
* yasnippet.el (yas-prompt-functions): Remove yas-x-prompt from default value.
* yasnippet-tests.el: Silence byte-compiler.
(yas-saving-variables, yas-with-snippet-dirs): Move macros before their use.
(yas--barbaz, yas--foobarbaz): Declare.
(yas--phony-c-mode, yas--test-mode, yas--another-test-mode): Move out of
deftest, so the byte-compiler understands they're defined.
João Távora [Mon, 4 Jan 2016 10:15:31 +0000 (10:15 +0000)]
Slightly improve on fix for #515: Refactor code and add tests
While I agree with the solution for #515 in commit 17fe790 for now,
other approaches might be interesting in the future, like clearing on
other types of insertion, not just self-insertion.
So add some tests and refactor a new function that could be used for
that purpose later on. For now, change no behaviour.
* yasnippet-tests.el (dont-clear-on-partial-deletion-issue-515,
dont-clear-on-yank-issue-515): New tests. (yas-mock-yank): New
function.
* yasnippet.el (yas--skip-and-clear-field-p): New function.
(yas--on-field-overlay-modification): Use it.
Noam Postavsky [Fri, 11 Dec 2015 02:37:06 +0000 (21:37 -0500)]
Don't choose ido prompting based on Emacs version
* yasnippet.el (yas-ido-prompt): Unconditionally use ido prompting,
explicitly requireing ido.
(yas-maybe-ido-prompt): New function, call `yas-ido-prompt' if
`ido-mode' is enabled.
(yas-prompt-functions): Replace `yas-ido-prompt' with
`yas-maybe-ido-prompt' in the default value.
Noam Postavsky [Sat, 12 Dec 2015 03:54:21 +0000 (22:54 -0500)]
Respect y-b-l-cond from binding triggered snippets
The default value for `yas-buffer-local-condition' was only effective
for `yas-expand-from-trigger-key' command, so it didn't have any effect
when triggering snippets from a key binding (or if using the
`yas-expand' alias).
* yasnippet.el (yas-buffer-local-condition): Check if `this-command' is
`yas-expand' or `yas-expand-from-keymap' too.
Noam Postavsky [Sun, 13 Dec 2015 05:14:44 +0000 (00:14 -0500)]
Improve test simulatulation of self-insert
* yasnippet-tests.el (yas-mock-insert): Use `ert-simulate-command' to
simulate n self-insert-commands.
(simple-mirror, mirror-with-transformation):
(primary-field-transformation, nested-placeholders-kill-superfield):
(nested-placeholders-use-subfield):
(mirrors-adjacent-to-fields-with-nested-mirrors):
(deep-nested-mirroring-issue-351, example-for-issue-271):
(string-match-with-subregexp-in-mirror-transformations): Call
`yas-mock-insert' directly instead of with `ert-simulate-command'.
Noam Postavsky [Tue, 8 Dec 2015 23:19:02 +0000 (18:19 -0500)]
Fix #587; set `this-command' on fallback.
`this-original-command' is supposed to be for the command that
we're *not* executing because of key remapping, therefore it doesn't
make sense to set it to the command we're about to execute.
* yasnippet.el (yas--fallback): Set `this-command'.
Sharif Nassar [Sun, 8 Nov 2015 18:28:16 +0000 (10:28 -0800)]
Ignore trailing spaces in snippet definitions
Probably nobody wants a snippet `key` with a trailing space. It can
be hard to differentiate from a `key` without trailing space. The
default `<TAB>` behavior of yasnippet will never expand these.
* yasnippet.el (yas--parse-template): Ignore trailing spaces in snippet
definitions.
* yasnippet-tests.el (deftest ignore-trailing-whitespace): New test for
new behavior.
Noam Postavsky [Sat, 31 Oct 2015 19:54:33 +0000 (15:54 -0400)]
Activate extra and major modes first
This prevents snippets from a parent mode from overriding those of the
major-mode's (or yas--extra-modes). Snippets of ancestor modes may
still override snippets of some other ancestor modes, but hopefully this
won't cause much trouble in practice.
* yasnippet.el (yas--modes-to-activate): Reverse result, so that parents
of yas--extra-modes and major are later in the list.
* yasnippet-tests.el (loading-with-cyclic-parenthood)
(extra-modes-parenthood): Test it.
Noam Postavsky [Mon, 12 Oct 2015 01:23:36 +0000 (21:23 -0400)]
Simplify string matching.
* yasnippet.el (yas--field-parse-create): Use string-match-p to instead
of save-match-data, anchor regexp with \` (start of string) to instead
of (eq ... 0)
Noam Postavsky [Sun, 11 Oct 2015 16:40:17 +0000 (12:40 -0400)]
Build a single `explored' list.
* yasnippet.el (yas--modes-to-activate): Make helper dfs function
produce the list of modes only by updating a single `explored' list,
instead of building up the list by value and having to remove
duplicated after.
Noam Postavsky [Sun, 11 Oct 2015 16:25:20 +0000 (12:25 -0400)]
Add (failing) yas--modes-to-activate test
* yasnippet-tests.el (extra-modes-parenthood): New (failing) test.
(loading-with-cyclic-parenthood): Use equal + sort instead of set
operation + length.
* yasnippet-tests.el (visiting-compiled-snippets): New Test.
* yasnippet.el (yas--lookup-snippet-1, yas-lookup-snippet): Split new
function yas--lookup-snippet-1 from yas-lookup-snippet.
yas-define-snippets was making assumptions that happended to be true for
its current calls, but could fail if given differently formatted snippet
lists that still meet the docstring description.
Fix #597; use SAVE-FILE to visit compiled snippets
Rename the existing FILE field to LOAD-FILE, and add a new SAVE-FILE to
yas--template struct. Normally they will be the same, but compiled
snippets have only SAVE-FILE because they are loaded by "compiled" code.
* yasnippet.el (yas--template): Remove field file, add load-file and
save-file.
(yas--parse-template): Update snippet-definition list in docstrings.
(yas-define-snippets): Move LOAD-FILE value to SAVE-FILE when compiling.
(yas--template-get-file): New function.
(yas--visit-snippet-file-1, yas-load-snippet-buffer,
yas-load-snippet-buffer-and-close): Use yas--template-load-file,
yas--template-save-file, or yas--template-get-file, as appropriate.
* doc/snippet-organization.org (The =.yas-compiled-snippet.el= file):
Remove caveat that is no longer relevant.
* yasnippet.el (yas--template): New yas--define-snippets-2 constructor
with arguments matching yas-define-snippets format.
(yas--define-snippets-1): Use it.
(yas--update-template): Return TEMPLATE argument.
Noam Postavsky [Tue, 4 Aug 2015 18:20:29 +0000 (14:20 -0400)]
Simplify some code
* yasnippet.el (yas-define-snippets): Modify the list instead of
reconstructing it.
(yas-load-snippet-buffer-and-close): Replace listp and second with
cdr-safe. Use string-prefix-p rather than string-match-p.
João Távora [Mon, 23 Mar 2015 10:10:56 +0000 (10:10 +0000)]
Add useful development assertion
When debugging snippets after M-x toggle-debug-on-error, errors in the
`post-command-hook' might cause `yas--post-command-handler' to be
removed. That's OK, always check that it's there before attempting any
`yas-expand-snippet' calls, since it is essential to check snippet
movement.
* yasnippet.el (yas-expand-snippet): Assert `yas-minor-mode' and
`yas--post-command-handler' active.
Stefan Monnier [Fri, 20 Mar 2015 10:34:33 +0000 (10:34 +0000)]
Getting rid of low-level assumptions in yasnippet
The main thrust is to get rid of the use of the `cl-struct-slots'
property which doesn't exist in Emacs-25 any more.
* yasnippet.el: Update copyright
(yas--template): Change constructor name from
`yas--make-blank-template' to `yas--make-template'
(yas--populate-template): Remove.
(yas--define-snippets-1): Use `yas--make-template'
(yas--define-snippets-1): Use `setf's
(yas-define-menu, yas--define-menu-1, yas-tryout-snippet): Use
`yas--make-template'
Noam Postavsky [Sun, 5 Oct 2014 00:52:58 +0000 (20:52 -0400)]
Signal an error on recursive yas--fallback calls
* yasnippet.el (yas--fallback): let-bind yas-fallback-behavior to
'yas--fallback before actually doing the fallback. Signal an error if
it's 'yas--fallback (indicating we're in an infinte loop).