@typescript-eslint/array-type

This commit is contained in:
Alexander T
2019-07-29 18:39:11 +03:00
parent e48123e203
commit 11ec6118fb
13 changed files with 43 additions and 37 deletions

View File

@@ -4,7 +4,7 @@
"warnOnUnsupportedTypeScriptVersion": false,
"ecmaVersion": 6,
"sourceType": "module",
"project": "./src/tsconfig-base.json"
"project": "./tsconfig.eslint.json"
},
"env": {
"browser": false,
@@ -16,11 +16,12 @@
],
"rules": {
"@typescript-eslint/adjacent-overload-signatures": "error",
"@typescript-eslint/array-type": "off",
"@typescript-eslint/array-type": ["error", { "default": "array", "readonly": "generic" }],
"@typescript-eslint/ban-types": "off",
"camelcase": "off",
"@typescript-eslint/camelcase": ["error", { "properties": "never", "allow": ["^[A-Za-z][a-zA-Za-z]+_[A-Za-z]+$"] }],
"@typescript-eslint/class-name-casing": "error",
"@typescript-eslint/consistent-type-assertions": "off",
"@typescript-eslint/consistent-type-definitions": ["error", "interface"],
"@typescript-eslint/explicit-member-accessibility": "off",
"@typescript-eslint/import/order": "off",
@@ -34,13 +35,11 @@
}],
"@typescript-eslint/interface-name-prefix": "error",
"@typescript-eslint/member-ordering": "off",
"@typescript-eslint/no-angle-bracket-type-assertion": "off",
"@typescript-eslint/no-empty-interface": "off",
"@typescript-eslint/no-explicit-any": "off",
"@typescript-eslint/no-inferrable-types": "error",
"@typescript-eslint/no-misused-new": "error",
"@typescript-eslint/no-namespace": "off",
"@typescript-eslint/no-object-literal-type-assertion": "off",
"@typescript-eslint/no-parameter-properties": "off",
"@typescript-eslint/no-this-alias": "error",
"@typescript-eslint/no-unnecessary-qualifier": "error",

View File

@@ -54,9 +54,9 @@
"@types/through2": "latest",
"@types/travis-fold": "latest",
"@types/xml2js": "^0.4.0",
"@typescript-eslint/eslint-plugin": "1.13.0",
"@typescript-eslint/experimental-utils": "1.13.0",
"@typescript-eslint/parser": "1.13.0",
"@typescript-eslint/eslint-plugin": "2.0.0-alpha.4",
"@typescript-eslint/experimental-utils": "2.0.0-alpha.4",
"@typescript-eslint/parser": "2.0.0-alpha.4",
"async": "latest",
"azure-devops-node-api": "^8.0.0",
"browser-resolve": "^1.11.2",
@@ -68,7 +68,7 @@
"eslint": "6.1.0",
"eslint-formatter-autolinkable-stylish": "1.0.0",
"eslint-plugin-import": "2.18.2",
"eslint-plugin-jsdoc": "15.6.1",
"eslint-plugin-jsdoc": "15.7.2",
"eslint-plugin-no-null": "1.0.2",
"fancy-log": "latest",
"fs-extra": "^6.0.1",

View File

@@ -20,7 +20,7 @@ fs.readFile("src/compiler/diagnosticMessages.json", "utf-8", (err, data) => {
fs.readdir(baseDir, (err, files) => {
files = files.filter(f => f.indexOf(".errors.txt") > 0);
const tasks: Array<(callback: () => void) => void> = [];
const tasks: ((callback: () => void) => void)[] = [];
files.forEach(f => tasks.push(done => {
fs.readFile(baseDir + f, "utf-8", (err, baseline) => {
if (err) throw err;

View File

@@ -996,7 +996,7 @@ namespace ts {
}
}
function addToAffectedFilesPendingEmit(state: BuilderProgramState, affectedFilesPendingEmit: readonly Path[]) {
function addToAffectedFilesPendingEmit(state: BuilderProgramState, affectedFilesPendingEmit: ReadonlyArray<Path>) {
state.affectedFilesPendingEmit = concatenate(state.affectedFilesPendingEmit, affectedFilesPendingEmit);
// affectedFilesPendingEmitIndex === undefined
// - means the emit state.affectedFilesPendingEmit was undefined before adding current affected files

View File

@@ -7402,7 +7402,7 @@ namespace ts {
setStructuredTypeMembers(type, emptySymbols, callSignatures || emptyArray, constructSignatures || emptyArray, stringIndexInfo, numberIndexInfo);
}
function appendSignatures(signatures: Signature[] | undefined, newSignatures: readonly Signature[]) {
function appendSignatures(signatures: Signature[] | undefined, newSignatures: ReadonlyArray<Signature>) {
for (const sig of newSignatures) {
if (!signatures || every(signatures, s => !compareSignaturesIdentical(s, sig, /*partialMatch*/ false, /*ignoreThisTypes*/ false, /*ignoreReturnTypes*/ false, compareTypesIdentical))) {
signatures = append(signatures, sig);
@@ -13226,7 +13226,7 @@ namespace ts {
return result;
}
function propagateSidebandVarianceFlags(typeArguments: readonly Type[], variances: VarianceFlags[]) {
function propagateSidebandVarianceFlags(typeArguments: ReadonlyArray<Type>, variances: VarianceFlags[]) {
for (let i = 0; i < variances.length; i++) {
const v = variances[i];
if (v & VarianceFlags.Unmeasurable) {
@@ -15677,7 +15677,7 @@ namespace ts {
}
}
function inferFromTypeArguments(sourceTypes: readonly Type[], targetTypes: readonly Type[], variances: readonly VarianceFlags[]) {
function inferFromTypeArguments(sourceTypes: ReadonlyArray<Type>, targetTypes: ReadonlyArray<Type>, variances: ReadonlyArray<VarianceFlags>) {
const count = sourceTypes.length < targetTypes.length ? sourceTypes.length : targetTypes.length;
for (let i = 0; i < count; i++) {
if (i < variances.length && (variances[i] & VarianceFlags.VarianceMask) === VarianceFlags.Contravariant) {

View File

@@ -2200,13 +2200,13 @@ namespace ts {
return result;
}
export function cartesianProduct<T>(arrays: readonly T[][]) {
export function cartesianProduct<T>(arrays: ReadonlyArray<T>[]) {
const result: T[][] = [];
cartesianProductWorker(arrays, result, /*outer*/ undefined, 0);
return result;
}
function cartesianProductWorker<T>(arrays: readonly (readonly T[])[], result: (readonly T[])[], outer: readonly T[] | undefined, index: number) {
function cartesianProductWorker<T>(arrays: ReadonlyArray<ReadonlyArray<T>>, result: (ReadonlyArray<T>)[], outer: ReadonlyArray<T> | undefined, index: number) {
for (const element of arrays[index]) {
let inner: T[];
if (outer) {

View File

@@ -372,7 +372,7 @@ namespace ts {
readonly extendedConfigCache: Map<ExtendedConfigCacheEntry>;
readonly builderPrograms: ConfigFileMap<T>;
readonly diagnostics: ConfigFileMap<readonly Diagnostic[]>;
readonly diagnostics: ConfigFileMap<ReadonlyArray<Diagnostic>>;
readonly projectPendingBuild: ConfigFileMap<ConfigFileProgramReloadLevel>;
readonly projectErrorsReported: ConfigFileMap<true>;
@@ -380,7 +380,7 @@ namespace ts {
readonly moduleResolutionCache: ModuleResolutionCache | undefined;
// Mutable state
buildOrder: readonly ResolvedConfigFileName[] | undefined;
buildOrder: ReadonlyArray<ResolvedConfigFileName> | undefined;
readFileWithCache: (f: string) => string | undefined;
projectCompilerOptions: CompilerOptions;
cache: SolutionBuilderStateCache | undefined;
@@ -524,7 +524,7 @@ namespace ts {
return resolveConfigFileProjectName(resolvePath(state.currentDirectory, name));
}
function createBuildOrder(state: SolutionBuilderState, roots: readonly ResolvedConfigFileName[]): readonly ResolvedConfigFileName[] {
function createBuildOrder(state: SolutionBuilderState, roots: ReadonlyArray<ResolvedConfigFileName>): ReadonlyArray<ResolvedConfigFileName> {
const temporaryMarks = createMap() as ConfigFileMap<true>;
const permanentMarks = createMap() as ConfigFileMap<true>;
const circularityReportStack: string[] = [];
@@ -683,7 +683,7 @@ namespace ts {
readonly kind: InvalidatedProjectKind;
readonly project: ResolvedConfigFileName;
/*@internal*/ readonly projectPath: ResolvedConfigFilePath;
/*@internal*/ readonly buildOrder: readonly ResolvedConfigFileName[];
/*@internal*/ readonly buildOrder: ReadonlyArray<ResolvedConfigFileName>;
/**
* To dispose this project and ensure that all the necessary actions are taken and state is updated accordingly
*/
@@ -750,7 +750,7 @@ namespace ts {
project: ResolvedConfigFileName,
projectPath: ResolvedConfigFilePath,
config: ParsedCommandLine,
buildOrder: readonly ResolvedConfigFileName[]
buildOrder: ReadonlyArray<ResolvedConfigFileName>
): UpdateOutputFileStampsProject {
let updateOutputFileStampsPending = true;
return {
@@ -780,7 +780,7 @@ namespace ts {
projectPath: ResolvedConfigFilePath,
projectIndex: number,
config: ParsedCommandLine,
buildOrder: readonly ResolvedConfigFileName[],
buildOrder: ReadonlyArray<ResolvedConfigFileName>,
): BuildInvalidedProject<T> | UpdateBundleProject<T> {
enum Step {
CreateProgram,
@@ -1195,7 +1195,7 @@ namespace ts {
function getNextInvalidatedProject<T extends BuilderProgram>(
state: SolutionBuilderState<T>,
buildOrder: readonly ResolvedConfigFileName[],
buildOrder: ReadonlyArray<ResolvedConfigFileName>,
reportQueue: boolean
): InvalidatedProject<T> | undefined {
if (!state.projectPendingBuild.size) return undefined;
@@ -1631,7 +1631,7 @@ namespace ts {
projectPath: ResolvedConfigFilePath,
projectIndex: number,
config: ParsedCommandLine,
buildOrder: readonly ResolvedConfigFileName[],
buildOrder: ReadonlyArray<ResolvedConfigFileName>,
buildResult: BuildResultFlags
) {
// Queue only if there are no errors
@@ -1913,7 +1913,7 @@ namespace ts {
);
}
function startWatching(state: SolutionBuilderState, buildOrder: readonly ResolvedConfigFileName[]) {
function startWatching(state: SolutionBuilderState, buildOrder: ReadonlyArray<ResolvedConfigFileName>) {
if (!state.watchAllProjectsPending) return;
state.watchAllProjectsPending = false;
for (const resolved of buildOrder) {
@@ -1990,7 +1990,7 @@ namespace ts {
reportAndStoreErrors(state, proj, [state.configFileCache.get(proj) as Diagnostic]);
}
function reportErrorSummary(state: SolutionBuilderState, buildOrder: readonly ResolvedConfigFileName[]) {
function reportErrorSummary(state: SolutionBuilderState, buildOrder: ReadonlyArray<ResolvedConfigFileName>) {
if (!state.needsSummary || (!state.watch && !state.host.reportErrorSummary)) return;
state.needsSummary = false;
const { diagnostics } = state;
@@ -2014,7 +2014,7 @@ namespace ts {
/**
* Report the build ordering inferred from the current project graph if we're in verbose mode
*/
function reportBuildQueue(state: SolutionBuilderState, buildQueue: readonly ResolvedConfigFileName[]) {
function reportBuildQueue(state: SolutionBuilderState, buildQueue: ReadonlyArray<ResolvedConfigFileName>) {
if (state.options.verbose) {
reportStatus(state, Diagnostics.Projects_in_this_build_Colon_0, buildQueue.map(s => "\r\n * " + relName(state, s)).join(""));
}

View File

@@ -3039,8 +3039,8 @@ namespace ts {
/*@internal*/
export interface EmitTransformers {
scriptTransformers: readonly TransformerFactory<SourceFile | Bundle>[];
declarationTransformers: readonly TransformerFactory<SourceFile | Bundle>[];
scriptTransformers: ReadonlyArray<TransformerFactory<SourceFile | Bundle>>;
declarationTransformers: ReadonlyArray<TransformerFactory<SourceFile | Bundle>>;
}
export interface SourceMapSpan {
@@ -6098,7 +6098,7 @@ namespace ts {
(U extends any ? (k: U) => void : never) extends ((k: infer I) => void) ? I : never;
/* @internal */
type ArgumentDefinitionToFieldUnion<T extends readonly PragmaArgumentSpecification<any>[]> = {
type ArgumentDefinitionToFieldUnion<T extends ReadonlyArray<PragmaArgumentSpecification<any>>> = {
[K in keyof T]: PragmaArgTypeOptional<T[K], T[K] extends {name: infer TName} ? TName extends string ? TName : never : never>
}[Extract<keyof T, number>]; // The mapped type maps over only the tuple members, but this reindex gets _all_ members - by extracting only `number` keys, we get only the tuple members
@@ -6107,7 +6107,7 @@ namespace ts {
*/
/* @internal */
type PragmaArgumentType<KPrag extends keyof ConcretePragmaSpecs> =
ConcretePragmaSpecs[KPrag] extends { args: readonly PragmaArgumentSpecification<any>[] }
ConcretePragmaSpecs[KPrag] extends { args: ReadonlyArray<PragmaArgumentSpecification<any>> }
? UnionToIntersection<ArgumentDefinitionToFieldUnion<ConcretePragmaSpecs[KPrag]["args"]>>
: never;

View File

@@ -11,5 +11,5 @@ interface ObjectConstructor {
* Returns an object created by key-value entries for properties and methods
* @param entries An iterable object that contains key-value entries for properties and methods.
*/
fromEntries(entries: Iterable<readonly any[]>): any;
fromEntries(entries: Iterable<ReadonlyArray<any>>): any;
}

4
src/lib/es5.d.ts vendored
View File

@@ -1341,8 +1341,8 @@ interface ArrayConstructor {
(arrayLength?: number): any[];
<T>(arrayLength: number): T[];
<T>(...items: T[]): T[];
isArray(arg: any): arg is Array<any>;
readonly prototype: Array<any>;
isArray(arg: any): arg is any[];
readonly prototype: any[];
}
declare var Array: ArrayConstructor;

View File

@@ -82,13 +82,13 @@ declare const console: { log(msg: any): void; };`;
return fs;
}
export function verifyOutputsPresent(fs: vfs.FileSystem, outputs: readonly string[]) {
export function verifyOutputsPresent(fs: vfs.FileSystem, outputs: ReadonlyArray<string>) {
for (const output of outputs) {
assert(fs.existsSync(output), `Expect file ${output} to exist`);
}
}
export function verifyOutputsAbsent(fs: vfs.FileSystem, outputs: readonly string[]) {
export function verifyOutputsAbsent(fs: vfs.FileSystem, outputs: ReadonlyArray<string>) {
for (const output of outputs) {
assert.isFalse(fs.existsSync(output), `Expect file ${output} to not exist`);
}

View File

@@ -407,8 +407,8 @@ namespace ts {
function verifyBuildNextResult(
expected: SolutionBuilderResult<ExitStatus> | undefined,
presentOutputs: readonly string[],
absentOutputs: readonly string[]
presentOutputs: ReadonlyArray<string>,
absentOutputs: ReadonlyArray<string>
) {
const project = builder.getNextInvalidatedProject();
const result = project && project.done();

7
tsconfig.eslint.json Normal file
View File

@@ -0,0 +1,7 @@
{
"extends": "./src/tsconfig-base.json",
"include": [
"src/**/*.ts",
"scripts/**/*.ts",
]
}