2016-03-09 12 views
12

Tôi viết một plugin Scala cho một biên tập viên tôi sử dụng đó sẽ làm nổi bật tất cả các đường dẫn mã không sử dụng (có thể là chưa sử dụng defs, vals, classesimplicits), và cung cấp cho người dùng một tùy chọn để yank chúng ra khỏi tệp .scala.Scala công cụ để loại bỏ tất cả các mã không sử dụng

Làm thế nào tôi có thể làm điều này? Để đơn giản hóa vấn đề, giả sử chúng tôi chỉ có một tệp đơn gốc .scala không có phụ thuộc bên ngoài vào thư viện hoặc bất kỳ tệp mã nào khác.

Lý tưởng nhất là tôi muốn đây là một plugin SBT, với một tệp Foo.scala như vậy, sẽ nhổ ra tệp Foo_min.Scala với tất cả các mã không sử dụng đã bị xóa.

+2

Điều gần nhất tôi biết là để sử dụng '-Ywarn-unused' và '-Ywarn-không sử dụng-import' như tùy chọn sbt. –

+0

Có thể trùng lặp của [Có công cụ nào cho Scala để xóa tất cả các mục nhập không được sử dụng từ tất cả các tệp mã không?] (Https://stackoverflow.com/questions/7767567/is-there-a-tool-for-scala-to -clean-all-the-unused-import-from-all-the-code-file) –

Trả lời

4

Bạn cần một loại API ngữ nghĩa nào đó để duyệt qua mã và đặt câu hỏi như "biến này/nhập đã từng được sử dụng" chưa?

Theo như tôi biết, Intellij sử dụng Meta programming System để đạt được mục tiêu tương tự. Đối với scala, bạn có thể đợi bản phát hành 2.0 của scalameta, trong đó (có lẽ nhiều nhất) sẽ hỗ trợ API ngữ nghĩa.

0

Về cơ bản, bạn đang tìm kiếm callgraph.

Một đường dẫn đầy đủ nhưng phức tạp cho mã Scala được triển khai trong Dotty Linker. Đây là trạng thái của nghệ thuật. Tuy nhiên, thậm chí xây dựng một callgraph dễ dàng hơn không phải là một nhiệm vụ tầm thường. Tôi sẽ không ngạc nhiên nếu việc triển khai Meta sẽ bị hạn chế để thực hiện một nhiệm vụ như vậy. Đặc biệt, bạn cần phải rất cẩn thận với implicitsphạm vi, đặc biệt là do thực tế là macro meta được mở rộng sau khi typer.

Tạo biểu đồ gọi của riêng bạn yêu cầu ký hiệu, loại và tìm kiếm ngầm định. Tôi e rằng bạn cần đợi đến khi API Semantic trong Scala Meta 2.0 được phát hành.

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