From: Matt DeBoard <matt.deboard@gmail.com>
To: Stefan Monnier <monnier@iro.umontreal.ca>
Cc: emacs-devel@gnu.org
Subject: Re: SMIE
Date: Thu, 10 Jul 2014 00:22:44 -0400 [thread overview]
Message-ID: <CAPLdYOhV8V4qSbPZgG=vaXK7ffgMdx6LQrzxPyWK-WaOeET98g@mail.gmail.com> (raw)
In-Reply-To: <jwvha2qorue.fsf-monnier+emacs@gnu.org>
One final question. In the case of e.g.
> Can't resolve the precedence cycle: .do < else:. < .do
What does the placement of the dots (left of "do", right of "else:") mean?
On Wed, Jul 9, 2014 at 11:02 PM, Stefan Monnier
<monnier@iro.umontreal.ca> wrote:
>> Hi there. As the subject line says I’m writing for help with SMIE.
>
> Cool!
>
>> I am currently working on elixir-mode
>> <https://github.com/elixir-lang/emacs-elixir>, having (apparently) taking
>> over the mode as the latest in a line of contributors.
>
> I'd love to include this in GNU ELPA. Interested?
>
>> Specifically I’m having trouble understanding the mental model for how
>> tokenisation & indentation works. For example, in this
>> <https://github.com/elixir-lang/emacs-elixir/issues/18> issue, indentation
>> errors seem to crop up only after separating lines of code with blank
>> lines.
>> I have spent, seriously, hundreds of hours trying to sort out what’s
>> happening here and I am at my wits’ end.
>
> IIUC, Elixir syntax does not treat all whitespace as "irrelevant",
> contrary to the default tokenizer of SMIE.
>
>> Does this issue ring any bells with issues you’ve dealt with in
>> the past?
>
> Yes, indeed. Octave and sh are two other languages that use SMIE and
> where some whitespace is syntactically significant.
>
> What you need to do is to change the tokenizer so that instead of
> skipping all whitespace, it turns the syntactically-significant
> whitespace into a token (you can name it any way you like; in the above
> languages, it turns out to be syntactically equivalent to a semi-colon,
> so we call it ";").
>
> I know absolutely nothing about Elixir or its syntax, so I can't give
> you specific details, but you can look at octave.el and sh-script.el
> for examples. Feel free to email me back with more details if you need
> further help.
>
>> Final question, how is it determined if a token is a :list-intro token?
>
> Not sure I understand the question. The issue is for the indentation
> rules, when it sees two (or more) concatenated expressions (e.g. "exp1
> exp2"), should it assume that exp2 is something like an argument to the
> exp1 function (and hence exp2 (and exp3, ...) should be indented like
> a function argument) or are all those "expressions" just a list, where
> the first is not more special than the second?
> This usually depends on the context. E.g. in a situation like
>
> fun x1 x2 x3 =>
>
> x2 is not an argument passed to the function x1; Instead x1, x2, and x3
> are "siblings" and should be indented to the same level. So to decide
> how to indent x2 and x3 w.r.t x1, SMIE calls the smie-rule-function with
> (:list-intro . "fun") so smie-rule-function can tell it that "fun"
> introduces a *list* of "things" rather than being followed by a "normal
> expression".
>
> Does that make more sense?
>
>> I have read the SMIE manual ten times, at least, but I’m really
>> struggling. I would truly appreciate your help.
>
> I'm not very good at writing manuals, sorry. But I promise to do my
> best to help you get SMIE working well. In return, I would appreciate
> if you could help me improve the doc by giving, if not actual patches,
> at least suggestions of how to rewrite the doc, or what to add to it
> (usually, you can only make such suggestions after you finally
> understand what's going on, and at the same time it's
> important/necessary/useful to try and remember what it was that you
> didn't understand).
>
>
> Stefan
prev parent reply other threads:[~2014-07-10 4:22 UTC|newest]
Thread overview: 24+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <CAPLdYOhnp353s3LTM9EORWbzmiH2JXVjFNX1sp07tQYe2Q4MPA@mail.gmail.com>
2014-07-10 3:02 ` SMIE Stefan Monnier
2014-07-10 3:53 ` SMIE Matt DeBoard
2014-07-10 3:59 ` SMIE Matt DeBoard
2014-07-10 17:00 ` SMIE chad
2014-08-16 2:34 ` SMIE Matt DeBoard
2014-08-17 7:27 ` SMIE Bozhidar Batsov
2014-08-17 11:55 ` SMIE Stefan Monnier
2014-08-18 12:00 ` SMIE Bozhidar Batsov
2014-08-18 13:33 ` SMIE Tassilo Horn
2014-08-18 14:07 ` SMIE Stefan Monnier
2014-08-19 13:08 ` SMIE Richard Stallman
2014-08-19 14:12 ` SMIE Bastien
2014-08-20 2:27 ` SMIE Richard Stallman
2014-08-20 3:19 ` SMIE Matt DeBoard
2014-08-20 3:57 ` SMIE Ivan Andrus
2014-08-20 14:25 ` SMIE Stefan Monnier
2014-08-27 22:44 ` SMIE Matt DeBoard
2014-08-28 3:11 ` SMIE Stefan Monnier
2014-08-28 7:40 ` SMIE David Kastrup
2014-08-28 22:03 ` SMIE Dmitry
2014-08-17 8:55 ` SMIE Andreas Röhler
2014-07-10 13:32 ` SMIE Stefan Monnier
2014-07-12 14:38 ` SMIE Stephen Leake
2014-07-10 4:22 ` Matt DeBoard [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to='CAPLdYOhV8V4qSbPZgG=vaXK7ffgMdx6LQrzxPyWK-WaOeET98g@mail.gmail.com' \
--to=matt.deboard@gmail.com \
--cc=emacs-devel@gnu.org \
--cc=monnier@iro.umontreal.ca \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
Code repositories for project(s) associated with this external index
https://git.savannah.gnu.org/cgit/emacs.git
https://git.savannah.gnu.org/cgit/emacs/org-mode.git
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.