if (properties) {
if (external[propertyName] !== undefined) {
result[propertyName] = Objects.deepClone(external[propertyName]);
}
}
if (Types.isString(external.taskName)) {
Frontier kind: Joint frontier
unlabeled · c_223613d743b6
1 test · 21104 LOC · 80 files · introduces 1 test · 93 LOC · 2 files
The orange circle is the focus. Violet and green circles are every ancestor and descendant, broader and narrower, at any distance; blue squares and pink diamonds are the introduced files and exact introduced tests of every visible concept, not only the focus's. Arrows point from broader to narrower concepts and bridge only concepts omitted from this view. Undirected links show source or test introduction. Concept and file size follows LOC; exact test nodes use test-count units.
Introduced files, introduced tests, and structurally relevant concept specialization
In the embedded map, ordinary wheel input scrolls the page; use the visible controls to zoom and drag to pan. Open the full-screen map for canvas navigation: wheel pans, Ctrl/Command plus wheel zooms, and arrow keys pan when this region is focused. On touch screens, open the full-screen map to pan or pinch. If JavaScript or WebGL is unavailable, use the native relationship evidence on this page.
Graph controls are ready.
Interactive rendering requires JavaScript and WebGL. Use the native relationship evidence on this page while the interactive map is unavailable.
Every exact file and test below is linked only from the concept that introduces it.
mocha:v1|namespace=vscode@05c208e9e28d8c1c723fa08f85e2b7a96092e8e5|file=vs/base/test/common/charCode.test|title=CharCode has good values|occurrence=1mocha:v1|namespace=vscode@05c208e9e28d8c1c723fa08f85e2b7a96092e8e5|file=vs/base/test/common/path.test|title=Paths (Node Implementation) path|occurrence=1mocha:v1|namespace=vscode@05c208e9e28d8c1c723fa08f85e2b7a96092e8e5|file=vs/base/test/common/uri.test|title=URI File paths containing apostrophes break URI parsing and cannot be opened #276075|occurrence=1mocha:v1|namespace=vscode@05c208e9e28d8c1c723fa08f85e2b7a96092e8e5|file=vs/base/test/common/uri.test|title=URI URI#file, win-speciale|occurrence=1Every collected test enters the hierarchy at exactly one concept.
1 test introduced at this concept.
Every collected source range enters the hierarchy at exactly one concept.
2 files ranked by introduced lines: 93 introduced LOC across 20 ranges. Expand a file to inspect source; the > gutter marks introduced lines.
if (properties) {
if (external[propertyName] !== undefined) {
result[propertyName] = Objects.deepClone(external[propertyName]);
}
}
if (Types.isString(external.taskName)) {
export function from(this: void, external: IConfiguringTask, context: IParseContext, index: number, source: TaskConfigSource, registry?: Partial<ITaskDefinitionRegistry>): Tasks.ConfiguringTask | undefined {
return undefined;
}
const customize = (external as ICustomizeShape).customize;
if (!type && !customize) {
context.problemReporter.error(nls.localize('ConfigurationParser.noTaskType', 'Error: tasks configuration must have a type property. The configuration will be ignored.\n{0}\n', JSON.stringify(external, null, 4)));
return undefined;
}
const typeDeclaration = type ? registry?.get?.(type) || TaskDefinitionRegistry.get(type) : undefined;
taskConfiguration.ts
if (!typeDeclaration) {
const message = nls.localize('ConfigurationParser.noTypeDefinition', 'Error: there is no registered task type \'{0}\'. Did you miss installing an extension that provides a corresponding task provider?', type);
context.problemReporter.error(message);
return undefined;
}
if (Types.isString(customize)) {
if (customize.indexOf(grunt) === 0) {
identifier = { type: 'grunt', task: customize.substring(grunt.length) };
identifier = { type: 'typescript', tsconfig: customize.substring(typescript.length + 6) };
}
if (Types.isString(external.type)) {
identifier = external as Tasks.ITaskIdentifier;
}
}
if (identifier === undefined) {
context.problemReporter.error(nls.localize(
'ConfigurationParser.missingType',
return undefined;
}
const taskIdentifier: Tasks.KeyedTaskIdentifier | undefined = Tasks.TaskDefinition.createTaskIdentifier(identifier, context.problemReporter);
taskConfiguration.ts
if (taskIdentifier === undefined) {
context.problemReporter.error(nls.localize(
'ConfigurationParser.incorrectType',
return undefined;
}
workspaceFolder: context.workspaceFolder,
file: '.vscode/tasks.json',
index,
element: external
};
let taskSource: Tasks.FileBasedTaskSource;
switch (source) {
case TaskConfigSource.User: {
taskSource = { kind: Tasks.TaskSourceKind.User, config: configElement, label };
break;
}
taskSource = { kind: Tasks.TaskSourceKind.WorkspaceFile, config: configElement, label };
break;
}
taskSource = { kind: Tasks.TaskSourceKind.Workspace, config: configElement, label };
break;
}
}
const result: Tasks.ConfiguringTask = new Tasks.ConfiguringTask(
`${typeDeclaration.extensionId}.${taskIdentifier._key}`,
taskSource,
undefined,
type,
taskIdentifier,
RunOptions.fromConfiguration(external.runOptions),
{ hide: external.hide, inAgents: external.inAgents }
);
const configuration = ConfigurationProperties.from(external as IConfigurationProperties & { [key: string]: unknown }, context, true, source, typeDeclaration.properties);
result.addTaskLoadMessages(configuration.errors);
if (configuration.value) {
result.configurationProperties = Object.assign(result.configurationProperties, configuration.value);
if (result.configurationProperties.name) {
result._label = result.configurationProperties.name;
} else {
let label = result.configures.type;
if (typeDeclaration.required && typeDeclaration.required.length > 0) {
result._label = label;
}
result.configurationProperties.identifier = taskIdentifier._key;
}
}
return result;
}
}
}
} else {
const configuredTask = ConfiguringTask.from(external, context, index, source, registry);
taskConfiguration.ts
if (configuredTask) {
configuredTask.addTaskLoadMessages(context.taskLoadIssues);
result.configured.push(configuredTask);
}
}
context.taskLoadIssues = Objects.deepClone(baseLoadIssues);
}
}
if (type) {
}
this.runOptions = runOptions;
this.configurationProperties = configurationProperties;
public constructor(id: string, source: FileBasedTaskSource, label: string | undefined, type: string | undefined,
configures: KeyedTaskIdentifier, runOptions: IRunOptions, configurationProperties: IConfigurationProperties) {
tasks.ts
super(id, label, type, runOptions, configurationProperties, source);
this._source = source;
this.configures = configures;
}
public static is(value: unknown): value is ConfiguringTask {
export namespace KeyedTaskIdentifier {
function sortedStringify(literal: Record<string, unknown>): string {
let result: string = '';
for (const key of keys) {
let stringified = literal[key];
if (stringified instanceof Object) {
stringified = sortedStringify(stringified as Record<string, unknown>);
stringified = stringified.replace(/,/g, ',,');
}
result += key + ',' + stringified + ',';
}
return result;
}
export function create(value: ITaskIdentifier): KeyedTaskIdentifier {
const result = { _key: resultKey, type: value.taskType as string };
Object.assign(result, value);
return result;
}
}
export namespace TaskDefinition {
export function createTaskIdentifier(external: ITaskIdentifier, reporter: { error(message: string): void }): KeyedTaskIdentifier | undefined {
if (definition === undefined) {
// We have no task definition so we can't sanitize the literal. Take it as is
const copy = Objects.deepClone(external);
delete copy._key;
return KeyedTaskIdentifier.create(copy);
}
const literal: { type: string;[name: string]: unknown } = Object.create(null);