On 04/08/2010 01:09 AM, Luke Palmer wrote:
> On Wed, Apr 7, 2010 at 1:23 AM, Evan Laforge 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;"
>> ... [ 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:" where 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
=== 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