2013-08-12 43 views
5

Tôi dường như đã tìm thấy đường đến một thông báo lỗi lạ. Tôi đang lưu trữ mật khẩu, và tôi có một bình luận nói rằngĐiều gì gây ra thông báo lỗi Scala này?

/** A password hash is stored as `"algorithm$iterations$salt$hash"` 
* with the number of iterations optional for some algorithms 

Khi tôi cố gắng tạo ra một lọ phân phối cho dự án của tôi, tôi đã cảnh báo này:

Variable iterations undefined in comment for... 

tôi theo dõi các cảnh báo xuống với đặc điểm package scala.tools.nsc.ast.DocComments, nơi tôi phát hiện ra nó rõ ràng là có thể đặt các biến của một số loại trong ScalaDoc. Thật không may, Googling cho "biến trong Scaladoc" hoặc "ScalaDoc ký hiệu đô la" trả về không có gì hữu ích.

Có ai biết tính năng nào tôi đang sử dụng không chính xác và cách tôi có thể bao gồm ký hiệu đô la trong nhận xét ScalaDoc mà không nhận được cảnh báo?

Trả lời

3

Tôi sẽ bắt đầu với "$$", như dự đoán. Sau đó, tôi sẽ thử dấu gạch chéo ngược để thoát khỏi nó, đó là câu trả lời.

lib chuẩn là đầy đủ với các macro này. (Ví dụ, trong immutable.MapLike,

* @define Coll immutable.Map 

cho việc sử dụng $Coll, cho doc thừa hưởng.)

Bạn sẽ nghĩ StringInterpolator sẽ hiển thị như thế nào để bao gồm một đô la.

[scaladoc] /localhome/jenkins/a/workspace/pr-checkin-per-commit/src/library/scala/StringContext.scala:17: warning: Variable name undefined in comment for class StringContext in class StringContext 
[scaladoc] * println(s"Hello, $name") // Hello, James 
[scaladoc]      ^
[scaladoc] /localhome/jenkins/a/workspace/pr-checkin-per-commit/src/library/scala/StringContext.scala:23: warning: Variable name undefined in comment for class StringContext in class StringContext 
[scaladoc] * s"Hello, $name" 
[scaladoc]    ^
[scaladoc] /localhome/jenkins/a/workspace/pr-checkin-per-commit/src/library/scala/StringContext.scala:41: warning: Variable a undefined in comment for class StringContext in class StringContext 
[scaladoc] * val x: JSONObject = json"{ a: $a }" 
[scaladoc]         ^

Đó là từ sample sanity build for pull requests.

Tất cả các lỗi đó là từ tài liệu lớp học, chứ không phải tài liệu thành viên, vì vậy có thể đó là gợi ý; hoặc có thể nó chỉ dừng lại phàn nàn tại thời điểm đó.

Công cụ này phát ra một mồi tuyệt vời trong sản lượng của nó, nhưng không phải là vấn đề của bạn:

[scaladoc] Quick crash course on using Scaladoc links 
[scaladoc] ========================================== 
[scaladoc] Disambiguating terms and types: Prefix terms with '$' and types with '!' in case both names are in use: 
[scaladoc] - [[scala.collection.immutable.List!.apply class List's apply method]] and 
[scaladoc] - [[scala.collection.immutable.List$.apply object List's apply method]] 
[scaladoc] Disambiguating overloaded members: If a term is overloaded, you can indicate the first part of its signature followed by *: 
[scaladoc] - [[[scala.collection.immutable.List$.fill[A](Int)(⇒A):List[A]* Fill with a single parameter]]] 
[scaladoc] - [[[scala.collection.immutable.List$.fill[A](Int,Int)(⇒A):List[List[A]]* Fill with a two parameters]]] 
[scaladoc] Notes: 
[scaladoc] - you can use any number of matching square brackets to avoid interference with the signature 
[scaladoc] - you can use \\. to escape dots in prefixes (don't forget to use * at the end to match the signature!) 
[scaladoc] - you can use \\# to escape hashes, otherwise they will be considered as delimiters, like dots. 

Cập nhật 1: Đoán những gì, đoán rằng dường như làm việc. Nó không còn phàn nàn về $ROOT sản lượng này:

docs.partest: 
[scaladoc] Documenting 33 source files to /home/apm/projects/snytt/build/scaladoc/partest 
[scaladoc] model contains 110 documentable templates 
[scaladoc] /home/apm/projects/snytt/src/partest/scala/tools/partest/BytecodeTest.scala:14: warning: Variable TESTDIR undefined in comment for class BytecodeTest in class BytecodeTest 
[scaladoc] * 1. Create subdirectory in test/files/jvm for your test. Let's name it $TESTDIR. 
[scaladoc]                   ^
[scaladoc] /home/apm/projects/snytt/src/partest/scala/tools/partest/BytecodeTest.scala:15: warning: Variable TESTDIR undefined in comment for class BytecodeTest in class BytecodeTest 
[scaladoc] * 2. Create $TESTDIR/BytecodeSrc_1.scala that contains Scala source file that you 
[scaladoc]    ^
[scaladoc] /home/apm/projects/snytt/src/partest/scala/tools/partest/BytecodeTest.scala:18: warning: Variable TESTDIR undefined in comment for class BytecodeTest in class BytecodeTest 
[scaladoc] * 3. Create $TESTDIR/Test.scala: 
[scaladoc]    ^
[scaladoc] Document succeeded with 3 warnings; see the documenter output for details. 
[scaladoc] three warnings found 
[stopwatch] [docs.partest.timer: 19.486 sec] 

Bây giờ tôi sẽ đi cho $TESTDIR.

Chà, điều này thực sự mang lại sức mạnh. Cảm ơn câu hỏi!

Trước tiên, hãy để tôi chỉ kiểm tra xem scaladoc có thực sự bao gồm từ $ROOT trong đầu ra html của nó hay không.

Cập nhật 2: Bạn biết không? Đừng để tâm. Đây là kết quả, ha:

A string that looks like a file path is normalized by replacing the leading segments (the root) with "$$ROOT" 

Cập nhật 3: Trên thực tế, \$ thoát ngược hoạt động tốt. Hiển thị trực tiếp thực tế trên màn hình:

with "$ROOT" 
+0

Được rồi, vì vậy '$$' tránh cảnh báo, nhưng dẫn đến hai dấu đô la trong tài liệu. Thật đáng yêu. Tôi cũng là một chút bối rối, nơi nó nói với * pre * sửa chữa các điều khoản và các loại với '$' hoặc '!' Và sau đó tiến hành để đặt chúng sau khi 'Danh sách' trong ví dụ. Tôi nghĩ đó là hậu tố chứ không phải tiền tố.Mặt khác, nó phàn nàn về '$ ROOT' và' $ iterations', vì vậy có điều gì đó đang tìm kiếm tiền tố ... – TOB

+0

@TOB Tôi biết! Đã cập nhật lại. –

+0

Cảm ơn bạn đã tìm hiểu điều đó. '\ $' nó là! Bây giờ nếu chúng ta có thể chỉ cần có ai đó ghi lại một cái gì đó. Tôi cho rằng đó là quá nhiều để hy vọng cho sự thống nhất của đồng đô la-dấu thoát trong ScalaDoc và nội suy chuỗi, huh? – TOB

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