Skip to content

Commit

Permalink
PM comments
Browse files Browse the repository at this point in the history
Signed-off-by: Colin Grant <colin.grant@ericsson.com>
  • Loading branch information
Colin Grant committed Jun 10, 2021
1 parent ea5d25a commit bdcd361
Show file tree
Hide file tree
Showing 4 changed files with 27 additions and 12 deletions.
4 changes: 2 additions & 2 deletions packages/core/src/browser/preferences/preference-service.ts
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@
/* eslint-disable @typescript-eslint/no-explicit-any */

import { injectable, inject, postConstruct } from 'inversify';
import { Event, Emitter, DisposableCollection, Disposable, deepFreeze } from '../../common';
import { Event, Emitter, DisposableCollection, Disposable, deepFreeze, unreachable } from '../../common';
import { Deferred } from '../../common/promise-util';
import { PreferenceProvider, PreferenceProviderDataChange, PreferenceProviderDataChanges, PreferenceResolveResult } from './preference-provider';
import { PreferenceSchemaProvider } from './preference-contribution';
Expand Down Expand Up @@ -504,7 +504,7 @@ export class PreferenceServiceImpl implements PreferenceService {
case PreferenceScope.Folder:
return inspection.workspaceFolderValue;
}
return ((unhandledScope: never): never => { throw new Error('Must handle all enum values!'); })(scope);
unreachable(scope, 'This function should handle all preference scopes.');
}

async updateValue(preferenceName: string, value: any, resourceUri?: string): Promise<void> {
Expand Down
7 changes: 7 additions & 0 deletions packages/core/src/common/types.ts
Original file line number Diff line number Diff line change
Expand Up @@ -67,3 +67,10 @@ export namespace Prioritizeable {
return p2.priority - p.priority;
}
}

/**
* Throws when called and statically make sure that all variants of a type were consumed.
*/
export function unreachable(_never: never, message: string = 'unhandled case'): never {
throw new Error(message);
}
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@ import {
PreferenceChanges,
ExpandableTreeNode,
} from '@theia/core/lib/browser';
import { unreachable } from '@theia/core/lib/common';
import { BaseWidget, DEFAULT_SCROLL_OPTIONS, } from '@theia/core/lib/browser/widgets/widget';
import { PreferenceTreeModel, PreferenceFilterChangeEvent, PreferenceFilterChangeSource } from '../preference-tree-model';
import { PreferenceNodeRendererFactory, GeneralPreferenceNodeRenderer } from './components/preference-node-renderer';
Expand Down Expand Up @@ -99,7 +100,7 @@ export class PreferencesEditorWidget extends BaseWidget implements StatefulWidge
} else if (e.source === PreferenceFilterChangeSource.Schema) {
this.handleSchemaChange(isFiltered);
} else {
((otherSource: never) => { throw new Error('You should handle all possible sources of change!'); })(e.source);
unreachable(e.source, 'This function should handle all sources of change to the preferences display.');
}
this.resetScroll(currentFirstVisible, e.source === PreferenceFilterChangeSource.Search && !isFiltered);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,13 @@ export function bindPreferencesWidgets(bind: interfaces.Bind): void {
id: PreferencesWidget.ID,
createWidget: () => container.get(PreferencesWidget)
})).inSingletonScope();
bind(PreferenceSelectInputRenderer).toSelf();
bind(PreferenceArrayInputRenderer).toSelf();
bind(PreferenceStringInputRenderer).toSelf();
bind(PreferenceBooleanInputRenderer).toSelf();
bind(PreferenceNumberInputRenderer).toSelf();
bind(PreferenceJSONLinkRenderer).toSelf();
bind(PreferenceHeaderRenderer).toSelf();
}

function createPreferencesWidgetContainer(parent: interfaces.Container): Container {
Expand All @@ -57,29 +64,29 @@ function createPreferencesWidgetContainer(parent: interfaces.Container): Contain
child.bind(PreferencesWidget).toSelf();

child.bind(PreferenceNodeRendererFactory).toFactory(({ container }) => (node: Preference.TreeNode) => {
const grandChild = container.createChild();
grandChild.bind(Preference.Node).toConstantValue(node);
const grandchild = container.createChild();
grandchild.bind(Preference.Node).toConstantValue(node);
if (Preference.LeafNode.is(node)) {
if (node.preference.data.enum) {
return grandChild.resolve(PreferenceSelectInputRenderer);
return grandchild.get(PreferenceSelectInputRenderer);
}
const type = Array.isArray(node.preference.data.type) ? node.preference.data.type[0] : node.preference.data.type;
if (type === 'array' && node.preference.data.items?.type === 'string') {
return grandChild.resolve(PreferenceArrayInputRenderer);
return grandchild.get(PreferenceArrayInputRenderer);
}
switch (type) {
case 'string':
return grandChild.resolve(PreferenceStringInputRenderer);
return grandchild.get(PreferenceStringInputRenderer);
case 'boolean':
return grandChild.resolve(PreferenceBooleanInputRenderer);
return grandchild.get(PreferenceBooleanInputRenderer);
case 'number':
case 'integer':
return grandChild.resolve(PreferenceNumberInputRenderer);
return grandchild.get(PreferenceNumberInputRenderer);
default:
return grandChild.resolve(PreferenceJSONLinkRenderer);
return grandchild.get(PreferenceJSONLinkRenderer);
}
} else {
return grandChild.resolve(PreferenceHeaderRenderer);
return grandchild.get(PreferenceHeaderRenderer);
}
});

Expand Down

0 comments on commit bdcd361

Please sign in to comment.