all repos — NoPaste @ 3e3c433f026c49e04d0efa0f0f39fc688ed32bb1

Resurrected - The PussTheCat.org fork of NoPaste

scripts/CodeMirror/mode/swift/test.js (view raw)

  1// CodeMirror, copyright (c) by Marijn Haverbeke and others
  2// Distributed under an MIT license: https://codemirror.net/LICENSE
  3
  4(function() {
  5  var mode = CodeMirror.getMode({indentUnit: 2}, "swift");
  6  function MT(name) { test.mode(name, mode, Array.prototype.slice.call(arguments, 1)); }
  7
  8  // Ensure all number types are properly represented.
  9  MT("numbers",
 10     "[keyword var] [def a] [operator =] [number 17]",
 11     "[keyword var] [def b] [operator =] [number -0.5]",
 12     "[keyword var] [def c] [operator =] [number 0.3456e-4]",
 13     "[keyword var] [def d] [operator =] [number 345e2]",
 14     "[keyword var] [def e] [operator =] [number 0o7324]",
 15     "[keyword var] [def f] [operator =] [number 0b10010]",
 16     "[keyword var] [def g] [operator =] [number -0x35ade]",
 17     "[keyword var] [def h] [operator =] [number 0xaea.ep-13]",
 18     "[keyword var] [def i] [operator =] [number 0x13ep6]");
 19
 20  // Variable/class/etc definition.
 21  MT("definition",
 22     "[keyword var] [def a] [operator =] [number 5]",
 23     "[keyword let] [def b][punctuation :] [variable-2 Int] [operator =] [number 10]",
 24     "[keyword class] [def C] [punctuation {] [punctuation }]",
 25     "[keyword struct] [def D] [punctuation {] [punctuation }]",
 26     "[keyword enum] [def E] [punctuation {] [punctuation }]",
 27     "[keyword extension] [def F] [punctuation {] [punctuation }]",
 28     "[keyword protocol] [def G] [punctuation {] [punctuation }]",
 29     "[keyword func] [def h][punctuation ()] [punctuation {] [punctuation }]",
 30     "[keyword import] [def Foundation]",
 31     "[keyword typealias] [def NewString] [operator =] [variable-2 String]",
 32     "[keyword associatedtype] [def I]",
 33     "[keyword for] [def j] [keyword in] [number 0][punctuation ..][operator <][number 3] [punctuation {] [punctuation }]");
 34
 35  // Strings and string interpolation.
 36  MT("strings",
 37     "[keyword var] [def a][punctuation :] [variable-2 String] [operator =] [string \"test\"]",
 38     "[keyword var] [def b][punctuation :] [variable-2 String] [operator =] [string \"\\(][variable a][string )\"]",
 39     "[keyword var] [def c] [operator =] [string \"\"\"]",
 40     "[string multi]",
 41     "[string line]",
 42     "[string \"test\"]",
 43     "[string \"\"\"]",
 44     "[variable print][punctuation (][string \"\"][punctuation )]");
 45
 46  // Comments.
 47  MT("comments",
 48     "[comment // This is a comment]",
 49     "[comment /* This is another comment */]",
 50     "[keyword var] [def a] [operator =] [number 5] [comment // Third comment]");
 51
 52  // Atoms.
 53  MT("atoms",
 54     "[keyword class] [def FooClass] [punctuation {]",
 55     "  [keyword let] [def fooBool][punctuation :] [variable-2 Bool][operator ?]",
 56     "  [keyword let] [def fooInt][punctuation :] [variable-2 Int][operator ?]",
 57     "  [keyword func] [keyword init][punctuation (][variable fooBool][punctuation :] [variable-2 Bool][punctuation ,] [variable barBool][punctuation :] [variable-2 Bool][punctuation )] [punctuation {]",
 58     "    [atom super][property .init][punctuation ()]",
 59     "    [atom self][property .fooBool] [operator =] [variable fooBool]",
 60     "    [variable fooInt] [operator =] [atom nil]",
 61     "    [keyword if] [variable barBool] [operator ==] [atom true] [punctuation {]",
 62     "      [variable print][punctuation (][string \"True!\"][punctuation )]",
 63     "    [punctuation }] [keyword else] [keyword if] [variable barBool] [operator ==] [atom false] [punctuation {]",
 64     "      [keyword for] [atom _] [keyword in] [number 0][punctuation ...][number 5] [punctuation {]",
 65     "        [variable print][punctuation (][string \"False!\"][punctuation )]",
 66     "      [punctuation }]",
 67     "    [punctuation }]",
 68     "  [punctuation }]",
 69     "[punctuation }]");
 70
 71  // Types.
 72  MT("types",
 73     "[keyword var] [def a] [operator =] [variable-2 Array][operator <][variable-2 Int][operator >]",
 74     "[keyword var] [def b] [operator =] [variable-2 Set][operator <][variable-2 Bool][operator >]",
 75     "[keyword var] [def c] [operator =] [variable-2 Dictionary][operator <][variable-2 String][punctuation ,][variable-2 Character][operator >]",
 76     "[keyword var] [def d][punctuation :] [variable-2 Int64][operator ?] [operator =] [variable-2 Optional][punctuation (][number 8][punctuation )]",
 77     "[keyword func] [def e][punctuation ()] [operator ->] [variable-2 Void] [punctuation {]",
 78     "  [keyword var] [def e1][punctuation :] [variable-2 Float] [operator =] [number 1.2]",
 79     "[punctuation }]",
 80     "[keyword func] [def f][punctuation ()] [operator ->] [variable-2 Never] [punctuation {]",
 81     "  [keyword var] [def f1][punctuation :] [variable-2 Double] [operator =] [number 2.4]",
 82     "[punctuation }]");
 83
 84  // Operators.
 85  MT("operators",
 86     "[keyword var] [def a] [operator =] [number 1] [operator +] [number 2]",
 87     "[keyword var] [def b] [operator =] [number 1] [operator -] [number 2]",
 88     "[keyword var] [def c] [operator =] [number 1] [operator *] [number 2]",
 89     "[keyword var] [def d] [operator =] [number 1] [operator /] [number 2]",
 90     "[keyword var] [def e] [operator =] [number 1] [operator %] [number 2]",
 91     "[keyword var] [def f] [operator =] [number 1] [operator |] [number 2]",
 92     "[keyword var] [def g] [operator =] [number 1] [operator &] [number 2]",
 93     "[keyword var] [def h] [operator =] [number 1] [operator <<] [number 2]",
 94     "[keyword var] [def i] [operator =] [number 1] [operator >>] [number 2]",
 95     "[keyword var] [def j] [operator =] [number 1] [operator ^] [number 2]",
 96     "[keyword var] [def k] [operator =] [operator ~][number 1]",
 97     "[keyword var] [def l] [operator =] [variable foo] [operator ?] [number 1] [punctuation :] [number 2]",
 98     "[keyword var] [def m][punctuation :] [variable-2 Int] [operator =] [variable-2 Optional][punctuation (][number 8][punctuation )][operator !]");
 99
100  // Punctuation.
101  MT("punctuation",
102     "[keyword let] [def a] [operator =] [number 1][punctuation ;] [keyword let] [def b] [operator =] [number 2]",
103     "[keyword let] [def testArr][punctuation :] [punctuation [[][variable-2 Int][punctuation ]]] [operator =] [punctuation [[][variable a][punctuation ,] [variable b][punctuation ]]]",
104     "[keyword for] [def i] [keyword in] [number 0][punctuation ..][operator <][variable testArr][property .count] [punctuation {]",
105     "  [variable print][punctuation (][variable testArr][punctuation [[][variable i][punctuation ]])]",
106     "[punctuation }]");
107
108  // Identifiers.
109  MT("identifiers",
110     "[keyword let] [def abc] [operator =] [number 1]",
111     "[keyword let] [def ABC] [operator =] [number 2]",
112     "[keyword let] [def _123] [operator =] [number 3]",
113     "[keyword let] [def _$1$2$3] [operator =] [number 4]",
114     "[keyword let] [def A1$_c32_$_] [operator =] [number 5]",
115     "[keyword let] [def `var`] [operator =] [punctuation [[][number 1][punctuation ,] [number 2][punctuation ,] [number 3][punctuation ]]]",
116     "[keyword let] [def square$] [operator =] [variable `var`][property .map] [punctuation {][variable $0] [operator *] [variable $0][punctuation }]",
117     "$$ [number 1][variable a] $[atom _] [variable _$] [variable __] `[variable a] [variable b]`");
118
119  // Properties.
120  MT("properties",
121     "[variable print][punctuation (][variable foo][property .abc][punctuation )]",
122     "[variable print][punctuation (][variable foo][property .ABC][punctuation )]",
123     "[variable print][punctuation (][variable foo][property ._123][punctuation )]",
124     "[variable print][punctuation (][variable foo][property ._$1$2$3][punctuation )]",
125     "[variable print][punctuation (][variable foo][property .A1$_c32_$_][punctuation )]",
126     "[variable print][punctuation (][variable foo][property .`var`][punctuation )]",
127     "[variable print][punctuation (][variable foo][property .__][punctuation )]");
128
129  // Instructions or other things that start with #.
130  MT("instructions",
131     "[keyword if] [builtin #available][punctuation (][variable iOS] [number 9][punctuation ,] [operator *][punctuation )] [punctuation {}]",
132     "[variable print][punctuation (][builtin #file][punctuation ,] [builtin #function][punctuation )]",
133     "[variable print][punctuation (][builtin #line][punctuation ,] [builtin #column][punctuation )]",
134     "[builtin #if] [atom true]",
135     "[keyword import] [def A]",
136     "[builtin #elseif] [atom false]",
137     "[keyword import] [def B]",
138     "[builtin #endif]",
139     "[builtin #sourceLocation][punctuation (][variable file][punctuation :] [string \"file.swift\"][punctuation ,] [variable line][punctuation :] [number 2][punctuation )]");
140
141  // Attributes; things that start with @.
142  MT("attributes",
143     "[attribute @objc][punctuation (][variable objcFoo][punctuation :)]",
144     "[attribute @available][punctuation (][variable iOS][punctuation )]");
145
146  // Property/number edge case.
147  MT("property_number",
148     "[variable print][punctuation (][variable foo][property ._123][punctuation )]",
149     "[variable print][punctuation (]")
150
151  MT("nested_comments",
152     "[comment /*]",
153     "[comment But wait /* this is a nested comment */ for real]",
154     "[comment /**** let * me * show * you ****/]",
155     "[comment ///// let / me / show / you /////]",
156     "[comment */]");
157
158  // TODO: correctly identify when multiple variables are being declared
159  // by use of a comma-separated list.
160  // TODO: correctly identify when variables are being declared in a tuple.
161  // TODO: identify protocols as types when used before an extension?
162})();