Mercurial
comparison .cms/lib/codemirror/mode/swift/test.js @ 0:78edf6b517a0 draft
24.10
author | Coffee CMS <info@coffee-cms.ru> |
---|---|
date | Fri, 11 Oct 2024 22:40:23 +0000 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
-1:000000000000 | 0:78edf6b517a0 |
---|---|
1 // CodeMirror, copyright (c) by Marijn Haverbeke and others | |
2 // Distributed under an MIT license: https://codemirror.net/5/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 })(); |