@codingame/monaco-editor-wrapper 2.1.2 → 2.2.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -200,6 +200,9 @@ var repository = {
200
200
  },
201
201
  code: {
202
202
  patterns: [
203
+ {
204
+ include: "#using-directive"
205
+ },
203
206
  {
204
207
  include: "#script-header"
205
208
  },
@@ -943,6 +946,35 @@ var repository = {
943
946
  comment: "For themes: Matching view bounds",
944
947
  name: "meta.bounds.scala"
945
948
  },
949
+ "using-directive": {
950
+ end: "\\n",
951
+ begin: "^\\s*(//>)\\s*(using)[^\\S\\n]+",
952
+ beginCaptures: {
953
+ "1": {
954
+ name: "punctuation.definition.comment.scala"
955
+ },
956
+ "2": {
957
+ name: "keyword.other.import.scala"
958
+ }
959
+ },
960
+ patterns: [
961
+ {
962
+ match: "[A-Z\\p{Lt}\\p{Lu}][A-Z\\p{Lt}\\p{Lu}_a-z\\$\\p{Lo}\\p{Nl}\\p{Ll}0-9]*(?:(?<=_)[!#%&*+\\-\\/:<>=?@^|~\\p{Sm}\\p{So}]+)?|`[^`]+`|(?:[A-Z\\p{Lt}\\p{Lu}_a-z\\$\\p{Lo}\\p{Nl}\\p{Ll}][A-Z\\p{Lt}\\p{Lu}_a-z\\$\\p{Lo}\\p{Nl}\\p{Ll}0-9]*(?:(?<=_)[!#%&*+\\-\\/:<>=?@^|~\\p{Sm}\\p{So}]+)?|[!#%&*+\\-\\/:<>=?@^|~\\p{Sm}\\p{So}]+)",
963
+ name: "entity.name.import.scala"
964
+ },
965
+ {
966
+ match: "\\.",
967
+ name: "punctuation.definition.import"
968
+ },
969
+ {
970
+ include: "#strings"
971
+ },
972
+ {
973
+ include: "#constants"
974
+ }
975
+ ],
976
+ name: "comment.line.shebang.scala"
977
+ },
946
978
  comments: {
947
979
  patterns: [
948
980
  {
@@ -0,0 +1,6 @@
1
+ /**
2
+ * comes from https://github.com/microsoft/vscode/blob/16d0a319b28caa4b6cf4e6801fd508282b7533e0/src/vs/workbench/contrib/files/browser/files.contribution.ts#L132
3
+ * files.exclude and files.associations are required by the Lua language server
4
+ */
5
+ export declare const FILES_EXCLUDE_CONFIG = "files.exclude";
6
+ export declare const FILES_ASSOCIATIONS_CONFIG = "files.associations";
@@ -1,6 +1,10 @@
1
1
  import * as monaco from 'monaco-editor';
2
- export declare const onConfigurationChanged: monaco.IEvent<monaco.extra.IConfigurationChangeEvent>;
2
+ import { IConfigurationChangeEvent } from 'vscode/services';
3
+ import * as vscode from 'vscode';
4
+ import { updateUserConfiguration } from 'vscode/service-override/configuration';
5
+ import './files';
6
+ export declare function onConfigurationChanged(listener: (e: IConfigurationChangeEvent) => void): vscode.Disposable;
3
7
  export declare function getConfiguration<C = Partial<monaco.editor.IEditorOptions>>(language?: string, section?: string): C | undefined;
4
- export declare function updateUserConfiguration(configurationJson: string): void;
8
+ export { updateUserConfiguration };
5
9
  export declare function registerConfigurations(configurations: monaco.extra.IConfigurationNode[], validate?: boolean): void;
6
10
  export declare function registerDefaultConfigurations(defaultConfigurations: monaco.extra.IStringDictionary<unknown>[]): void;
package/dist/cpptools.js CHANGED
@@ -2409,7 +2409,8 @@ var cpptools = [
2409
2409
  "type": "object",
2410
2410
  "markdownDescription": "Configure glob patterns for excluding folders (and files if `#C_Cpp.exclusionPolicy#` is changed). These are specific to the C/C++ extension and are in addition to `#files.exclude#`, but unlike `#files.exclude#` they also apply to paths outside the current workspace folder and are not removed from the Explorer view. Read more about glob patterns [here](https://code.visualstudio.com/docs/editor/codebasics#_advanced-search-options).",
2411
2411
  "default": {
2412
- "**/.vscode": true
2412
+ "**/.vscode": true,
2413
+ "**/.vs": true
2413
2414
  },
2414
2415
  "additionalProperties": {
2415
2416
  "anyOf": [
package/dist/dart3.js CHANGED
@@ -30,7 +30,7 @@ var dart = [
30
30
  "dart.analyzerAdditionalArgs": {
31
31
  "type": "array",
32
32
  "default": [],
33
- "description": "Additional arguments to pass to the Dart analysis server.",
33
+ "description": "Additional arguments to pass to the Dart Analysis Server.",
34
34
  "scope": 3,
35
35
  "items": {
36
36
  "type": "string"
@@ -51,7 +51,7 @@ var dart = [
51
51
  "string"
52
52
  ],
53
53
  "default": null,
54
- "description": "The path to a custom Dart analysis server.",
54
+ "description": "The path to a custom Dart Analysis Server. This setting is intended for use by Dart Analysis Server developers.",
55
55
  "scope": 6
56
56
  },
57
57
  "dart.analyzerSshHost": {
@@ -60,7 +60,7 @@ var dart = [
60
60
  "string"
61
61
  ],
62
62
  "default": null,
63
- "description": "An SSH host to run the analysis server.\nThis can be useful when modifying code on a remote machine using SSHFS.",
63
+ "description": "An SSH host to run the Analysis Server.\nThis can be useful when modifying code on a remote machine using SSHFS.",
64
64
  "scope": 3
65
65
  },
66
66
  "dart.analyzerVmServicePort": {
@@ -69,13 +69,13 @@ var dart = [
69
69
  "number"
70
70
  ],
71
71
  "default": null,
72
- "description": "The port number to be used for the Dart analysis server VM service.",
72
+ "description": "The port number to be used for the Dart Analysis Server VM service. This setting is intended for use by Dart Analysis Server developers.",
73
73
  "scope": 3
74
74
  },
75
75
  "dart.notifyAnalyzerErrors": {
76
76
  "type": "boolean",
77
77
  "default": true,
78
- "description": "Whether to show a notification the first few times an analysis server exception occurs.",
78
+ "description": "Whether to show a notification the first few times an Analysis Server exception occurs.",
79
79
  "scope": 3
80
80
  },
81
81
  "dart.onlyAnalyzeProjectsWithOpenFiles": {
@@ -186,6 +186,15 @@ var dart = [
186
186
  "default": true,
187
187
  "markdownDescription": "Whether to show notifications for widget errors that offer Inspect Widget links. This requires that the `#dart.shareDevToolsWithFlutter#` setting is also enabled.",
188
188
  "scope": 3
189
+ },
190
+ "dart.customDevToolsUri": {
191
+ "type": [
192
+ "null",
193
+ "string"
194
+ ],
195
+ "default": null,
196
+ "description": "A custom URI to use for launching DevTools. This setting is intended for use by Dart DevTools developers.",
197
+ "scope": 6
189
198
  }
190
199
  }
191
200
  },
@@ -196,7 +205,7 @@ var dart = [
196
205
  "dart.analysisServerFolding": {
197
206
  "type": "boolean",
198
207
  "default": true,
199
- "description": "Whether to use folding data from the Dart analysis server instead of the built-in VS Code indent-based folding.",
208
+ "description": "Whether to use folding data from the Dart Analysis Server instead of the built-in VS Code indent-based folding.",
200
209
  "scope": 3
201
210
  },
202
211
  "dart.autoImportCompletions": {
@@ -588,7 +597,7 @@ var dart = [
588
597
  "string"
589
598
  ],
590
599
  "default": null,
591
- "description": "The path to a log file for very detailed logging in the Dart analysis server that may be useful when trying to diagnose analysis server issues.",
600
+ "description": "The path to a log file for very detailed logging in the Dart Analysis Server that may be useful when trying to diagnose Analysis Server issues.",
592
601
  "scope": 6
593
602
  },
594
603
  "dart.analyzerLogFile": {
@@ -597,7 +606,7 @@ var dart = [
597
606
  "string"
598
607
  ],
599
608
  "default": null,
600
- "description": "The path to a log file for communication between Dart Code and the analysis server.",
609
+ "description": "The path to a log file for communication between Dart Code and the Analysis Server.",
601
610
  "scope": 6
602
611
  },
603
612
  "dart.dapLogFile": {
@@ -780,6 +789,12 @@ var dart = [
780
789
  "description": "The protocol to use for the Dart Debug Extension backend service and injected client. Using WebSockets can improve performance but may fail when connecting through some proxy servers.",
781
790
  "scope": 3
782
791
  },
792
+ "dart.debugSdkLibraries": {
793
+ "type": "boolean",
794
+ "default": false,
795
+ "markdownDescription": "Whether to mark Dart SDK libraries (`dart:*`) as debuggable, enabling stepping into them while debugging.",
796
+ "scope": 3
797
+ },
783
798
  "dart.debugExternalPackageLibraries": {
784
799
  "type": "boolean",
785
800
  "default": false,
@@ -870,6 +885,24 @@ var dart = [
870
885
  "items": {
871
886
  "type": "string"
872
887
  }
888
+ },
889
+ "dart.customDartDapPath": {
890
+ "type": [
891
+ "null",
892
+ "string"
893
+ ],
894
+ "default": null,
895
+ "description": "The path to a custom Dart Debug Adapter. This setting is intended for use by Dart Debug Adapter developers.",
896
+ "scope": 6
897
+ },
898
+ "dart.customFlutterDapPath": {
899
+ "type": [
900
+ "null",
901
+ "string"
902
+ ],
903
+ "default": null,
904
+ "description": "The path to a custom Flutter Debug Adapter. This setting is intended for use by Dart Debug Adapter developers.",
905
+ "scope": 6
873
906
  }
874
907
  }
875
908
  },
@@ -901,12 +934,6 @@ var dart = [
901
934
  },
902
935
  "scope": 6
903
936
  },
904
- "dart.debugSdkLibraries": {
905
- "type": "boolean",
906
- "default": false,
907
- "markdownDescription": "Whether to mark Dart SDK libraries (`dart:*`) as debuggable, enabling stepping into them while debugging.",
908
- "scope": 3
909
- },
910
937
  "dart.flutterSdkPath": {
911
938
  "type": [
912
939
  "null",
@@ -996,9 +1023,15 @@ var dart = [
996
1023
  "dart.previewBazelWorkspaceCustomScripts": {
997
1024
  "type": "boolean",
998
1025
  "default": false,
999
- "markdownDescription": "EXPERIMENTAL: Whether to look for custom script definitions at `dart/config/intellij-plugins/flutter.json` in Bazel workspaces. Currently supported for macOS and Linux only.",
1026
+ "markdownDescription": "EXPERIMENTAL: Whether to look for custom script definitions at `dart/config/ide/flutter.json` in Bazel workspaces. Currently supported for macOS and Linux only.",
1000
1027
  "scope": 3
1001
1028
  },
1029
+ "dart.daemonPort": {
1030
+ "type": "number",
1031
+ "default": false,
1032
+ "markdownDescription": "EXPERIMENTAL: The port where flutter daemon can be accessed if daemon is run remotely. This setting is intended for use by Google developers.",
1033
+ "scope": 4
1034
+ },
1002
1035
  "dart.previewCommitCharacters": {
1003
1036
  "type": "boolean",
1004
1037
  "default": false,
@@ -1,7 +1 @@
1
1
  export declare function loadConfigurationForExtension(extensionId: string): Promise<void>;
2
- /**
3
- * comes from https://github.com/microsoft/vscode/blob/16d0a319b28caa4b6cf4e6801fd508282b7533e0/src/vs/workbench/contrib/files/browser/files.contribution.ts#L132
4
- * Required by the Lua language server
5
- */
6
- export declare const FILES_EXCLUDE_CONFIG = "files.exclude";
7
- export declare const FILES_ASSOCIATIONS_CONFIG = "files.associations";
@@ -1,4 +1,3 @@
1
- import { _ as _objectSpread2 } from '../_rollupPluginBabelHelpers.js';
2
1
  import * as monaco from 'monaco-editor/esm/vs/editor/editor.api';
3
2
 
4
3
  // Generated file, do not modify
@@ -138,65 +137,5 @@ async function loadConfigurationForExtension(extensionId) {
138
137
  const configuration = await loader$1();
139
138
  configurationRegistry.registerConfigurations(configuration);
140
139
  }
141
- /**
142
- * comes from https://github.com/microsoft/vscode/blob/16d0a319b28caa4b6cf4e6801fd508282b7533e0/src/vs/workbench/contrib/files/browser/files.contribution.ts#L132
143
- * Required by the Lua language server
144
- */
145
-
146
- const FILES_EXCLUDE_CONFIG = 'files.exclude';
147
- const FILES_ASSOCIATIONS_CONFIG = 'files.associations';
148
- const ConfigurationScope = monaco.extra.ConfigurationScope;
149
- const nls = {
150
- localize: (key, defaultValue) => defaultValue
151
- };
152
- configurationRegistry.registerConfiguration({
153
- id: 'files',
154
- order: 9,
155
- title: 'Files',
156
- type: 'object',
157
- properties: {
158
- [FILES_EXCLUDE_CONFIG]: {
159
- type: 'object',
160
- markdownDescription: nls.localize('exclude', 'Configure glob patterns for excluding files and folders. For example, the file Explorer decides which files and folders to show or hide based on this setting. Refer to the `#search.exclude#` setting to define search specific excludes. Read more about glob patterns [here](https://code.visualstudio.com/docs/editor/codebasics#_advanced-search-options).'),
161
- default: _objectSpread2(_objectSpread2({}, {
162
- '**/.git': true,
163
- '**/.svn': true,
164
- '**/.hg': true,
165
- '**/CVS': true,
166
- '**/.DS_Store': true,
167
- '**/Thumbs.db': true
168
- }), {
169
- '**/*.crswap': true
170
- /* filter out swap files used for local file access */
171
-
172
- } ),
173
- scope: ConfigurationScope.RESOURCE,
174
- additionalProperties: {
175
- anyOf: [{
176
- type: 'boolean',
177
- description: nls.localize('files.exclude.boolean', 'The glob pattern to match file paths against. Set to true or false to enable or disable the pattern.')
178
- }, {
179
- type: 'object',
180
- properties: {
181
- when: {
182
- type: 'string',
183
- // expression ({ "**/*.js": { "when": "$(basename).js" } })
184
- pattern: '\\w*\\$\\(basename\\)\\w*',
185
- default: '$(basename).ext',
186
- description: nls.localize('files.exclude.when', 'Additional check on the siblings of a matching file. Use $(basename) as variable for the matching file name.')
187
- }
188
- }
189
- }]
190
- }
191
- },
192
- [FILES_ASSOCIATIONS_CONFIG]: {
193
- type: 'object',
194
- markdownDescription: nls.localize('associations', 'Configure file associations to languages (e.g. `"*.extension": "html"`). These have precedence over the default associations of the languages installed.'),
195
- additionalProperties: {
196
- type: 'string'
197
- }
198
- }
199
- }
200
- });
201
140
 
202
- export { FILES_ASSOCIATIONS_CONFIG, FILES_EXCLUDE_CONFIG, loadConfigurationForExtension };
141
+ export { loadConfigurationForExtension };
@@ -2,6 +2,9 @@ import * as monaco from 'monaco-editor/esm/vs/editor/editor.api';
2
2
  import 'monaco-editor/esm/vs/language/html/monaco.contribution';
3
3
  import { r as registerConfigurations, g as getConfiguration, o as onConfigurationChanged } from '../index.js';
4
4
  import { r as registerWorkerLoader } from '../worker.js';
5
+ import 'vscode/services';
6
+ import 'vscode/service-override/configuration';
7
+ import '../_rollupPluginBabelHelpers.js';
5
8
 
6
9
  const workerLoader = async () => (await import(
7
10
  /* webpackChunkName: "MonacoHtmlWorker" */
@@ -30,11 +33,15 @@ registerConfigurations([{
30
33
  }
31
34
  }
32
35
  }]);
33
- let autoClosingTags = getConfiguration(undefined, 'html.autoClosingTags');
34
- onConfigurationChanged(e => {
35
- if (e.affectsConfiguration('html.autoClosingTags')) {
36
- autoClosingTags = getConfiguration(undefined, 'html.autoClosingTags');
37
- }
36
+ let autoClosingTags = false;
37
+ setTimeout(() => {
38
+ // In a timeout so the service can be overriden
39
+ autoClosingTags = getConfiguration(undefined, 'html.autoClosingTags');
40
+ onConfigurationChanged(e => {
41
+ if (e.affectsConfiguration('html.autoClosingTags')) {
42
+ autoClosingTags = getConfiguration(undefined, 'html.autoClosingTags');
43
+ }
44
+ });
38
45
  });
39
46
 
40
47
  function autoCloseHtmlTags(editor) {
@@ -101,14 +108,17 @@ function autoCloseHtmlTags(editor) {
101
108
  return disposableStore;
102
109
  }
103
110
 
104
- const codeEditors = monaco.extra.StandaloneServices.get(monaco.extra.ICodeEditorService).listCodeEditors();
111
+ setTimeout(() => {
112
+ // In a timeout so the service can be overriden
113
+ const codeEditors = monaco.extra.StandaloneServices.get(monaco.extra.ICodeEditorService).listCodeEditors();
105
114
 
106
- for (const editor of codeEditors) {
107
- autoCloseHtmlTags(editor);
108
- }
115
+ for (const editor of codeEditors) {
116
+ autoCloseHtmlTags(editor);
117
+ }
109
118
 
110
- monaco.editor.onDidCreateEditor(editor => {
111
- autoCloseHtmlTags(editor);
119
+ monaco.editor.onDidCreateEditor(editor => {
120
+ autoCloseHtmlTags(editor);
121
+ });
112
122
  });
113
123
  /**
114
124
  * End autoclosing html tags
package/dist/index.js CHANGED
@@ -1,4 +1,7 @@
1
1
  import * as monaco from 'monaco-editor/esm/vs/editor/editor.api';
2
+ import { IConfigurationService } from 'vscode/services';
3
+ import 'vscode/service-override/configuration';
4
+ import { _ as _objectSpread2 } from './_rollupPluginBabelHelpers.js';
2
5
 
3
6
  var configurationDefaults = {
4
7
  "[go]": {
@@ -1216,29 +1219,100 @@ var extensions = {
1216
1219
  semanticTokenModifiers: semanticTokenModifiers
1217
1220
  };
1218
1221
 
1222
+ const configurationRegistry$1 = monaco.extra.Registry.as(monaco.extra.ConfigurationExtensions.Configuration);
1223
+ /**
1224
+ * comes from https://github.com/microsoft/vscode/blob/16d0a319b28caa4b6cf4e6801fd508282b7533e0/src/vs/workbench/contrib/files/browser/files.contribution.ts#L132
1225
+ * files.exclude and files.associations are required by the Lua language server
1226
+ */
1227
+
1228
+ const FILES_EXCLUDE_CONFIG = 'files.exclude';
1229
+ const FILES_ASSOCIATIONS_CONFIG = 'files.associations';
1230
+ const ConfigurationScope = monaco.extra.ConfigurationScope;
1231
+ const nls = {
1232
+ localize: (key, defaultValue) => defaultValue
1233
+ };
1234
+ configurationRegistry$1.registerConfiguration({
1235
+ id: 'files',
1236
+ order: 9,
1237
+ title: 'Files',
1238
+ type: 'object',
1239
+ properties: {
1240
+ 'files.eol': {
1241
+ type: 'string',
1242
+ enum: ['\n', '\r\n', 'auto'],
1243
+ enumDescriptions: [nls.localize('eol.LF', 'LF'), nls.localize('eol.CRLF', 'CRLF'), nls.localize('eol.auto', 'Uses operating system specific end of line character.')],
1244
+ default: 'auto',
1245
+ description: nls.localize('eol', 'The default end of line character.'),
1246
+ scope: ConfigurationScope.LANGUAGE_OVERRIDABLE
1247
+ },
1248
+ [FILES_EXCLUDE_CONFIG]: {
1249
+ type: 'object',
1250
+ markdownDescription: nls.localize('exclude', 'Configure glob patterns for excluding files and folders. For example, the file Explorer decides which files and folders to show or hide based on this setting. Refer to the `#search.exclude#` setting to define search specific excludes. Read more about glob patterns [here](https://code.visualstudio.com/docs/editor/codebasics#_advanced-search-options).'),
1251
+ default: _objectSpread2(_objectSpread2({}, {
1252
+ '**/.git': true,
1253
+ '**/.svn': true,
1254
+ '**/.hg': true,
1255
+ '**/CVS': true,
1256
+ '**/.DS_Store': true,
1257
+ '**/Thumbs.db': true
1258
+ }), {
1259
+ '**/*.crswap': true
1260
+ /* filter out swap files used for local file access */
1261
+
1262
+ } ),
1263
+ scope: ConfigurationScope.RESOURCE,
1264
+ additionalProperties: {
1265
+ anyOf: [{
1266
+ type: 'boolean',
1267
+ description: nls.localize('files.exclude.boolean', 'The glob pattern to match file paths against. Set to true or false to enable or disable the pattern.')
1268
+ }, {
1269
+ type: 'object',
1270
+ properties: {
1271
+ when: {
1272
+ type: 'string',
1273
+ // expression ({ "**/*.js": { "when": "$(basename).js" } })
1274
+ pattern: '\\w*\\$\\(basename\\)\\w*',
1275
+ default: '$(basename).ext',
1276
+ description: nls.localize('files.exclude.when', 'Additional check on the siblings of a matching file. Use $(basename) as variable for the matching file name.')
1277
+ }
1278
+ }
1279
+ }]
1280
+ }
1281
+ },
1282
+ [FILES_ASSOCIATIONS_CONFIG]: {
1283
+ type: 'object',
1284
+ markdownDescription: nls.localize('associations', 'Configure file associations to languages (e.g. `"*.extension": "html"`). These have precedence over the default associations of the languages installed.'),
1285
+ additionalProperties: {
1286
+ type: 'string'
1287
+ }
1288
+ }
1289
+ }
1290
+ });
1291
+
1219
1292
  const configurationRegistry = monaco.extra.Registry.as(monaco.extra.ConfigurationExtensions.Configuration);
1220
1293
  configurationRegistry.registerDefaultConfigurations([{
1221
1294
  overrides: {
1222
1295
  'editor.codeLens': false,
1223
1296
  'editor.fontSize': 12,
1224
1297
  'editor.maxTokenizationLineLength': 1000,
1225
- 'editor.quickSuggestions': false
1298
+ 'editor.quickSuggestions': false,
1299
+ 'files.eol': '\n'
1226
1300
  }
1227
1301
  }]);
1228
1302
  configurationRegistry.registerDefaultConfigurations([{
1229
1303
  overrides: extensions.configurationDefaults
1230
1304
  }]);
1231
- const simpleConfigurationService = monaco.extra.StandaloneServices.get(monaco.extra.IConfigurationService);
1232
- const onConfigurationChanged = simpleConfigurationService.onDidChangeConfiguration;
1305
+ function onConfigurationChanged(listener) {
1306
+ const configurationService = monaco.extra.StandaloneServices.get(IConfigurationService);
1307
+ return configurationService.onDidChangeConfiguration(listener);
1308
+ }
1233
1309
  function getConfiguration(language) {
1234
1310
  let section = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'editor';
1235
- return simpleConfigurationService.getValue(section, {
1311
+ const configurationService = monaco.extra.StandaloneServices.get(IConfigurationService);
1312
+ return configurationService.getValue(section, {
1236
1313
  overrideIdentifier: language
1237
1314
  });
1238
1315
  }
1239
- function updateUserConfiguration(configurationJson) {
1240
- simpleConfigurationService.updateUserConfiguration(configurationJson);
1241
- }
1242
1316
  function registerConfigurations(configurations, validate) {
1243
1317
  configurationRegistry.registerConfigurations(configurations, validate);
1244
1318
  }
@@ -1248,4 +1322,4 @@ function registerDefaultConfigurations(defaultConfigurations) {
1248
1322
  })));
1249
1323
  }
1250
1324
 
1251
- export { registerDefaultConfigurations as a, extensions as e, getConfiguration as g, onConfigurationChanged as o, registerConfigurations as r, updateUserConfiguration as u };
1325
+ export { registerDefaultConfigurations as a, extensions as e, getConfiguration as g, onConfigurationChanged as o, registerConfigurations as r };