2012-04-07 24 views
13

Tôi đang tìm kiếm một thẻ tương đương với Haskell. Tôi cố gắng hasktags, nhưng nó có một số vấn đề:Cách tạo TAGS cho các dự án Haskell?

Trong thư mục nguồn của enumerator, chạy hasktags . cho:

hasktags: tags: openFile: resource busy (file is locked) 

Và khi tôi chạy vim -t enumFile, một lỗi xảy ra:

E431: Format error in tags file "tags" 
Before byte 4085 
E426: tag not found: enumFile 

tôi cũng đã thử gasbag, nhưng nó không biên dịch trên ghc-7.0.4.

Trả lời

8

hasktags có một số lỗi, một trong số đó là nó sử dụng IO lười biếng, có xu hướng để cung cấp cho những lỗi tài nguyên bận rộn.

Vì nó xảy ra, tôi chỉ viết một chương trình thẻ, tại http://hackage.haskell.org/package/fast-tags

tùy chọn khác là hothasktags, mà làm cho thẻ module.function đủ điều kiện, và lushtags, được thiết kế để tích hợp với một IDE như vim tagbar ưa thích thingy. Theo kinh nghiệm của tôi, các thẻ hothasktags tạo ra các tệp thẻ khổng lồ và các thẻ tươi tốt bị treo ngay sau khi nó không thể phân tích cú pháp một tệp. Cả hai đều sử dụng haskell-src-exts có nghĩa là chúng chính xác nhưng sẽ bị lỗi nếu chúng không thể phân tích cú pháp tệp của bạn và không thể xử lý tệp .hsc. các thẻ nhanh có trình phân tích cú pháp riêng của nó, có nghĩa là nó không có các vấn đề đó, nhưng cũng dễ bị phân tích cú pháp các lỗi bỏ sót các thẻ hoặc cung cấp các thẻ không có thật.

Như bạn thấy, người khoe khoang (và htags) sử dụng Haskell-src có nghĩa là họ chỉ làm việc trên Haskell 98.

Disclaimer: nếu bởi TAGS bạn có nghĩa là emacs thẻ, nhanh thẻ không làm những bài viết nào, mặc dù nếu ai đó chăm sóc nó sẽ dễ dàng để thêm vào.

+0

wow, thẻ nhanh thực sự nhanh và hoạt động! Cảm ơn – fqsxr

13

Bạn đang sử dụng Mac OS X (hoặc Windows, xem bên dưới), phải không? Trong trường hợp đó, hasktags -c (chỉ tạo thẻ định dạng Vi) sẽ khắc phục được sự cố của bạn.

Đó không phải là lời giải thích duy nhất, nhưng đây là những gì xảy ra trên một hệ thống OS X:

  • theo mặc định, hasktags giả sử bạn muốn cả hai thẻ cho vi và Emacs.
  • do đó, nó sẽ cố gắng để tạo ra cả tags (đối với Vi) và TAGS (đối với Emacs)
  • Tuy nhiên, OS X, không giống như Unix, là bởi trường hợp mặc định không nhạy cảm. Do đó bạn không thể có cả hai tập tin ở đó.
  • thay vì ghi đè lên một tệp với một tệp khác, vì một số lý do hasktags gặp phải xung đột, có thể do nó mở một tệp trước khi đóng "tệp khác". Tôi mong rằng đó là nhờ vào I/O lười biếng, như được giải thích bởi Evan Laforge.

Cập nhật: như đã chỉ ra bởi một nhận xét, Windows cũng là trường hợp nhạy cảm, các vấn đề tương tự như vậy có thể phát sinh.

+1

Giải thích này liên quan đến trường hợp không nhạy cảm cũng đúng trên MS Windows, theo kinh nghiệm của tôi. Tôi đang sử dụng Emacs, vì vậy tôi sử dụng -e, nó cũng hoạt động tốt. Nhưng bỏ qua tùy chọn phát sinh lỗi. Điều này là của hasktags-0.68.2.Nó không giống như một IO lười biếng hoặc lỗi vấn đề như câu trả lời khác đề nghị – tinlyx

+0

@TingL: Tôi nghĩ rằng lười biếng IO giải thích lý do tại sao bạn nhận được thông báo lỗi cụ thể ("tài nguyên bận rộn"); nếu không bạn chỉ đơn giản là không nhận được lỗi và một tệp 'tags' (tệp được tạo sau này) và nó sẽ chỉ hoạt động với một trình soạn thảo chứ không phải chỉ một trình soạn thảo khác. – Blaisorblade

Các vấn đề liên quan