diff --git a/grammar/grammar.iml b/grammar/grammar.iml index 5959571cff2..0b8311a01e8 100644 --- a/grammar/grammar.iml +++ b/grammar/grammar.iml @@ -16,6 +16,15 @@ + + + + + + + + + diff --git a/grammar/src/class.grm b/grammar/src/class.grm index 41fb9449dab..00f9e0229c1 100644 --- a/grammar/src/class.grm +++ b/grammar/src/class.grm @@ -1,5 +1,7 @@ /** h2. Classes + +*Relevant pages:* [Classes and Inheritance] */ /* diff --git a/grammar/src/class_members.grm b/grammar/src/class_members.grm index 4394722d5c5..aa46d40e9b5 100644 --- a/grammar/src/class_members.grm +++ b/grammar/src/class_members.grm @@ -41,7 +41,7 @@ memberDeclaration : function : property : class - : extension ยง + : extension : typedef : anonymousInitializer ; diff --git a/grammar/src/lexical.grm b/grammar/src/lexical.grm index 759a43b786e..40c41efad41 100644 --- a/grammar/src/lexical.grm +++ b/grammar/src/lexical.grm @@ -2,13 +2,6 @@ h1. Lexical structure */ -SimpleName - : ; -FieldName - : "$" SimpleName; -LabelName - : "@" SimpleName; - [helper] Digit : ["0".."9"]; @@ -29,15 +22,47 @@ HexadecimalLiteral CharacterLiteral : ; +/** +bq. See [Basic types] +*/ + StringWithTemplates : ; NoEscapeString : <"""-quoted string>; +/** +bq. See [String templates] +*/ + SEMI : ; + +SimpleName + : + : "`" "`" + ; + +/** +bq. See [Java interoperability] +*/ + +FieldName + : "$" SimpleName; + +/** +bq. See [Properties And Fields] +*/ + +LabelName + : "@" SimpleName; + +/** +bq. See [Nonlocal returns and jumps] +*/ + /* Symbols: [](){}<> diff --git a/grammar/src/modifiers.grm b/grammar/src/modifiers.grm index 757dd3a47c4..221a5718a9b 100644 --- a/grammar/src/modifiers.grm +++ b/grammar/src/modifiers.grm @@ -13,7 +13,6 @@ modifier : memberModifier : parameterKind : attributes - // sealed by default ; classModifier diff --git a/grammar/src/org/jetbrains/jet/grammar/ConfluenceHyperlinksGenerator.java b/grammar/src/org/jetbrains/jet/grammar/ConfluenceHyperlinksGenerator.java index 51ca2e9974e..daffdaf0224 100644 --- a/grammar/src/org/jetbrains/jet/grammar/ConfluenceHyperlinksGenerator.java +++ b/grammar/src/org/jetbrains/jet/grammar/ConfluenceHyperlinksGenerator.java @@ -1,5 +1,11 @@ package org.jetbrains.jet.grammar; +import com.google.common.base.Supplier; +import com.google.common.collect.Lists; +import com.google.common.collect.Maps; +import com.google.common.collect.Multimap; +import com.google.common.collect.Multimaps; + import java.awt.*; import java.awt.datatransfer.Clipboard; import java.awt.datatransfer.ClipboardOwner; @@ -88,7 +94,14 @@ public class ConfluenceHyperlinksGenerator { Set declaredSymbols = new HashSet(); Set usedSymbols = new HashSet(); + Multimap usages = Multimaps.newListMultimap(Maps.>newHashMap(), new Supplier>() { + @Override + public List get() { + return Lists.newArrayList(); + } + }); List tokens = new ArrayList(); + Declaration lastDeclaration = null; while (true) { Token advance = grammarLexer.advance(); @@ -97,10 +110,13 @@ public class ConfluenceHyperlinksGenerator { } if (advance instanceof Declaration) { Declaration declaration = (Declaration) advance; + lastDeclaration = declaration; declaredSymbols.add(declaration.getName()); } else if (advance instanceof Identifier) { Identifier identifier = (Identifier) advance; + assert lastDeclaration != null; + usages.put(identifier.getName(), lastDeclaration.getName()); usedSymbols.add(identifier.getName()); } tokens.add(advance); @@ -109,10 +125,25 @@ public class ConfluenceHyperlinksGenerator { for (Token token : tokens) { if (token instanceof Declaration) { Declaration declaration = (Declaration) token; + result.append("{anchor:").append(declaration.getName()).append("}"); if (!usedSymbols.contains(declaration.getName())) { // result.append("(!) *Unused!* "); System.out.println("Unused: " + token); } + Collection myUsages = usages.get(declaration.getName()); + if (!myUsages.isEmpty()) { + result.append("\\[{color:grey}Used by "); + for (Iterator iterator = myUsages.iterator(); iterator.hasNext(); ) { + String usage = iterator.next(); + result.append("[#").append(usage).append("]"); + if (iterator.hasNext()) { + result.append(", "); + } + } + result.append("{color}\\]\n"); + } + result.append(token); + continue; } else if (token instanceof Identifier) { Identifier identifier = (Identifier) token; diff --git a/grammar/src/org/jetbrains/jet/grammar/Declaration.java b/grammar/src/org/jetbrains/jet/grammar/Declaration.java index 47451807c88..e6c6396fd61 100644 --- a/grammar/src/org/jetbrains/jet/grammar/Declaration.java +++ b/grammar/src/org/jetbrains/jet/grammar/Declaration.java @@ -13,7 +13,7 @@ public class Declaration extends Token { @Override public String toString() { - return "{anchor:" + name + "}*" + name + "*"; + return "*" + name + "*"; } public String getName() { diff --git a/grammar/src/toplevel.grm b/grammar/src/toplevel.grm index 2f2456f6ad7..f5318c57325 100644 --- a/grammar/src/toplevel.grm +++ b/grammar/src/toplevel.grm @@ -1,5 +1,7 @@ /** h1. Syntax + +*Relevant pages:* [Namespaces] */ diff --git a/grammar/src/when.grm b/grammar/src/when.grm index 180c0ee2f83..6cd32b72b73 100644 --- a/grammar/src/when.grm +++ b/grammar/src/when.grm @@ -1,5 +1,7 @@ /** h4. Pattern matching + +*Relevant pages:* [Pattern matching] */ when