Peter Hercek | 9 Apr 11:04 2010
Picon

Re: Announce: hothasktags

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

Gmane