Skip to content

Commit

Permalink
fix: add new files to list of dependencies in project references (#709)
Browse files Browse the repository at this point in the history
  • Loading branch information
piotr-oles committed Feb 6, 2022
1 parent 74a6afa commit 78b6090
Show file tree
Hide file tree
Showing 3 changed files with 37 additions and 21 deletions.
15 changes: 7 additions & 8 deletions src/typescript/worker/get-dependencies-worker.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,21 +2,20 @@ import type { FilesChange } from '../../files-change';
import type { FilesMatch } from '../../files-match';
import { exposeRpc } from '../../rpc';

import { didConfigFileChanged, didRootFilesChanged, invalidateConfig } from './lib/config';
import {
didConfigFileChanged,
didDependenciesProbablyChanged,
invalidateConfig,
} from './lib/config';
import { getDependencies, invalidateDependencies } from './lib/dependencies';
import { system } from './lib/system';

const getDependenciesWorker = ({
changedFiles = [],
deletedFiles = [],
}: FilesChange): FilesMatch => {
const getDependenciesWorker = (change: FilesChange): FilesMatch => {
system.invalidateCache();

if (didConfigFileChanged({ changedFiles, deletedFiles })) {
if (didConfigFileChanged(change) || didDependenciesProbablyChanged(getDependencies(), change)) {
invalidateConfig();
invalidateDependencies();
} else if (didRootFilesChanged()) {
invalidateDependencies();
}

return getDependencies();
Expand Down
28 changes: 15 additions & 13 deletions src/typescript/worker/get-issues-worker.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,11 +5,12 @@ import { exposeRpc } from '../../rpc';
import { invalidateArtifacts, registerArtifacts } from './lib/artifacts';
import {
didConfigFileChanged,
didDependenciesProbablyChanged,
didRootFilesChanged,
getParseConfigIssues,
invalidateConfig,
} from './lib/config';
import { invalidateDependencies } from './lib/dependencies';
import { getDependencies, invalidateDependencies } from './lib/dependencies';
import { getIssues, invalidateDiagnostics } from './lib/diagnostics';
import {
disablePerformanceIfNeeded,
Expand All @@ -28,15 +29,12 @@ import { dumpTracingLegendIfNeeded } from './lib/tracing';
import { invalidateTsBuildInfo } from './lib/tsbuildinfo';
import { config } from './lib/worker-config';

const getIssuesWorker = async (
{ changedFiles = [], deletedFiles = [] }: FilesChange,
watching: boolean
): Promise<Issue[]> => {
const getIssuesWorker = async (change: FilesChange, watching: boolean): Promise<Issue[]> => {
system.invalidateCache();
invalidateDependencies();

if (didConfigFileChanged({ changedFiles, deletedFiles })) {
if (didConfigFileChanged(change)) {
invalidateConfig();
invalidateDependencies();
invalidateArtifacts();
invalidateDiagnostics();

Expand All @@ -45,11 +43,15 @@ const getIssuesWorker = async (
invalidateSolutionBuilder(true);

invalidateTsBuildInfo();
} else if (didRootFilesChanged()) {
} else if (didDependenciesProbablyChanged(getDependencies(), change)) {
invalidateConfig();
invalidateDependencies();
invalidateArtifacts();

invalidateWatchProgramRootFileNames();
invalidateSolutionBuilder();
if (didRootFilesChanged()) {
invalidateWatchProgramRootFileNames();
invalidateSolutionBuilder();
}
}

registerArtifacts();
Expand All @@ -71,11 +73,11 @@ const getIssuesWorker = async (
}

// simulate file system events
changedFiles.forEach((changedFile) => {
change.changedFiles?.forEach((changedFile) => {
system?.invokeFileChanged(changedFile);
});
deletedFiles.forEach((removedFile) => {
system?.invokeFileDeleted(removedFile);
change.deletedFiles?.forEach((deletedFile) => {
system?.invokeFileDeleted(deletedFile);
});

// wait for all queued events to be processed
Expand Down
15 changes: 15 additions & 0 deletions src/typescript/worker/lib/config.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ import * as path from 'path';
import type * as ts from 'typescript';

import type { FilesChange } from '../../../files-change';
import type { FilesMatch } from '../../../files-match';
import type { Issue } from '../../../issue';
import { forwardSlash } from '../../../utils/path/forward-slash';
import type { TypeScriptConfigOverwrite } from '../../type-script-config-overwrite';
Expand Down Expand Up @@ -171,6 +172,20 @@ export function didConfigFileChanged({ changedFiles = [], deletedFiles = [] }: F
.includes(path.normalize(config.configFile));
}

export function didDependenciesProbablyChanged(
dependencies: FilesMatch,
{ changedFiles = [], deletedFiles = [] }: FilesChange
) {
const didSomeDependencyHasBeenAdded = changedFiles.some(
(changeFile) => !dependencies.files.includes(changeFile)
);
const didSomeDependencyHasBeenDeleted = deletedFiles.some((deletedFile) =>
dependencies.files.includes(deletedFile)
);

return didSomeDependencyHasBeenAdded || didSomeDependencyHasBeenDeleted;
}

export function didRootFilesChanged() {
const [prevConfig, nextConfig] = parseNextConfig();

Expand Down

0 comments on commit 78b6090

Please sign in to comment.