2013-08-12 23 views
5

Wydaje mi się, że znalazłem drogę do dziwnego komunikatu o błędzie. Ja przechowywania hasło, a mam komentarz, który mówiCo powoduje ten komunikat o błędzie Scala?

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

Kiedy próbowałem tworzyć słoik dystrybucyjną dla mojego projektu, mam to ostrzeżenie:

Variable iterations undefined in comment for... 

Śledziłem ostrzeżenie dół do cechy package scala.tools.nsc.ast.DocComments, gdzie odkryłem, że jest możliwe umieszczenie pewnych zmiennych w ScalaDoc. Niestety, Googling dla "zmiennych w Scaladoc" lub "Dolara ScalaDoc" nie zwraca nic użytecznego.

Czy ktoś wie, jakiej funkcji używam nieprawidłowo i jak mogę dołączyć znak dolara w komentarzu ScalaDoc bez otrzymania ostrzeżenia?

Odpowiedz

3

Zacznę od "$$", jak się domyślam. Potem spróbowałbym ukośnika odwrotnego, by uciec przed nim, co jest odpowiedzią.

Standardowa biblioteka zawiera te makra. (Na przykład w immutable.MapLike,

* @define Coll immutable.Map 

za korzystanie $Coll dla odziedziczonej dok.)

Można by pomyśleć StringInterpolator by pokazać, jak to dolara. To jest od sample sanity build for pull requests.

Wszystkie te błędy pochodzą z dokumentu klasy, a nie z dokumentu członkowskiego, więc może to podpowiedź; a może po prostu przestaje narzekać w tym momencie.

Narzędzie emituje wspaniały podkład w jej produkcji, ale nie do problemu:

[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. 

Aktualizacja 1: Zgadnij co, to przypuszczenie wydaje się działać. To już nie narzeka $ROOT w tym wyjściu:

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] 

Teraz pójdę do $TESTDIR.

Wow, to naprawdę wzmacnia. Dzięki za pytanie!

Najpierw pozwól mi tylko sprawdzić, czy scaladoc rzeczywiście zawiera słowo $ROOT w swoim wyjściu HTML.

Aktualizacja 2: Wiesz co? Po prostu nieważne. Jest to wynik, ha:

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

Update 3: Właściwie \$ backslash ucieczka działa dobrze. Rzeczywiste wyświetlanie na żywo:

with "$ROOT" 
+0

OK, więc '$$' unika ostrzeżenia, ale powoduje powstanie dwóch znaków dolara w dokumentach. To cudowne. Jestem też trochę zdezorientowany, gdy mówi on do * pre * fix terminów i typów z '$' lub '!', A następnie kontynuuje umieszczanie ich po 'List' w przykładzie. Myślę, że jest to przyrostek, a nie prefiks.Z drugiej strony narzeka na '$ ROOT' i' $ iterations', więc coś szuka prefiksu ... – TOB

+0

@ TOB Wiem! Zaktualizowano ponownie. –

+0

Dziękuję za zastanowienie się. '\ $' to jest! Teraz, jeśli możemy po prostu poprosić kogoś o dokumentację. Przypuszczam, że to zbyt dużo, by mieć nadzieję na unifikację ucieczki dolara w ScalaDoc i interpolację ciągów znaków, co? – TOB

Powiązane problemy