On 04/08/2010 01:09 AM, Luke Palmer wrote:
On Wed, Apr 7, 2010 at 1:23 AM, Evan Laforge<qdun...@gmail.com>  wrote:
Derive.PitchDeriver     Derive/Derive.hs        98;"    file:Cmd/Cmd.hs
Derive.PitchDeriver     Derive/Derive.hs        98;"    file:Cmd/Play.hs
Derive.PitchDeriver     Derive/Derive.hs        98;"
file:Cmd/ResponderSync.hs
... [ 20 more ] ...

The vim tag documentation says these are "static" tags, and implies
they are meant to apply to symbols only valid within the same file,
but this is clearly not the case.  Actually, the vim doc implies that
only "file:" is defined, and doesn't talk about "scoped tags" so I'm
not sure what is going on.  Anyway, whenever I go to a tag I have to
first step through a message that says "1 of 25" or so.  There's one
for each reference in the tags file, even though those are references
in other files.
Hmm odd, I don't get that behavior.  Is that with the sorted
annotation?  What version of vim?

I get the correct behavior (no additional selection is needed).
My vim version is 7.2.385.
I did not use sorted annotation but I doubt it has anything to do with it.

What's going on?  I even checked the current docs at vim.org and they
don't mention a file:xyz form either.
I think I saw it documented *somewhere*, but now that I look again I
can't find it anywhere.  Maybe it was in a dream.  I hope a newer
version of vim didn't remove the support or something...

Even if it is not documented it makes sense. When "file:" is present then it limits the tag to the file which is the argument of "file:". If "file:" does not have any argument then the argument defaults to the file in which the tag is defined.

That would mean that exported symbols should be generated without "file:", non-exported symbols should be generated with "file:" which does not have argument. In addition to this qualified symbols should be generated with the qualification and with "file:<fn>" where <fn> is the file name where the symbol is imported as qualified.

Ghci's :ctags does not support qualified symbols :-/

Just to clarify it for myself.
That would mean that the tags file should look like this:

B.x    b.hs    /^x = 5 :: Int$/;"    v    file:a.hs
B.x    b.hs    /^x = 5 :: Int$/;"    v    file:c.hs
C.x    c.hs    /^x = B.x+1$/;"    v    file:a.hs
localAct    a.hs    /^localAct = do$/;"    v    file:
x    b.hs    /^x = 5 :: Int$/;"    v
x    c.hs    /^x = B.x+1$/;"    v

... for these files:

=== file a.hs ===
module A () where
import qualified B as B
import qualified C as C
localAct = do
  print B.x
  print C.x

=== file b.hs ===
module B (x) where
x = 5 :: Int

=== file c.hs ===
module C (x) where
import qualified B as B
x = B.x+1


_______________________________________________
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe

Reply via email to