mirror of
https://github.com/microsoft/vscode.git
synced 2026-02-28 13:46:17 +00:00
Memoize TS API version checks
This commit is contained in:
@@ -7,6 +7,9 @@ import * as semver from 'semver';
|
||||
import * as nls from 'vscode-nls';
|
||||
const localize = nls.loadMessageBundle();
|
||||
|
||||
import { memoize } from './memoize';
|
||||
|
||||
|
||||
export default class API {
|
||||
public static readonly defaultVersion = new API('1.0.0', '1.0.0');
|
||||
|
||||
@@ -29,50 +32,62 @@ export default class API {
|
||||
private readonly version: string
|
||||
) { }
|
||||
|
||||
@memoize
|
||||
public has203Features(): boolean {
|
||||
return semver.gte(this.version, '2.0.3');
|
||||
}
|
||||
|
||||
@memoize
|
||||
public has206Features(): boolean {
|
||||
return semver.gte(this.version, '2.0.6');
|
||||
}
|
||||
|
||||
@memoize
|
||||
public has208Features(): boolean {
|
||||
return semver.gte(this.version, '2.0.8');
|
||||
}
|
||||
|
||||
@memoize
|
||||
public has213Features(): boolean {
|
||||
return semver.gte(this.version, '2.1.3');
|
||||
}
|
||||
|
||||
@memoize
|
||||
public has220Features(): boolean {
|
||||
return semver.gte(this.version, '2.2.0');
|
||||
}
|
||||
|
||||
@memoize
|
||||
public has222Features(): boolean {
|
||||
return semver.gte(this.version, '2.2.2');
|
||||
}
|
||||
|
||||
@memoize
|
||||
public has230Features(): boolean {
|
||||
return semver.gte(this.version, '2.3.0');
|
||||
}
|
||||
|
||||
@memoize
|
||||
public has234Features(): boolean {
|
||||
return semver.gte(this.version, '2.3.4');
|
||||
}
|
||||
|
||||
@memoize
|
||||
public has240Features(): boolean {
|
||||
return semver.gte(this.version, '2.4.0');
|
||||
}
|
||||
|
||||
@memoize
|
||||
public has250Features(): boolean {
|
||||
return semver.gte(this.version, '2.5.0');
|
||||
}
|
||||
|
||||
@memoize
|
||||
public has260Features(): boolean {
|
||||
return semver.gte(this.version, '2.6.0');
|
||||
}
|
||||
|
||||
@memoize
|
||||
public has262Features(): boolean {
|
||||
return semver.gte(this.version, '2.6.2');
|
||||
}
|
||||
|
||||
34
extensions/typescript/src/utils/memoize.ts
Normal file
34
extensions/typescript/src/utils/memoize.ts
Normal file
@@ -0,0 +1,34 @@
|
||||
/*---------------------------------------------------------------------------------------------
|
||||
* Copyright (c) Microsoft Corporation. All rights reserved.
|
||||
* Licensed under the MIT License. See License.txt in the project root for license information.
|
||||
*--------------------------------------------------------------------------------------------*/
|
||||
|
||||
export function memoize(_target: any, key: string, descriptor: any) {
|
||||
let fnKey: string | undefined = undefined;
|
||||
let fn: Function | undefined = undefined;
|
||||
|
||||
if (typeof descriptor.value === 'function') {
|
||||
fnKey = 'value';
|
||||
fn = descriptor.value;
|
||||
} else if (typeof descriptor.get === 'function') {
|
||||
fnKey = 'get';
|
||||
fn = descriptor.get;
|
||||
} else {
|
||||
throw new Error('not supported');
|
||||
}
|
||||
|
||||
const memoizeKey = `$memoize$${key}`;
|
||||
|
||||
descriptor[fnKey] = function (...args: any[]) {
|
||||
if (!this.hasOwnProperty(memoizeKey)) {
|
||||
Object.defineProperty(this, memoizeKey, {
|
||||
configurable: false,
|
||||
enumerable: false,
|
||||
writable: false,
|
||||
value: fn!.apply(this, args)
|
||||
});
|
||||
}
|
||||
|
||||
return this[memoizeKey];
|
||||
};
|
||||
}
|
||||
@@ -12,7 +12,8 @@
|
||||
"noUnusedLocals": true,
|
||||
"noUnusedParameters": true,
|
||||
"strict": true,
|
||||
"alwaysStrict": true
|
||||
"alwaysStrict": true,
|
||||
"experimentalDecorators": true
|
||||
},
|
||||
"include": [
|
||||
"src/**/*"
|
||||
|
||||
Reference in New Issue
Block a user