Apply various stylistic fixes

- ESLint config `remcohaszing/typechecking` is extended.
- Various previously disabled ESLint rules have now been enabled.
- Various `any` types have been fixed.
- Removed useless type check of diagnostic code.
- The diagnostics adapter listener has been turned into an actual map.
This commit is contained in:
Remco Haszing 2021-09-02 22:11:00 +02:00
parent 3541f69831
commit 9739d143d3
No known key found for this signature in database
GPG key ID: 40D9F5FE9155FD3C
8 changed files with 53 additions and 31 deletions

View file

@ -1,24 +1,18 @@
extends: remcohaszing extends:
- remcohaszing
- remcohaszing/typechecking
rules: rules:
class-methods-use-this: off
max-classes-per-file: off
no-console: off
no-restricted-globals: off no-restricted-globals: off
no-underscore-dangle: off
no-useless-constructor: off
'@typescript-eslint/naming-convention': off '@typescript-eslint/no-misused-promises': off
'@typescript-eslint/no-parameter-properties': off
'@typescript-eslint/no-shadow': off '@typescript-eslint/no-shadow': off
'@typescript-eslint/prefer-optional-chain': off '@typescript-eslint/no-unnecessary-condition': off
import/no-extraneous-dependencies: off import/no-extraneous-dependencies: off
import/no-unresolved: off import/no-unresolved: off
import/no-webpack-loader-syntax: off
jsdoc/require-jsdoc: off jsdoc/require-jsdoc: off
node/no-extraneous-import: off node/no-extraneous-import: off
node/no-unpublished-import: off
node/no-unsupported-features/es-syntax: off node/no-unsupported-features/es-syntax: off
node/no-unsupported-features/node-builtins: off node/no-unsupported-features/node-builtins: off

View file

@ -31,7 +31,7 @@ npm install monaco-yaml
Import `monaco-yaml` and configure it before an editor instance is created. Import `monaco-yaml` and configure it before an editor instance is created.
```ts ```typescript
import { editor, Uri } from 'monaco-editor'; import { editor, Uri } from 'monaco-editor';
import { setDiagnosticsOptions } from 'monaco-yaml'; import { setDiagnosticsOptions } from 'monaco-yaml';

View file

@ -66,6 +66,7 @@ fs.rm(join(__dirname, 'lib'), { force: true, recursive: true })
}), }),
) )
.catch((error) => { .catch((error) => {
// eslint-disable-next-line no-console
console.error(error); console.error(error);
process.exit(1); process.exit(1);
}); });

View file

@ -121,7 +121,7 @@ fetch('https://www.schemastore.org/api/json/catalog.json').then(async (response)
if (!response.ok) { if (!response.ok) {
return; return;
} }
const catalog: JSONSchemaForSchemaStoreOrgCatalogFiles = await response.json(); const catalog = (await response.json()) as JSONSchemaForSchemaStoreOrgCatalogFiles;
const schemas = [defaultSchema]; const schemas = [defaultSchema];
catalog.schemas.sort((a, b) => a.name.localeCompare(b.name)); catalog.schemas.sort((a, b) => a.name.localeCompare(b.name));
for (const { fileMatch, name, url } of catalog.schemas) { for (const { fileMatch, name, url } of catalog.schemas) {

View file

@ -1,4 +1,30 @@
declare module 'monaco-editor/esm/vs/base/common/cancellation' {
export enum CancellationToken {
None,
}
}
declare module 'monaco-editor/esm/vs/editor/contrib/documentSymbols/documentSymbols' {
import { ITextModel, languages } from 'monaco-editor';
// eslint-disable-next-line import/order
import { CancellationToken } from 'monaco-editor/esm/vs/base/common/cancellation';
export function getDocumentSymbols(
model: ITextModel,
flat: boolean,
token: CancellationToken,
): Promise<languages.DocumentSymbol[]>;
}
declare module 'monaco-editor/esm/vs/editor/editor.worker' {
import { worker } from 'monaco-editor/esm/vs/editor/editor.api';
export function initialize(
fn: (ctx: worker.IWorkerContext, createData: unknown) => unknown,
): void;
}
declare module '*.json' { declare module '*.json' {
declare const uri; declare const uri: string;
export default uri; export default uri;
} }

View file

@ -16,7 +16,7 @@ export type LoadFunc = (file?: string) => LocalizeFunc;
function format(message: string, args: string[]): string { function format(message: string, args: string[]): string {
return args.length === 0 return args.length === 0
? message ? message
: message.replace(/{(\d+)}/g, (match, rest) => { : message.replace(/{(\d+)}/g, (match, rest: number[]) => {
const [index] = rest; const [index] = rest;
return typeof args[index] === 'undefined' ? match : args[index]; return typeof args[index] === 'undefined' ? match : args[index];
}); });

View file

@ -32,9 +32,7 @@ function toSeverity(lsSeverity: ls.DiagnosticSeverity): MarkerSeverity {
} }
} }
function toDiagnostics(resource: Uri, diag: ls.Diagnostic): editor.IMarkerData { function toDiagnostics(diag: ls.Diagnostic): editor.IMarkerData {
const code = typeof diag.code === 'number' ? String(diag.code) : (diag.code as string);
return { return {
severity: toSeverity(diag.severity), severity: toSeverity(diag.severity),
startLineNumber: diag.range.start.line + 1, startLineNumber: diag.range.start.line + 1,
@ -42,7 +40,7 @@ function toDiagnostics(resource: Uri, diag: ls.Diagnostic): editor.IMarkerData {
endLineNumber: diag.range.end.line + 1, endLineNumber: diag.range.end.line + 1,
endColumn: diag.range.end.character + 1, endColumn: diag.range.end.character + 1,
message: diag.message, message: diag.message,
code, code: String(diag.code),
source: diag.source, source: diag.source,
}; };
} }
@ -52,7 +50,7 @@ export function createDiagnosticsAdapter(
getWorker: WorkerAccessor, getWorker: WorkerAccessor,
defaults: languages.yaml.LanguageServiceDefaults, defaults: languages.yaml.LanguageServiceDefaults,
): void { ): void {
const listeners: Record<string, IDisposable> = Object.create(null); const listeners = new Map<string, IDisposable>();
const resetSchema = async (resource: Uri): Promise<void> => { const resetSchema = async (resource: Uri): Promise<void> => {
const worker = await getWorker(); const worker = await getWorker();
@ -62,7 +60,7 @@ export function createDiagnosticsAdapter(
const doValidate = async (resource: Uri, languageId: string): Promise<void> => { const doValidate = async (resource: Uri, languageId: string): Promise<void> => {
const worker = await getWorker(resource); const worker = await getWorker(resource);
const diagnostics = await worker.doValidation(String(resource)); const diagnostics = await worker.doValidation(String(resource));
const markers = diagnostics.map((d) => toDiagnostics(resource, d)); const markers = diagnostics.map(toDiagnostics);
const model = editor.getModel(resource); const model = editor.getModel(resource);
if (model.getModeId() === languageId) { if (model.getModeId() === languageId) {
editor.setModelMarkers(model, languageId, markers); editor.setModelMarkers(model, languageId, markers);
@ -76,10 +74,13 @@ export function createDiagnosticsAdapter(
} }
let handle: ReturnType<typeof setTimeout>; let handle: ReturnType<typeof setTimeout>;
listeners[String(toString)] = model.onDidChangeContent(() => { listeners.set(
clearTimeout(handle); String(model.uri),
handle = setTimeout(() => doValidate(model.uri, modeId), 500); model.onDidChangeContent(() => {
}); clearTimeout(handle);
handle = setTimeout(() => doValidate(model.uri, modeId), 500);
}),
);
doValidate(model.uri, modeId); doValidate(model.uri, modeId);
}; };
@ -87,10 +88,10 @@ export function createDiagnosticsAdapter(
const onModelRemoved = (model: editor.IModel): void => { const onModelRemoved = (model: editor.IModel): void => {
editor.setModelMarkers(model, languageId, []); editor.setModelMarkers(model, languageId, []);
const uriStr = String(model.uri); const uriStr = String(model.uri);
const listener = listeners[uriStr]; const listener = listeners.get(uriStr);
if (listener) { if (listener) {
listener.dispose(); listener.dispose();
delete listeners[uriStr]; listeners.delete(uriStr);
} }
}; };
@ -361,7 +362,7 @@ function toDocumentSymbol(item: ls.DocumentSymbol): languages.DocumentSymbol {
name: item.name, name: item.name,
kind: toSymbolKind(item.kind), kind: toSymbolKind(item.kind),
selectionRange: toRange(item.selectionRange), selectionRange: toRange(item.selectionRange),
children: item.children.map((child) => toDocumentSymbol(child)), children: item.children.map(toDocumentSymbol),
tags: [], tags: [],
}; };
} }
@ -378,7 +379,7 @@ export function createDocumentSymbolProvider(
if (!items) { if (!items) {
return; return;
} }
return items.map((item) => toDocumentSymbol(item)); return items.map(toDocumentSymbol);
}, },
}; };
} }

View file

@ -1,7 +1,7 @@
import { initialize } from 'monaco-editor/esm/vs/editor/editor.worker'; import { initialize } from 'monaco-editor/esm/vs/editor/editor.worker';
import { createYAMLWorker } from './yamlWorker'; import { createYAMLWorker, ICreateData } from './yamlWorker';
self.onmessage = () => { self.onmessage = () => {
initialize((ctx, createData) => Object.create(createYAMLWorker(ctx, createData))); initialize((ctx, createData: ICreateData) => Object.create(createYAMLWorker(ctx, createData)));
}; };