Merge pull request #6448 from microsoft/seanmcm/1_1_0_release

1_1_0 release
This commit is contained in:
Sean McManus
2020-11-05 15:30:17 -08:00
committed by GitHub
130 changed files with 5395 additions and 505 deletions
+3
View File
@@ -0,0 +1,3 @@
# ignore dependency packages
node_modules
*.js.map
+43
View File
@@ -0,0 +1,43 @@
"use strict";
/*---------------------------------------------------------------------------------------------
* Copyright (c) Microsoft Corporation. All rights reserved.
* Licensed under the MIT License. See LICENSE in the project root for license information.
*--------------------------------------------------------------------------------------------*/
Object.defineProperty(exports, "__esModule", { value: true });
exports.Locker = void 0;
const utils_1 = require("../common/utils");
const ActionBase_1 = require("../common/ActionBase");
class Locker extends ActionBase_1.ActionBase {
constructor(github, daysSinceClose, daysSinceUpdate, labels, milestoneName, milestoneId, ignoreLabels, ignoreMilestoneNames, ignoreMilestoneIds, minimumVotes, maximumVotes) {
super(labels, milestoneName, milestoneId, ignoreLabels, ignoreMilestoneNames, ignoreMilestoneIds, minimumVotes, maximumVotes);
this.github = github;
this.daysSinceClose = daysSinceClose;
this.daysSinceUpdate = daysSinceUpdate;
}
async run() {
const closedTimestamp = utils_1.daysAgoToHumanReadbleDate(this.daysSinceClose);
const updatedTimestamp = utils_1.daysAgoToHumanReadbleDate(this.daysSinceUpdate);
const query = this.buildQuery((this.daysSinceClose ? `closed:<${closedTimestamp} ` : "") + (this.daysSinceUpdate ? `updated:<${updatedTimestamp} ` : "") + "is:closed is:unlocked");
for await (const page of this.github.query({ q: query })) {
await Promise.all(page.map(async (issue) => {
const hydrated = await issue.getIssue();
if (!hydrated.locked && hydrated.open === false && this.validateIssue(hydrated)
// TODO: Verify closed and updated timestamps
) {
console.log(`Locking issue ${hydrated.number}`);
await issue.lockIssue();
}
else {
if (hydrated.locked) {
console.log(`Issue ${hydrated.number} is already locked. Ignoring`);
}
else if (hydrated.open) {
console.log(`Issue ${hydrated.number} is open. Ignoring`);
}
}
}));
}
}
}
exports.Locker = Locker;
//# sourceMappingURL=Locker.js.map
+55
View File
@@ -0,0 +1,55 @@
/*---------------------------------------------------------------------------------------------
* Copyright (c) Microsoft Corporation. All rights reserved.
* Licensed under the MIT License. See LICENSE in the project root for license information.
*--------------------------------------------------------------------------------------------*/
import { GitHub, Issue } from '../api/api'
import { daysAgoToHumanReadbleDate } from '../common/utils'
import { ActionBase } from '../common/ActionBase'
export class Locker extends ActionBase {
constructor(
private github: GitHub,
private daysSinceClose: number,
private daysSinceUpdate: number,
labels?: string,
milestoneName?: string,
milestoneId?: string,
ignoreLabels?: string,
ignoreMilestoneNames?: string,
ignoreMilestoneIds?: string,
minimumVotes?: number,
maximumVotes?: number
)
{
super(labels, milestoneName, milestoneId, ignoreLabels, ignoreMilestoneNames, ignoreMilestoneIds, minimumVotes, maximumVotes);
}
async run() {
const closedTimestamp = daysAgoToHumanReadbleDate(this.daysSinceClose)
const updatedTimestamp = daysAgoToHumanReadbleDate(this.daysSinceUpdate)
const query = this.buildQuery((this.daysSinceClose ? `closed:<${closedTimestamp} ` : "") + (this.daysSinceUpdate ? `updated:<${updatedTimestamp} ` : "") + "is:closed is:unlocked");
for await (const page of this.github.query({ q: query })) {
await Promise.all(
page.map(async (issue) => {
const hydrated = await issue.getIssue()
if (!hydrated.locked && hydrated.open === false && this.validateIssue(hydrated)
// TODO: Verify closed and updated timestamps
) {
console.log(`Locking issue ${hydrated.number}`)
await issue.lockIssue()
} else {
if (hydrated.locked) {
console.log(`Issue ${hydrated.number} is already locked. Ignoring`)
} else if (hydrated.open) {
console.log(`Issue ${hydrated.number} is open. Ignoring`)
}
}
}),
)
}
}
}
+33
View File
@@ -0,0 +1,33 @@
name: Locker
description: Lock closed issues and PRs after some time has passed
inputs:
token:
description: GitHub token with issue, comment, and label read/write permissions
default: ${{ github.token }}
daysSinceClose:
description: Days to wait since closing before locking the item
required: true
daysSinceUpdate:
description: days to wait since the last interaction before locking the item
required: true
milestoneName:
description: items with these milestones will be considered (name only, must match ID)
milestoneId:
description: items with these milestones will be considered (id only, must match name)
labels:
description: items with these labels will not be considered. May be "*".
ignoreMilestoneNames:
description: items with these milestones will not be considered (names only, must match IDs). May be "*".
ignoreMilestoneIds:
description: items with these milestones will not be considered (IDs only, must match names)
ignoreLabels:
description: items with these labels will not be considered
minimumVotes:
descriptions: Only issues with at least this many votes will be considered.
maximumVotes:
descriptions: Only issues fewer or equal to this many votes will be considered.
readonly:
description: If true, changes are not applied.
runs:
using: 'node12'
main: 'index.js'
+20
View File
@@ -0,0 +1,20 @@
"use strict";
/*---------------------------------------------------------------------------------------------
* Copyright (c) Microsoft Corporation. All rights reserved.
* Licensed under the MIT License. See LICENSE in the project root for license information.
*--------------------------------------------------------------------------------------------*/
Object.defineProperty(exports, "__esModule", { value: true });
const utils_1 = require("../common/utils");
const Locker_1 = require("./Locker");
const Action_1 = require("../common/Action");
class LockerAction extends Action_1.Action {
constructor() {
super(...arguments);
this.id = 'Locker';
}
async onTriggered(github) {
await new Locker_1.Locker(github, +utils_1.getRequiredInput('daysSinceClose'), +utils_1.getRequiredInput('daysSinceUpdate'), utils_1.getInput('labels') || undefined, utils_1.getInput('milestoneName') || undefined, utils_1.getInput('milestoneId') || undefined, utils_1.getInput('ignoreLabels') || undefined, utils_1.getInput('ignoreMilestoneNames') || undefined, utils_1.getInput('ignoreMilestoneIds') || undefined, +(utils_1.getInput('minimumVotes') || 0), +(utils_1.getInput('maximumVotes') || 9999999)).run();
}
}
new LockerAction().run(); // eslint-disable-line
//# sourceMappingURL=index.js.map
+31
View File
@@ -0,0 +1,31 @@
/*---------------------------------------------------------------------------------------------
* Copyright (c) Microsoft Corporation. All rights reserved.
* Licensed under the MIT License. See LICENSE in the project root for license information.
*--------------------------------------------------------------------------------------------*/
import { OctoKit } from '../api/octokit'
import { getInput, getRequiredInput } from '../common/utils'
import { Locker } from './Locker'
import { Action } from '../common/Action'
class LockerAction extends Action {
id = 'Locker'
async onTriggered(github: OctoKit) {
await new Locker(
github,
+getRequiredInput('daysSinceClose'),
+getRequiredInput('daysSinceUpdate'),
getInput('labels') || undefined,
getInput('milestoneName') || undefined,
getInput('milestoneId') || undefined,
getInput('ignoreLabels') || undefined,
getInput('ignoreMilestoneNames') || undefined,
getInput('ignoreMilestoneIds') || undefined,
+(getInput('minimumVotes') || 0),
+(getInput('maximumVotes') || 9999999)
).run()
}
}
new LockerAction().run() // eslint-disable-line
+72
View File
@@ -0,0 +1,72 @@
"use strict";
/*---------------------------------------------------------------------------------------------
* Copyright (c) Microsoft Corporation. All rights reserved.
* Licensed under the MIT License. See LICENSE in the project root for license information.
*--------------------------------------------------------------------------------------------*/
Object.defineProperty(exports, "__esModule", { value: true });
exports.Reopener = void 0;
const ActionBase_1 = require("../common/ActionBase");
class Reopener extends ActionBase_1.ActionBase {
constructor(github, alsoApplyToOpenIssues, addLabels, removeLabels, reopenComment, setMilestoneId, labels, milestoneName, milestoneId, ignoreLabels, ignoreMilestoneNames, ignoreMilestoneIds, minimumVotes, maximumVotes) {
super(labels, milestoneName, milestoneId, ignoreLabels, ignoreMilestoneNames, ignoreMilestoneIds, minimumVotes, maximumVotes);
this.github = github;
this.alsoApplyToOpenIssues = alsoApplyToOpenIssues;
this.addLabels = addLabels;
this.removeLabels = removeLabels;
this.reopenComment = reopenComment;
this.setMilestoneId = setMilestoneId;
}
async run() {
const addLabelsSet = this.addLabels ? this.addLabels.split(',') : [];
const removeLabelsSet = this.removeLabels ? this.removeLabels.split(',') : [];
console.log(`alsoApplyToOpenIssues: ${this.alsoApplyToOpenIssues}`);
const query = this.buildQuery((this.alsoApplyToOpenIssues ? "" : "is:closed ") + "is:unlocked");
for await (const page of this.github.query({ q: query })) {
await Promise.all(page.map(async (issue) => {
const hydrated = await issue.getIssue();
if (!hydrated.locked && (this.alsoApplyToOpenIssues || hydrated.open === false) && this.validateIssue(hydrated)
// TODO: Verify closed and updated timestamps
) {
if (hydrated.open === false) {
console.log(`Reopening issue ${hydrated.number}`);
await issue.reopenIssue();
}
if (this.setMilestoneId != undefined) {
console.log(`Setting milestone of issue ${hydrated.number} to id ${+this.setMilestoneId}`);
await issue.setMilestone(+this.setMilestoneId);
}
if (removeLabelsSet.length > 0) {
for (const removeLabel of removeLabelsSet) {
if (removeLabel && removeLabel.length > 0) {
console.log(`Removing label on issue ${hydrated.number}: ${removeLabel}`);
await issue.removeLabel(removeLabel);
}
}
}
if (addLabelsSet.length > 0) {
for (const addLabel of addLabelsSet) {
if (addLabel && addLabel.length > 0) {
console.log(`Adding label on issue ${hydrated.number}: ${addLabel}`);
await issue.addLabel(addLabel);
}
}
}
if (this.reopenComment) {
console.log(`Posting comment to issue ${hydrated.number}.`);
await issue.postComment(this.reopenComment);
}
}
else {
if (hydrated.locked) {
console.log(`Issue ${hydrated.number} is locked. Ignoring`);
}
else if (!this.alsoApplyToOpenIssues && hydrated.open) {
console.log(`Issue ${hydrated.number} is open. Ignoring`);
}
}
}));
}
}
}
exports.Reopener = Reopener;
//# sourceMappingURL=Reopener.js.map
+84
View File
@@ -0,0 +1,84 @@
/*---------------------------------------------------------------------------------------------
* Copyright (c) Microsoft Corporation. All rights reserved.
* Licensed under the MIT License. See LICENSE in the project root for license information.
*--------------------------------------------------------------------------------------------*/
import { GitHub, Issue } from '../api/api'
import { ActionBase } from '../common/ActionBase'
export class Reopener extends ActionBase {
constructor(
private github: GitHub,
private alsoApplyToOpenIssues: boolean,
private addLabels?: string,
private removeLabels?: string,
private reopenComment?: string,
private setMilestoneId?: string,
labels?: string,
milestoneName?: string,
milestoneId?: string,
ignoreLabels?: string,
ignoreMilestoneNames?: string,
ignoreMilestoneIds?: string,
minimumVotes?: number,
maximumVotes?: number
)
{
super(labels, milestoneName, milestoneId, ignoreLabels, ignoreMilestoneNames, ignoreMilestoneIds, minimumVotes, maximumVotes);
}
async run() {
const addLabelsSet = this.addLabels ? this.addLabels.split(',') : [];
const removeLabelsSet = this.removeLabels ? this.removeLabels.split(',') : [];
console.log(`alsoApplyToOpenIssues: ${this.alsoApplyToOpenIssues}`);
const query = this.buildQuery((this.alsoApplyToOpenIssues ? "": "is:closed ") + "is:unlocked");
for await (const page of this.github.query({ q: query })) {
await Promise.all(
page.map(async (issue) => {
const hydrated = await issue.getIssue()
if (!hydrated.locked && (this.alsoApplyToOpenIssues || hydrated.open === false) && this.validateIssue(hydrated)
// TODO: Verify closed and updated timestamps
) {
if (hydrated.open === false) {
console.log(`Reopening issue ${hydrated.number}`)
await issue.reopenIssue()
}
if (this.setMilestoneId != undefined) {
console.log(`Setting milestone of issue ${hydrated.number} to id ${+this.setMilestoneId}`)
await issue.setMilestone(+this.setMilestoneId)
}
if (removeLabelsSet.length > 0) {
for (const removeLabel of removeLabelsSet) {
if (removeLabel && removeLabel.length > 0) {
console.log(`Removing label on issue ${hydrated.number}: ${removeLabel}`)
await issue.removeLabel(removeLabel)
}
}
}
if (addLabelsSet.length > 0) {
for (const addLabel of addLabelsSet) {
if (addLabel && addLabel.length > 0) {
console.log(`Adding label on issue ${hydrated.number}: ${addLabel}`)
await issue.addLabel(addLabel)
}
}
}
if (this.reopenComment) {
console.log(`Posting comment to issue ${hydrated.number}.`)
await issue.postComment(this.reopenComment)
}
} else {
if (hydrated.locked) {
console.log(`Issue ${hydrated.number} is locked. Ignoring`)
} else if (!this.alsoApplyToOpenIssues && hydrated.open) {
console.log(`Issue ${hydrated.number} is open. Ignoring`)
}
}
}),
)
}
}
}
+37
View File
@@ -0,0 +1,37 @@
name: Locker
description: Lock closed issues and PRs after some time has passed
inputs:
token:
description: GitHub token with issue, comment, and label read/write permissions
default: ${{ github.token }}
alsoApplyToOpenIssues:
description: If true, applies to issues that are already opened (to add/remove labels, etc., but not reopen).
addLabels:
description: Labels to add to issue as it is reopend.
reopenComment:
description: Comment to add upon reopening the issue.
setMilestoneId:
description: Milestone to set reopened issue to.
removeLabels:
description: Labels to remove from issue as it is reopened.
milestoneName:
description: items with these milestones will be considered (name only, must match ID)
milestoneId:
description: items with these milestones will be considered (id only, must match name)
labels:
description: items with these labels will not be considered. May be "*".
ignoreMilestoneNames:
description: items with these milestones will not be considered (names only, must match IDs). May be "*".
ignoreMilestoneIds:
description: items with these milestones will not be considered (IDs only, must match names)
ignoreLabels:
description: items with these labels will not be considered
minimumVotes:
descriptions: Only issues with at least this many votes will be considered.
maximumVotes:
descriptions: Only issues fewer or equal to this many votes will be considered.
readonly:
description: If true, changes are not applied.
runs:
using: 'node12'
main: 'index.js'
+21
View File
@@ -0,0 +1,21 @@
"use strict";
/*---------------------------------------------------------------------------------------------
* Copyright (c) Microsoft Corporation. All rights reserved.
* Licensed under the MIT License. See LICENSE in the project root for license information.
*--------------------------------------------------------------------------------------------*/
Object.defineProperty(exports, "__esModule", { value: true });
const utils_1 = require("../common/utils");
const Reopener_1 = require("./Reopener");
const Action_1 = require("../common/Action");
class ReopenerAction extends Action_1.Action {
constructor() {
super(...arguments);
this.id = 'Locker';
}
async onTriggered(github) {
const alsoApplyToOpenIssues = utils_1.getInput('alsoApplyToOpenIssues');
await new Reopener_1.Reopener(github, alsoApplyToOpenIssues != undefined && alsoApplyToOpenIssues.toLowerCase() == 'true', utils_1.getInput('addLabels') || undefined, utils_1.getInput('removeLabels') || undefined, utils_1.getInput('reopenComment') || '', utils_1.getInput('setMilestoneId') || undefined, utils_1.getInput('labels') || undefined, utils_1.getInput('milestoneName') || undefined, utils_1.getInput('milestoneId') || undefined, utils_1.getInput('ignoreLabels') || undefined, utils_1.getInput('ignoreMilestoneNames') || undefined, utils_1.getInput('ignoreMilestoneIds') || undefined, +(utils_1.getInput('minimumVotes') || 0), +(utils_1.getInput('maximumVotes') || 9999999)).run();
}
}
new ReopenerAction().run(); // eslint-disable-line
//# sourceMappingURL=index.js.map
+35
View File
@@ -0,0 +1,35 @@
/*---------------------------------------------------------------------------------------------
* Copyright (c) Microsoft Corporation. All rights reserved.
* Licensed under the MIT License. See LICENSE in the project root for license information.
*--------------------------------------------------------------------------------------------*/
import { OctoKit } from '../api/octokit'
import { getInput, getRequiredInput } from '../common/utils'
import { Reopener } from './Reopener'
import { Action } from '../common/Action'
class ReopenerAction extends Action {
id = 'Locker'
async onTriggered(github: OctoKit) {
const alsoApplyToOpenIssues: string | undefined = getInput('alsoApplyToOpenIssues');
await new Reopener(
github,
alsoApplyToOpenIssues != undefined && alsoApplyToOpenIssues.toLowerCase() == 'true',
getInput('addLabels') || undefined,
getInput('removeLabels') || undefined,
getInput('reopenComment') || '',
getInput('setMilestoneId') || undefined,
getInput('labels') || undefined,
getInput('milestoneName') || undefined,
getInput('milestoneId') || undefined,
getInput('ignoreLabels') || undefined,
getInput('ignoreMilestoneNames') || undefined,
getInput('ignoreMilestoneIds') || undefined,
+(getInput('minimumVotes') || 0),
+(getInput('maximumVotes') || 9999999)
).run()
}
}
new ReopenerAction().run() // eslint-disable-line
+106
View File
@@ -0,0 +1,106 @@
"use strict";
/*---------------------------------------------------------------------------------------------
* Copyright (c) Microsoft Corporation. All rights reserved.
* Licensed under the MIT License. See LICENSE in the project root for license information.
*--------------------------------------------------------------------------------------------*/
Object.defineProperty(exports, "__esModule", { value: true });
exports.StaleCloser = void 0;
const ActionBase_1 = require("../common/ActionBase");
const utils_1 = require("../common/utils");
class StaleCloser extends ActionBase_1.ActionBase {
constructor(github, closeDays, labels, closeComment, pingDays, pingComment, additionalTeam, addLabels, removeLabels, setMilestoneId, milestoneName, milestoneId, ignoreLabels, ignoreMilestoneNames, ignoreMilestoneIds, minimumVotes, maximumVotes) {
super(labels, milestoneName, milestoneId, ignoreLabels, ignoreMilestoneNames, ignoreMilestoneIds, minimumVotes, maximumVotes);
this.github = github;
this.closeDays = closeDays;
this.closeComment = closeComment;
this.pingDays = pingDays;
this.pingComment = pingComment;
this.additionalTeam = additionalTeam;
this.addLabels = addLabels;
this.removeLabels = removeLabels;
this.setMilestoneId = setMilestoneId;
}
async run() {
const updatedTimestamp = utils_1.daysAgoToHumanReadbleDate(this.closeDays);
const pingTimestamp = this.pingDays ? utils_1.daysAgoToTimestamp(this.pingDays) : undefined;
const query = this.buildQuery((this.closeDays ? `updated:<${updatedTimestamp} ` : "") + "is:open is:unlocked");
const addLabelsSet = this.addLabels ? this.addLabels.split(',') : [];
const removeLabelsSet = this.removeLabels ? this.removeLabels.split(',') : [];
for await (const page of this.github.query({ q: query })) {
for (const issue of page) {
const hydrated = await issue.getIssue();
const lastCommentIterator = await issue.getComments(true).next();
if (lastCommentIterator.done) {
throw Error('Unexpected comment data');
}
const lastComment = lastCommentIterator.value[0];
if (hydrated.open && this.validateIssue(hydrated)
// TODO: Verify updated timestamp
) {
if (!lastComment ||
lastComment.author.isGitHubApp ||
pingTimestamp == undefined ||
// TODO: List the collaborators once per go rather than checking a single user each issue
this.additionalTeam.includes(lastComment.author.name) ||
await issue.hasWriteAccess(lastComment.author)) {
if (pingTimestamp != undefined) {
if (lastComment) {
console.log(`Last comment on issue ${hydrated.number} by ${lastComment.author.name}. Closing.`);
}
else {
console.log(`No comments on issue ${hydrated.number}. Closing.`);
}
}
if (this.closeComment) {
console.log(`Posting comment on issue ${hydrated.number}`);
await issue.postComment(this.closeComment);
}
if (removeLabelsSet.length > 0) {
for (const removeLabel of removeLabelsSet) {
if (removeLabel && removeLabel.length > 0) {
console.log(`Removing label on issue ${hydrated.number}: ${removeLabel}`);
await issue.removeLabel(removeLabel);
}
}
}
if (addLabelsSet.length > 0) {
for (const addLabel of addLabelsSet) {
if (addLabel && addLabel.length > 0) {
console.log(`Adding label on issue ${hydrated.number}: ${addLabel}`);
await issue.addLabel(addLabel);
}
}
}
await issue.closeIssue();
if (this.setMilestoneId != undefined) {
console.log(`Setting milestone of issue ${hydrated.number} to id ${+this.setMilestoneId}`);
await issue.setMilestone(+this.setMilestoneId);
}
console.log(`Closing issue ${hydrated.number}.`);
}
else {
// Ping
if (hydrated.updatedAt < pingTimestamp && hydrated.assignee) {
console.log(`Last comment on issue ${hydrated.number} by ${lastComment.author.name}. Pinging @${hydrated.assignee}`);
if (this.pingComment) {
await issue.postComment(this.pingComment
.replace('${assignee}', hydrated.assignee)
.replace('${author}', hydrated.author.name));
}
}
else {
console.log(`Last comment on issue ${hydrated.number} by ${lastComment.author.name}. Skipping.${hydrated.assignee ? ' cc @' + hydrated.assignee : ''}`);
}
}
}
else {
if (!hydrated.open) {
console.log(`Issue ${hydrated.number} is not open. Ignoring`);
}
}
}
}
}
}
exports.StaleCloser = StaleCloser;
//# sourceMappingURL=StaleCloser.js.map
+127
View File
@@ -0,0 +1,127 @@
/*---------------------------------------------------------------------------------------------
* Copyright (c) Microsoft Corporation. All rights reserved.
* Licensed under the MIT License. See LICENSE in the project root for license information.
*--------------------------------------------------------------------------------------------*/
import { GitHub } from '../api/api'
import { ActionBase } from '../common/ActionBase'
import { daysAgoToHumanReadbleDate, daysAgoToTimestamp } from '../common/utils'
export class StaleCloser extends ActionBase {
constructor(
private github: GitHub,
private closeDays: number,
labels: string,
private closeComment: string,
private pingDays: number,
private pingComment: string,
private additionalTeam: string[],
private addLabels?: string,
private removeLabels?: string,
private setMilestoneId?: string,
milestoneName?: string,
milestoneId?: string,
ignoreLabels?: string,
ignoreMilestoneNames?: string,
ignoreMilestoneIds?: string,
minimumVotes?: number,
maximumVotes?: number
)
{
super(labels, milestoneName, milestoneId, ignoreLabels, ignoreMilestoneNames, ignoreMilestoneIds, minimumVotes, maximumVotes);
}
async run() {
const updatedTimestamp = daysAgoToHumanReadbleDate(this.closeDays)
const pingTimestamp = this.pingDays ? daysAgoToTimestamp(this.pingDays) : undefined;
const query = this.buildQuery((this.closeDays ? `updated:<${updatedTimestamp} ` : "") + "is:open is:unlocked");
const addLabelsSet = this.addLabels ? this.addLabels.split(',') : [];
const removeLabelsSet = this.removeLabels ? this.removeLabels.split(',') : [];
for await (const page of this.github.query({ q: query })) {
for (const issue of page) {
const hydrated = await issue.getIssue()
const lastCommentIterator = await issue.getComments(true).next()
if (lastCommentIterator.done) {
throw Error('Unexpected comment data')
}
const lastComment = lastCommentIterator.value[0]
if (hydrated.open && this.validateIssue(hydrated)
// TODO: Verify updated timestamp
) {
if (
!lastComment ||
lastComment.author.isGitHubApp ||
pingTimestamp == undefined ||
// TODO: List the collaborators once per go rather than checking a single user each issue
this.additionalTeam.includes(lastComment.author.name) ||
await issue.hasWriteAccess(lastComment.author)
) {
if (pingTimestamp != undefined) {
if (lastComment) {
console.log(
`Last comment on issue ${hydrated.number} by ${lastComment.author.name}. Closing.`,
)
} else {
console.log(`No comments on issue ${hydrated.number}. Closing.`)
}
}
if (this.closeComment) {
console.log(`Posting comment on issue ${hydrated.number}`)
await issue.postComment(this.closeComment)
}
if (removeLabelsSet.length > 0) {
for (const removeLabel of removeLabelsSet) {
if (removeLabel && removeLabel.length > 0) {
console.log(`Removing label on issue ${hydrated.number}: ${removeLabel}`)
await issue.removeLabel(removeLabel)
}
}
}
if (addLabelsSet.length > 0) {
for (const addLabel of addLabelsSet) {
if (addLabel && addLabel.length > 0) {
console.log(`Adding label on issue ${hydrated.number}: ${addLabel}`)
await issue.addLabel(addLabel)
}
}
}
await issue.closeIssue()
if (this.setMilestoneId != undefined) {
console.log(`Setting milestone of issue ${hydrated.number} to id ${+this.setMilestoneId}`)
await issue.setMilestone(+this.setMilestoneId)
}
console.log(`Closing issue ${hydrated.number}.`)
} else {
// Ping
if (hydrated.updatedAt < pingTimestamp && hydrated.assignee) {
console.log(
`Last comment on issue ${hydrated.number} by ${lastComment.author.name}. Pinging @${hydrated.assignee}`,
)
if (this.pingComment) {
await issue.postComment(
this.pingComment
.replace('${assignee}', hydrated.assignee)
.replace('${author}', hydrated.author.name),
)
}
} else {
console.log(
`Last comment on issue ${hydrated.number} by ${lastComment.author.name}. Skipping.${
hydrated.assignee ? ' cc @' + hydrated.assignee : ''
}`,
)
}
}
} else {
if (!hydrated.open) {
console.log(`Issue ${hydrated.number} is not open. Ignoring`)
}
}
}
}
}
}
+45
View File
@@ -0,0 +1,45 @@
name: Stale Issue Closer
description: Close issues that are marked with a specified label and were last interacted with by a contributor or bot
inputs:
token:
description: GitHub token with issue, comment, and label read/write permissions
default: ${{ github.token }}
closeDays:
description: Days to wait before closing the issue
required: true
closeComment:
description: Comment to add upon closing the issue
pingDays:
description: Days to wait before pinging the assignee, if any. If set, issue is not closed if there is an assignee.
additionalTeam:
description: Pipe-separated list of additional users to treat as team members
pingComment:
description: Comment to add when pinging assignee. ${assignee} and ${author} are replaced.
milestoneName:
description: items with these milestones will be considered (name only, must match ID)
milestoneId:
description: items with these milestones will be considered (id only, must match name)
labels:
description: items with these labels will not be considered. May be "*".
required: true
ignoreMilestoneNames:
description: items with these milestones will not be considered (names only, must match IDs). May be "*".
ignoreMilestoneIds:
description: items with these milestones will not be considered (IDs only, must match names)
ignoreLabels:
description: items with these labels will not be considered
addLabels:
description: Labels to add to issue as it is closed.
removeLabels:
description: Labels to remove from issue as it is closed.
setMilestoneId:
description: Milestone to set closed issue to.
minimumVotes:
descriptions: Only issues with at least this many votes will be considered.
maximumVotes:
descriptions: Only issues fewer or equal to this many votes will be considered.
readonly:
description: If true, changes are not applied.
runs:
using: 'node12'
main: 'index.js'
+21
View File
@@ -0,0 +1,21 @@
"use strict";
/*---------------------------------------------------------------------------------------------
* Copyright (c) Microsoft Corporation. All rights reserved.
* Licensed under the MIT License. See LICENSE in the project root for license information.
*--------------------------------------------------------------------------------------------*/
Object.defineProperty(exports, "__esModule", { value: true });
const utils_1 = require("../common/utils");
const StaleCloser_1 = require("./StaleCloser");
const Action_1 = require("../common/Action");
class StaleCloserAction extends Action_1.Action {
constructor() {
super(...arguments);
this.id = 'StaleCloser';
}
async onTriggered(github) {
var _a;
await new StaleCloser_1.StaleCloser(github, +utils_1.getRequiredInput('closeDays'), utils_1.getRequiredInput('labels'), utils_1.getInput('closeComment') || '', +(utils_1.getInput('pingDays') || 0), utils_1.getInput('pingComment') || '', ((_a = utils_1.getInput('additionalTeam')) !== null && _a !== void 0 ? _a : '').split(','), utils_1.getInput('addLabels') || undefined, utils_1.getInput('removeLabels') || undefined, utils_1.getInput('setMilestoneId') || undefined, utils_1.getInput('milestoneName') || undefined, utils_1.getInput('milestoneId') || undefined, utils_1.getInput('ignoreLabels') || undefined, utils_1.getInput('ignoreMilestoneNames') || undefined, utils_1.getInput('ignoreMilestoneIds') || undefined, +(utils_1.getInput('minimumVotes') || 0), +(utils_1.getInput('maximumVotes') || 9999999)).run();
}
}
new StaleCloserAction().run(); // eslint-disable-line
//# sourceMappingURL=index.js.map
+37
View File
@@ -0,0 +1,37 @@
/*---------------------------------------------------------------------------------------------
* Copyright (c) Microsoft Corporation. All rights reserved.
* Licensed under the MIT License. See LICENSE in the project root for license information.
*--------------------------------------------------------------------------------------------*/
import { OctoKit } from '../api/octokit'
import { getInput, getRequiredInput } from '../common/utils'
import { StaleCloser } from './StaleCloser'
import { Action } from '../common/Action'
class StaleCloserAction extends Action {
id = 'StaleCloser'
async onTriggered(github: OctoKit) {
await new StaleCloser(
github,
+getRequiredInput('closeDays'),
getRequiredInput('labels'),
getInput('closeComment') || '',
+(getInput('pingDays') || 0),
getInput('pingComment') || '',
(getInput('additionalTeam') ?? '').split(','),
getInput('addLabels') || undefined,
getInput('removeLabels') || undefined,
getInput('setMilestoneId') || undefined,
getInput('milestoneName') || undefined,
getInput('milestoneId') || undefined,
getInput('ignoreLabels') || undefined,
getInput('ignoreMilestoneNames') || undefined,
getInput('ignoreMilestoneIds') || undefined,
+(getInput('minimumVotes') || 0),
+(getInput('maximumVotes') || 9999999)
).run()
}
}
new StaleCloserAction().run() // eslint-disable-line
+7
View File
@@ -0,0 +1,7 @@
"use strict";
/*---------------------------------------------------------------------------------------------
* Copyright (c) Microsoft Corporation. All rights reserved.
* Licensed under the MIT License. See LICENSE in the project root for license information.
*--------------------------------------------------------------------------------------------*/
Object.defineProperty(exports, "__esModule", { value: true });
//# sourceMappingURL=api.js.map
+100
View File
@@ -0,0 +1,100 @@
/*---------------------------------------------------------------------------------------------
* Copyright (c) Microsoft Corporation. All rights reserved.
* Licensed under the MIT License. See LICENSE in the project root for license information.
*--------------------------------------------------------------------------------------------*/
export interface GitHub {
query(query: Query): AsyncIterableIterator<GitHubIssue[]>
hasWriteAccess(user: User): Promise<boolean>
repoHasLabel(label: string): Promise<boolean>
createLabel(label: string, color: string, description: string): Promise<void>
deleteLabel(label: string): Promise<void>
readConfig(path: string): Promise<any>
dispatch(title: string): Promise<void>
createIssue(owner: string, repo: string, title: string, body: string): Promise<void>
releaseContainsCommit(release: string, commit: string): Promise<'yes' | 'no' | 'unknown'>
}
export interface GitHubIssue extends GitHub {
getIssue(): Promise<Issue>
postComment(body: string): Promise<void>
deleteComment(id: number): Promise<void>
getComments(last?: boolean): AsyncIterableIterator<Comment[]>
closeIssue(): Promise<void>
lockIssue(): Promise<void>
reopenIssue(): Promise<void>
setMilestone(milestoneId: number): Promise<void>
addLabel(label: string): Promise<void>
removeLabel(label: string): Promise<void>
addAssignee(assignee: string): Promise<void>
removeAssignee(assignee: string): Promise<void>
getClosingInfo(): Promise<{ hash: string | undefined; timestamp: number } | undefined>
}
type SortVar =
| 'comments'
| 'reactions'
| 'reactions-+1'
| 'reactions--1'
| 'reactions-smile'
| 'reactions-thinking_face'
| 'reactions-heart'
| 'reactions-tada'
| 'interactions'
| 'created'
| 'updated'
type SortOrder = 'asc' | 'desc'
export type Reactions = {
'+1': number
'-1': number
laugh: number
hooray: number
confused: number
heart: number
rocket: number
eyes: number
}
export interface User {
name: string
isGitHubApp?: boolean
}
export interface Comment {
author: User
body: string
id: number
timestamp: number
}
export interface Issue {
author: User
body: string
title: string
labels: string[]
open: boolean
locked: boolean
number: number
numComments: number
reactions: Reactions
milestoneId: number | null
assignee?: string
createdAt: number
updatedAt: number
closedAt?: number
}
export interface Query {
q: string
sort?: SortVar
order?: SortOrder
}
+405
View File
@@ -0,0 +1,405 @@
"use strict";
/*---------------------------------------------------------------------------------------------
* Copyright (c) Microsoft Corporation. All rights reserved.
* Licensed under the MIT License. See LICENSE in the project root for license information.
*--------------------------------------------------------------------------------------------*/
Object.defineProperty(exports, "__esModule", { value: true });
exports.OctoKitIssue = exports.OctoKit = exports.getNumRequests = void 0;
const core_1 = require("@actions/core");
const github_1 = require("@actions/github");
const child_process_1 = require("child_process");
let numRequests = 0;
exports.getNumRequests = () => numRequests;
class OctoKit {
constructor(token, params, options = { readonly: false }) {
this.token = token;
this.params = params;
this.options = options;
// when in readonly mode, record labels just-created so at to not throw unneccesary errors
this.mockLabels = new Set();
this.writeAccessCache = {};
this._octokit = new github_1.GitHub(token);
}
get octokit() {
numRequests++;
return this._octokit;
}
// TODO: just iterate over the issues in a page here instead of making caller do it
async *query(query) {
const q = query.q + ` repo:${this.params.owner}/${this.params.repo}`;
console.log(`Querying for ${q}:`);
const options = this.octokit.search.issuesAndPullRequests.endpoint.merge({
...query,
q,
per_page: 100,
headers: { Accept: 'application/vnd.github.squirrel-girl-preview+json' },
});
let pageNum = 0;
const timeout = async () => {
if (pageNum < 2) {
/* pass */
}
else if (pageNum < 4) {
await new Promise((resolve) => setTimeout(resolve, 3000));
}
else {
await new Promise((resolve) => setTimeout(resolve, 30000));
}
};
for await (const pageResponse of this.octokit.paginate.iterator(options)) {
await timeout();
numRequests++;
const page = pageResponse.data;
console.log(`Page ${++pageNum}: ${page.map(({ number }) => number).join(' ')}`);
yield page.map((issue) => new OctoKitIssue(this.token, this.params, this.octokitIssueToIssue(issue), this.options));
}
}
async createIssue(owner, repo, title, body) {
core_1.debug(`Creating issue \`${title}\` on ${owner}/${repo}`);
if (!this.options.readonly)
await this.octokit.issues.create({ owner, repo, title, body });
}
octokitIssueToIssue(issue) {
var _a, _b, _c, _d, _e, _f;
return {
author: { name: issue.user.login, isGitHubApp: issue.user.type === 'Bot' },
body: issue.body,
number: issue.number,
title: issue.title,
labels: issue.labels.map((label) => label.name),
open: issue.state === 'open',
locked: issue.locked,
numComments: issue.comments,
reactions: issue.reactions,
assignee: (_b = (_a = issue.assignee) === null || _a === void 0 ? void 0 : _a.login) !== null && _b !== void 0 ? _b : (_d = (_c = issue.assignees) === null || _c === void 0 ? void 0 : _c[0]) === null || _d === void 0 ? void 0 : _d.login,
milestoneId: (_f = (_e = issue.milestone) === null || _e === void 0 ? void 0 : _e.number) !== null && _f !== void 0 ? _f : null,
createdAt: +new Date(issue.created_at),
updatedAt: +new Date(issue.updated_at),
closedAt: issue.closed_at ? +new Date(issue.closed_at) : undefined,
};
}
async hasWriteAccess(user) {
if (user.name in this.writeAccessCache) {
core_1.debug('Got permissions from cache for ' + user);
return this.writeAccessCache[user.name];
}
core_1.debug('Fetching permissions for ' + user);
const permissions = (await this.octokit.repos.getCollaboratorPermissionLevel({
...this.params,
username: user.name,
})).data.permission;
return (this.writeAccessCache[user.name] = permissions === 'admin' || permissions === 'write');
}
async repoHasLabel(name) {
try {
await this.octokit.issues.getLabel({ ...this.params, name });
return true;
}
catch (err) {
if (err.status === 404) {
return this.options.readonly && this.mockLabels.has(name);
}
throw err;
}
}
async createLabel(name, color, description) {
core_1.debug('Creating label ' + name);
if (!this.options.readonly)
await this.octokit.issues.createLabel({ ...this.params, color, description, name });
else
this.mockLabels.add(name);
}
async deleteLabel(name) {
core_1.debug('Deleting label ' + name);
try {
if (!this.options.readonly)
await this.octokit.issues.deleteLabel({ ...this.params, name });
}
catch (err) {
if (err.status === 404) {
return;
}
throw err;
}
}
async readConfig(path) {
core_1.debug('Reading config at ' + path);
const repoPath = `.github/${path}.json`;
try {
const data = (await this.octokit.repos.getContents({ ...this.params, path: repoPath })).data;
if ('type' in data && data.type === 'file') {
if (data.encoding === 'base64' && data.content) {
return JSON.parse(Buffer.from(data.content, 'base64').toString('utf-8'));
}
throw Error(`Could not read contents "${data.content}" in encoding "${data.encoding}"`);
}
throw Error('Found directory at config path when expecting file' + JSON.stringify(data));
}
catch (e) {
throw Error('Error with config file at ' + repoPath + ': ' + JSON.stringify(e));
}
}
async releaseContainsCommit(release, commit) {
return new Promise((resolve, reject) => child_process_1.exec(`git -C ./repo merge-base --is-ancestor ${commit} ${release}`, (err) => {
if (!err || err.code === 1) {
resolve(!err ? 'yes' : 'no');
}
else if (err.message.includes(`Not a valid commit name ${release}`)) {
// release branch is forked. Probably in endgame. Not released.
resolve('no');
}
else if (err.message.includes(`Not a valid commit name ${commit}`)) {
// commit is probably in a different repo.
resolve('unknown');
}
else {
reject(err);
}
}));
}
async dispatch(title) {
core_1.debug('Dispatching ' + title);
if (!this.options.readonly)
await this.octokit.repos.createDispatchEvent({ ...this.params, event_type: title });
}
}
exports.OctoKit = OctoKit;
class OctoKitIssue extends OctoKit {
constructor(token, params, issueData, options = { readonly: false }) {
super(token, params, options);
this.params = params;
this.issueData = issueData;
console.log('running bot on issue', issueData.number);
}
async addAssignee(assignee) {
core_1.debug('Adding assignee ' + assignee + ' to ' + this.issueData.number);
if (!this.options.readonly) {
await this.octokit.issues.addAssignees({
...this.params,
issue_number: this.issueData.number,
assignees: [assignee],
});
}
}
async removeAssignee(assignee) {
core_1.debug('Removing assignee ' + assignee + ' to ' + this.issueData.number);
if (!this.options.readonly) {
await this.octokit.issues.removeAssignees({
...this.params,
issue_number: this.issueData.number,
assignees: [assignee],
});
}
}
async closeIssue() {
core_1.debug('Closing issue ' + this.issueData.number);
if (!this.options.readonly)
await this.octokit.issues.update({
...this.params,
issue_number: this.issueData.number,
state: 'closed',
});
}
async reopenIssue() {
core_1.debug('Reopening issue ' + this.issueData.number);
if (!this.options.readonly)
await this.octokit.issues.update({
...this.params,
issue_number: this.issueData.number,
state: 'open',
});
}
async lockIssue() {
core_1.debug('Locking issue ' + this.issueData.number);
if (!this.options.readonly)
await this.octokit.issues.lock({ ...this.params, issue_number: this.issueData.number });
}
async getIssue() {
if (isIssue(this.issueData)) {
core_1.debug('Got issue data from query result ' + this.issueData.number);
return this.issueData;
}
console.log('Fetching issue ' + this.issueData.number);
const issue = (await this.octokit.issues.get({
...this.params,
issue_number: this.issueData.number,
mediaType: { previews: ['squirrel-girl'] },
})).data;
return (this.issueData = this.octokitIssueToIssue(issue));
}
async postComment(body) {
core_1.debug(`Posting comment ${body} on ${this.issueData.number}`);
if (!this.options.readonly)
await this.octokit.issues.createComment({
...this.params,
issue_number: this.issueData.number,
body,
});
}
async deleteComment(id) {
core_1.debug(`Deleting comment ${id} on ${this.issueData.number}`);
if (!this.options.readonly)
await this.octokit.issues.deleteComment({
owner: this.params.owner,
repo: this.params.repo,
comment_id: id,
});
}
async setMilestone(milestoneId) {
core_1.debug(`Setting milestone for ${this.issueData.number} to ${milestoneId}`);
if (!this.options.readonly)
await this.octokit.issues.update({
...this.params,
issue_number: this.issueData.number,
milestone: milestoneId,
});
}
async *getComments(last) {
core_1.debug('Fetching comments for ' + this.issueData.number);
const response = this.octokit.paginate.iterator(this.octokit.issues.listComments.endpoint.merge({
...this.params,
issue_number: this.issueData.number,
per_page: 100,
...(last ? { per_page: 1, page: (await this.getIssue()).numComments } : {}),
}));
for await (const page of response) {
numRequests++;
yield page.data.map((comment) => ({
author: { name: comment.user.login, isGitHubApp: comment.user.type === 'Bot' },
body: comment.body,
id: comment.id,
timestamp: +new Date(comment.created_at),
}));
}
}
async addLabel(name) {
core_1.debug(`Adding label ${name} to ${this.issueData.number}`);
if (!(await this.repoHasLabel(name))) {
throw Error(`Action could not execute becuase label ${name} is not defined.`);
}
if (!this.options.readonly)
await this.octokit.issues.addLabels({
...this.params,
issue_number: this.issueData.number,
labels: [name],
});
}
async getAssigner(assignee) {
const options = this.octokit.issues.listEventsForTimeline.endpoint.merge({
...this.params,
issue_number: this.issueData.number,
});
let assigner;
for await (const event of this.octokit.paginate.iterator(options)) {
numRequests++;
const timelineEvents = event.data;
for (const timelineEvent of timelineEvents) {
if (timelineEvent.event === 'assigned' &&
timelineEvent.assignee.login === assignee) {
assigner = timelineEvent.actor.login;
}
}
}
if (!assigner) {
throw Error('Expected to find ' + assignee + ' in issue timeline but did not.');
}
return assigner;
}
async removeLabel(name) {
core_1.debug(`Removing label ${name} from ${this.issueData.number}`);
try {
if (!this.options.readonly)
await this.octokit.issues.removeLabel({
...this.params,
issue_number: this.issueData.number,
name,
});
}
catch (err) {
if (err.status === 404) {
console.log(`Label ${name} not found on issue`);
return;
}
throw err;
}
}
async getClosingInfo(alreadyChecked = []) {
var _a, _b, _c, _d, _e, _f, _g;
if (alreadyChecked.includes(this.issueData.number)) {
return undefined;
}
alreadyChecked.push(this.issueData.number);
if ((await this.getIssue()).open) {
return;
}
const closingHashComment = /(?:\\|\/)closedWith (\S*)/;
const options = this.octokit.issues.listEventsForTimeline.endpoint.merge({
...this.params,
issue_number: this.issueData.number,
});
let closingCommit;
const crossReferencing = [];
for await (const event of this.octokit.paginate.iterator(options)) {
numRequests++;
const timelineEvents = event.data;
for (const timelineEvent of timelineEvents) {
if ((timelineEvent.event === 'closed' || timelineEvent.event === 'merged') &&
timelineEvent.commit_id &&
timelineEvent.commit_url
.toLowerCase()
.includes(`/${this.params.owner}/${this.params.repo}/`.toLowerCase())) {
closingCommit = {
hash: timelineEvent.commit_id,
timestamp: +new Date(timelineEvent.created_at),
};
}
if (timelineEvent.event === 'reopened') {
closingCommit = undefined;
}
if (timelineEvent.event === 'commented' &&
!((_a = timelineEvent.body) === null || _a === void 0 ? void 0 : _a.includes('UNABLE_TO_LOCATE_COMMIT_MESSAGE')) &&
closingHashComment.test(timelineEvent.body)) {
closingCommit = {
hash: closingHashComment.exec(timelineEvent.body)[1],
timestamp: +new Date(timelineEvent.created_at),
};
}
if (timelineEvent.event === 'cross-referenced' && ((_c = (_b = timelineEvent.source) === null || _b === void 0 ? void 0 : _b.issue) === null || _c === void 0 ? void 0 : _c.number) && ((_f = (_e = (_d = timelineEvent.source) === null || _d === void 0 ? void 0 : _d.issue) === null || _e === void 0 ? void 0 : _e.pull_request) === null || _f === void 0 ? void 0 : _f.url.includes(`/${this.params.owner}/${this.params.repo}/`.toLowerCase()))) {
crossReferencing.push(timelineEvent.source.issue.number);
}
}
}
// If we dont have any closing info, try to get it from linked issues (PRs).
// If there's a linked issue that was closed at almost the same time, guess it was a PR that closed this.
if (!closingCommit) {
for (const id of crossReferencing.reverse()) {
const closed = await new OctoKitIssue(this.token, this.params, {
number: id,
}, this.options).getClosingInfo(alreadyChecked);
if (closed) {
if (Math.abs(closed.timestamp - ((_g = (await this.getIssue()).closedAt) !== null && _g !== void 0 ? _g : 0)) < 5000) {
closingCommit = closed;
break;
}
}
}
}
console.log(`Got ${JSON.stringify(closingCommit)} as closing commit of ${this.issueData.number}`);
return closingCommit;
}
}
exports.OctoKitIssue = OctoKitIssue;
function isIssue(object) {
const isIssue = 'author' in object &&
'body' in object &&
'title' in object &&
'labels' in object &&
'open' in object &&
'locked' in object &&
'number' in object &&
'numComments' in object &&
'reactions' in object &&
'milestoneId' in object;
return isIssue;
}
//# sourceMappingURL=octokit.js.map
+470
View File
@@ -0,0 +1,470 @@
/*---------------------------------------------------------------------------------------------
* Copyright (c) Microsoft Corporation. All rights reserved.
* Licensed under the MIT License. See LICENSE in the project root for license information.
*--------------------------------------------------------------------------------------------*/
import { debug } from '@actions/core'
import { GitHub as GitHubAPI } from '@actions/github'
import { Octokit } from '@octokit/rest'
import { exec } from 'child_process'
import { Comment, GitHub, GitHubIssue, Issue, Query, User } from './api'
let numRequests = 0
export const getNumRequests = () => numRequests
export class OctoKit implements GitHub {
private _octokit: GitHubAPI
protected get octokit(): GitHubAPI {
numRequests++
return this._octokit
}
// when in readonly mode, record labels just-created so at to not throw unneccesary errors
protected mockLabels: Set<string> = new Set()
constructor(
protected token: string,
protected params: { repo: string; owner: string },
protected options: { readonly: boolean } = { readonly: false },
) {
this._octokit = new GitHubAPI(token)
}
// TODO: just iterate over the issues in a page here instead of making caller do it
async *query(query: Query): AsyncIterableIterator<GitHubIssue[]> {
const q = query.q + ` repo:${this.params.owner}/${this.params.repo}`
console.log(`Querying for ${q}:`)
const options = this.octokit.search.issuesAndPullRequests.endpoint.merge({
...query,
q,
per_page: 100,
headers: { Accept: 'application/vnd.github.squirrel-girl-preview+json' },
})
let pageNum = 0
const timeout = async () => {
if (pageNum < 2) {
/* pass */
} else if (pageNum < 4) {
await new Promise((resolve) => setTimeout(resolve, 3000))
} else {
await new Promise((resolve) => setTimeout(resolve, 30000))
}
}
for await (const pageResponse of this.octokit.paginate.iterator(options)) {
await timeout()
numRequests++
const page: Array<Octokit.SearchIssuesAndPullRequestsResponseItemsItem> = pageResponse.data
console.log(`Page ${++pageNum}: ${page.map(({ number }) => number).join(' ')}`)
yield page.map(
(issue) => new OctoKitIssue(this.token, this.params, this.octokitIssueToIssue(issue), this.options),
)
}
}
async createIssue(owner: string, repo: string, title: string, body: string): Promise<void> {
debug(`Creating issue \`${title}\` on ${owner}/${repo}`)
if (!this.options.readonly) await this.octokit.issues.create({ owner, repo, title, body })
}
protected octokitIssueToIssue(
issue: Octokit.IssuesGetResponse | Octokit.SearchIssuesAndPullRequestsResponseItemsItem,
): Issue {
return {
author: { name: issue.user.login, isGitHubApp: issue.user.type === 'Bot' },
body: issue.body,
number: issue.number,
title: issue.title,
labels: (issue.labels as Octokit.IssuesGetLabelResponse[]).map((label) => label.name),
open: issue.state === 'open',
locked: (issue as any).locked,
numComments: issue.comments,
reactions: (issue as any).reactions,
assignee: issue.assignee?.login ?? (issue as any).assignees?.[0]?.login,
milestoneId: issue.milestone?.number ?? null,
createdAt: +new Date(issue.created_at),
updatedAt: +new Date(issue.updated_at),
closedAt: issue.closed_at ? +new Date((issue.closed_at as unknown) as string) : undefined,
}
}
private writeAccessCache: Record<string, boolean> = {}
async hasWriteAccess(user: User): Promise<boolean> {
if (user.name in this.writeAccessCache) {
debug('Got permissions from cache for ' + user)
return this.writeAccessCache[user.name]
}
debug('Fetching permissions for ' + user)
const permissions = (
await this.octokit.repos.getCollaboratorPermissionLevel({
...this.params,
username: user.name,
})
).data.permission
return (this.writeAccessCache[user.name] = permissions === 'admin' || permissions === 'write')
}
async repoHasLabel(name: string): Promise<boolean> {
try {
await this.octokit.issues.getLabel({ ...this.params, name })
return true
} catch (err) {
if (err.status === 404) {
return this.options.readonly && this.mockLabels.has(name)
}
throw err
}
}
async createLabel(name: string, color: string, description: string): Promise<void> {
debug('Creating label ' + name)
if (!this.options.readonly)
await this.octokit.issues.createLabel({ ...this.params, color, description, name })
else this.mockLabels.add(name)
}
async deleteLabel(name: string): Promise<void> {
debug('Deleting label ' + name)
try {
if (!this.options.readonly) await this.octokit.issues.deleteLabel({ ...this.params, name })
} catch (err) {
if (err.status === 404) {
return
}
throw err
}
}
async readConfig(path: string): Promise<any> {
debug('Reading config at ' + path)
const repoPath = `.github/${path}.json`
try {
const data = (await this.octokit.repos.getContents({ ...this.params, path: repoPath })).data
if ('type' in data && data.type === 'file') {
if (data.encoding === 'base64' && data.content) {
return JSON.parse(Buffer.from(data.content, 'base64').toString('utf-8'))
}
throw Error(`Could not read contents "${data.content}" in encoding "${data.encoding}"`)
}
throw Error('Found directory at config path when expecting file' + JSON.stringify(data))
} catch (e) {
throw Error('Error with config file at ' + repoPath + ': ' + JSON.stringify(e))
}
}
async releaseContainsCommit(release: string, commit: string): Promise<'yes' | 'no' | 'unknown'> {
return new Promise((resolve, reject) =>
exec(`git -C ./repo merge-base --is-ancestor ${commit} ${release}`, (err) => {
if (!err || err.code === 1) {
resolve(!err ? 'yes' : 'no')
} else if (err.message.includes(`Not a valid commit name ${release}`)) {
// release branch is forked. Probably in endgame. Not released.
resolve('no')
} else if (err.message.includes(`Not a valid commit name ${commit}`)) {
// commit is probably in a different repo.
resolve('unknown')
} else {
reject(err)
}
}),
)
}
async dispatch(title: string): Promise<void> {
debug('Dispatching ' + title)
if (!this.options.readonly)
await this.octokit.repos.createDispatchEvent({ ...this.params, event_type: title })
}
}
export class OctoKitIssue extends OctoKit implements GitHubIssue {
constructor(
token: string,
protected params: { repo: string; owner: string },
private issueData: { number: number } | Issue,
options: { readonly: boolean } = { readonly: false },
) {
super(token, params, options)
console.log('running bot on issue', issueData.number)
}
async addAssignee(assignee: string): Promise<void> {
debug('Adding assignee ' + assignee + ' to ' + this.issueData.number)
if (!this.options.readonly) {
await this.octokit.issues.addAssignees({
...this.params,
issue_number: this.issueData.number,
assignees: [assignee],
})
}
}
async removeAssignee(assignee: string): Promise<void> {
debug('Removing assignee ' + assignee + ' to ' + this.issueData.number)
if (!this.options.readonly) {
await this.octokit.issues.removeAssignees({
...this.params,
issue_number: this.issueData.number,
assignees: [assignee],
})
}
}
async closeIssue(): Promise<void> {
debug('Closing issue ' + this.issueData.number)
if (!this.options.readonly)
await this.octokit.issues.update({
...this.params,
issue_number: this.issueData.number,
state: 'closed',
})
}
async reopenIssue(): Promise<void> {
debug('Reopening issue ' + this.issueData.number)
if (!this.options.readonly)
await this.octokit.issues.update({
...this.params,
issue_number: this.issueData.number,
state: 'open',
})
}
async lockIssue(): Promise<void> {
debug('Locking issue ' + this.issueData.number)
if (!this.options.readonly)
await this.octokit.issues.lock({ ...this.params, issue_number: this.issueData.number })
}
async getIssue(): Promise<Issue> {
if (isIssue(this.issueData)) {
debug('Got issue data from query result ' + this.issueData.number)
return this.issueData
}
console.log('Fetching issue ' + this.issueData.number)
const issue = (
await this.octokit.issues.get({
...this.params,
issue_number: this.issueData.number,
mediaType: { previews: ['squirrel-girl'] },
})
).data
return (this.issueData = this.octokitIssueToIssue(issue))
}
async postComment(body: string): Promise<void> {
debug(`Posting comment ${body} on ${this.issueData.number}`)
if (!this.options.readonly)
await this.octokit.issues.createComment({
...this.params,
issue_number: this.issueData.number,
body,
})
}
async deleteComment(id: number): Promise<void> {
debug(`Deleting comment ${id} on ${this.issueData.number}`)
if (!this.options.readonly)
await this.octokit.issues.deleteComment({
owner: this.params.owner,
repo: this.params.repo,
comment_id: id,
})
}
async setMilestone(milestoneId: number) {
debug(`Setting milestone for ${this.issueData.number} to ${milestoneId}`)
if (!this.options.readonly)
await this.octokit.issues.update({
...this.params,
issue_number: this.issueData.number,
milestone: milestoneId,
})
}
async *getComments(last?: boolean): AsyncIterableIterator<Comment[]> {
debug('Fetching comments for ' + this.issueData.number)
const response = this.octokit.paginate.iterator(
this.octokit.issues.listComments.endpoint.merge({
...this.params,
issue_number: this.issueData.number,
per_page: 100,
...(last ? { per_page: 1, page: (await this.getIssue()).numComments } : {}),
}),
)
for await (const page of response) {
numRequests++
yield (page.data as Octokit.IssuesListCommentsResponseItem[]).map((comment) => ({
author: { name: comment.user.login, isGitHubApp: comment.user.type === 'Bot' },
body: comment.body,
id: comment.id,
timestamp: +new Date(comment.created_at),
}))
}
}
async addLabel(name: string): Promise<void> {
debug(`Adding label ${name} to ${this.issueData.number}`)
if (!(await this.repoHasLabel(name))) {
throw Error(`Action could not execute becuase label ${name} is not defined.`)
}
if (!this.options.readonly)
await this.octokit.issues.addLabels({
...this.params,
issue_number: this.issueData.number,
labels: [name],
})
}
async getAssigner(assignee: string): Promise<string> {
const options = this.octokit.issues.listEventsForTimeline.endpoint.merge({
...this.params,
issue_number: this.issueData.number,
})
let assigner: string | undefined
for await (const event of this.octokit.paginate.iterator(options)) {
numRequests++
const timelineEvents = event.data as Octokit.IssuesListEventsForTimelineResponseItem[]
for (const timelineEvent of timelineEvents) {
if (
timelineEvent.event === 'assigned' &&
(timelineEvent as any).assignee.login === assignee
) {
assigner = timelineEvent.actor.login
}
}
}
if (!assigner) {
throw Error('Expected to find ' + assignee + ' in issue timeline but did not.')
}
return assigner
}
async removeLabel(name: string): Promise<void> {
debug(`Removing label ${name} from ${this.issueData.number}`)
try {
if (!this.options.readonly)
await this.octokit.issues.removeLabel({
...this.params,
issue_number: this.issueData.number,
name,
})
} catch (err) {
if (err.status === 404) {
console.log(`Label ${name} not found on issue`)
return
}
throw err
}
}
async getClosingInfo(
alreadyChecked: number[] = [],
): Promise<{ hash: string | undefined; timestamp: number } | undefined> {
if (alreadyChecked.includes(this.issueData.number)) {
return undefined
}
alreadyChecked.push(this.issueData.number)
if ((await this.getIssue()).open) {
return
}
const closingHashComment = /(?:\\|\/)closedWith (\S*)/
const options = this.octokit.issues.listEventsForTimeline.endpoint.merge({
...this.params,
issue_number: this.issueData.number,
})
let closingCommit: { hash: string | undefined; timestamp: number } | undefined
const crossReferencing: number[] = []
for await (const event of this.octokit.paginate.iterator(options)) {
numRequests++
const timelineEvents = event.data as Octokit.IssuesListEventsForTimelineResponseItem[]
for (const timelineEvent of timelineEvents) {
if (
(timelineEvent.event === 'closed' || timelineEvent.event === 'merged') &&
timelineEvent.commit_id &&
timelineEvent.commit_url
.toLowerCase()
.includes(`/${this.params.owner}/${this.params.repo}/`.toLowerCase())
) {
closingCommit = {
hash: timelineEvent.commit_id,
timestamp: +new Date(timelineEvent.created_at),
}
}
if (timelineEvent.event === 'reopened') {
closingCommit = undefined
}
if (
timelineEvent.event === 'commented' &&
!((timelineEvent as any).body as string)?.includes('UNABLE_TO_LOCATE_COMMIT_MESSAGE') &&
closingHashComment.test((timelineEvent as any).body)
) {
closingCommit = {
hash: closingHashComment.exec((timelineEvent as any).body)![1],
timestamp: +new Date(timelineEvent.created_at),
}
}
if (
timelineEvent.event === 'cross-referenced' &&
(timelineEvent as any).source?.issue?.number &&
(timelineEvent as any).source?.issue?.pull_request?.url.includes(
`/${this.params.owner}/${this.params.repo}/`.toLowerCase(),
)
) {
crossReferencing.push((timelineEvent as any).source.issue.number)
}
}
}
// If we dont have any closing info, try to get it from linked issues (PRs).
// If there's a linked issue that was closed at almost the same time, guess it was a PR that closed this.
if (!closingCommit) {
for (const id of crossReferencing.reverse()) {
const closed = await new OctoKitIssue(this.token, this.params, {
number: id,
}, this.options).getClosingInfo(alreadyChecked)
if (closed) {
if (Math.abs(closed.timestamp - ((await this.getIssue()).closedAt ?? 0)) < 5000) {
closingCommit = closed
break
}
}
}
}
console.log(`Got ${JSON.stringify(closingCommit)} as closing commit of ${this.issueData.number}`)
return closingCommit
}
}
function isIssue(object: any): object is Issue {
const isIssue =
'author' in object &&
'body' in object &&
'title' in object &&
'labels' in object &&
'open' in object &&
'locked' in object &&
'number' in object &&
'numComments' in object &&
'reactions' in object &&
'milestoneId' in object
return isIssue
}
+129
View File
@@ -0,0 +1,129 @@
"use strict";
/*---------------------------------------------------------------------------------------------
* Copyright (c) Microsoft Corporation. All rights reserved.
* Licensed under the MIT License. See LICENSE in the project root for license information.
*--------------------------------------------------------------------------------------------*/
Object.defineProperty(exports, "__esModule", { value: true });
exports.Action = void 0;
const octokit_1 = require("../api/octokit");
const github_1 = require("@actions/github");
const utils_1 = require("./utils");
const core_1 = require("@actions/core");
class Action {
constructor() {
this.token = utils_1.getRequiredInput('token');
this.username = new github_1.GitHub(this.token).users.getAuthenticated().then((v) => v.data.name);
}
async run() {
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o;
console.log('running ', this.id, 'with context', {
...github_1.context,
payload: {
issue: (_b = (_a = github_1.context.payload) === null || _a === void 0 ? void 0 : _a.issue) === null || _b === void 0 ? void 0 : _b.number,
label: (_d = (_c = github_1.context.payload) === null || _c === void 0 ? void 0 : _c.label) === null || _d === void 0 ? void 0 : _d.name,
repository: (_f = (_e = github_1.context.payload) === null || _e === void 0 ? void 0 : _e.repository) === null || _f === void 0 ? void 0 : _f.html_url,
sender: (_j = (_h = (_g = github_1.context.payload) === null || _g === void 0 ? void 0 : _g.sender) === null || _h === void 0 ? void 0 : _h.login) !== null && _j !== void 0 ? _j : (_l = (_k = github_1.context.payload) === null || _k === void 0 ? void 0 : _k.sender) === null || _l === void 0 ? void 0 : _l.type,
},
});
if (utils_1.errorLoggingIssue) {
const { repo, issue, owner } = utils_1.errorLoggingIssue;
if (github_1.context.repo.repo === repo &&
github_1.context.repo.owner === owner &&
((_m = github_1.context.payload.issue) === null || _m === void 0 ? void 0 : _m.number) === issue) {
return console.log('refusing to run on error logging issue to prevent cascading errors');
}
}
try {
const token = utils_1.getRequiredInput('token');
const readonly = !!core_1.getInput('readonly');
const issue = (_o = github_1.context === null || github_1.context === void 0 ? void 0 : github_1.context.issue) === null || _o === void 0 ? void 0 : _o.number;
if (issue) {
const octokit = new octokit_1.OctoKitIssue(token, github_1.context.repo, { number: issue }, { readonly });
if (github_1.context.eventName === 'issue_comment') {
await this.onCommented(octokit, github_1.context.payload.comment.body, github_1.context.actor);
}
else if (github_1.context.eventName === 'issues') {
switch (github_1.context.payload.action) {
case 'opened':
await this.onOpened(octokit);
break;
case 'reopened':
await this.onReopened(octokit);
break;
case 'closed':
await this.onClosed(octokit);
break;
case 'labeled':
await this.onLabeled(octokit, github_1.context.payload.label.name);
break;
case 'unassigned':
await this.onUnassigned(octokit, github_1.context.payload.assignee.login);
break;
case 'edited':
await this.onEdited(octokit);
break;
case 'milestoned':
await this.onMilestoned(octokit);
break;
default:
throw Error('Unexpected action: ' + github_1.context.payload.action);
}
}
}
else {
await this.onTriggered(new octokit_1.OctoKit(token, github_1.context.repo, { readonly }));
}
}
catch (e) {
await this.error(e);
}
const usage = await utils_1.getRateLimit(this.token);
}
async error(error) {
const details = {
message: `${error.message}\n${error.stack}`,
id: this.id,
user: await this.username,
};
if (github_1.context.issue.number)
details.issue = github_1.context.issue.number;
const rendered = `
Message: ${details.message}
Actor: ${details.user}
ID: ${details.id}
`;
await utils_1.logErrorToIssue(rendered, true, this.token);
core_1.setFailed(error.message);
}
async onTriggered(_octokit) {
throw Error('not implemented');
}
async onEdited(_issue) {
throw Error('not implemented');
}
async onLabeled(_issue, _label) {
throw Error('not implemented');
}
async onUnassigned(_issue, _label) {
throw Error('not implemented');
}
async onOpened(_issue) {
throw Error('not implemented');
}
async onReopened(_issue) {
throw Error('not implemented');
}
async onClosed(_issue) {
throw Error('not implemented');
}
async onMilestoned(_issue) {
throw Error('not implemented');
}
async onCommented(_issue, _comment, _actor) {
throw Error('not implemented');
}
}
exports.Action = Action;
//# sourceMappingURL=Action.js.map
+137
View File
@@ -0,0 +1,137 @@
/*---------------------------------------------------------------------------------------------
* Copyright (c) Microsoft Corporation. All rights reserved.
* Licensed under the MIT License. See LICENSE in the project root for license information.
*--------------------------------------------------------------------------------------------*/
import { OctoKit, OctoKitIssue, getNumRequests } from '../api/octokit'
import { context, GitHub } from '@actions/github'
import { getRequiredInput, logErrorToIssue, getRateLimit, errorLoggingIssue } from './utils'
import { getInput, setFailed } from '@actions/core'
export abstract class Action {
abstract id: string
private username: Promise<string>
private token = getRequiredInput('token')
constructor() {
this.username = new GitHub(this.token).users.getAuthenticated().then((v) => v.data.name)
}
public async run() {
console.log('running ', this.id, 'with context', {
...context,
payload: {
issue: context.payload?.issue?.number,
label: context.payload?.label?.name,
repository: context.payload?.repository?.html_url,
sender: context.payload?.sender?.login ?? context.payload?.sender?.type,
},
})
if (errorLoggingIssue) {
const { repo, issue, owner } = errorLoggingIssue
if (
context.repo.repo === repo &&
context.repo.owner === owner &&
context.payload.issue?.number === issue
) {
return console.log('refusing to run on error logging issue to prevent cascading errors')
}
}
try {
const token = getRequiredInput('token')
const readonly = !!getInput('readonly')
const issue = context?.issue?.number
if (issue) {
const octokit = new OctoKitIssue(token, context.repo, { number: issue }, { readonly })
if (context.eventName === 'issue_comment') {
await this.onCommented(octokit, context.payload.comment.body, context.actor)
} else if (context.eventName === 'issues') {
switch (context.payload.action) {
case 'opened':
await this.onOpened(octokit)
break
case 'reopened':
await this.onReopened(octokit)
break
case 'closed':
await this.onClosed(octokit)
break
case 'labeled':
await this.onLabeled(octokit, context.payload.label.name)
break
case 'unassigned':
await this.onUnassigned(octokit, context.payload.assignee.login)
break
case 'edited':
await this.onEdited(octokit)
break
case 'milestoned':
await this.onMilestoned(octokit)
break
default:
throw Error('Unexpected action: ' + context.payload.action)
}
}
} else {
await this.onTriggered(new OctoKit(token, context.repo, { readonly }))
}
} catch (e) {
await this.error(e)
}
const usage = await getRateLimit(this.token)
}
private async error(error: Error) {
const details: any = {
message: `${error.message}\n${error.stack}`,
id: this.id,
user: await this.username,
}
if (context.issue.number) details.issue = context.issue.number
const rendered = `
Message: ${details.message}
Actor: ${details.user}
ID: ${details.id}
`
await logErrorToIssue(rendered, true, this.token)
setFailed(error.message)
}
protected async onTriggered(_octokit: OctoKit): Promise<void> {
throw Error('not implemented')
}
protected async onEdited(_issue: OctoKitIssue): Promise<void> {
throw Error('not implemented')
}
protected async onLabeled(_issue: OctoKitIssue, _label: string): Promise<void> {
throw Error('not implemented')
}
protected async onUnassigned(_issue: OctoKitIssue, _label: string): Promise<void> {
throw Error('not implemented')
}
protected async onOpened(_issue: OctoKitIssue): Promise<void> {
throw Error('not implemented')
}
protected async onReopened(_issue: OctoKitIssue): Promise<void> {
throw Error('not implemented')
}
protected async onClosed(_issue: OctoKitIssue): Promise<void> {
throw Error('not implemented')
}
protected async onMilestoned(_issue: OctoKitIssue): Promise<void> {
throw Error('not implemented')
}
protected async onCommented(_issue: OctoKitIssue, _comment: string, _actor: string): Promise<void> {
throw Error('not implemented')
}
}
+165
View File
@@ -0,0 +1,165 @@
"use strict";
/*---------------------------------------------------------------------------------------------
* Copyright (c) Microsoft Corporation. All rights reserved.
* Licensed under the MIT License. See LICENSE in the project root for license information.
*--------------------------------------------------------------------------------------------*/
Object.defineProperty(exports, "__esModule", { value: true });
exports.ActionBase = void 0;
class ActionBase {
constructor(labels, milestoneName, milestoneId, ignoreLabels, ignoreMilestoneNames, ignoreMilestoneIds, minimumVotes, maximumVotes) {
this.labels = labels;
this.milestoneName = milestoneName;
this.milestoneId = milestoneId;
this.ignoreLabels = ignoreLabels;
this.ignoreMilestoneNames = ignoreMilestoneNames;
this.ignoreMilestoneIds = ignoreMilestoneIds;
this.minimumVotes = minimumVotes;
this.maximumVotes = maximumVotes;
this.labelsSet = [];
this.ignoreLabelsSet = [];
this.ignoreMilestoneNamesSet = [];
this.ignoreMilestoneIdsSet = [];
this.ignoreAllWithLabels = false;
this.ignoreAllWithMilestones = false;
}
buildQuery(baseQuery) {
var _a, _b;
let query = baseQuery;
console.log(`labels: ${this.labels}`);
console.log(`milestoneName: ${this.milestoneName}`);
console.log(`milestoneId: ${this.milestoneId}`);
console.log(`ignoreLabels: ${this.ignoreLabels}`);
console.log(`ignoreMilestoneNames: ${this.ignoreMilestoneNames}`);
console.log(`ignoreMilestoneIds: ${this.ignoreMilestoneIds}`);
console.log(`minimumVotes: ${this.minimumVotes}`);
console.log(`maximumVotes: ${this.maximumVotes}`);
// Both milestone name and milestone Id must be provided and must match.
// The name is used to construct the query, which does not accept ID.
// The ID is used for comparisons with issue data, which does not include the name.
// TODO: Figure out a way to convert either from milestone name to ID, or vice versa.
// If label inclusion and exclusion are mixed, exclusion will take precedence.
// For example, an issue with both labels A and B will not match if B is excluded, even if A is included.
// If a milestoneName/milestoneId are set, ignoreMilenameName/ignoreMilestoneIds are ignored.
// GitHub does not appear to support searching for all issues with milestones (not lacking a milestone). "-no:milestone" does not work.
// GitHub does not appear to support searching for all issues with labels (not lacking a label). "-no:label" does not work.
// All indicated labels must be present
if (this.labels) {
this.labelsSet = (_a = this.labels) === null || _a === void 0 ? void 0 : _a.split(',');
for (const str of this.labelsSet) {
if (str != "") {
query = query.concat(` label:"${str}"`);
}
}
}
if (this.ignoreLabels) {
if (this.ignoreLabels == "*" && !this.labels) { // only if unlabeled
query = query.concat(` no:label`);
this.ignoreAllWithLabels = true;
}
else {
this.ignoreLabelsSet = (_b = this.ignoreLabels) === null || _b === void 0 ? void 0 : _b.split(',');
for (const str of this.ignoreLabelsSet) {
if (str != "") {
query = query.concat(` -label:"${str}"`);
}
}
}
}
if (this.milestoneName) {
query = query.concat(` milestone:"${this.milestoneName}"`);
}
else if (this.ignoreMilestoneNames) {
if (this.ignoreMilestoneNames == "*") {
query = query.concat(` no:milestone`);
this.ignoreAllWithMilestones = true;
}
else if (this.ignoreMilestoneIds) {
this.ignoreMilestoneNamesSet = this.ignoreMilestoneNames.split(',');
this.ignoreMilestoneIdsSet = this.ignoreMilestoneIds.split(',');
for (const str of this.ignoreMilestoneNamesSet) {
if (str != "") {
query = query.concat(` -milestone:"${str}"`);
}
}
}
}
return query;
}
// This is necessary because GitHub sometimes returns incorrect results,
// and because issues may get modified while we are processing them.
validateIssue(issue) {
if (this.ignoreAllWithLabels) {
// Validate that the issue does not have labels
if (issue.labels && issue.labels.length !== 0) {
console.log(`Issue ${issue.number} skipped due to label found after querying for no:label.`);
return false;
}
}
else {
// Make sure all labels we wanted are present.
if ((!issue.labels || issue.labels.length == 0) && this.labelsSet.length > 0) {
console.log(`Issue ${issue.number} skipped due to not having a required label set. No labels found.`);
return false;
}
for (const str of this.labelsSet) {
if (!issue.labels.includes(str)) {
console.log(`Issue ${issue.number} skipped due to not having a required label set.`);
return false;
}
}
// Make sure no labels we wanted to ignore are present.
if (issue.labels && issue.labels.length > 0) {
for (const str of this.ignoreLabelsSet) {
if (issue.labels.includes(str)) {
console.log(`Issue ${issue.number} skipped due to having an ignore label set: ${str}`);
return false;
}
}
}
}
if (this.ignoreAllWithMilestones) {
// Validate that the issue does not have a milestone.
if (issue.milestoneId != null) {
console.log(`Issue ${issue.number} skipped due to milestone found after querying for no:milestone.`);
return false;
}
}
else {
// Make sure milestone is present, if required.
if (this.milestoneId != undefined && issue.milestoneId != +this.milestoneId) {
console.log(`Issue ${issue.number} skipped due to not having required milsetone id ${this.milestoneId}. Had: ${issue.milestoneId}`);
return false;
}
// Make sure a milestones we wanted to ignore is not present.
if (issue.milestoneId != null) {
for (const str of this.ignoreMilestoneIdsSet) {
if (issue.milestoneId == +str) {
console.log(`Issue ${issue.number} skipped due to milestone ${issue.milestoneId} found in list of ignored milestone IDs.`);
return false;
}
}
}
}
// Verify the issue has a sufficient number of upvotes
let upvotes = 0;
if (issue.reactions) {
upvotes = issue.reactions['+1'];
}
if (this.minimumVotes != undefined) {
if (upvotes < this.minimumVotes) {
console.log(`Issue ${issue.number} skipped due to not having at least ${this.minimumVotes} upvotes. Had: ${upvotes}`);
return false;
}
}
// Verify the issue does not have too many upvotes
if (this.maximumVotes != undefined) {
if (upvotes > this.maximumVotes) {
console.log(`Issue ${issue.number} skipped due to having more than ${this.maximumVotes} upvotes. Had: ${upvotes}`);
return false;
}
}
return true;
}
}
exports.ActionBase = ActionBase;
//# sourceMappingURL=ActionBase.js.map
+170
View File
@@ -0,0 +1,170 @@
/*---------------------------------------------------------------------------------------------
* Copyright (c) Microsoft Corporation. All rights reserved.
* Licensed under the MIT License. See LICENSE in the project root for license information.
*--------------------------------------------------------------------------------------------*/
import { Issue } from '../api/api'
export class ActionBase {
constructor(
private labels?: string,
private milestoneName?: string,
private milestoneId?: string,
private ignoreLabels?: string,
private ignoreMilestoneNames?: string,
private ignoreMilestoneIds?: string,
private minimumVotes?: number,
private maximumVotes?: number
) {}
private labelsSet: string[] = [];
private ignoreLabelsSet: string[] = [];
private ignoreMilestoneNamesSet: string[] = [];
private ignoreMilestoneIdsSet: string[] = [];
private ignoreAllWithLabels: boolean = false;
private ignoreAllWithMilestones: boolean = false;
buildQuery(baseQuery: string): string {
let query = baseQuery;
console.log(`labels: ${this.labels}`);
console.log(`milestoneName: ${this.milestoneName}`);
console.log(`milestoneId: ${this.milestoneId}`);
console.log(`ignoreLabels: ${this.ignoreLabels}`);
console.log(`ignoreMilestoneNames: ${this.ignoreMilestoneNames}`);
console.log(`ignoreMilestoneIds: ${this.ignoreMilestoneIds}`);
console.log(`minimumVotes: ${this.minimumVotes}`);
console.log(`maximumVotes: ${this.maximumVotes}`);
// Both milestone name and milestone Id must be provided and must match.
// The name is used to construct the query, which does not accept ID.
// The ID is used for comparisons with issue data, which does not include the name.
// TODO: Figure out a way to convert either from milestone name to ID, or vice versa.
// If label inclusion and exclusion are mixed, exclusion will take precedence.
// For example, an issue with both labels A and B will not match if B is excluded, even if A is included.
// If a milestoneName/milestoneId are set, ignoreMilenameName/ignoreMilestoneIds are ignored.
// GitHub does not appear to support searching for all issues with milestones (not lacking a milestone). "-no:milestone" does not work.
// GitHub does not appear to support searching for all issues with labels (not lacking a label). "-no:label" does not work.
// All indicated labels must be present
if (this.labels) {
this.labelsSet = this.labels?.split(',');
for (const str of this.labelsSet) {
if (str != "") {
query = query.concat(` label:"${str}"`)
}
}
}
if (this.ignoreLabels) {
if (this.ignoreLabels == "*" && !this.labels) { // only if unlabeled
query = query.concat(` no:label`)
this.ignoreAllWithLabels = true;
} else {
this.ignoreLabelsSet = this.ignoreLabels?.split(',');
for (const str of this.ignoreLabelsSet) {
if (str != "") {
query = query.concat(` -label:"${str}"`)
}
}
}
}
if (this.milestoneName) {
query = query.concat(` milestone:"${this.milestoneName}"`)
}
else if (this.ignoreMilestoneNames) {
if (this.ignoreMilestoneNames == "*") {
query = query.concat(` no:milestone`)
this.ignoreAllWithMilestones = true;
} else if (this.ignoreMilestoneIds) {
this.ignoreMilestoneNamesSet = this.ignoreMilestoneNames.split(',');
this.ignoreMilestoneIdsSet = this.ignoreMilestoneIds.split(',');
for (const str of this.ignoreMilestoneNamesSet) {
if (str != "") {
query = query.concat(` -milestone:"${str}"`)
}
}
}
}
return query;
}
// This is necessary because GitHub sometimes returns incorrect results,
// and because issues may get modified while we are processing them.
validateIssue(issue: Issue): boolean {
if (this.ignoreAllWithLabels) {
// Validate that the issue does not have labels
if (issue.labels && issue.labels.length !== 0) {
console.log(`Issue ${issue.number} skipped due to label found after querying for no:label.`);
return false;
}
} else {
// Make sure all labels we wanted are present.
if ((!issue.labels || issue.labels.length == 0) && this.labelsSet.length > 0) {
console.log(`Issue ${issue.number} skipped due to not having a required label set. No labels found.`);
return false;
}
for (const str of this.labelsSet) {
if (!issue.labels.includes(str)) {
console.log(`Issue ${issue.number} skipped due to not having a required label set.`);
return false;
}
}
// Make sure no labels we wanted to ignore are present.
if (issue.labels && issue.labels.length > 0) {
for (const str of this.ignoreLabelsSet) {
if (issue.labels.includes(str)) {
console.log(`Issue ${issue.number} skipped due to having an ignore label set: ${str}`);
return false;
}
}
}
}
if (this.ignoreAllWithMilestones) {
// Validate that the issue does not have a milestone.
if (issue.milestoneId != null) {
console.log(`Issue ${issue.number} skipped due to milestone found after querying for no:milestone.`);
return false;
}
} else {
// Make sure milestone is present, if required.
if (this.milestoneId != undefined && issue.milestoneId != +this.milestoneId) {
console.log(`Issue ${issue.number} skipped due to not having required milsetone id ${this.milestoneId}. Had: ${issue.milestoneId}`);
return false;
}
// Make sure a milestones we wanted to ignore is not present.
if (issue.milestoneId != null) {
for (const str of this.ignoreMilestoneIdsSet) {
if (issue.milestoneId == +str) {
console.log(`Issue ${issue.number} skipped due to milestone ${issue.milestoneId} found in list of ignored milestone IDs.`);
return false;
}
}
}
}
// Verify the issue has a sufficient number of upvotes
let upvotes = 0;
if (issue.reactions) {
upvotes = issue.reactions['+1'];
}
if (this.minimumVotes != undefined) {
if (upvotes < this.minimumVotes) {
console.log(`Issue ${issue.number} skipped due to not having at least ${this.minimumVotes} upvotes. Had: ${upvotes}`);
return false;
}
}
// Verify the issue does not have too many upvotes
if (this.maximumVotes != undefined) {
if (upvotes > this.maximumVotes) {
console.log(`Issue ${issue.number} skipped due to having more than ${this.maximumVotes} upvotes. Had: ${upvotes}`);
return false;
}
}
return true;
}
}
+99
View File
@@ -0,0 +1,99 @@
"use strict";
/*---------------------------------------------------------------------------------------------
* Copyright (c) Microsoft Corporation. All rights reserved.
* Licensed under the MIT License. See LICENSE in the project root for license information.
*--------------------------------------------------------------------------------------------*/
Object.defineProperty(exports, "__esModule", { value: true });
exports.logErrorToIssue = exports.errorLoggingIssue = exports.getRateLimit = exports.daysAgoToHumanReadbleDate = exports.daysAgoToTimestamp = exports.loadLatestRelease = exports.normalizeIssue = exports.getRequiredInput = exports.getInput = void 0;
const core = require("@actions/core");
const github_1 = require("@actions/github");
const axios_1 = require("axios");
const octokit_1 = require("../api/octokit");
exports.getInput = (name) => core.getInput(name) || undefined;
exports.getRequiredInput = (name) => core.getInput(name, { required: true });
exports.normalizeIssue = (issue) => {
let { body, title } = issue;
body = body !== null && body !== void 0 ? body : '';
title = title !== null && title !== void 0 ? title : '';
const isBug = body.includes('bug_report_template') || /Issue Type:.*Bug.*/.test(body);
const isFeatureRequest = body.includes('feature_request_template') || /Issue Type:.*Feature Request.*/.test(body);
const cleanse = (str) => {
let out = str
.toLowerCase()
.replace(/<!--.*-->/gu, '')
.replace(/.* version: .*/gu, '')
.replace(/issue type: .*/gu, '')
.replace(/vs ?code/gu, '')
.replace(/we have written.*please paste./gu, '')
.replace(/steps to reproduce:/gu, '')
.replace(/does this issue occur when all extensions are disabled.*/gu, '')
.replace(/!?\[[^\]]*\]\([^)]*\)/gu, '')
.replace(/\s+/gu, ' ')
.replace(/```[^`]*?```/gu, '');
while (out.includes(`<details>`) &&
out.includes('</details>') &&
out.indexOf(`</details>`) > out.indexOf(`<details>`)) {
out = out.slice(0, out.indexOf('<details>')) + out.slice(out.indexOf(`</details>`) + 10);
}
return out;
};
return {
body: cleanse(body),
title: cleanse(title),
issueType: isBug ? 'bug' : isFeatureRequest ? 'feature_request' : 'unknown',
};
};
exports.loadLatestRelease = async (quality) => (await axios_1.default.get(`https://vscode-update.azurewebsites.net/api/update/darwin/${quality}/latest`)).data;
exports.daysAgoToTimestamp = (days) => +new Date(Date.now() - days * 24 * 60 * 60 * 1000);
exports.daysAgoToHumanReadbleDate = (days) => new Date(Date.now() - days * 24 * 60 * 60 * 1000).toISOString().replace(/\.\d{3}\w$/, '');
exports.getRateLimit = async (token) => {
const usageData = (await new github_1.GitHub(token).rateLimit.get()).data.resources;
const usage = {};
['core', 'graphql', 'search'].forEach(async (category) => {
usage[category] = 1 - usageData[category].remaining / usageData[category].limit;
});
return usage;
};
exports.errorLoggingIssue = (() => {
try {
const repo = github_1.context.repo.owner.toLowerCase() + '/' + github_1.context.repo.repo.toLowerCase();
if (repo === 'microsoft/vscode-cpptools') {
return { repo: 'vscode-cpptools', owner: 'Microsoft', issue: 6282 };
}
else if (exports.getInput('errorLogIssueNumber')) {
return { ...github_1.context.repo, issue: +exports.getRequiredInput('errorLogIssueNumber') };
}
else {
return undefined;
}
}
catch (e) {
console.error(e);
return undefined;
}
})();
exports.logErrorToIssue = async (message, ping, token) => {
// Attempt to wait out abuse detection timeout if present
await new Promise((resolve) => setTimeout(resolve, 10000));
const dest = exports.errorLoggingIssue;
if (!dest)
return console.log('no error logging repo defined. swallowing error:', message);
return new octokit_1.OctoKitIssue(token, { owner: dest.owner, repo: dest.repo }, { number: dest.issue }, { readonly: !!exports.getInput('readonly') })
.postComment(`
Workflow: ${github_1.context.workflow}
Error: ${message}
Issue: ${ping ? `${github_1.context.repo.owner}/${github_1.context.repo.repo}#` : ''}${github_1.context.issue.number}
Repo: ${github_1.context.repo.owner}/${github_1.context.repo.repo}
<!-- Context:
${JSON.stringify(github_1.context, null, 2)
.replace(/<!--/gu, '<@--')
.replace(/-->/gu, '--@>')
.replace(/\/|\\/gu, 'slash-')}
-->
`);
};
//# sourceMappingURL=utils.js.map
+119
View File
@@ -0,0 +1,119 @@
/*---------------------------------------------------------------------------------------------
* Copyright (c) Microsoft Corporation. All rights reserved.
* Licensed under the MIT License. See LICENSE in the project root for license information.
*--------------------------------------------------------------------------------------------*/
import * as core from '@actions/core'
import { context, GitHub } from '@actions/github'
import axios from 'axios'
import { OctoKitIssue } from '../api/octokit'
export const getInput = (name: string) => core.getInput(name) || undefined
export const getRequiredInput = (name: string) => core.getInput(name, { required: true })
export const normalizeIssue = (issue: {
body: string
title: string
}): { body: string; title: string; issueType: 'bug' | 'feature_request' | 'unknown' } => {
let { body, title } = issue
body = body ?? ''
title = title ?? ''
const isBug = body.includes('bug_report_template') || /Issue Type:.*Bug.*/.test(body)
const isFeatureRequest =
body.includes('feature_request_template') || /Issue Type:.*Feature Request.*/.test(body)
const cleanse = (str: string) => {
let out = str
.toLowerCase()
.replace(/<!--.*-->/gu, '')
.replace(/.* version: .*/gu, '')
.replace(/issue type: .*/gu, '')
.replace(/vs ?code/gu, '')
.replace(/we have written.*please paste./gu, '')
.replace(/steps to reproduce:/gu, '')
.replace(/does this issue occur when all extensions are disabled.*/gu, '')
.replace(/!?\[[^\]]*\]\([^)]*\)/gu, '')
.replace(/\s+/gu, ' ')
.replace(/```[^`]*?```/gu, '')
while (
out.includes(`<details>`) &&
out.includes('</details>') &&
out.indexOf(`</details>`) > out.indexOf(`<details>`)
) {
out = out.slice(0, out.indexOf('<details>')) + out.slice(out.indexOf(`</details>`) + 10)
}
return out
}
return {
body: cleanse(body),
title: cleanse(title),
issueType: isBug ? 'bug' : isFeatureRequest ? 'feature_request' : 'unknown',
}
}
export interface Release {
productVersion: string
timestamp: number
version: string
}
export const loadLatestRelease = async (quality: 'stable' | 'insider'): Promise<Release | undefined> =>
(await axios.get(`https://vscode-update.azurewebsites.net/api/update/darwin/${quality}/latest`)).data
export const daysAgoToTimestamp = (days: number): number => +new Date(Date.now() - days * 24 * 60 * 60 * 1000)
export const daysAgoToHumanReadbleDate = (days: number) =>
new Date(Date.now() - days * 24 * 60 * 60 * 1000).toISOString().replace(/\.\d{3}\w$/, '')
export const getRateLimit = async (token: string) => {
const usageData = (await new GitHub(token).rateLimit.get()).data.resources
const usage = {} as { core: number; graphql: number; search: number }
;(['core', 'graphql', 'search'] as const).forEach(async (category) => {
usage[category] = 1 - usageData[category].remaining / usageData[category].limit
})
return usage
}
export const errorLoggingIssue = (() => {
try {
const repo = context.repo.owner.toLowerCase() + '/' + context.repo.repo.toLowerCase()
if (repo === 'microsoft/vscode-cpptools') {
return { repo: 'vscode-cpptools', owner: 'Microsoft', issue: 6282 }
} else if (getInput('errorLogIssueNumber')) {
return { ...context.repo, issue: +getRequiredInput('errorLogIssueNumber') }
} else {
return undefined
}
} catch (e) {
console.error(e)
return undefined
}
})()
export const logErrorToIssue = async (message: string, ping: boolean, token: string): Promise<void> => {
// Attempt to wait out abuse detection timeout if present
await new Promise((resolve) => setTimeout(resolve, 10000))
const dest = errorLoggingIssue
if (!dest) return console.log('no error logging repo defined. swallowing error:', message)
return new OctoKitIssue(token, { owner: dest.owner, repo: dest.repo }, { number: dest.issue }, { readonly: !!getInput('readonly') })
.postComment(`
Workflow: ${context.workflow}
Error: ${message}
Issue: ${ping ? `${context.repo.owner}/${context.repo.repo}#` : ''}${context.issue.number}
Repo: ${context.repo.owner}/${context.repo.repo}
<!-- Context:
${JSON.stringify(context, null, 2)
.replace(/<!--/gu, '<@--')
.replace(/-->/gu, '--@>')
.replace(/\/|\\/gu, 'slash-')}
-->
`)
}
+1453
View File
File diff suppressed because it is too large Load Diff
+21
View File
@@ -0,0 +1,21 @@
{
"name": "vscode-cpptools-github-triage-actions",
"version": "1.0.0",
"description": "GitHub Actions used by VS Code cpptools for triaging issues",
"scripts": {
"build": "tsc",
"lint": "eslint -c .eslintrc --fix --ext .ts .",
"watch": "tsc --watch"
},
"keywords": [],
"author": "",
"dependencies": {
"@actions/core": "^1.2.6",
"@actions/github": "^2.1.1",
"axios": "^0.19.2"
},
"devDependencies": {
"eslint": "^6.8.0",
"typescript": "^3.8.3"
}
}
+18
View File
@@ -0,0 +1,18 @@
{
"compilerOptions": {
"target": "es2019",
"strict": true,
"module": "commonjs",
"moduleResolution": "node",
"removeComments": false,
"resolveJsonModule": true,
"sourceMap": true,
"lib": [
"es2020"
]
},
"exclude": [
"**/*.test.ts",
"**/vm-filesystem/**"
]
}
+28
View File
@@ -0,0 +1,28 @@
name: By Design Closer
on:
schedule:
- cron: 0 12 * * * # Run at 12:00 PM UTC (4:00 AM PST, 5:00 AM PDT)
workflow_dispatch:
inputs:
readonly:
description: "readonly: Specify true or 1 to prevent changes from being commited to GitHub"
default: false
jobs:
main:
runs-on: ubuntu-latest
steps:
- name: Checkout Actions
uses: actions/checkout@v2
- name: Install Actions
run: cd ./.github/actions && npm install --production && cd ../..
- name: Stale Closer
uses: ./.github/actions/StaleCloser
with:
readonly: ${{ github.event.inputs.readonly }}
labels: by design
ignoreLabels: debugger,Feature Request,more info needed,internal
closeDays: 60
closeComment: "This issue has been closed automatically because it's labeled as 'by design' and has not had recent activity."
pingDays: 80
pingComment: "Hey @${assignee}, this issue might need further attention.\n\n@${author}, you can help us out by closing this issue if it is no longer relevant."
+55
View File
@@ -0,0 +1,55 @@
name: CI (Linux)
on:
push:
branches: [ master ]
pull_request:
branches: [ master ]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Use Node.js 10.16.x
uses: actions/setup-node@v1
with:
node-version: 10.16.x
- name: Install Dependencies
run: yarn install
working-directory: Extension
- name: Generate hashes for runtime dependency packages
run: yarn run generatePackageHashes
working-directory: Extension
- name: Compile Sources
run: yarn run compile
working-directory: Extension
- name: Validate Extension/package.json
run: yarn run pr-check
working-directory: Extension
- name: Run Linter
run: yarn run lint
working-directory: Extension
- name: Compile Test Sources
run: yarn run pretest
working-directory: Extension
- name: Run unit tests
uses: GabrielBB/[email protected]
with:
run: yarn run unitTests
working-directory: Extension
- name: Run languageServer integration tests
uses: GabrielBB/[email protected]
with:
run: yarn run integrationTests
working-directory: Extension
+55
View File
@@ -0,0 +1,55 @@
name: CI (Mac)
on:
push:
branches: [ master ]
pull_request:
branches: [ master ]
jobs:
build:
runs-on: macos-latest
steps:
- uses: actions/checkout@v2
- name: Use Node.js 10.16.x
uses: actions/setup-node@v1
with:
node-version: 10.16.x
- name: Install Dependencies
run: yarn install
working-directory: Extension
- name: Generate hashes for runtime dependency packages
run: yarn run generatePackageHashes
working-directory: Extension
- name: Compile Sources
run: yarn run compile
working-directory: Extension
- name: Validate Extension/package.json
run: yarn run pr-check
working-directory: Extension
- name: Run Linter
run: yarn run lint
working-directory: Extension
- name: Compile Test Sources
run: yarn run pretest
working-directory: Extension
- name: Run unit tests
uses: GabrielBB/[email protected]
with:
run: yarn run unitTests
working-directory: Extension
- name: Run languageServer integration tests
uses: GabrielBB/[email protected]
with:
run: yarn run integrationTests
working-directory: Extension
+51
View File
@@ -0,0 +1,51 @@
name: CI (Windows)
on:
push:
branches: [ master ]
pull_request:
branches: [ master ]
jobs:
build:
runs-on: windows-latest
steps:
- uses: actions/checkout@v2
- name: Use Node.js 10.16.x
uses: actions/setup-node@v1
with:
node-version: 10.16.x
- name: Install Dependencies
run: yarn install
working-directory: Extension
- name: Generate hashes for runtime dependency packages
run: yarn run generatePackageHashes
working-directory: Extension
- name: Compile Sources
run: yarn run compile
working-directory: Extension
- name: Validate Extension/package.json
run: yarn run pr-check
working-directory: Extension
- name: Run Linter
run: yarn run lint
working-directory: Extension
- name: Compile Test Sources
run: yarn run pretest
working-directory: Extension
- name: Run unit tests
run: yarn run unitTests
working-directory: Extension
- name: Run languageServer integration tests
run: yarn run integrationTests
working-directory: Extension
+28
View File
@@ -0,0 +1,28 @@
name: Duplicate Closer
on:
schedule:
- cron: 10 12 * * * # Run at 12:10 PM UTC (4:10 AM PST, 5:10 AM PDT)
workflow_dispatch:
inputs:
readonly:
description: "readonly: Specify true or 1 to prevent changes from being commited to GitHub"
default: false
jobs:
main:
runs-on: ubuntu-latest
steps:
- name: Checkout Actions
uses: actions/checkout@v2
- name: Install Actions
run: cd ./.github/actions && npm install --production && cd ../..
- name: Stale Closer
uses: ./.github/actions/StaleCloser
with:
readonly: ${{ github.event.inputs.readonly }}
labels: duplicate
ignoreLabels: debugger,Feature Request,more info needed,by design,internal
closeDays: 60
closeComment: "This issue has been closed automatically because it's labeled as a 'duplicate' and has not had recent activity."
pingDays: 80
pingComment: "Hey @${assignee}, this issue might need further attention.\n\n@${author}, you can help us out by closing this issue if it is no longer relevant."
@@ -0,0 +1,30 @@
name: Feature Request Closer (no milestone)
on:
schedule:
- cron: 50 11 * * * # Run at 11:50 AM UTC (3:50 AM PST, 4:50 AM PDT)
workflow_dispatch:
inputs:
readonly:
description: "readonly: Specify true or 1 to prevent changes from being commited to GitHub"
default: false
jobs:
main:
runs-on: ubuntu-latest
steps:
- name: Checkout Actions
uses: actions/checkout@v2
- name: Install Actions
run: cd ./.github/actions && npm install --production && cd ../..
- name: Stale Closer
uses: ./.github/actions/StaleCloser
with:
readonly: ${{ github.event.inputs.readonly }}
labels: Feature Request
ignoreLabels: debugger,internal
addLabels: more votes needed
closeDays: 60
maximumVotes: 2
closeComment: "This feature request is being closed due to insufficient upvotes. When enough upvotes are received, this issue will be eligible for our backlog."
setMilestoneId: 30
ignoreMilestoneNames: "*"
@@ -0,0 +1,30 @@
name: Feature Request Closer (Triage)
on:
schedule:
- cron: 40 11 * * * # Run at 11:40 AM UTC (3:40 AM PST, 4:40 AM PDT)
workflow_dispatch:
inputs:
readonly:
description: "readonly: Specify true or 1 to prevent changes from being commited to GitHub"
default: false
jobs:
main:
runs-on: ubuntu-latest
steps:
- name: Checkout Actions
uses: actions/checkout@v2
- name: Install Actions
run: cd ./.github/actions && npm install --production && cd ../..
- name: Stale Closer
uses: ./.github/actions/StaleCloser
with:
readonly: ${{ github.event.inputs.readonly }}
labels: Feature Request
ignoreLabels: debugger,internal
addLabels: more votes needed
closeDays: 60
maximumVotes: 2
closeComment: "This feature request is being closed due to insufficient upvotes. When enough upvotes are received, this issue will be eligible for our backlog."
milestoneName: Triage
milestoneId: 30
@@ -0,0 +1,31 @@
name: Feature Request Reopener
on:
schedule:
- cron: 20 12 * * * # Run at 12:20 PM UTC (4:20 AM PST, 5:20 AM PDT)
workflow_dispatch:
inputs:
readonly:
description: "readonly: Specify true or 1 to prevent changes from being commited to GitHub"
default: false
jobs:
main:
runs-on: ubuntu-latest
steps:
- name: Checkout Actions
uses: actions/checkout@v2
- name: Install Actions
run: cd ./.github/actions && npm install --production && cd ../..
- name: Run Reopener
uses: ./.github/actions/Reopener
with:
readonly: ${{ github.event.inputs.readonly }}
alsoApplyToOpenIssues: true
reopenComment: This feature request has received enough votes to be added to our backlog.
labels: Feature Request
minimumVotes: 3
ignoreLabels: debugger,internal
milestoneId: 30
milestoneName: Triage
setMilestoneId: 28
removeLabels: more votes needed
+25
View File
@@ -0,0 +1,25 @@
name: Locker
on:
schedule:
- cron: 30 11 * * * # Run at 11:30 AM UTC (3:30 AM PST, 4:30 AM PDT)
workflow_dispatch:
inputs:
readonly:
description: "readonly: Specify true or 1 to prevent changes from being commited to GitHub"
default: false
jobs:
main:
runs-on: ubuntu-latest
steps:
- name: Checkout Actions
uses: actions/checkout@v2
- name: Install Actions
run: cd ./.github/actions && npm install --production && cd ../..
- name: Run Locker
uses: ./.github/actions/Locker
with:
readonly: ${{ github.event.inputs.readonly }}
daysSinceClose: 45
daysSinceUpdate: 3
ignoreLabels: more votes needed,debugger,internal
@@ -0,0 +1,28 @@
name: More Info Needed Closer
on:
schedule:
- cron: 10 11 * * * # Run at 11:10 AM UTC (3:10 AM PST, 4:10 AM PDT)
workflow_dispatch:
inputs:
readonly:
description: "readonly: Specify true or 1 to prevent changes from being commited to GitHub"
default: false
jobs:
main:
runs-on: ubuntu-latest
steps:
- name: Checkout Actions
uses: actions/checkout@v2
- name: Install Actions
run: cd ./.github/actions && npm install --production && cd ../..
- name: Stale Closer
uses: ./.github/actions/StaleCloser
with:
readonly: ${{ github.event.inputs.readonly }}
labels: more info needed
ignoreLabels: debugger,internal
closeDays: 60
closeComment: "This issue has been closed automatically because it needs more information and has not had recent activity."
pingDays: 80
pingComment: "Hey @${assignee}, this issue might need further attention.\n\n@${author}, you can help us out by closing this issue if the problem no longer exists, or adding more information."
+28
View File
@@ -0,0 +1,28 @@
name: Question Closer
on:
schedule:
- cron: 20 11 * * * # Run at 11:20 AM UTC (3:20 AM PST, 4:20 AM PDT)
workflow_dispatch:
inputs:
readonly:
description: "readonly: Specify true or 1 to prevent changes from being commited to GitHub"
default: false
jobs:
main:
runs-on: ubuntu-latest
steps:
- name: Checkout Actions
uses: actions/checkout@v2
- name: Install Actions
run: cd ./.github/actions && npm install --production && cd ../..
- name: Stale Closer
uses: ./.github/actions/StaleCloser
with:
readonly: ${{ github.event.inputs.readonly }}
labels: question
ignoreLabels: debugger,internal
closeDays: 60
closeComment: "This issue has been closed automatically because it's labeled as a 'question' and has not had recent activity."
pingDays: 80
pingComment: "Hey @${assignee}, this issue might need further attention.\n\n@${author}, you can help us out by closing this issue if the question has been answered."
+61
View File
@@ -1,5 +1,66 @@
# C/C++ for Visual Studio Code Change Log
## Version 1.1.0: November 5, 2020
### New Features
* Add language server support for Windows ARM64 (no debugging yet). [#5583](https://github.com/microsoft/vscode-cpptools/issues/5583)
* [cppdbg] Debugger Protocol Updates:
* ReadMemoryRequest [PR MIEngine#1028](https://github.com/microsoft/MIEngine/pull/1028)
* ModulesRequest and ModuleEvent [PR MIEngine#1054](https://github.com/microsoft/MIEngine/pull/1054)
* [cppdbg] Support new SourceFileMap schema [PR #6319](https://github.com/microsoft/vscode-cpptools/pull/6319)
### Enhancements
* Add support to run c/cpp build tasks. [#3674](https://github.com/microsoft/vscode-cpptools/issues/3674), [#5270](https://github.com/microsoft/vscode-cpptools/issues/5270), [#5285](https://github.com/microsoft/vscode-cpptools/issues/5285)
* Tasks: Configure Task
* Tasks: Run Build Task
* C/C++: Build and debug active file.
* Add logging around compiler probing, and the "C/C++ Configuration Warnings" output channel. [#5259](https://github.com/microsoft/vscode-cpptools/issues/5259)
* Add compile commands info to Log Diagnostics. [#5761](https://github.com/microsoft/vscode-cpptools/issues/5761)
* Add `intelliSenseUpdateDelay` setting. [#6142](https://github.com/microsoft/vscode-cpptools/issues/6142)
* YuTengjing (@tjx666) [PR #6344](https://github.com/microsoft/vscode-cpptools/pull/6344)
* Enable support for specifying a compiler by only the filename if it's in the environment path. [#6179](https://github.com/microsoft/vscode-cpptools/issues/6179)
* Restart the IntelliSense process if its memory usage exceeds the `C_Cpp.intelliSenseMemoryLimit` setting. [#6230](https://github.com/microsoft/vscode-cpptools/issues/6230)
* [cppdbg] Stepping out of a function will display '$ReturnValue'.
* @Trass3r [PR MIEngine#1036](https://github.com/microsoft/MIEngine/pull/1036)
* [cppdbg] Support composite expressions in natvis ArrayItems
* @Trass3r [PR MIEngine#1044](https://github.com/microsoft/MIEngine/pull/1044)
* Add handling of the "-ansi" compiler arg when querying gcc/clang compilers.
* Add support for inferring the IntelliSenseMode based on the "--target" compiler arg.
* Add support for inferring the C standard based on new c11/c17 language standard args for cl.exe.
* Allow custom config providers to omit IntelliSenseMode and C/C++ language standard, enabling them to be inferred from the `compilerPath` and `compilerArgs`.
### Bug Fixes
* Change macOS Framework searching to only parse the "Current" framework folder when the "Headers" folder is not found. [#2046](https://github.com/microsoft/vscode-cpptools/issues/2046)
* Show the compiler path in the `Build and Debug Active File` dropdown. [#4278](https://github.com/microsoft/vscode-cpptools/issues/4278)
* Fix incorrect signature help active argument with multiple template parameters. [#4786](https://github.com/microsoft/vscode-cpptools/issues/4786)
* Fix bug with directories not getting created for browse.databaseFilename. [#5181](https://github.com/microsoft/vscode-cpptools/issues/5181)
* Allow the debug configuration to wait for the preLaunchTask to complete before continuing on and resolving environment variables or processes that may have been set in the 'tasks.json'. [#5287](https://github.com/microsoft/vscode-cpptools/issues/5287)
* Change the Windows SDK detection to require the shared, ucrt, and um folders. [#5817](https://github.com/microsoft/vscode-cpptools/issues/5817)
* Fix issues with IntelliSense for clang-cl.exe. [#6075](https://github.com/microsoft/vscode-cpptools/issues/6075)
* Fix "Comments are not permitted in JSON" error when `c_cpp_properties.json` is open but not active. [#6132](https://github.com/microsoft/vscode-cpptools/issues/6132)
* Rename the C language standard setting values from c18 and gnu18 to c17 and gnu17. [#6105](https://github.com/microsoft/vscode-cpptools/issues/6105)
* Add more IntelliSense support for std ranges, concepts, and modules exports (__cpp_lib_concepts is now enabled). [#6173](https://github.com/microsoft/vscode-cpptools/issues/6173)
* Add "-fnoblocks" when querying clang on Mac, as IntelliSense does not currently support blocks. [#6189](https://github.com/microsoft/vscode-cpptools/issues/6189)
* Fix clang-format on 32-bit Windows. [#6195](https://github.com/microsoft/vscode-cpptools/issues/6195)
* Fix incorrect formatting results when clang-format removes duplicate includes. [#6205](https://github.com/microsoft/vscode-cpptools/issues/6205)
* Fix a case where the main process could get stuck. [#6207](https://github.com/microsoft/vscode-cpptools/issues/6207)
* Fix C files being treated as C++ files with compile_commands.json. [#6279](https://github.com/microsoft/vscode-cpptools/issues/6279)
* Fix `Build and Debug Active File` race condition with EngineLogs. [#6304](https://github.com/microsoft/vscode-cpptools/pull/6304)
* Fix changes to some `c_cpp_properties.json` properties not taking effect (until a reload) if `compileCommands` is set. [#6332](https://github.com/microsoft/vscode-cpptools/issues/6332)
* Fix issue with compiler querying not handling various clang command line options correctly. [6359](https://github.com/microsoft/vscode-cpptools/issues/6356)
* Fix multiroot workspace tag parsing when `compileCommands` is set. [#6383](https://github.com/microsoft/vscode-cpptools/issues/6383)
* Fix mingw32 compilers not being detected. [#6394](https://github.com/microsoft/vscode-cpptools/issues/6394)
* Various bug fixes for vcFormat. [PR #6408](https://github.com/microsoft/vscode-cpptools/pull/6408)
* Fix issue causing zh-cn and zh-tw language files not to be used. [PR #6418](https://github.com/microsoft/vscode-cpptools/pull/6418)
* Fix the handling of various compiler arg pairs when querying compilers.
* Avoid parsing entries in compile_commands.json for file types that we do not support.
* Fixed an issue in which only C or C++ system headers were added to the browse path, rather than both.
* Fix issue causing some localized messages to be displayed incorrectly.
* Fixed issue with shipping an older version of vsdbg in offline packages.
### Other Contributions
* Refactoring provider classes.
* Abhishek Pal (@devabhishekpal) [PR #5998](https://github.com/microsoft/vscode-cpptools/pull/5998)
## Version 1.0.1: September 21, 2020
### Bug Fixes
* Fix "No IL available" IntelliSense error on Linux/macOS when `#error` directives are present in the source code. [#6009](https://github.com/microsoft/vscode-cpptools/issues/6009), [#6114](https://github.com/microsoft/vscode-cpptools/issues/6114)
+1
View File
@@ -56,6 +56,7 @@ The extension has platform-specific binary dependencies, therefore installation
`cpptools-linux-aarch64.vsix` | Linux ARM 64-bit
`cpptools-osx.vsix` | macOS
`cpptools-win32.vsix` | Windows 64-bit & 32-bit
`cpptools-win-arm64.vsix` | Windows ARM64
`cpptools-linux32.vsix` | Linux 32-bit ([available up to version 0.27.0](https://github.com/microsoft/vscode-cpptools/issues/5346))
## Contribution
+3 -3
View File
@@ -4,11 +4,11 @@
"--microsoft",
"--microsoft_bugs",
"--microsoft_version",
"1926",
"1928",
"--pack_alignment",
"8",
"-D_MSC_VER=1926",
"-D_MSC_FULL_VER=192628619",
"-D_MSC_VER=1928",
"-D_MSC_FULL_VER=192829507",
"-D_MSC_BUILD=0",
"-D_M_ARM=7"
],
+3 -3
View File
@@ -4,12 +4,12 @@
"--microsoft",
"--microsoft_bugs",
"--microsoft_version",
"1926",
"1928",
"--pack_alignment",
"8",
"-D_CPPUNWIND=1",
"-D_MSC_VER=1926",
"-D_MSC_FULL_VER=192628619",
"-D_MSC_VER=1928",
"-D_MSC_FULL_VER=192829507",
"-D_MSC_BUILD=0",
"-D_M_ARM64=1"
],
+3 -3
View File
@@ -4,12 +4,12 @@
"--microsoft",
"--microsoft_bugs",
"--microsoft_version",
"1926",
"1928",
"--pack_alignment",
"8",
"-D_CPPUNWIND=1",
"-D_MSC_VER=1926",
"-D_MSC_FULL_VER=192628619",
"-D_MSC_VER=1928",
"-D_MSC_FULL_VER=192829507",
"-D_MSC_BUILD=0",
"-D_M_X64=100",
"-D_M_AMD64=100"
+3 -3
View File
@@ -4,11 +4,11 @@
"--microsoft",
"--microsoft_bugs",
"--microsoft_version",
"1926",
"1928",
"--pack_alignment",
"8",
"-D_MSC_VER=1926",
"-D_MSC_FULL_VER=192628619",
"-D_MSC_VER=1928",
"-D_MSC_FULL_VER=192829507",
"-D_MSC_BUILD=0",
"-D_M_IX86=600",
"-D_M_IX86_FP=2"
+1 -1
View File
@@ -36,7 +36,7 @@
"gnu89",
"gnu99",
"gnu11",
"gnu18",
"gnu17",
"${default}"
]
},
+11 -6
View File
@@ -28,7 +28,7 @@
"c_cpp.configuration.formatting.Default.description": "将使用 clang-format 设置代码的格式。",
"c_cpp.configuration.formatting.Disabled.description": "将禁用代码格式设置。",
"c_cpp.configuration.vcFormat.indent.braces.description": "按照在“编辑器: 制表符大小”设置中指定的量缩进大括号。",
"c_cpp.configuration.vcFormat.indent.multiLineRelativeTo.description": "确定新行缩进的相关对象",
"c_cpp.configuration.vcFormat.indent.multiLineRelativeTo.description": "确定新行缩进的基准",
"c_cpp.configuration.vcFormat.indent.multiLineRelativeTo.outermostParenthesis.description": "相对于最外侧的左括号缩进新行。",
"c_cpp.configuration.vcFormat.indent.multiLineRelativeTo.innermostParenthesis.description": "相对于最内侧的左括号缩进新行。",
"c_cpp.configuration.vcFormat.indent.multiLineRelativeTo.statementBegin.description": "相对于当前语句的开头缩进新行。",
@@ -45,12 +45,12 @@
"c_cpp.configuration.vcFormat.indent.gotoLabels.leftmostColumn.description": "将 goto 标签置于代码的最左侧边缘。",
"c_cpp.configuration.vcFormat.indent.gotoLabels.none.description": "不会格式化 goto 标签。",
"c_cpp.configuration.vcFormat.indent.preprocessor.description": "预处理器指令的位置",
"c_cpp.configuration.vcFormat.indent.preprocessor.oneLeft.description": "按照在“编辑器: 制表符大小”设置中指定的量,预处理器指令于当前代码缩进的左侧",
"c_cpp.configuration.vcFormat.indent.preprocessor.oneLeft.description": "按照在“编辑器: 制表符大小”设置中指定的量,预处理器指令于当前代码缩进的左侧",
"c_cpp.configuration.vcFormat.indent.preprocessor.leftmostColumn.description": "预处理器指令位于代码的最左侧边缘。",
"c_cpp.configuration.vcFormat.indent.preprocessor.none.description": "不会格式化预处理器指令。",
"c_cpp.configuration.vcFormat.indent.accessSpecifiers.description": "按照在“编辑器: 制表符大小”设置中指定的量,相对于类或结构定义缩进访问说明符",
"c_cpp.configuration.vcFormat.indent.namespaceContents.description": "按照在“编辑器: 制表符大小”设置中指定的量,相对于封闭命名空间缩进代码",
"c_cpp.configuration.vcFormat.indent.preserveComment.description": "在格式设置操作过程中未更改注释的缩进。",
"c_cpp.configuration.vcFormat.indent.preserveComments.description": "在格式设置操作过程中未更改注释的缩进。",
"c_cpp.configuration.vcFormat.newLine.beforeOpenBrace.namespace.description": "用于命名空间的左大括号的位置",
"c_cpp.configuration.vcFormat.newLine.beforeOpenBrace.type.description": "用于类型定义的左大括号的位置",
"c_cpp.configuration.vcFormat.newLine.beforeOpenBrace.lambda.description": "用于 lambda 函数的左大括号的位置",
@@ -110,7 +110,7 @@
"c_cpp.configuration.vcFormat.space.aroundOperators.ignore.description": "保留输入的空格。",
"c_cpp.configuration.vcFormat.wrap.preserveBlocks.description": "块的换行选项",
"c_cpp.configuration.vcFormat.wrap.preserveBlocks.oneLiners.description": "无论任何“VC 格式: 新行”设置的值如何,在一行输入的完整代码块都保留在一行上",
"c_cpp.configuration.vcFormat.wrap.preserveBlocks.allOneLineScopes.description": "无论任何“VC 格式: 新行”设置的值如何,在一行输入左大括号和右大括号的任何代码都保留在一行上",
"c_cpp.configuration.vcFormat.wrap.preserveBlocks.allOneLineScopes.description": "无论任何“VC 格式: 新行”设置的值如何,在一行输入左大括号和右大括号的任何代码都保留在一行上",
"c_cpp.configuration.vcFormat.wrap.preserveBlocks.never.description": "始终根据“VC 格式: 新行”设置来设定代码块的格式",
"c_cpp.configuration.clang_format_path.description": "clang-format 可执行文件的完整路径。如果未指定,并且 Clang 格式在环境路径中可用,则使用 Clang 格式。如果在环境路径中找不到 Clang 格式,则将使用与该扩展绑定的 clang-format 的副本。",
"c_cpp.configuration.clang_format_style.description": "编码样式,当前支持: Visual Studio、LLVM、Google、Chromium、Mozilla、WebKit。使用 \"file\" 从当前目录或父目录中的 .clang 格式文件中加载样式。使用 {键: 值, ...} 设置特定参数。例如,\"Visual Studio\" 样式类似于: { BasedOnStyle: LLVM, UseTab: Never, IndentWidth: 4, TabWidth: 4, BreakBeforeBraces: Allman, AllowShortIfStatementsOnASingleLine: false, IndentCaseLabels: false, ColumnLimit: 0, AccessModifierOffset: -4, NamespaceIndentation: All }",
@@ -138,6 +138,8 @@
"c_cpp.configuration.configurationWarnings.description": "确定在配置提供程序扩展无法提供源文件配置时是否显示弹出通知。",
"c_cpp.configuration.intelliSenseCachePath.description": "为 IntelliSense 使用的缓存预编译标头定义文件夹路径。Windows 上的默认缓存路径为 \"%LocalAppData%/Microsoft/vscode-cpptools\"Linux 上为 \"$XDG_CACHE_HOME/vscode-cpptools/\" (若未定义 XDG_CACHE_HOME,则为 \"$HOME/.cache/vscode-cpptools/\")Mac 上为 \"$HOME/Library/Caches/vscode-cpptools/\"。如果未指定路径或指定的路径无效,则使用默认路径。",
"c_cpp.configuration.intelliSenseCacheSize.description": "缓存的预编译标头的每个工作区硬盘驱动器空间的最大大小(MB);实际使用量可能在此值上下波动。默认大小为 5120 MB。当大小为 0 时,预编译的标头缓存将被禁用。",
"c_cpp.configuration.intelliSenseMemoryLimit.description": "IntelliSense 进程的内存使用限制(MB)。默认限制为 4096 MB,最大限制为 16 GB。当 IntelliSense 进程超出限制时,扩展将关闭并重新启动改进程。",
"c_cpp.configuration.intelliSenseUpdateDelay.description": "控制修改之后到 IntelliSense 开始更新之间的延迟(以毫秒为单位)。",
"c_cpp.configuration.default.includePath.description": "在 cpp_properties.json 中未指定 \"includePath\" 时要在配置中使用的值。如果指定了 \"includePath\",则向数组添加 \"${default}\" 以从此设置插入值。",
"c_cpp.configuration.default.defines.description": "未指定 \"defines\" 时要在配置中使用的值,或 \"defines\" 中存在 \"${default}\" 时要插入的值。",
"c_cpp.configuration.default.macFrameworkPath.description": "未指定 \"macFrameworkPath\" 时要在配置中使用的值,或 \"macFrameworkPath\" 中存在 \"${default}\" 时要插入的值。",
@@ -206,7 +208,7 @@
"c_cpp.debuggers.miDebuggerArgs.description": "MI 调试程序(如 gdb)的其他参数。",
"c_cpp.debuggers.miDebuggerServerAddress.description": "要连接到的 MI 调试程序服务器的网络地址(示例: localhost:1234)。",
"c_cpp.debuggers.stopAtEntry.description": "可选参数。如果为 true,则调试程序应在目标的入口点处停止。如果传递了 processId,则不起任何作用。",
"c_cpp.debuggers.debugServerPath.description": "要启动的调试服务器的可选完整路径。默认为 null。",
"c_cpp.debuggers.debugServerPath.description": "用于调试要启动的服务器的可选完整路径。默认设置为 null。通过运行“-target-select remote <server:port>”的 \"customSetupCommand\" 将它与 \"miDebugServerAddress\" 或你自己的服务器结合使用。",
"c_cpp.debuggers.debugServerArgs.description": "可选调试服务器参数。默认为 null。",
"c_cpp.debuggers.serverStarted.description": "要在调试服务器输出中查找的可选服务器启动模式。默认为 null。",
"c_cpp.debuggers.filterStdout.description": "在 stdout 流中搜索服务器启动模式,并将 stdout 记录到默认输出。默认为 true。",
@@ -230,5 +232,8 @@
"c_cpp.taskDefinitions.args.description": "要传递给编译器或编译脚本的其他参数",
"c_cpp.taskDefinitions.options.description": "其他命令选项",
"c_cpp.taskDefinitions.options.cwd.description": "已执行程序或脚本的当前工作目录。如果省略,则使用代码的当前工作区根。",
"c_cpp.taskDefinitions.detail.description": "任务类型的其他详细信息"
"c_cpp.taskDefinitions.detail.description": "任务类型的其他详细信息",
"c_cpp.debuggers.sourceFileMap.sourceFileMapEntry.description": "相同源树的当前路径和编译时路径。EditorPath 下的文件会映射到 CompileTimePath 路径以进行断点匹配,并在显示 stacktrace 位置时,从 CompileTimePath 映射到 EditorPath。",
"c_cpp.debuggers.sourceFileMap.sourceFileMapEntry.editorPath.description": "编辑器将使用的源树的路径。",
"c_cpp.debuggers.sourceFileMap.sourceFileMapEntry.useForBreakpoints.description": "如果此条目仅用于堆栈帧位置映射,则为 False。如果在指定断点位置时也需要使用此条目,则为 True。"
}
@@ -17,6 +17,7 @@
"envfale.failed": "未能使用 {0}。原因: {1}",
"replacing.sourcepath": "正在将 {0}“{1}”替换为“{2}”。",
"replacing.targetpath": "正在将 {0}“{1}”替换为“{2}”。",
"replacing.editorPath": "正在将 {0}“{1}”替换为“{2}”。",
"resolving.variables.in.sourcefilemap": "正在解析 {0} 中的变量...",
"open.envfile": "打开 {0}",
"unexpected.os": "意外的 OS 类型",
@@ -7,6 +7,6 @@
"build.and.debug.active.file": "生成和调试活动文件",
"cannot.build.non.cpp": "无法生成和调试,因为活动文件不是 C 或 C++ 源文件。",
"no.compiler.found": "未找到编译程序",
"select.compiler": "选择编译程序",
"select.configuration": "Select a configuration",
"cl.exe.not.available": "仅当从 VS 开发人员命令提示符处运行 VS Code 时,{0} 生成和调试才可用。"
}
@@ -203,5 +203,6 @@
"cpp_probing_compiler_default_standard": "正在使用命令行探测默认 C++ 语言标准的编译器: {0}",
"detected_language_standard_version": "检测到的语言标准版本: {0}",
"unhandled_default_target_detected": "检测到未处理的默认编译器目标值: {0}",
"unhandled_target_arg_detected": "检测到未处理的目标参数值: {0}"
"unhandled_target_arg_detected": "检测到未处理的目标参数值: {0}",
"memory_limit_shutting_down_intellisense": "正在关闭 IntelliSense 服务器: {0}。内存使用量为 {1} MB,已超过 {2} MB 的限制。"
}
+9 -4
View File
@@ -50,7 +50,7 @@
"c_cpp.configuration.vcFormat.indent.preprocessor.none.description": "將不會格式化前置處理器指示詞。",
"c_cpp.configuration.vcFormat.indent.accessSpecifiers.description": "存取指定名稱會依據 [Editor: Tab Size] 設定中指定的數量,按照類別或結構定義的相對位置縮排",
"c_cpp.configuration.vcFormat.indent.namespaceContents.description": "程式碼會依據 [Editor: Tab Size] 設定中指定的數量,按照其封入之命名空間的相對位置縮排",
"c_cpp.configuration.vcFormat.indent.preserveComment.description": "格式化作業期間,註解的縮排未變更。",
"c_cpp.configuration.vcFormat.indent.preserveComments.description": "格式化作業期間,註解的縮排未變更。",
"c_cpp.configuration.vcFormat.newLine.beforeOpenBrace.namespace.description": "命名空間之左大括弧的位置",
"c_cpp.configuration.vcFormat.newLine.beforeOpenBrace.type.description": "型別定義之左大括弧的位置",
"c_cpp.configuration.vcFormat.newLine.beforeOpenBrace.lambda.description": "Lambda 函式之左大括弧的位置",
@@ -137,7 +137,9 @@
"c_cpp.configuration.commentContinuationPatterns.description": "定義在多行或單行註解區塊按下 ENTER 的編輯器行為。",
"c_cpp.configuration.configurationWarnings.description": "決定當組態提供者延伸模組無法提供來源檔案的組態時,是否會顯示快顯通知。",
"c_cpp.configuration.intelliSenseCachePath.description": "定義 IntelliSense 使用之快取先行編譯標頭檔的資料夾路徑。預設快取路徑在 Windows 上為 \"%LocalAppData%/Microsoft/vscode-cpptools\",在 Linux 上為 \"$XDG_CACHE_HOME/vscode-cpptools/\" (若未定義 XDG_CACHE_HOME,則為 \"$HOME/.cache/vscode-cpptools/\"),在 Mac 上則為 \"$HOME/Library/Caches/vscode-cpptools/\"。如果未指定路徑或指定的路徑無效,就會使用預設路徑。",
"c_cpp.configuration.intelliSenseCacheSize.description": "快取先行編譯標頭檔的每個工作區硬碟空間大小上限 (mb); 實際使用量可能會在此值周圍波動。預設大小為 5120 MB。大小為 0,會停用先行編譯標頭快取。",
"c_cpp.configuration.intelliSenseCacheSize.description": "快取先行編譯標頭檔可使用的每個工作區硬碟空間大小上限 (MB); 實際使用量會在此值附近波動。預設大小為 5120 MB。大小為 0會停用先行編譯標頭快取。",
"c_cpp.configuration.intelliSenseMemoryLimit.description": "IntelliSense 處理序所能使用的記憶體上限 (MB)。預設限制為 4096 MB,上限為 16 GB。當超過此限制時,此延伸模組將會關閉再重新啟動 IntelliSense 處理序。",
"c_cpp.configuration.intelliSenseUpdateDelay.description": "控制 IntelliSense 在修改之後,開始更新前的延遲 (毫秒)。",
"c_cpp.configuration.default.includePath.description": "若 c_cpp_properties.json 中未指定 \"includePath\" 時,要在設定中使用的值。如有指定 \"includePath\",請將 \"${default}\" 新增到陣列中,以插入此設定的值。",
"c_cpp.configuration.default.defines.description": "當 \"defines\" 未指定時,要在設定中使用的值,或 \"defines\" 中有 \"${default}\" 時要插入的值。",
"c_cpp.configuration.default.macFrameworkPath.description": "當 \"macFrameworkPath\" 未指定時,要在設定中使用的值,或 \"macFrameworkPath\" 中有 \"${default}\" 時要插入的值。",
@@ -206,7 +208,7 @@
"c_cpp.debuggers.miDebuggerArgs.description": "MI 偵錯工具 (例如 gdb) 的其他引數。",
"c_cpp.debuggers.miDebuggerServerAddress.description": "MI 偵錯工具伺服器要連線至的網路位址 (範例: localhost:1234)。",
"c_cpp.debuggers.stopAtEntry.description": "選擇性參數。若為 true,則偵錯工具應該在目標的進入點停止。如果已傳遞 processId。就沒有效果。",
"c_cpp.debuggers.debugServerPath.description": "要啟動的偵錯伺服器選擇性完整路徑。預設為 null。",
"c_cpp.debuggers.debugServerPath.description": "要啟動的偵錯伺服器選完整路徑。預設為 Null。使用時,會將 \"miDebugServerAddress\" 或您自己的伺服器與 \"customSetupCommand\" 連接,以執行 \"-target-select remote <伺服器:連接埠>\"`。",
"c_cpp.debuggers.debugServerArgs.description": "選擇性偵錯伺服器引數。預設為 null。",
"c_cpp.debuggers.serverStarted.description": "要在偵錯伺服器輸出中尋找的選擇性伺服器啟動模式。預設為 null。",
"c_cpp.debuggers.filterStdout.description": "搜尋 stdout 資料流以取得伺服器啟動的模式,並將 stdout 記錄到偵錯輸出。預設為 true。",
@@ -230,5 +232,8 @@
"c_cpp.taskDefinitions.args.description": "要傳遞給編譯器或編譯指令碼的其他引數",
"c_cpp.taskDefinitions.options.description": "其他命令選項",
"c_cpp.taskDefinitions.options.cwd.description": "所執行程式或指令碼的目前工作目錄。如果省略,則會使用 Code 的目前工作區根目錄。",
"c_cpp.taskDefinitions.detail.description": "工作的其他詳細資料"
"c_cpp.taskDefinitions.detail.description": "工作的其他詳細資料",
"c_cpp.debuggers.sourceFileMap.sourceFileMapEntry.description": "相同來源樹狀的目前路徑和編譯時間路徑。在顯示 stacktrace 位置時,在 EditorPath 下找到的檔案會對應到 CompileTimePath 路徑,以進行中斷點必對,並會從 CompileTimePath 對應到 EditorPath。",
"c_cpp.debuggers.sourceFileMap.sourceFileMapEntry.editorPath.description": "編輯器要使用的來源樹狀路徑。",
"c_cpp.debuggers.sourceFileMap.sourceFileMapEntry.useForBreakpoints.description": "若此項目只用於堆疊框架位置對應,則為 False; 若在指定中斷點位置時也應該使用此項目,則為 True。"
}
@@ -17,6 +17,7 @@
"envfale.failed": "無法使用 {0}。原因: {1}",
"replacing.sourcepath": "正在以 '{2}' 取代 {0} '{1}'。",
"replacing.targetpath": "正在以 '{2}' 取代 {0} '{1}'。",
"replacing.editorPath": "正在以 '{2}' 取代 {0} '{1}'。",
"resolving.variables.in.sourcefilemap": "正在解析 {0} 中的變數...",
"open.envfile": "開啟 {0}",
"unexpected.os": "未預期的 OS 類型",
@@ -7,6 +7,6 @@
"build.and.debug.active.file": "建置及偵錯使用中的檔案",
"cannot.build.non.cpp": "因為作用中的檔案不是 C 或 C++ 來源檔案,所以無法建立和偵錯。",
"no.compiler.found": "找不到任何編譯器",
"select.compiler": "選取編譯器",
"select.configuration": "Select a configuration",
"cl.exe.not.available": "只有從 VS 的開發人員命令提示字元執行 VS Code 時,才可使用 {0} 組建和偵錯。"
}
@@ -5,7 +5,7 @@
// Do not edit this file. It is machine generated.
{
"c.cpp.debug.protocol": "C/C++ 偵錯通訊協定",
"c.cpp.warnings": "C/C++ Configuration Warnings",
"c.cpp.warnings": "C/C++ 設定警告",
"unable.to.start": "無法啟動 C/C + + 語言伺服器。將停用 IntelliSense 功能。錯誤: {0}",
"check.permissions": "EPERM: 檢查 '{0}' 的權限",
"server.crashed2": "語言伺服器在過去 3 分鐘內發生 5 次故障。將不會重新啟動。",
+30 -29
View File
@@ -145,7 +145,7 @@
"timed_out_attempting_to_communicate_with_process": "嘗試與處理序通訊時發生逾時!",
"process_failed_to_run": "處理序無法執行",
"wsl_not_detected": "未偵測到 WSL",
"compiler_in_compilerpath_not_found": "Specified compiler was not found: {0}",
"compiler_in_compilerpath_not_found": "找不到指定的編譯器: {0}",
"config_data_invalid": "組態資料無效,{0}",
"cmake_executable_not_found": "在 {0} 找不到 CMake 可執行檔",
"no_args_provider": "沒有任何引數提供者",
@@ -176,32 +176,33 @@
"exceptions_label": "例外狀況:",
"template_parameters_label": "範本參數:",
"compiler_probe_command_line": "編譯器探查命令列: {0}",
"c_compiler_from_compiler_path": "Attempting to get defaults from C compiler in \"compilerPath\" property: '{0}'",
"cpp_compiler_from_compiler_path": "Attempting to get defaults from C++ compiler in \"compilerPath\" property: '{0}'",
"c_compiler_from_compile_commands": "Attempting to get defaults from C compiler in compile_commands.json file: '{0}'",
"cpp_compiler_from_compile_commands": "Attempting to get defaults from C++ compiler in compile_commands.json file: '{0}'",
"c_intellisense_mode_changed": "For C source files, IntelliSenseMode was changed from \"{0}\" to \"{1}\".",
"cpp_intellisense_mode_changed": "For C++ source files, IntelliSenseMode was changed from \"{0}\" to \"{1}\".",
"c_std_version_changed": "For C source files, the cStandard was changed from \"{0}\" to \"{1}\".",
"cpp_std_version_changed": "For C++ source files, the cppStandard was changed from \"{0}\" to \"{1}\".",
"c_intellisense_mode_and_std_version_changed": "For C source files, IntelliSenseMode was changed from \"{0}\" to \"{1}\" and cStandard was changed from \"{2}\" to \"{3}\".",
"cpp_intellisense_mode_and_std_version_changed": "For C++ source files, IntelliSenseMode was changed from \"{0}\" to \"{1}\" and cppStandard changed from \"{2}\" to \"{3}\".",
"c_intellisense_mode_changed_with_path": "For C source files, IntelliSenseMode was changed from \"{0}\" to \"{1}\" based on compiler args and probing compilerPath: \"{2}\"",
"cpp_intellisense_mode_changed_with_path": "For C++ source files, IntelliSenseMode was changed from \"{0}\" to \"{1}\" based on compiler args and probing compilerPath: \"{2}\"",
"c_std_version_changed_with_path": "For C source files, the cStandard was changed from \"{0}\" to \"{1}\" based on compiler args and probing compilerPath: \"{2}\"",
"cpp_std_version_changed_with_path": "For C++ source files, the cppStandard was changed from \"{0}\" to \"{1}\" based on compiler args and probing compilerPath: \"{2}\"",
"c_intellisense_mode_and_std_version_changed_with_path": "For C source files, IntelliSenseMode was changed from \"{0}\" to \"{1}\" and cStandard was changed from \"{2}\" to \"{3}\" based on compiler args and probing compilerPath: \"{4}\"",
"cpp_intellisense_mode_and_std_version_changed_with_path": "For C++ source files, IntelliSenseMode was changed from \"{0}\" to \"{1}\" and cppStandard changed from \"{2}\" to \"{3}\" based on compiler args and probing compilerPath: \"{4}\"",
"compiler_path_changed": "Unable to resolve configuration with compilerPath \"{0}\". Using \"{1}\" instead.",
"compiler_path_invalid": "Unable to resolve configuration with compilerPath: \"{0}\"",
"compiler_path_empty": "Skipping probe of compiler due to explicitly empty compilerPath",
"msvc_intellisense_specified": "MSVC intelliSenseMode specified. Configuring for compiler cl.exe.",
"unable_to_configure_cl_exe": "Unable to configure for compiler cl.exe.",
"probing_compiler_default_target": "Probing compiler's default target using command line: \"{0}\" {1}",
"compiler_default_target": "Compiler returned default target value: {0}",
"c_probing_compiler_default_standard": "Probing compiler for default C language standard using command line: {0}",
"cpp_probing_compiler_default_standard": "Probing compiler for default C++ language standard using command line: {0}",
"detected_language_standard_version": "Detected language standard version: {0}",
"unhandled_default_target_detected": "Unhandled default compiler target value detected: {0}",
"unhandled_target_arg_detected": "Unhandled target argument value detected: {0}"
"c_compiler_from_compiler_path": "正在嘗試從 C 編譯器的 \"compilerPath\" 屬性中取得預設值: '{0}'",
"cpp_compiler_from_compiler_path": "正在嘗試從 C++ 編譯器的 \"compilerPath\" 屬性中取得預設值: '{0}'",
"c_compiler_from_compile_commands": "正在嘗試從 C 編譯器的 compile_commands.json 檔案中取得預設值: '{0}'",
"cpp_compiler_from_compile_commands": "正在嘗試從 C++ 編譯器的 compile_commands.json 檔案中取得預設值: '{0}'",
"c_intellisense_mode_changed": "若為 C 原始程式檔,IntelliSenseMode 已從 \"{0}\" 變更為 \"{1}\"",
"cpp_intellisense_mode_changed": "若為 C++ 原始程式檔,IntelliSenseMode 已從 \"{0}\" 變更為 \"{1}\"",
"c_std_version_changed": "若為 C 原始程式檔,cStandard 已從 \"{0}\" 變更為 \"{1}\"",
"cpp_std_version_changed": "若為 C 原始程式檔,cppStandard 已從 \"{0}\" 變更為 \"{1}\"",
"c_intellisense_mode_and_std_version_changed": "若為 C 原始程式檔,IntelliSenseMode 已從 \"{0}\" 變更為 \"{1}\",且 cStandard 已從 \"{2}\" 變更為 \"{3}\"",
"cpp_intellisense_mode_and_std_version_changed": "若為 C++ 原始程式檔,IntelliSenseMode 已從 \"{0}\" 變更為 \"{1}\",且 cppStandard 已從 \"{2}\" 變更為 \"{3}\"",
"c_intellisense_mode_changed_with_path": "若為 C 原始程式檔,依據編譯器引數與探查 compilerPathIntelliSenseMode 已從 \"{0}\" 變更為 \"{1}\": \"{2}\"",
"cpp_intellisense_mode_changed_with_path": "若為 C++ 原始程式檔,依據編譯器引數與探查 compilerPathIntelliSenseMode 已從 \"{0}\" 變更為 \"{1}\": \"{2}\"",
"c_std_version_changed_with_path": "若為 C 原始程式檔,依據編譯器引數與探查 compilerPathcStandard 已從 \"{0}\" 變更為 \"{1}\": \"{2}\"",
"cpp_std_version_changed_with_path": "若為 C++ 原始程式檔,依據編譯器引數與探查 compilerPathcppStandard 已從 \"{0}\" 變更為 \"{1}\": \"{2}\"",
"c_intellisense_mode_and_std_version_changed_with_path": "若為 C 原始程式檔,依據編譯器引數與探查 compilerPathIntelliSenseMode 已從 \"{0}\" 變更為 \"{1}\",且 cStandard 已從 \"{2}\" 變更為 \"{3}\": \"{4}\"",
"cpp_intellisense_mode_and_std_version_changed_with_path": "若為 C++ 原始程式檔,依據編譯器引數與探查 compilerPathIntelliSenseMode 已從 \"{0}\" 變更為 \"{1}\",且 cppStandard 已從 \"{2}\" 變更為 \"{3}\": \"{4}\"",
"compiler_path_changed": "無法解析 compilerPath \"{0}\" 的設定。請改為使用 \"{1}\"。",
"compiler_path_invalid": "無法解析 compilerPath 的設定: \"{0}\"",
"compiler_path_empty": "因已明確清空 compilerPath,所以略過探查編譯器",
"msvc_intellisense_specified": "已指定 MSVC intelliSenseMode。正在進行編譯器 cl.exe 的設定。",
"unable_to_configure_cl_exe": "無法進行編譯器 cl.exe 的設定。",
"probing_compiler_default_target": "使用命令列探查編譯器的預設目標: \"{0}\" {1}",
"compiler_default_target": "編譯器傳回了預設目標值: {0}",
"c_probing_compiler_default_standard": "使用命令列探查預設 C 語言標準的編譯器: {0}",
"cpp_probing_compiler_default_standard": "使用命令列探查預設 C++ 語言標準的編譯器: {0}",
"detected_language_standard_version": "已偵測到語言標準版本: {0}",
"unhandled_default_target_detected": "偵測到未處理的預設編譯器目標值: {0}",
"unhandled_target_arg_detected": "偵測到未處理的目標引數值: {0}",
"memory_limit_shutting_down_intellisense": "IntelliSense 伺服器即將關機: {0}。記憶體使用量為 {1} MB,超過了 {2} MB 的限制。"
}
+9 -4
View File
@@ -50,7 +50,7 @@
"c_cpp.configuration.vcFormat.indent.preprocessor.none.description": "Direktivy preprocesoru se nebudou formátovat.",
"c_cpp.configuration.vcFormat.indent.accessSpecifiers.description": "Specifikátory přístupu jsou odsazené relativně k definicím tříd nebo struktur mezerou zadanou v nastavení Editor: Velikost tabulátoru.",
"c_cpp.configuration.vcFormat.indent.namespaceContents.description": "Kód se odsazuje relativně ke svému uzavírajícímu oboru názvů mezerou zadanou v nastavení Editor: Velikost tabulátoru.",
"c_cpp.configuration.vcFormat.indent.preserveComment.description": "Při formátovacích operacích se nezmění odsazení komentářů.",
"c_cpp.configuration.vcFormat.indent.preserveComments.description": "Při formátovacích operacích se nezmění odsazení komentářů.",
"c_cpp.configuration.vcFormat.newLine.beforeOpenBrace.namespace.description": "Pozice levých složených závorek pro obory názvů",
"c_cpp.configuration.vcFormat.newLine.beforeOpenBrace.type.description": "Pozice levých složených závorek pro definice typů",
"c_cpp.configuration.vcFormat.newLine.beforeOpenBrace.lambda.description": "Pozice levých složených závorek pro funkce lambda",
@@ -137,7 +137,9 @@
"c_cpp.configuration.commentContinuationPatterns.description": "Definuje chování editoru, když se ve víceřádkovém nebo jednořádkovém bloku komentáře stiskne klávesa Enter.",
"c_cpp.configuration.configurationWarnings.description": "Určuje, jestli se budou zobrazovat automaticky otevíraná oznámení, když rozšíření poskytovatele konfigurací nebude moct poskytnout konfiguraci pro určitý zdrojový soubor.",
"c_cpp.configuration.intelliSenseCachePath.description": "Definuje cestu ke složce pro předkompilované hlavičky uložené do mezipaměti, které používá IntelliSense. Výchozí cesta k mezipaměti je %LocalAppData%/Microsoft/vscode-cpptools ve Windows, $XDG_CACHE_HOME/vscode-cpptools/ v Linuxu (případně $HOME/.cache/vscode-cpptools/, pokud se nedefinovalo XDG_CACHE_HOME) a $HOME/Library/Caches/vscode-cpptools/ na Macu. Výchozí cesta se použije, když se nezadá žádná cesta nebo když zadaná cesta nebude platná.",
"c_cpp.configuration.intelliSenseCacheSize.description": "Maximální velikost místa na pevném disku pro předkompilované hlavičky uložené do mezipaměti na jeden pracovní prostor v megabajtech. Skutečné využití se může pohybovat kolem této hodnoty. Výchozí velikost je 5120 MB. Když se velikost nastaví na 0, ukládání předkompilovaných hlaviček do mezipaměti se zakáže.",
"c_cpp.configuration.intelliSenseCacheSize.description": "Maximální velikost místa na pevném disku pro předkompilované hlavičky uložené do mezipaměti na jeden pracovní prostor v megabajtech (MB). Skutečné využití se může pohybovat kolem této hodnoty. Výchozí velikost je 5120 MB. Když se velikost nastaví na 0, ukládání předkompilovaných hlaviček do mezipaměti se zakáže.",
"c_cpp.configuration.intelliSenseMemoryLimit.description": "Omezení využití paměti v megabajtech (MB) procesu IntelliSense. Výchozí limit je 4096 MB a maximální velikost je 16 GB. Rozšíření se vypne a restartuje proces IntelliSense, pokud limit překročí.",
"c_cpp.configuration.intelliSenseUpdateDelay.description": "Určuje prodlevu v milisekundách, než se po úpravě začne aktualizovat IntelliSense.",
"c_cpp.configuration.default.includePath.description": "Hodnota, která se použije v konfiguraci, když se v souboru c_cpp_properties.json nezadá includePath. Pokud se includePath zadá, přidejte do pole ${default}, aby se vložily hodnoty z tohoto nastavení.",
"c_cpp.configuration.default.defines.description": "Hodnota, která se použije v konfiguraci, pokud se nezadá defines, nebo hodnoty, které se mají vložit, pokud se v defines nachází ${default}",
"c_cpp.configuration.default.macFrameworkPath.description": "Hodnota, která se použije v konfiguraci, pokud se nezadá macFrameworkPath, nebo hodnoty, které se mají vložit, pokud se ve macFrameworkPath nachází ${default}",
@@ -206,7 +208,7 @@
"c_cpp.debuggers.miDebuggerArgs.description": "Další argumenty pro ladicí program MI (třeba gdb)",
"c_cpp.debuggers.miDebuggerServerAddress.description": "Síťová adresa MI Debugger Serveru, ke kterému se má připojit (příklad: localhost:1234)",
"c_cpp.debuggers.stopAtEntry.description": "Nepovinný parametr. Když se nastaví na true, ladicí program by se měl zastavit u vstupního bodu cíle. Pokud se předá processId, nemá parametr žádný vliv.",
"c_cpp.debuggers.debugServerPath.description": "Volitelná úplná cesta k ladicímu serveru, který se má spustit. Výchozí hodnota je null.",
"c_cpp.debuggers.debugServerPath.description": "Nepovinná úplná cesta k ladicímu serveru, který se má spustit. Výchozí hodnota je null. Používá se ve spojení buď s miDebugServerAddress, nebo s vlastním serverem s customSetupCommand, na kterém běží -target-select remote <server:port>.",
"c_cpp.debuggers.debugServerArgs.description": "Volitelné argumenty ladicího serveru. Výchozí hodnota je null.",
"c_cpp.debuggers.serverStarted.description": "Volitelný vzorek spuštěný na serveru, který se má vyhledat ve výstupu ladicího serveru. Výchozí hodnota je null.",
"c_cpp.debuggers.filterStdout.description": "Vyhledá ve vzorku spuštěném na serveru stream stdout a zaznamená stdout do výstupu ladění. Výchozí hodnota je true.",
@@ -230,5 +232,8 @@
"c_cpp.taskDefinitions.args.description": "Další argumenty, které se mají předat kompilátoru nebo kompilačnímu skriptu",
"c_cpp.taskDefinitions.options.description": "Další možnosti příkazu",
"c_cpp.taskDefinitions.options.cwd.description": "The current working directory of the executed program or script. If omitted Code's current workspace root is used.",
"c_cpp.taskDefinitions.detail.description": "Další podrobnosti o typu úlohy"
"c_cpp.taskDefinitions.detail.description": "Další podrobnosti o typu úlohy",
"c_cpp.debuggers.sourceFileMap.sourceFileMapEntry.description": "Aktuální cesta a cesta při kompilaci ke stejným zdrojovým stromům. Soubory, které se najdou na cestě EditorPath, se namapují na cestu CompileTimePath pro odpovídající zarážku, která se při zobrazování umístění stacktrace mapuje z CompileTimePath na EditorPath.",
"c_cpp.debuggers.sourceFileMap.sourceFileMapEntry.editorPath.description": "Cesta ke zdrojovému souboru, který se použije v editoru",
"c_cpp.debuggers.sourceFileMap.sourceFileMapEntry.useForBreakpoints.description": "False, pokud se tato položka používá jen k mapování umístění bloku zásobníku. True, pokud se tato entita má použít i při zadávání umístění zarážek"
}
@@ -17,6 +17,7 @@
"envfale.failed": "Nepovedlo se použít {0}. Příčina: {1}",
"replacing.sourcepath": "{1} v {0} se nahrazuje za {2}.",
"replacing.targetpath": "{1} v {0} se nahrazuje za {2}.",
"replacing.editorPath": "Nahrazuje se {0} {1} za {2}.",
"resolving.variables.in.sourcefilemap": "Překládají se proměnné v {0}...",
"open.envfile": "Otevřít {0}",
"unexpected.os": "Neočekávaný typ operačního systému",
@@ -7,6 +7,6 @@
"build.and.debug.active.file": "Sestavit a ladit aktivní soubor",
"cannot.build.non.cpp": "Sestavení a ladění není možné, protože aktivní soubor není zdrojový soubor jazyka C ani C++.",
"no.compiler.found": "Nenašel se žádný kompilátor.",
"select.compiler": "Vyberte kompilátor.",
"select.configuration": "Select a configuration",
"cl.exe.not.available": "Sestavení a ladění {0} je k dispozici jen v případě, že se nástroj VS Code spustil z nástroje Developer Command Prompt pro VS."
}
@@ -203,5 +203,6 @@
"cpp_probing_compiler_default_standard": "Probíhá dotazování kompilátoru na výchozí standard jazyka C++ pomocí příkazového řádku: {0}",
"detected_language_standard_version": "Zjištěná verze standardu jazyka: {0}",
"unhandled_default_target_detected": "Zjistila se neošetřená výchozí hodnota cíle kompilátoru: {0}",
"unhandled_target_arg_detected": "Zjistila se neošetřená hodnota argumentu target: {0}"
"unhandled_target_arg_detected": "Zjistila se neošetřená hodnota argumentu target: {0}",
"memory_limit_shutting_down_intellisense": "Vypíná se server technologie IntelliSense: {0}. Využití paměti je {1} MB a překročilo limit {2} MB."
}
+21 -16
View File
@@ -28,11 +28,11 @@
"c_cpp.configuration.formatting.Default.description": "Zum Formatieren von Code wird \"clang-format\" verwendet.",
"c_cpp.configuration.formatting.Disabled.description": "Die Codeformatierung wird deaktiviert.",
"c_cpp.configuration.vcFormat.indent.braces.description": "Geschweifte Klammern werden um den im Editor in der Einstellung für die Tabstoppgröße angegebenen Wert eingerückt.",
"c_cpp.configuration.vcFormat.indent.multiLineRelativeTo.description": "Legt fest, relativ zu welchem Objekt Wert ein neuer Zeileneinzug festgelegt wird.",
"c_cpp.configuration.vcFormat.indent.multiLineRelativeTo.description": "Legt den Bezugspunkt für den neuen Zeileneinzug fest.",
"c_cpp.configuration.vcFormat.indent.multiLineRelativeTo.outermostParenthesis.description": "Eine neue Zeile wird relativ zur äußersten geöffneten Klammer eingezogen.",
"c_cpp.configuration.vcFormat.indent.multiLineRelativeTo.innermostParenthesis.description": "Eine neue Zeile wird relativ zur innersten geöffneten Klammer eingezogen.",
"c_cpp.configuration.vcFormat.indent.multiLineRelativeTo.statementBegin.description": "Eine neue Zeile wird relativ zum Anfang der aktuellen Anweisung eingezogen.",
"c_cpp.configuration.vcFormat.indent.withinParentheses.description": "Beim Einfügen einer neuen Zeile wird diese unter der öffnenden Klammer oder basierend auf \"C_Cpp.vcFormat.indent.multiLineRelativeTo\" ausgerichtet.",
"c_cpp.configuration.vcFormat.indent.withinParentheses.description": "Beim Einfügen einer neuen Zeile wird diese unter der runden Klammer links oder basierend auf \"C_Cpp.vcFormat.indent.multiLineRelativeTo\" ausgerichtet.",
"c_cpp.configuration.vcFormat.indent.withinParentheses.alignToParenthesis.description": "Die neue Zeile wird unter der öffnenden Klammer ausgerichtet.",
"c_cpp.configuration.vcFormat.indent.withinParentheses.indent.description": "Die neue Zeile wird basierend auf \"C_Cpp.vcFormat.indent.multiLineRelativeTo\" eingerückt.",
"c_cpp.configuration.vcFormat.indent.preserveWithinParentheses.description": "In vorhandenem Code wird die vorhandene Einstellung zum Einzug neuer Zeilen innerhalb von Klammern beibehalten.",
@@ -50,7 +50,7 @@
"c_cpp.configuration.vcFormat.indent.preprocessor.none.description": "Präprozessoranweisungen werden nicht formatiert.",
"c_cpp.configuration.vcFormat.indent.accessSpecifiers.description": "Zugriffsspezifizierer werden relativ zu Klassen- oder Strukturdefinitionen um den im Editor in der Einstellung für die Tabstoppgröße angegebenen Wert eingerückt.",
"c_cpp.configuration.vcFormat.indent.namespaceContents.description": "Der Code wird relativ zu seinem einschließenden Namespace um den im Editor in der Einstellung für die Tabstoppgröße angegebenen Wert eingerückt.",
"c_cpp.configuration.vcFormat.indent.preserveComment.description": "Der Einzug von Kommentaren wird bei Formatierungsvorgängen nicht geändert.",
"c_cpp.configuration.vcFormat.indent.preserveComments.description": "Der Einzug von Kommentaren wird bei Formatierungsvorgängen nicht geändert.",
"c_cpp.configuration.vcFormat.newLine.beforeOpenBrace.namespace.description": "Die Position der öffnenden geschweiften Klammern für Namespaces",
"c_cpp.configuration.vcFormat.newLine.beforeOpenBrace.type.description": "Die Position der öffnenden geschweiften Klammern für Typdefinitionen",
"c_cpp.configuration.vcFormat.newLine.beforeOpenBrace.lambda.description": "Die Position der öffnenden geschweiften Klammern für Lambda-Funktionen",
@@ -58,10 +58,10 @@
"c_cpp.configuration.vcFormat.newLine.beforeOpenBrace.block.description": "Die Position der öffnenden geschweiften Klammern für Kontrollblöcke",
"c_cpp.configuration.vcFormat.newLine.beforeOpenBrace.newLine.description": "Öffnende geschweifte Klammern werden in eine neue Zeile verschoben.",
"c_cpp.configuration.vcFormat.newLine.beforeOpenBrace.sameLine.description": "Öffnende geschweifte Klammern verbleiben in derselben Zeile, und es wird vor jeder Klammer ein Leerzeichen hinzugefügt.",
"c_cpp.configuration.vcFormat.newLine.beforeOpenBrace.ignore.description": "Öffnende geschweifte Klammern werden nicht formatiert.",
"c_cpp.configuration.vcFormat.newLine.scopeBracesOnSeparateLines.description": "Öffnende und schließende geschweifte Klammern für Bereiche werden in getrennten Zeilen platziert.",
"c_cpp.configuration.vcFormat.newLine.beforeOpenBrace.ignore.description": "Geschweifte Klammern links werden nicht formatiert.",
"c_cpp.configuration.vcFormat.newLine.scopeBracesOnSeparateLines.description": "Geschweifte Klammern links und rechts für Bereiche werden in getrennten Zeilen platziert.",
"c_cpp.configuration.vcFormat.newLine.closeBraceSameLine.emptyType.description": "In leeren Typen werden schließende geschweifte Klammern in dieselbe Zeile wie öffnende geschweifte Klammern verschoben.",
"c_cpp.configuration.vcFormat.newLine.closeBraceSameLine.emptyFunction.description": "In leeren Funktionskörpern werden schließende geschweifte Klammern in dieselbe Zeile wie öffnende geschweifte Klammern verschoben.",
"c_cpp.configuration.vcFormat.newLine.closeBraceSameLine.emptyFunction.description": "In leeren Funktionskörpern werden geschweifte Klammern rechts in dieselbe Zeile wie die dazugehörenden geschweiften Klammern links verschoben.",
"c_cpp.configuration.vcFormat.newLine.beforeCatch.description": "\"catch\" und ähnliche Schlüsselwörter werden in einer neuen Zeile platziert.",
"c_cpp.configuration.vcFormat.newLine.beforeElse.description": "\"else\" wird in einer neuen Zeile platziert.",
"c_cpp.configuration.vcFormat.newLine.beforeWhileInDoWhile.description": "\"while\" wird in einer do-while-Schleife in einer neuen Zeile platziert.",
@@ -69,18 +69,18 @@
"c_cpp.configuration.vcFormat.space.beforeFunctionOpenParenthesis.insert.description": "Vor der öffnenden Klammer einer Funktion wird ein Leerzeichen hinzugefügt.",
"c_cpp.configuration.vcFormat.space.beforeFunctionOpenParenthesis.remove.description": "Leerzeichen vor öffnenden Klammern von Funktionen werden entfernt.",
"c_cpp.configuration.vcFormat.space.beforeFunctionOpenParenthesis.ignore.description": "Die Leerzeichen werden wie eingegeben beibehalten.",
"c_cpp.configuration.vcFormat.space.withinParameterListParentheses.description": "Nach der öffnenden und vor der schließenden Klammer in Funktionsparameterlisten wird ein Leerzeichen hinzugefügt.",
"c_cpp.configuration.vcFormat.space.betweenEmptyParameterListParentheses.description": "Wenn eine Funktionsparameterliste leer ist, wird zwischen den Klammern ein Leerzeichen eingefügt.",
"c_cpp.configuration.vcFormat.space.afterKeywordsInControlFlowStatements.description": "In Anweisungen der Ablaufsteuerung werden zwischen Schlüsselwort und öffnender Klammer Leerzeichen hinzugefügt.",
"c_cpp.configuration.vcFormat.space.withinControlFlowStatementParentheses.description": "Nach der öffnenden und vor der schließenden Klammer in Ablaufsteuerungsanweisungen wird ein Leerzeichen hinzugefügt.",
"c_cpp.configuration.vcFormat.space.withinParameterListParentheses.description": "In Funktionsparameterlisten wird nach der runden Klammer links und auch vor der runden Klammer rechts ein Leerzeichen hinzugefügt.",
"c_cpp.configuration.vcFormat.space.betweenEmptyParameterListParentheses.description": "Wenn eine Funktionsparameterliste leer ist, wird zwischen den runden Klammern ein Leerzeichen eingefügt.",
"c_cpp.configuration.vcFormat.space.afterKeywordsInControlFlowStatements.description": "In Ablaufsteuerungsanweisungen wird zwischen Schlüsselwort und runder Klammer links ein Leerzeichen hinzugefügt.",
"c_cpp.configuration.vcFormat.space.withinControlFlowStatementParentheses.description": "In Ablaufsteuerungsanweisungen wird nach der runden Klammer links und auch vor der runden Klammer rechts ein Leerzeichen hinzugefügt.",
"c_cpp.configuration.vcFormat.space.beforeLambdaOpenParenthesis.description": "Vor der öffnenden Klammer von Lambdaargumentlisten wird ein Leerzeichen hinzugefügt.",
"c_cpp.configuration.vcFormat.space.withinCastParentheses.description": "Nach der öffnenden und vor der schließenden Klammer einer Umwandlung im C-Stil wird ein Leerzeichen hinzugefügt.",
"c_cpp.configuration.vcFormat.space.withinCastParentheses.description": "Bei einer Umwandlung im C-Stil wird nach der runden Klammer links und auch vor der runden Klammer rechts ein Leerzeichen hinzugefügt.",
"c_cpp.configuration.vcFormat.space.afterCastCloseParenthesis.description": "Nach der schließenden Klammer einer Umwandlung im C-Stil wird ein Leerzeichen hinzugefügt.",
"c_cpp.configuration.vcFormat.space.withinExpressionParentheses.description": "Nach der öffnenden und vor der schließenden Klammer eines Ausdrucks in Klammern wird ein Leerzeichen hinzugefügt.",
"c_cpp.configuration.vcFormat.space.beforeBlockOpenBrace.description": "Vor den öffnenden geschweiften Klammern von Bereichsblöcken wird ein Leerzeichen hinzugefügt.",
"c_cpp.configuration.vcFormat.space.betweenEmptyBraces.description": "Wenn geschweifte Klammern leer sind und sich in derselben Zeile befinden, wird ein Leerzeichen zwischen ihnen eingefügt.",
"c_cpp.configuration.vcFormat.space.beforeInitializerListOpenBrace.description": "Vor der öffnenden geschweiften Klammer einheitlicher Initialisierungs- und Initialisiererlisten wird ein Leerzeichen hinzugefügt.",
"c_cpp.configuration.vcFormat.space.withinInitializerListBraces.description": "Nach der öffnenden und vor der schließenden geschweiften Klammer einheitlicher Initialisierungs- und Initialisiererlisten wird ein Leerzeichen hinzugefügt.",
"c_cpp.configuration.vcFormat.space.withinInitializerListBraces.description": "In einheitlichen Initialisierungs- und Initialisiererlisten wird nach der geschweiften Klammer links und auch vor der geschweiften Klammer rechts ein Leerzeichen hinzugefügt.",
"c_cpp.configuration.vcFormat.space.preserveInInitializerList.description": "Leerzeichen um Kommas werden in einheitlichen Initialisierungs- und Initialisiererlisten beibehalten.",
"c_cpp.configuration.vcFormat.space.beforeOpenSquareBracket.description": "Vor öffnenden eckigen Klammern wird ein Leerzeichen eingefügt.",
"c_cpp.configuration.vcFormat.space.withinSquareBrackets.description": "Es wird ein Leerzeichen nach der öffnenden eckigen Klammer und vor der schließenden eckigen Klammer eingefügt.",
@@ -92,7 +92,7 @@
"c_cpp.configuration.vcFormat.space.beforeComma.description": "Vor jedem Komma wird ein Leerzeichen hinzugefügt.",
"c_cpp.configuration.vcFormat.space.afterComma.description": "Nach jedem Komma wird ein Leerzeichen hinzugefügt.",
"c_cpp.configuration.vcFormat.space.removeAroundMemberOperators.description": "Leerzeichen um Memberzugriffsoperatoren, Pointer-to-Member-Operatoren und Bereichsauflösungsoperatoren werden entfernt.",
"c_cpp.configuration.vcFormat.space.beforeInheritanceColon.description": "In Klassendefinitionen wird vor dem Doppelpunkt für geerbte Typen ein Leerzeichen hinzugefügt.",
"c_cpp.configuration.vcFormat.space.beforeInheritanceColon.description": "Für vererbte Typen wird in Klassendefinitionen vor dem Doppelpunkt ein Leerzeichen hinzugefügt.",
"c_cpp.configuration.vcFormat.space.beforeConstructorColon.description": "In Konstruktordefinitionen wird vor dem Doppelpunkt ein Leerzeichen hinzugefügt.",
"c_cpp.configuration.vcFormat.space.removeBeforeSemicolon.description": "Vor allen Semikolons werden die Leerzeichen entfernt.",
"c_cpp.configuration.vcFormat.space.insertAfterSemicolon.description": "Nach jedem Semikolon wird ein Leerzeichen eingefügt.",
@@ -137,7 +137,9 @@
"c_cpp.configuration.commentContinuationPatterns.description": "Definiert das Editor-Verhalten, wenn innerhalb eines mehrzeiligen oder einzeiligen Kommentarblocks die EINGABETASTE gedrückt wird.",
"c_cpp.configuration.configurationWarnings.description": "Bestimmt, ob Popupbenachrichtigungen angezeigt werden, wenn eine Konfigurationsanbietererweiterung keine Konfiguration für eine Quelldatei bereitstellen kann.",
"c_cpp.configuration.intelliSenseCachePath.description": "Hiermit wird der Ordnerpfad für zwischengespeicherte vorkompilierte Header definiert, die von IntelliSense verwendet werden. Der Standardcachepfad lautet unter Windows \"%LocalAppData%/Microsoft/vscode-cpptools\", unter Linux \"$XDG_CACHE_HOME/vscode-cpptools/\" (bzw. \"$HOME/.cache/vscode-cpptools/\", wenn XDG_CACHE_HOME nicht definiert ist) und auf dem Mac \"$HOME/Library/Caches/vscode-cpptools/\". Der Standardpfad wird verwendet, wenn kein Pfad angegeben wurde oder ein angegebener Pfad ungültig ist.",
"c_cpp.configuration.intelliSenseCacheSize.description": "Maximale Größe des Festplattenspeichers pro Arbeitsbereich in MB für zwischengespeicherte vorkompilierte Header; die tatsächliche Nutzung schwankt möglicherweise um diesen Wert. Die Standardgröße beträgt 5120 MB. Das Zwischenspeichern vorkompilierter Header ist deaktiviert, wenn die Größe 0 ist.",
"c_cpp.configuration.intelliSenseCacheSize.description": "Maximale Größe des Festplattenspeichers pro Arbeitsbereich in MB für zwischengespeicherte vorkompilierte Header. Die tatsächliche Nutzung schwankt möglicherweise um diesen Wert. Die Standardgröße beträgt 5120 MB. Das Zwischenspeichern vorkompilierter Header ist deaktiviert, wenn die Größe 0 ist.",
"c_cpp.configuration.intelliSenseMemoryLimit.description": "Grenzwert für die Arbeitsspeicherauslastung in MB für einen IntelliSense-Prozess. Der Standardgrenzwert beträgt 4096 MB, der Höchstwert liegt bei 16 GB. Bei Überschreiten des Grenzwerts wird die Erweiterung heruntergefahren, und ein IntelliSense-Prozess wird neu gestartet.",
"c_cpp.configuration.intelliSenseUpdateDelay.description": "Steuert die Verzögerung in Millisekunden, bevor IntelliSense nach einer Änderung aktualisiert wird.",
"c_cpp.configuration.default.includePath.description": "Der Wert, der in einer Konfiguration verwendet werden soll, wenn \"includePath\" nicht in c_cpp_properties.json angegeben ist. Wenn \"includePath\" angegeben ist, fügen Sie dem Array \"${default}\" hinzu, um die Werte aus dieser Einstellung einzufügen.",
"c_cpp.configuration.default.defines.description": "Der Wert, der in einer Konfiguration verwendet werden soll, wenn \"defines\" nicht angegeben ist, oder die einzufügenden Werte, wenn \"${default}\" in \"defines\" vorhanden ist.",
"c_cpp.configuration.default.macFrameworkPath.description": "Der Wert, der in einer Konfiguration verwendet werden soll, wenn \"macFrameworkPath\" nicht angegeben ist, oder die einzufügenden Werte, wenn \"${default}\" in \"macFrameworkPath\" vorhanden ist.",
@@ -206,7 +208,7 @@
"c_cpp.debuggers.miDebuggerArgs.description": "Zusätzliche Argumente für den MI-Debugger (z. B. gdb).",
"c_cpp.debuggers.miDebuggerServerAddress.description": "Netzwerkadresse des MI-Debugger-Servers, mit dem eine Verbindung hergestellt werden soll (Beispiel: localhost:1234).",
"c_cpp.debuggers.stopAtEntry.description": "Optionaler Parameter. Wenn dieser Wert auf TRUE festgelegt ist, sollte der Debugger am Einstiegspunkt des Ziels anhalten. Wenn die processId übergeben wird, hat dies keine Auswirkungen.",
"c_cpp.debuggers.debugServerPath.description": "Optionaler vollständiger Pfad zum zu startenden Debugserver. Der Standardwert ist \"null\".",
"c_cpp.debuggers.debugServerPath.description": "Optionaler vollständiger Pfad zu dem Debugserver, der gestartet werden soll. Der Standardwert ist NULL. Dies wird in Verbindung mit \"miDebugServerAddress\" oder Ihrem eigenen Server mit \"customSetupCommand\" verwendet, auf dem \"-target-select remote <server:port>\" ausgeführt wird.",
"c_cpp.debuggers.debugServerArgs.description": "Optionale Debugserverargumente. Der Standardwert ist \"null\".",
"c_cpp.debuggers.serverStarted.description": "Optionales vom Server gestartetes Muster, nach dem in der Ausgabe des Debugservers gesucht wird. Der Standardwert ist \"null\".",
"c_cpp.debuggers.filterStdout.description": "stdout-Stream für ein vom Server gestartetes Muster suchen und stdout in der Debugausgabe protokollieren. Der Standardwert ist \"true\".",
@@ -230,5 +232,8 @@
"c_cpp.taskDefinitions.args.description": "Zusätzliche Argumente, die an den Compiler oder das Kompilierungsskript übergeben werden sollen",
"c_cpp.taskDefinitions.options.description": "Zusätzliche Befehlsoptionen",
"c_cpp.taskDefinitions.options.cwd.description": "Das aktuelle Arbeitsverzeichnis des ausgeführten Programms oder Skripts. Wenn keine Angabe erfolgt, wird das aktuelle Arbeitsbereich-Stammverzeichnis des Codes verwendet.",
"c_cpp.taskDefinitions.detail.description": "Zusätzliche Details zur Aufgabe"
"c_cpp.taskDefinitions.detail.description": "Zusätzliche Details zur Aufgabe",
"c_cpp.debuggers.sourceFileMap.sourceFileMapEntry.description": "Dies sind die Pfade zu denselben Quellstrukturen einmal aktuell und einmal zur Kompilierzeit. Im EditorPath gefundene Dateien werden zum Haltepunktabgleich dem CompileTimePath-Pfad zugeordnet. Bei der Anzeige von Speicherorten für die Stapelüberwachung erfolgt die Zuordnung vom CompileTimePath zum EditorPath.",
"c_cpp.debuggers.sourceFileMap.sourceFileMapEntry.editorPath.description": "Der Pfad zur Quellstruktur, die vom Editor verwendet wird.",
"c_cpp.debuggers.sourceFileMap.sourceFileMapEntry.useForBreakpoints.description": "FALSE, wenn dieser Eintrag nur für eine Stapelrahmen-Speicherortzuordnung verwendet wird. TRUE, wenn dieser Eintrag auch zum Angeben von Haltepunktpositionen verwendet werden soll."
}
@@ -17,6 +17,7 @@
"envfale.failed": "Fehler beim Verwenden von \"{0}\". Grund: {1}",
"replacing.sourcepath": "{0} \"{1}\" wird durch \"{2}\" ersetzt.",
"replacing.targetpath": "{0} \"{1}\" wird durch \"{2}\" ersetzt.",
"replacing.editorPath": "{0} \"{1}\" wird durch \"{2}\" ersetzt.",
"resolving.variables.in.sourcefilemap": "Variablen in \"{0}\" werden aufgelöst...",
"open.envfile": "{0} öffnen",
"unexpected.os": "Unerwarteter Betriebssystemtyp",
@@ -7,6 +7,6 @@
"build.and.debug.active.file": "Aktive Datei erstellen und debuggen",
"cannot.build.non.cpp": "Erstellen und Debuggen nicht möglich, da die aktive Datei keine C- oder C++-Quelldatei ist.",
"no.compiler.found": "Kein Compiler gefunden.",
"select.compiler": "Compiler auswählen",
"select.configuration": "Select a configuration",
"cl.exe.not.available": "{0}-Build und -Debuggen können nur verwendet werden, wenn VS Code von der Developer-Eingabeaufforderung für VS ausgeführt wird."
}
@@ -197,11 +197,12 @@
"compiler_path_empty": "Der Compilertest wird aufgrund eines explizit leeren compilerPath-Werts übersprungen.",
"msvc_intellisense_specified": "Es wurde der MSVC-IntelliSenseMode angegeben. Der Compiler (cl.exe) wird konfiguriert.",
"unable_to_configure_cl_exe": "Der Compiler (cl.exe) kann nicht konfiguriert werden.",
"probing_compiler_default_target": "Test des Standardziels für den Compiler über die Befehlszeile: \"{0}\" {1}",
"probing_compiler_default_target": "Das Standardziel des Compilers wird über die Befehlszeile getestet: \"{0}\" {1}",
"compiler_default_target": "Der Compiler hat den Standardzielwert zurückgegeben: {0}",
"c_probing_compiler_default_standard": "Compilertest auf den C-Sprachstandard über die Befehlszeile: {0}",
"cpp_probing_compiler_default_standard": "Compilertest auf den C++-Sprachstandard über die Befehlszeile: {0}",
"c_probing_compiler_default_standard": "Der Compiler für den Standard-C-Sprachstandard wird über die Befehlszeile getestet: {0}",
"cpp_probing_compiler_default_standard": "Der Compiler für den Standard-C++-Sprachstandard wird über die Befehlszeile getestet: {0}",
"detected_language_standard_version": "Erkannte Sprachstandardversion: {0}",
"unhandled_default_target_detected": "Unbehandelter Standardzielwert für Compiler erkannt: {0}",
"unhandled_target_arg_detected": "Unbehandelter Zielargumentwert erkannt: {0}"
"unhandled_target_arg_detected": "Unbehandelter Zielargumentwert erkannt: {0}",
"memory_limit_shutting_down_intellisense": "IntelliSense-Server wird heruntergefahren: {0}. Die Arbeitsspeicherauslastung beträgt {1} MB und hat das Limit von {2} MB überschritten."
}
@@ -11,7 +11,7 @@
"switch.to.json": "Wechseln Sie zur {0}-Datei, indem Sie auf den Link klicken oder diesen Befehl verwenden:",
"edit.configurations.in.json": "Konfigurationen in JSON-Datei bearbeiten",
"edit.configurations.json": "C/C++: Konfigurationen bearbeiten (JSON)",
"check.the.schema": "Unter \"{0}\" erhalten Sie weitere Informationen zu den C-/C++-Eigenschaften.",
"check.the.schema": "Weitere Informationen zu den C-/C++-Eigenschaften finden Sie unter {0}.",
"view.schema.reference": "Referenz zu Eigenschaftsschemas",
"intellisense.configurations": "IntelliSense-Konfigurationen",
"intellisense.configurations.description": "Verwenden Sie diesen Editor zum Bearbeiten von IntelliSense-Einstellungen, die in der zugrunde liegenden Datei \"{0}\" definiert sind. In diesem Editor vorgenommene Änderungen gelten nur für die ausgewählte Konfiguration. Um mehrere Konfigurationen gleichzeitig zu bearbeiten, wechseln Sie zu \"{1}\".",
+9 -4
View File
@@ -50,7 +50,7 @@
"c_cpp.configuration.vcFormat.indent.preprocessor.none.description": "Las directivas de preprocesador no se formatearán.",
"c_cpp.configuration.vcFormat.indent.accessSpecifiers.description": "Se aplica sangría a los especificadores de acceso en relación con las definiciones de clase o struct, según lo especificado en la configuración de Editor: Tamaño de tabulación.",
"c_cpp.configuration.vcFormat.indent.namespaceContents.description": "Se aplica sangría al código en relación con su espacio de nombres envolvente, según lo especificado en la configuración de Editor: Tamaño de tabulación.",
"c_cpp.configuration.vcFormat.indent.preserveComment.description": "La sangría de los comentarios no se cambia durante las operaciones de formato.",
"c_cpp.configuration.vcFormat.indent.preserveComments.description": "La sangría de los comentarios no se cambia durante las operaciones de formato.",
"c_cpp.configuration.vcFormat.newLine.beforeOpenBrace.namespace.description": "La posición de las llaves de apertura para los espacios de nombres",
"c_cpp.configuration.vcFormat.newLine.beforeOpenBrace.type.description": "La posición de las llaves de apertura para las definiciones de tipo",
"c_cpp.configuration.vcFormat.newLine.beforeOpenBrace.lambda.description": "La posición de las llaves de apertura para las funciones lambda",
@@ -137,7 +137,9 @@
"c_cpp.configuration.commentContinuationPatterns.description": "Define el comportamiento del editor para cuando se presiona la tecla Entrar dentro de un bloque de comentario de una o varias líneas.",
"c_cpp.configuration.configurationWarnings.description": "Determina si se muestran notificaciones emergentes cuando una extensión del proveedor de configuración no puede proporcionar una configuración para un archivo de código fuente.",
"c_cpp.configuration.intelliSenseCachePath.description": "Define la ruta de acceso de la carpeta para los encabezados precompilados almacenados en caché que usa IntelliSense. La ruta de acceso de caché predeterminada es \"%LocalAppData%/Microsoft/vscode-cpptools\" en Windows, \"$XDG_CACHE_HOME/vscode-cpptools/\" en Linux (o \"$HOME/.cache/vscode-cpptools\" si XDG_CACHE_HOME no se ha definido) y \"$HOME/Library/Caches/vscode-cpptools/\" en Mac. La ruta de acceso predeterminada se utiliza si no se especifica ninguna ruta de acceso o se especifica una que no es válida.",
"c_cpp.configuration.intelliSenseCacheSize.description": "Tamaño máximo del espacio del disco duro por área de trabajo en megabytes para los encabezados precompilados almacenados en caché. El uso real puede fluctuar en torno a este valor. El tamaño predeterminado es 5120 MB. El almacenamiento en caché de encabezados precompilados está deshabilitado cuando el tamaño es 0.",
"c_cpp.configuration.intelliSenseCacheSize.description": "Tamaño máximo del espacio del disco duro por área de trabajo en megabytes (MB) para los encabezados precompilados almacenados en caché. El uso real puede fluctuar en torno a este valor. El tamaño predeterminado es 5120 MB. El almacenamiento en caché de encabezados precompilados está deshabilitado cuando el tamaño es 0.",
"c_cpp.configuration.intelliSenseMemoryLimit.description": "Límite de uso de memoria en megabytes (MB) de un proceso de IntelliSense. El límite predeterminado es de 4096 MB y el límite máximo es de 16 GB. La extensión se cerrará y reiniciará un proceso de IntelliSense cuando supere el límite.",
"c_cpp.configuration.intelliSenseUpdateDelay.description": "Controla el retraso en milisegundos antes de que IntelliSense inicie la actualización después de una modificación.",
"c_cpp.configuration.default.includePath.description": "Valor que se va a usar en una configuración si \"includePath\" no se especifica en c_cpp_properties.json. Si se especifica \"includePath\", agregue \"${default}\" a la matriz para insertar los valores de esta configuración.",
"c_cpp.configuration.default.defines.description": "Valor que debe usarse en una configuración si no se especifica \"defines\", o bien los valores que se deben insertar si se especifica \"${default}\" en \"defines\".",
"c_cpp.configuration.default.macFrameworkPath.description": "Valor que debe usarse en una configuración si no se especifica \"macFrameworkPath\", o bien los valores que deben insertarse si se especifica \"${default}\" en \"macFrameworkPath\".",
@@ -206,7 +208,7 @@
"c_cpp.debuggers.miDebuggerArgs.description": "Argumentos adicionales para el depurador MI (como gdb).",
"c_cpp.debuggers.miDebuggerServerAddress.description": "Dirección de red del servidor del depurador MI al que debe conectarse (ejemplo: localhost:1234).",
"c_cpp.debuggers.stopAtEntry.description": "Parámetro opcional. Si se establece en true, el depurador debe detenerse en el punto de entrada del destino. Si se pasa processId, no tiene efecto.",
"c_cpp.debuggers.debugServerPath.description": "Ruta de acceso completa opcional al servidor de depuración que se va a iniciar. El valor predeterminado es NULL.",
"c_cpp.debuggers.debugServerPath.description": "Ruta de acceso completa opcional al servidor de depuración que se va a iniciar. El valor predeterminado es NULL. Se usa junto con \"miDebugServerAddress\" o su servidor propio con un comando \"customSetupCommand\" que ejecuta \"-target-select remote <server:port>\".",
"c_cpp.debuggers.debugServerArgs.description": "Argumentos opcionales del servidor de depuración. El valor predeterminado es NULL.",
"c_cpp.debuggers.serverStarted.description": "Patrón opcional iniciado por el servidor que debe buscarse en la salida del servidor de depuración. El valor predeterminado es NULL.",
"c_cpp.debuggers.filterStdout.description": "Busca la secuencia stdout para el patrón iniciado por el servidor y registra stdout en la salida de depuración. El valor predeterminado es true.",
@@ -230,5 +232,8 @@
"c_cpp.taskDefinitions.args.description": "Argumentos adicionales que se pasan al compilador o al script de compilación",
"c_cpp.taskDefinitions.options.description": "Opciones de comando adicionales",
"c_cpp.taskDefinitions.options.cwd.description": "Directorio de trabajo actual del script o el programa ejecutado. Si se omite, se usa la raíz del área de trabajo actual de Code.",
"c_cpp.taskDefinitions.detail.description": "Detalles adicionales de la tarea"
"c_cpp.taskDefinitions.detail.description": "Detalles adicionales de la tarea",
"c_cpp.debuggers.sourceFileMap.sourceFileMapEntry.description": "Rutas de acceso actuales y en tiempo de compilación a los mismos árboles de origen. Los archivos que se encuentran en EditorPath se asignan a la ruta de acceso CompileTimePath para la coincidencia de los puntos de interrupción y se asignan de CompileTimePath a EditorPath al mostrar ubicaciones de seguimiento de la pila.",
"c_cpp.debuggers.sourceFileMap.sourceFileMapEntry.editorPath.description": "La ruta de acceso al árbol de origen que el editor va a usar.",
"c_cpp.debuggers.sourceFileMap.sourceFileMapEntry.useForBreakpoints.description": "False si la entrada solo se usa para la asignación de ubicación del marco de pila. True si la entrada debe usarse también al especificar ubicaciones de los puntos de interrupción."
}
@@ -17,6 +17,7 @@
"envfale.failed": "No se pudo usar {0}. Motivo: {1}",
"replacing.sourcepath": "Reemplazando {0} \"{1}\" por \"{2}\".",
"replacing.targetpath": "Reemplazando {0} \"{1}\" por \"{2}\".",
"replacing.editorPath": "Reemplazando el {0} \"{1}\" por \"{2}\".",
"resolving.variables.in.sourcefilemap": "Resolviendo las variables de {0}...",
"open.envfile": "Abrir {0}",
"unexpected.os": "Tipo de sistema operativo no esperado",
@@ -7,6 +7,6 @@
"build.and.debug.active.file": "Compilar y depurar el archivo activo",
"cannot.build.non.cpp": "No se puede compilar y depurar código porque el archivo activo no es un archivo de código fuente de C o C++.",
"no.compiler.found": "No se encontró ningún compilador",
"select.compiler": "Seleccione un compilador",
"select.configuration": "Select a configuration",
"cl.exe.not.available": "La compilación y depuración de {0} solo se puede usar cuando VS Code se ejecuta desde el Símbolo del sistema para desarrolladores de Visual Studio."
}
@@ -203,5 +203,6 @@
"cpp_probing_compiler_default_standard": "Sondeo del compilador para el estándar de lenguaje C++ predeterminado con la línea de comandos: {0}",
"detected_language_standard_version": "Versión estándar del lenguaje detectada: {0}",
"unhandled_default_target_detected": "Se detectó un valor de destino del compilador predeterminado no controlado: {0}",
"unhandled_target_arg_detected": "Se detectó un valor del argumento de destino no controlado: {0}"
"unhandled_target_arg_detected": "Se detectó un valor del argumento de destino no controlado: {0}",
"memory_limit_shutting_down_intellisense": "Cerrando el servidor de IntelliSense: {0}. El uso de la memoria es de {1} MB y ha superado el límite de {2} MB."
}
+9 -4
View File
@@ -50,7 +50,7 @@
"c_cpp.configuration.vcFormat.indent.preprocessor.none.description": "Les directives de préprocesseur ne sont pas mises en forme.",
"c_cpp.configuration.vcFormat.indent.accessSpecifiers.description": "Les spécificateurs d'accès sont mis en retrait par rapport aux définitions de classe ou de struct en fonction de la valeur spécifiée dans le paramètre Éditeur : Taille des tabulations",
"c_cpp.configuration.vcFormat.indent.namespaceContents.description": "Le code est mis en retrait par rapport à son espace de noms englobant, en fonction de la valeur spécifiée dans le paramètre Éditeur : Taille des tabulations",
"c_cpp.configuration.vcFormat.indent.preserveComment.description": "La mise en retrait des commentaires ne change pas pendant les opérations de mise en forme.",
"c_cpp.configuration.vcFormat.indent.preserveComments.description": "La mise en retrait des commentaires ne change pas pendant les opérations de mise en forme.",
"c_cpp.configuration.vcFormat.newLine.beforeOpenBrace.namespace.description": "Position des accolades ouvrantes pour les espaces de noms",
"c_cpp.configuration.vcFormat.newLine.beforeOpenBrace.type.description": "Position des accolades ouvrantes pour les définitions de type",
"c_cpp.configuration.vcFormat.newLine.beforeOpenBrace.lambda.description": "Position des accolades ouvrantes pour les fonctions lambda",
@@ -137,7 +137,9 @@
"c_cpp.configuration.commentContinuationPatterns.description": "Définit le comportement de l'éditeur quand vous appuyez sur la touche Entrée dans un bloc de commentaires multiligne ou monoligne.",
"c_cpp.configuration.configurationWarnings.description": "Détermine si des notifications de fenêtre contextuelle s'affichent quand une extension de fournisseur de configuration ne peut pas fournir la configuration d'un fichier source.",
"c_cpp.configuration.intelliSenseCachePath.description": "Définit le chemin de dossier des en-têtes précompilés mis en cache utilisés par IntelliSense. Le chemin du cache par défaut est \"%LocalAppData%/Microsoft/vscode-cpptools\" sur Windows, \"$XDG_CACHE_HOME/vscode-cpptools/\" sur Linux (ou \"$HOME/.cache/vscode-cpptools/\" si XDG_CACHE_HOME n'est pas défini) et \"$HOME/Library/Caches/vscode-cpptools/\" sur Mac. Le chemin par défaut est utilisé si aucun chemin n'est spécifié ou si le chemin spécifié n'est pas valide.",
"c_cpp.configuration.intelliSenseCacheSize.description": "Taille maximale de l'espace du disque dur par espace de travail en mégaoctets pour les en-têtes précompilés mis en cache. L'utilisation réelle peut varier autour de cette valeur. La taille par défaut est 5 120 Mo. La mise en cache des en-têtes précompilés est désactivée quand la taille est égale à 0.",
"c_cpp.configuration.intelliSenseCacheSize.description": "Taille maximale de l'espace du disque dur par espace de travail en Mo (mégaoctets) pour les en-têtes précompilés mis en cache. L'utilisation réelle peut varier autour de cette valeur. La taille par défaut est de 5 120 Mo. La mise en cache des en-têtes précompilés est désactivée quand la taille est égale à 0.",
"c_cpp.configuration.intelliSenseMemoryLimit.description": "Limite d'utilisation de la mémoire en Mo (mégaoctets) d'un processus IntelliSense. La limite par défaut est de 4 096 Mo, et la limite maximale est de 16 Go. L'extension s'arrête et redémarre un processus IntelliSense quand elle dépasse la limite.",
"c_cpp.configuration.intelliSenseUpdateDelay.description": "Contrôle le délai en millisecondes avant que la mise à jour d'IntelliSense ne commence après une modification.",
"c_cpp.configuration.default.includePath.description": "Valeur à utiliser dans une configuration si \"includePath\" n'est pas spécifié dans c_cpp_properties.json. Si \"includePath\" est spécifié, ajoutez \"${default}\" au tableau pour insérer les valeurs de ce paramètre.",
"c_cpp.configuration.default.defines.description": "Valeur à utiliser dans une configuration si \"defines\" n'est pas spécifié ou valeurs à insérer si \"${default}\" est présent dans \"defines\".",
"c_cpp.configuration.default.macFrameworkPath.description": "Valeur à utiliser dans une configuration si \"macFrameworkPath\" n'est pas spécifié ou valeurs à insérer si \"${default}\" est présent dans \"macFrameworkPath\".",
@@ -206,7 +208,7 @@
"c_cpp.debuggers.miDebuggerArgs.description": "Arguments supplémentaires pour le débogueur MI (par exemple gdb).",
"c_cpp.debuggers.miDebuggerServerAddress.description": "Adresse réseau du serveur du débogueur MI auquel se connecter (par exemple : localhost:1234).",
"c_cpp.debuggers.stopAtEntry.description": "Paramètre facultatif. Si la valeur est true, le débogueur doit s'arrêter au point d'entrée de la cible. Si processId est passé, le paramètre n'a aucun effet.",
"c_cpp.debuggers.debugServerPath.description": "Chemin complet facultatif du serveur de débogage à lancer. La valeur par défaut est null.",
"c_cpp.debuggers.debugServerPath.description": "Chemin complet facultatif au serveur de débogage à lancer (valeur par défaut : null). Utilisé conjointement avec \"miDebugServerAddress\" ou votre propre serveur avec \"customSetupCommand\" qui exécute \"-target-select remote <server:port>\"`.",
"c_cpp.debuggers.debugServerArgs.description": "Arguments facultatifs du serveur de débogage. La valeur par défaut est null.",
"c_cpp.debuggers.serverStarted.description": "Modèle facultatif de démarrage du serveur à rechercher dans la sortie du serveur de débogage. La valeur par défaut est null.",
"c_cpp.debuggers.filterStdout.description": "Permet de rechercher dans le flux stdout le modèle correspondant au démarrage du serveur, et de journaliser stdout dans la sortie de débogage. La valeur par défaut est true.",
@@ -230,5 +232,8 @@
"c_cpp.taskDefinitions.args.description": "Arguments supplémentaires à passer au compilateur ou au script de compilation",
"c_cpp.taskDefinitions.options.description": "Options de commande supplémentaires",
"c_cpp.taskDefinitions.options.cwd.description": "Répertoire de travail actif du programme ou script exécuté. En cas d'omission, la racine de l'espace de travail actif de Code est utilisée.",
"c_cpp.taskDefinitions.detail.description": "Détails supplémentaires de la tâche"
"c_cpp.taskDefinitions.detail.description": "Détails supplémentaires de la tâche",
"c_cpp.debuggers.sourceFileMap.sourceFileMapEntry.description": "Chemins actuels et au moment de la compilation des mêmes arborescences sources. Les fichiers situés dans EditorPath sont mappés au chemin CompileTimePath pour les correspondances de points d'arrêt et sont mappés de CompileTimePath à EditorPath au moment de l'affichage des emplacements d'arborescences des appels de procédure.",
"c_cpp.debuggers.sourceFileMap.sourceFileMapEntry.editorPath.description": "Chemin de l'arborescence source que l'éditeur va utiliser.",
"c_cpp.debuggers.sourceFileMap.sourceFileMapEntry.useForBreakpoints.description": "La valeur est false si cette entrée est utilisée uniquement pour le mappage d'emplacements de frame de pile. La valeur est true si cette entrée doit également être utilisée au moment de la spécification d'emplacements de point d'arrêt."
}
@@ -17,6 +17,7 @@
"envfale.failed": "L'utilisation de {0} a échoué. Motif : {1}",
"replacing.sourcepath": "Remplacement de {0} '{1}' par '{2}'.",
"replacing.targetpath": "Remplacement de {0} '{1}' par '{2}'.",
"replacing.editorPath": "Remplacement de {0} '{1}' par '{2}'.",
"resolving.variables.in.sourcefilemap": "Résolution des variables dans {0}...",
"open.envfile": "Ouvrir {0}",
"unexpected.os": "Type de système d'exploitation inattendu",
@@ -7,6 +7,6 @@
"build.and.debug.active.file": "Générer et déboguer le fichier actif",
"cannot.build.non.cpp": "Génération et débogage impossibles, car le fichier actif n'est pas un fichier source C ou C++.",
"no.compiler.found": "Aucun compilateur",
"select.compiler": "Sélectionner un compilateur",
"select.configuration": "Select a configuration",
"cl.exe.not.available": "La génération et le débogage de {0} peuvent être utilisés uniquement quand VS Code est exécuté à partir de l'invite de commandes développeur pour VS."
}
@@ -203,5 +203,6 @@
"cpp_probing_compiler_default_standard": "Sondage du compilateur pour déterminer la norme de langage C++ par défaut via la ligne de commande : {0}",
"detected_language_standard_version": "Version de la norme de langage détectée : {0}",
"unhandled_default_target_detected": "Détection d'une valeur cible par défaut du compilateur non prise en charge : {0}",
"unhandled_target_arg_detected": "Détection d'une valeur d'argument cible non prise en charge : {0}"
"unhandled_target_arg_detected": "Détection d'une valeur d'argument cible non prise en charge : {0}",
"memory_limit_shutting_down_intellisense": "Arrêt du serveur IntelliSense : {0}. L'utilisation de la mémoire est de {1} Mo et a dépassé la limite fixée à {2} Mo."
}
@@ -10,7 +10,7 @@
"c_cpp_properties.schema.json.definitions.configurations.items.properties.cStandard": "Versione dello standard del linguaggio C da usare per IntelliSense. Nota: gli standard GNU vengono usati solo per eseguire query sul compilatore impostato per ottenere le definizioni di GNU. IntelliSense emulerà la versione dello standard di C equivalente.",
"c_cpp_properties.schema.json.definitions.configurations.items.properties.cppStandard": "Versione dello standard del linguaggio C++ da usare per IntelliSense. Nota: gli standard GNU vengono usati solo per eseguire query sul compilatore impostato per ottenere le definizioni di GNU. IntelliSense emulerà la versione dello standard di C++ equivalente.",
"c_cpp_properties.schema.json.definitions.configurations.items.properties.compileCommands": "Percorso completo del file compile_commands.json per l'area di lavoro.",
"c_cpp_properties.schema.json.definitions.configurations.items.properties.includePath": "Elenco di percorsi che il motore IntelliSense userà durante la ricerca delle intestazioni incluse. La ricerca in questi percorsi non è ricorsiva. Specificare '*' per indicare la ricerca ricorsiva. Ad esempio: con '${workspaceFolder}/**' la ricerca verrà estesa a tutte le sottodirectory, mentre con '${workspaceFolder}' sarà limitata a quella corrente.",
"c_cpp_properties.schema.json.definitions.configurations.items.properties.includePath": "Elenco di percorsi che il motore IntelliSense userà durante la ricerca delle intestazioni incluse. La ricerca in questi percorsi non è ricorsiva. Specificare '**' per indicare la ricerca ricorsiva. Ad esempio: con '${workspaceFolder}/**' la ricerca verrà estesa a tutte le sottodirectory, mentre con '${workspaceFolder}' sarà limitata a quella corrente.",
"c_cpp_properties.schema.json.definitions.configurations.items.properties.macFrameworkPath": "Elenco di percorsi che il motore IntelliSense userà durante la ricerca delle intestazioni incluse da framework Mac. Supportato solo nella configurazione Mac.",
"c_cpp_properties.schema.json.definitions.configurations.items.properties.windowsSdkVersion": "Versione del percorso di inclusione di Windows SDK da usare in Windows, ad esempio '10.0.17134.0'.",
"c_cpp_properties.schema.json.definitions.configurations.items.properties.defines": "Elenco di definizioni del preprocessore che il motore IntelliSense userà durante l'analisi dei file. Facoltativamente, usare = per impostare un valore, ad esempio VERSION=1.",
@@ -19,7 +19,7 @@
"c_cpp_properties.schema.json.definitions.configurations.items.properties.configurationProvider": "ID di un'estensione VS Code che può fornire informazioni di configurazione IntelliSense per i file di origine.",
"c_cpp_properties.schema.json.definitions.configurations.items.properties.browse.properties.limitSymbolsToIncludedHeaders": "true per elaborare solo i file inclusi direttamente o indirettamente come intestazioni; false per elaborare tutti i file nei percorsi di inclusione specificati.",
"c_cpp_properties.schema.json.definitions.configurations.items.properties.browse.properties.databaseFilename": "Percorso del database dei simboli generato. Se viene specificato un percorso relativo, sarà relativo al percorso di archiviazione predefinito dell'area di lavoro.",
"c_cpp_properties.schema.json.definitions.configurations.items.properties.browse.properties.path": "Elenco di percorsi da usare per l'indicizzazione e l'analisi dei simboli dell'area di lavoro (usati da Vai alla definizione, Trova tutti i riferimenti e così via). Per impostazione predefinita, la ricerca in questi percorsi è ricorsiva. Specificare '*' per indicare la ricerca non ricorsiva. Ad esempio, con '${workspaceFolder}' la ricerca verrà estesa a tutte le sottodirectory, mentre con '${workspaceFolder}/*' sarà limitata a quella corrente.",
"c_cpp_properties.schema.json.definitions.configurations.items.properties.browse.properties.path": "Elenco di percorsi da usare per l'indicizzazione e l'analisi dei simboli dell'area di lavoro (usati da Vai alla definizione, Trova tutti i riferimenti e così via). Per impostazione predefinita, la ricerca in questi percorsi è ricorsiva. Specificare '**' per indicare la ricerca non ricorsiva. Ad esempio, con '${workspaceFolder}' la ricerca verrà estesa a tutte le sottodirectory, mentre con '${workspaceFolder}/*' sarà limitata a quella corrente.",
"c_cpp_properties.schema.json.definitions.configurations.items.properties.customConfigurationVariables": "Variabili personalizzate su cui è possibile eseguire query tramite il comando ${cpptools:activeConfigCustomVariable} da usare per le variabili di input in launch.jso o tasks.js.",
"c_cpp_properties.schema.json.definitions.env": "Variabili personalizzate che è possibile riutilizzare in qualsiasi punto del file usando la sintassi ${variabile} o ${env:variabile}.",
"c_cpp_properties.schema.json.definitions.version": "Versione del file di configurazione. Questa proprietà è gestita dall'estensione. Non modificarla.",
+9 -4
View File
@@ -50,7 +50,7 @@
"c_cpp.configuration.vcFormat.indent.preprocessor.none.description": "Le direttive del preprocessore non verranno formattate.",
"c_cpp.configuration.vcFormat.indent.accessSpecifiers.description": "Gli identificatori di accesso sono rientrati rispetto alle definizioni di classe o struct in base al valore specificato nell'impostazione Editor: Dimensione tabulazione",
"c_cpp.configuration.vcFormat.indent.namespaceContents.description": "Il codice viene rientrato rispetto allo spazio dei nomi che lo contiene in base al valore specificato nell'impostazione Editor: Dimensione tabulazione",
"c_cpp.configuration.vcFormat.indent.preserveComment.description": "I rientri dei commenti non vengono modificati durante le operazioni di formattazione.",
"c_cpp.configuration.vcFormat.indent.preserveComments.description": "I rientri dei commenti non vengono modificati durante le operazioni di formattazione.",
"c_cpp.configuration.vcFormat.newLine.beforeOpenBrace.namespace.description": "Posizione delle parentesi graffe di apertura per gli spazi dei nomi",
"c_cpp.configuration.vcFormat.newLine.beforeOpenBrace.type.description": "Posizione delle parentesi graffe di apertura per le definizioni di tipo",
"c_cpp.configuration.vcFormat.newLine.beforeOpenBrace.lambda.description": "Posizione delle parentesi graffe di apertura per le funzioni lambda",
@@ -137,7 +137,9 @@
"c_cpp.configuration.commentContinuationPatterns.description": "Definisce il comportamento dell'editor quando si preme il tasto INVIO all'interno di un blocco di commento su più righe o su una sola riga.",
"c_cpp.configuration.configurationWarnings.description": "Determina se verranno visualizzate le notifiche popup quando un'estensione del provider di configurazione non riesce a fornire una configurazione per un file di origine.",
"c_cpp.configuration.intelliSenseCachePath.description": "Definisce il percorso della cartella per le intestazioni precompilate memorizzate nella cache usate da IntelliSense. Il percorso predefinito della cache è \"%LocalAppData%/Microsoft/vscode-cpptools\" in Windows, \"$XDG_CACHE_HOME/vscode-cpptools/\" in Linux (o \"$HOME/.cache/vscode-cpptools/\" se XDG_CACHE_HOME non è definito) e \"$HOME/Library/Caches/vscode-cpptools/\" in Mac. Verrà usato il percorso predefinito se non ne viene specificato nessuno o se ne viene specificato uno non valido.",
"c_cpp.configuration.intelliSenseCacheSize.description": "Dimensioni massime dello spazio su disco rigido per area di lavoro in MB per le intestazioni precompilate memorizzate nella cache. L'utilizzo effettivo potrebbe aggirarsi intorno a questo valore. Le dimensioni predefinite sono pari a 5120 MB. La memorizzazione nella cache dell'intestazione precompilata è disabilitata quando le dimensioni sono pari a 0.",
"c_cpp.configuration.intelliSenseCacheSize.description": "Dimensioni massime dello spazio su disco rigido per area di lavoro in megabyte (MB) per le intestazioni precompilate memorizzate nella cache. L'utilizzo effettivo potrebbe aggirarsi intorno a questo valore. Le dimensioni predefinite sono pari a 5120 MB. La memorizzazione nella cache dell'intestazione precompilata è disabilitata quando le dimensioni sono pari a 0.",
"c_cpp.configuration.intelliSenseMemoryLimit.description": "Limite di utilizzo della memoria in megabyte (MB) di un processo IntelliSense. Il limite predefinito è 4096 MB e il limite massimo è 16 GB. Quando viene superato il limite, l'estensione verrà arrestata e riavvierà un processo IntelliSense.",
"c_cpp.configuration.intelliSenseUpdateDelay.description": "Controlla il ritardo in millisecondi prima che IntelliSense avvii l'aggiornamento dopo una modifica.",
"c_cpp.configuration.default.includePath.description": "Valore da usare in una configurazione se \"includePath\" non è specificato in c_cpp_properties.json. Se \"includePath\" è specificato, aggiungere \"${default}\" alla matrice per inserire i valori da questa impostazione.",
"c_cpp.configuration.default.defines.description": "Valore da usare in una configurazione se \"defines\" non è specificato oppure valori da inserire se \"${default}\" è presente in \"defines\".",
"c_cpp.configuration.default.macFrameworkPath.description": "Valore da usare in una configurazione se \"macFrameworkPath\" non è specificato oppure valori da inserire se \"${default}\" è presente in \"macFrameworkPath\".",
@@ -206,7 +208,7 @@
"c_cpp.debuggers.miDebuggerArgs.description": "Argomenti aggiuntivi per il debugger MI, ad esempio gdb.",
"c_cpp.debuggers.miDebuggerServerAddress.description": "Indirizzo di rete del server del debugger MI a cui connettersi. Esempio: localhost:1234.",
"c_cpp.debuggers.stopAtEntry.description": "Parametro facoltativo. Se è true, il debugger deve arrestarsi in corrispondenza del punto di ingresso della destinazione. Se viene passato ProcessId, non ha alcun effetto.",
"c_cpp.debuggers.debugServerPath.description": "Percorso completo facoltativo del server di debug da avviare. L'impostazione predefinita è null.",
"c_cpp.debuggers.debugServerPath.description": "Percorso completo facoltativo del server di debug da avviare. L'impostazione predefinita è Null. Viene usata insieme a \"miDebugServerAddress\" o al proprio server con un comando \"customSetupCommand\" che esegue \"-target-select remote <server:porta>\"`.",
"c_cpp.debuggers.debugServerArgs.description": "Argomenti facoltativi del server di debug. L'impostazione predefinita è null.",
"c_cpp.debuggers.serverStarted.description": "Criterio facoltativo avviato dal server per cercare nell'output del server di debug. L'impostazione predefinita è null.",
"c_cpp.debuggers.filterStdout.description": "Cerca il criterio avviato dal server nel flusso stdout e registra stdout nell'output di debug. L'impostazione predefinita è true.",
@@ -230,5 +232,8 @@
"c_cpp.taskDefinitions.args.description": "Argomenti aggiuntivi da passare al compilatore o allo script di compilazione",
"c_cpp.taskDefinitions.options.description": "Opzioni aggiuntive del comando",
"c_cpp.taskDefinitions.options.cwd.description": "Directory di lavoro corrente del programma o dello script eseguito. Se omesso, viene usata la radice dell'area di lavoro corrente di Visual Studio Code.",
"c_cpp.taskDefinitions.detail.description": "Dettagli aggiuntivi dell'attività"
"c_cpp.taskDefinitions.detail.description": "Dettagli aggiuntivi dell'attività",
"c_cpp.debuggers.sourceFileMap.sourceFileMapEntry.description": "Percorsi correnti e della fase di compilazione degli stessi alberi di origine. I file trovati in EditorPath vengono associati al percorso CompileTimePath per la corrispondenza dei punti di interruzione e associati da CompileTimePath a EditorPath durante la visualizzazione dei percorsi delle analisi dello stack.",
"c_cpp.debuggers.sourceFileMap.sourceFileMapEntry.editorPath.description": "Percorso dell'albero di origine che verrà usato dall'editor.",
"c_cpp.debuggers.sourceFileMap.sourceFileMapEntry.useForBreakpoints.description": "False se questa voce viene usata solo per il mapping dei percorsi dello stack frame. True se questa voce deve essere usata anche quando si specificano i percorsi dei punti di interruzione."
}
@@ -17,6 +17,7 @@
"envfale.failed": "Non è stato possibile usare {0}. Motivo: {1}",
"replacing.sourcepath": "Sostituzione di {0} '{1}' con '{2}'.",
"replacing.targetpath": "Sostituzione di {0} '{1}' con '{2}'.",
"replacing.editorPath": "Sostituzione di {0} '{1}' con '{2}'.",
"resolving.variables.in.sourcefilemap": "Risoluzione delle variabili in {0}...",
"open.envfile": "Apri {0}",
"unexpected.os": "Tipo di sistema operativo imprevisto",
@@ -7,6 +7,6 @@
"build.and.debug.active.file": "Compila ed esegui il debug del file attivo",
"cannot.build.non.cpp": "Non è possibile compilare ed eseguire il debug perché il file attivo non è un file di origine C o C++.",
"no.compiler.found": "Non è stato trovato alcun compilatore",
"select.compiler": "Selezionare un compilatore",
"select.configuration": "Select a configuration",
"cl.exe.not.available": "La compilazione e il debug di {0} sono utilizzabili solo quando VS Code viene eseguito da Prompt dei comandi per gli sviluppatori per Visual Studio."
}
@@ -180,8 +180,8 @@
"cpp_compiler_from_compiler_path": "Tentativo di recuperare le impostazioni predefinite dal compilatore C++ nella proprietà \"compilerPath\": '{0}'",
"c_compiler_from_compile_commands": "Tentativo di recuperare le impostazioni predefinite dal compilatore C nel file compile_commands.json: '{0}'",
"cpp_compiler_from_compile_commands": "Tentativo di recuperare le impostazioni predefinite dal compilatore C++ nel file compile_commands.json: '{0}'",
"c_intellisense_mode_changed": "Per il file di origine C, il valore di IntelliSenseMode è stato modificato da \"{0}\" a \"{1}\".",
"cpp_intellisense_mode_changed": "Per il file di origine C++, il valore di IntelliSenseMode è stato modificato da \"{0}\" a \"{1}\".",
"c_intellisense_mode_changed": "Per i file di origine C, il valore di IntelliSenseMode è stato modificato da \"{0}\" a \"{1}\".",
"cpp_intellisense_mode_changed": "Per i file di origine C++, il valore di IntelliSenseMode è stato modificato da \"{0}\" a \"{1}\".",
"c_std_version_changed": "Per il file di origine C, il valore di cStandard è stato modificato da \"{0}\" a \"{1}\".",
"cpp_std_version_changed": "Per il file di origine C++, il valore di cppStandard è stato modificato da \"{0}\" a \"{1}\".",
"c_intellisense_mode_and_std_version_changed": "Per i file di origine C, il valore di IntelliSenseMode è stato modificato da \"{0}\" a \"{1}\" e quello di cStandard è stato modificato da \"{2}\" a \"{3}\".",
@@ -203,5 +203,6 @@
"cpp_probing_compiler_default_standard": "Esecuzione del probe sul compilatore per lo standard del linguaggio C++ predefinito con la riga di comando: {0}",
"detected_language_standard_version": "Versione standard del linguaggio rilevata: {0}",
"unhandled_default_target_detected": "È stato rilevato un valore di destinazione del compilatore predefinito non gestito: {0}",
"unhandled_target_arg_detected": "È stato rilevato un valore dell'argomento di destinazione non gestito: {0}"
"unhandled_target_arg_detected": "È stato rilevato un valore dell'argomento di destinazione non gestito: {0}",
"memory_limit_shutting_down_intellisense": "Il server IntelliSense verrà arrestato: {0}. La memoria utilizzata è {1} MB e ha superato il limite di {2} MB."
}
+13 -8
View File
@@ -23,16 +23,16 @@
"c_cpp.command.vcpkgClipboardInstallSuggested.title": "vcpkg インストール コマンドをクリップボードにコピーする",
"c_cpp.command.vcpkgOnlineHelpSuggested.title": "vcpkg のヘルプ ページへのアクセス",
"c_cpp.configuration.formatting.description": "書式設定エンジンを構成します",
"c_cpp.configuration.formatting.clangFormat.description": "clang-format を使用してコードが書式設定されます。",
"c_cpp.configuration.formatting.clangFormat.description": "clang-format を使用してコードがフォーマットされます。",
"c_cpp.configuration.formatting.vcFormat.description": "コードの書式設定に Visual C++ の書式設定エンジンが使用されます。",
"c_cpp.configuration.formatting.Default.description": "clang-format を使用してコードが書式設定されます。",
"c_cpp.configuration.formatting.Default.description": "clang-format を使用してコードがフォーマットされます。",
"c_cpp.configuration.formatting.Disabled.description": "コードの書式設定は無効になります。",
"c_cpp.configuration.vcFormat.indent.braces.description": "中かっこは、[Editor: Tab Size](エディター: タブ サイズ) 設定で指定された分だけインデントされます。",
"c_cpp.configuration.vcFormat.indent.multiLineRelativeTo.description": "新しい行のインデントの基準を決定します",
"c_cpp.configuration.vcFormat.indent.multiLineRelativeTo.outermostParenthesis.description": "新しい行は、一番外側の始めかっこを基準にインデントされます。",
"c_cpp.configuration.vcFormat.indent.multiLineRelativeTo.innermostParenthesis.description": "新しい行は、最も内側にある始めかっこを基準にインデントされます。",
"c_cpp.configuration.vcFormat.indent.multiLineRelativeTo.statementBegin.description": "新しい行は、現在のステートメントの先頭を基準にインデントされます。",
"c_cpp.configuration.vcFormat.indent.withinParentheses.description": "新しい行を入力すると、始めかっこの下に配置されるか、'C_Cpp.vcFormat.indent.multiLineRelativeTo' を基準にして配置されます。",
"c_cpp.configuration.vcFormat.indent.withinParentheses.description": "新しい行を入力すると、始めかっこの下か、'C_Cpp.vcFormat.indent.multiLineRelativeTo' を基準にして配置されます。",
"c_cpp.configuration.vcFormat.indent.withinParentheses.alignToParenthesis.description": "新しい行は、始めかっこの下に揃えられます。",
"c_cpp.configuration.vcFormat.indent.withinParentheses.indent.description": "新しい行は、'C_Cpp.vcFormat.indent.multiLineRelativeTo' を基準にしてインデントされます。",
"c_cpp.configuration.vcFormat.indent.preserveWithinParentheses.description": "既存のコードで、かっこ内の新しい行のインデントの配置を既存のまま保持します。",
@@ -47,10 +47,10 @@
"c_cpp.configuration.vcFormat.indent.preprocessor.description": "プリプロセッサ ディレクティブの位置",
"c_cpp.configuration.vcFormat.indent.preprocessor.oneLeft.description": "現在のコード インデントの左に、[Editor: Tab Size](エディター: タブ サイズ) 設定で指定された分だけプリプロセッサ ディレクティブが配置されています",
"c_cpp.configuration.vcFormat.indent.preprocessor.leftmostColumn.description": "プリプロセッサ ディレクティブは、コードの左端に配置されています。",
"c_cpp.configuration.vcFormat.indent.preprocessor.none.description": "プリプロセッサ ディレクティブは書式設定されません。",
"c_cpp.configuration.vcFormat.indent.preprocessor.none.description": "プリプロセッサ ディレクティブはフォーマットされません。",
"c_cpp.configuration.vcFormat.indent.accessSpecifiers.description": "アクセス指定子は、クラスまたは構造体の定義を基準に [Editor: Tab Size](エディター: タブ サイズ) 設定で指定された分だけインデントされます",
"c_cpp.configuration.vcFormat.indent.namespaceContents.description": "コードは、エディターのタブ サイズの設定で指定された分だけ、それを囲んでいる名前空間を基準にインデントされます",
"c_cpp.configuration.vcFormat.indent.preserveComment.description": "コメントのインデントは、書式設定操作中に変更されません。",
"c_cpp.configuration.vcFormat.indent.preserveComments.description": "コメントのインデントは、書式設定操作中に変更されません。",
"c_cpp.configuration.vcFormat.newLine.beforeOpenBrace.namespace.description": "名前空間の左中かっこの位置",
"c_cpp.configuration.vcFormat.newLine.beforeOpenBrace.type.description": "型定義の左中かっこの位置",
"c_cpp.configuration.vcFormat.newLine.beforeOpenBrace.lambda.description": "ラムダ関数の左中かっこの位置",
@@ -103,7 +103,7 @@
"c_cpp.configuration.vcFormat.space.pointerReferenceAlignment.left.description": "ポインターおよび参照演算子は左揃えになります。",
"c_cpp.configuration.vcFormat.space.pointerReferenceAlignment.center.description": "ポインターおよび参照演算子は中央揃えになります。",
"c_cpp.configuration.vcFormat.space.pointerReferenceAlignment.right.description": "ポインターおよび参照演算子は右揃えになります。",
"c_cpp.configuration.vcFormat.space.pointerReferenceAlignment.ignore.description": "ポインターおよび参照演算子は書式設定されません。",
"c_cpp.configuration.vcFormat.space.pointerReferenceAlignment.ignore.description": "ポインターおよび参照演算子はフォーマットされません。",
"c_cpp.configuration.vcFormat.space.aroundTernaryOperator.description": "条件演算子の前後のスペース",
"c_cpp.configuration.vcFormat.space.aroundOperators.insert.description": "演算子の前後にスペースが追加されます。",
"c_cpp.configuration.vcFormat.space.aroundOperators.remove.description": "演算子の前後のスペースが削除されます。",
@@ -138,6 +138,8 @@
"c_cpp.configuration.configurationWarnings.description": "構成プロバイダー拡張機能でソース ファイルの構成を提供できない場合に、ポップアップ通知を表示するかどうかを指定します。",
"c_cpp.configuration.intelliSenseCachePath.description": "IntelliSense が使用する、キャッシュされたプリコンパイル済みヘッダーのフォルダー パスを定義します。既定のキャッシュ パスは、Windows では \"%LocalAppData%/Microsoft/vscode-cpptools\"、Linux では \"$XDG_CACHE_HOME/vscode-cpptools/\" (XDG_CACHE_HOME が定義されていない場合は、\"$HOME/.cache/vscode-cpptools/\" )、Mac では \"$HOME/Library/Caches/vscode-cpptools/\" です。パスが指定されていない場合、または指定したパスが無効な場合は、既定のパスが使用されます。",
"c_cpp.configuration.intelliSenseCacheSize.description": "キャッシュされたプリコンパイル済みヘッダーの、ワークスペースごとのハード ドライブ領域の最大サイズ (MB 単位)。実際の使用量には多少の誤差があります。既定のサイズは 5120 MB です。サイズが 0 の場合、プリコンパイル済みヘッダーのキャッシュは無効になります。",
"c_cpp.configuration.intelliSenseMemoryLimit.description": "IntelliSense プロセスのメモリ使用量の制限 (MB)。既定の制限は 4096 MB で、上限は 16 GB です。拡張機能は、制限を超えると IntelliSense プロセスをシャットダウンして再起動します。",
"c_cpp.configuration.intelliSenseUpdateDelay.description": "修正後に IntelliSense によって更新が開始されるまでの遅延時間をミリ秒単位で制御します。",
"c_cpp.configuration.default.includePath.description": "c_cpp_properties.json で \"includePath\" が指定されていない場合に構成で使用する値です。\"includePath\" が指定されている場合に、この設定から値を挿入するには、配列に \"${default}\" を追加します。",
"c_cpp.configuration.default.defines.description": "\"defines\" が指定されていない場合に構成で使用される値、または \"defines\" 内に \"${default}\" が存在する場合に挿入される値です。",
"c_cpp.configuration.default.macFrameworkPath.description": "\"macFrameworkPath\" が指定されていない場合に構成で使用される値、または \"macFrameworkPath\" 内に \"${default}\" が存在する場合に挿入される値です。",
@@ -206,7 +208,7 @@
"c_cpp.debuggers.miDebuggerArgs.description": "MI デバッガー (gdb など) の追加の引数。",
"c_cpp.debuggers.miDebuggerServerAddress.description": "接続先の MI デバッガー サーバーのネットワークアドレスです (例: localhost: 1234)。",
"c_cpp.debuggers.stopAtEntry.description": "オプションのパラメーターです。true の場合、デバッガーはターゲットのエントリポイントで停止します。processId が渡された場合は効果はありません。",
"c_cpp.debuggers.debugServerPath.description": "起動するデバッグ サーバーの完全なパス (省略可能)。既定値は null です。",
"c_cpp.debuggers.debugServerPath.description": "起動するデバッグ サーバーの完全なパス (省略可能)。既定値は null です。これは、\"miDebugServerAddress\"、または \"-target-select remote <server:port>\" を実行する \"customSetupCommand\" を含む独自のサーバーのいずれかと共に使用されます。",
"c_cpp.debuggers.debugServerArgs.description": "デバッグ サーバー引数 (省略可能)。既定値は null です。",
"c_cpp.debuggers.serverStarted.description": "デバッグ サーバー出力から検索する、サーバー開始のパターン (省略可能)。既定値は null です。",
"c_cpp.debuggers.filterStdout.description": "サーバー開始のパターンを stdout ストリームから検索し、stdout をデバッグ出力にログ記録します。既定値は true です。",
@@ -230,5 +232,8 @@
"c_cpp.taskDefinitions.args.description": "コンパイラまたはコンパイル スクリプトに渡す追加の引数",
"c_cpp.taskDefinitions.options.description": "追加のコマンド オプション",
"c_cpp.taskDefinitions.options.cwd.description": "実行されるプログラムまたはスクリプトの現在の作業ディレクトリ。省略すると、Code の現在のワークスペースのルートが使用されます。",
"c_cpp.taskDefinitions.detail.description": "タスクのその他の詳細"
"c_cpp.taskDefinitions.detail.description": "タスクのその他の詳細",
"c_cpp.debuggers.sourceFileMap.sourceFileMapEntry.description": "同じソース ツリーへの現在およびコンパイル時のパスです。EditorPath で見つかったファイルは、ブレークポイントの一致のために CompileTimePath パスにマップされ、スタック トレースの場所を表示するときに CompileTimePath から EditorPath にマップされます。",
"c_cpp.debuggers.sourceFileMap.sourceFileMapEntry.editorPath.description": "エディターで使用されるソース ツリーへのパスです。",
"c_cpp.debuggers.sourceFileMap.sourceFileMapEntry.useForBreakpoints.description": "このエントリをスタック フレームの場所のマッピングにのみ使用する場合は False です。ブレークポイントの位置を指定するときにもこのエントリを使用する必要がある場合は True です。"
}
@@ -17,6 +17,7 @@
"envfale.failed": "{0} を使用できませんでした。理由: {1}",
"replacing.sourcepath": "{0} '{1}' を '{2}' と置き換えています。",
"replacing.targetpath": "{0} '{1}' を '{2}' と置き換えています。",
"replacing.editorPath": "{0} の '{1}' を '{2}' と置き換えています。",
"resolving.variables.in.sourcefilemap": "{0} の変数を解決しています...",
"open.envfile": "{0} を開く",
"unexpected.os": "予期しない OS の種類",
@@ -7,6 +7,6 @@
"build.and.debug.active.file": "アクティブ ファイルのビルドとデバッグ",
"cannot.build.non.cpp": "アクティブ ファイルが C または C++ ソース ファイルではないため、ビルドおよびデバッグできません。",
"no.compiler.found": "コンパイラが見つかりませんでした",
"select.compiler": "コンパイラを選択する",
"select.configuration": "Select a configuration",
"cl.exe.not.available": "{0} のビルドとデバッグを使用できるのは、VS 用開発者コマンド プロンプトから VS Code を実行する場合のみです。"
}
@@ -187,11 +187,11 @@
"c_intellisense_mode_and_std_version_changed": "C ソース ファイルで、IntelliSenseMode が \"{0}\" から \"{1}\" に変更され、cStandard が \"{2}\" から \"{3}\" に変更されました。",
"cpp_intellisense_mode_and_std_version_changed": "C++ ソースファイルで、IntelliSenseMode が \"{0}\" から \"{1}\" に変更され、cppStandard が \"{2}\" から \"{3}\" に変更されました。",
"c_intellisense_mode_changed_with_path": "C ソース ファイルで、コンパイラの引数とプローブ compilerPath に基づいて、IntelliSenseMode が \"{0}\" から \"{1}\" に変更されました: \"{2}\"",
"cpp_intellisense_mode_changed_with_path": "C++ ソース ファイルで、コンパイラの引数とプローブ compilerPath に基づいて、IntelliSenseMode が \"{0}\" から \"{1}\" に変更されました: \"{2}\"",
"c_std_version_changed_with_path": "C ソース ファイルで、コンパイラの引数とプローブ compilerPath に基づいて、cStandard が \"{0}\" から \"{1}\" に変更されました: \"{2}\"",
"cpp_intellisense_mode_changed_with_path": "C++ ソース ファイルで、コンパイラの引数と compilerPath \"{2}\" のプローブに基づいて、IntelliSenseMode が \"{0}\" から \"{1}\" に変更されました",
"c_std_version_changed_with_path": "C ソース ファイルで、コンパイラの引数と compilerPath \"{2}\" のプローブに基づいて、cStandard が \"{0}\" から \"{1}\" に変更されました",
"cpp_std_version_changed_with_path": "C++ ソース ファイルで、コンパイラの引数とプローブ compilerPath に基づいて、cppStandard が \"{0}\" から \"{1}\" に変更されました: \"{2}\"",
"c_intellisense_mode_and_std_version_changed_with_path": "C ソース ファイルで、コンパイラの引数とプローブ compilerPath に基づいて、IntelliSenseMode が \"{0}\" から \"{1}\" に変更され、cStandard が \"{2}\" から \"{3}\" に変更されました: \"{4}\"",
"cpp_intellisense_mode_and_std_version_changed_with_path": "C++ ソース ファイルで、コンパイラの引数とプローブ compilerPath に基づいて、IntelliSenseMode が \"{0}\" から \"{1}\" に変更され、cppStandard が \"{2}\" から \"{3}\" に変更されました: \"{4}\"",
"cpp_intellisense_mode_and_std_version_changed_with_path": "C++ ソース ファイルで、コンパイラの引数と compilerPath \"{4}\" のプローブに基づいて、IntelliSenseMode が \"{0}\" から \"{1}\" に変更され、cppStandard が \"{2}\" から \"{3}\" に変更されました",
"compiler_path_changed": "compilerPath \"{0}\" を使用して構成を解決できません。代わりに \"{1}\" を使用しています。",
"compiler_path_invalid": "compilerPath を使用して構成を解決できません: \"{0}\"",
"compiler_path_empty": "compilerPath が明示的に空になっているため、コンパイラのプローブをスキップしています",
@@ -203,5 +203,6 @@
"cpp_probing_compiler_default_standard": "コマンド ラインを使用して既定の C++ 言語標準用にコンパイラをプローブしています: {0}",
"detected_language_standard_version": "検出された言語標準バージョン: {0}",
"unhandled_default_target_detected": "ハンドルされていない既定のコンパイラ ターゲット値が検出されました: {0}",
"unhandled_target_arg_detected": "ハンドルされていないターゲット引数値が検出されました: {0}"
"unhandled_target_arg_detected": "ハンドルされていないターゲット引数値が検出されました: {0}",
"memory_limit_shutting_down_intellisense": "IntelliSense サーバーをシャットダウンしています: {0}。メモリ使用量は {1} MB で、{2} MB の制限を超えました。"
}
+17 -12
View File
@@ -27,7 +27,7 @@
"c_cpp.configuration.formatting.vcFormat.description": "코드 서식을 지정하는 데 Visual C++ 서식 엔진이 사용됩니다.",
"c_cpp.configuration.formatting.Default.description": "코드 서식을 지정하는 데 clang-format이 사용됩니다.",
"c_cpp.configuration.formatting.Disabled.description": "코드 서식을 사용하지 않도록 설정됩니다.",
"c_cpp.configuration.vcFormat.indent.braces.description": "편집기: 탭 크기 설정에 지정된 만큼 중괄호를 들여씁니다.",
"c_cpp.configuration.vcFormat.indent.braces.description": "편집기: 탭 크기 설정에 지정된 만큼 중괄호를 들여씁니다.",
"c_cpp.configuration.vcFormat.indent.multiLineRelativeTo.description": "새 줄 들여쓰기의 기준을 결정합니다.",
"c_cpp.configuration.vcFormat.indent.multiLineRelativeTo.outermostParenthesis.description": "가장 바깥쪽의 여는 괄호를 기준으로 새 줄을 들여씁니다.",
"c_cpp.configuration.vcFormat.indent.multiLineRelativeTo.innermostParenthesis.description": "가장 안쪽의 여는 괄호를 기준으로 새 줄을 들여씁니다.",
@@ -36,21 +36,21 @@
"c_cpp.configuration.vcFormat.indent.withinParentheses.alignToParenthesis.description": "새 줄을 여는 괄호 아래에 맞춥니다.",
"c_cpp.configuration.vcFormat.indent.withinParentheses.indent.description": "새 줄을 'C_Cpp.vcFormat.indent.multiLineRelativeTo'를 기준으로 들여씁니다.",
"c_cpp.configuration.vcFormat.indent.preserveWithinParentheses.description": "기존 코드에서는 괄호 안에서 기존의 새 줄 들여쓰기 맞춤을 유지합니다.",
"c_cpp.configuration.vcFormat.indent.caseLabels.description": "switch 문을 기준으로 편집기: 탭 크기 설정에 지정된 만큼 레이블을 들여씁니다.",
"c_cpp.configuration.vcFormat.indent.caseContents.description": "레이블을 기준으로 편집기: 탭 크기 설정에 지정된 만큼 case 블록 내 코드를 들여씁니다.",
"c_cpp.configuration.vcFormat.indent.caseContentsWhenBlock.description": "편집기: 탭 크기 설정에 지정된 만큼 case 문 다음에 중괄호를 들여 씁니다.",
"c_cpp.configuration.vcFormat.indent.caseLabels.description": "switch 문을 기준으로 편집기: 탭 크기 설정에 지정된 만큼 레이블을 들여씁니다.",
"c_cpp.configuration.vcFormat.indent.caseContents.description": "레이블을 기준으로 편집기: 탭 크기 설정에 지정된 만큼 case 블록 내 코드를 들여씁니다.",
"c_cpp.configuration.vcFormat.indent.caseContentsWhenBlock.description": "편집기: 탭 크기 설정에 지정된 만큼 case 문 다음에 중괄호를 들여 씁니다.",
"c_cpp.configuration.vcFormat.indent.lambdaBracesWhenParameter.description": "문의 시작 부분을 기준으로 편집기: 탭 크기 설정에 지정된 수만큼 함수 매개 변수로 사용되는 람다의 중괄호를 들여 씁니다.",
"c_cpp.configuration.vcFormat.indent.gotoLabels.description": "goto 레이블의 위치",
"c_cpp.configuration.vcFormat.indent.gotoLabels.oneLeft.description": "편집기: 탭 크기 설정에 지정된 만큼 현재 코드 들여쓰기의 왼쪽으로 goto 레이블을 배치합니다.",
"c_cpp.configuration.vcFormat.indent.gotoLabels.oneLeft.description": "편집기: 탭 크기 설정에 지정된 만큼 현재 코드 들여쓰기의 왼쪽으로 goto 레이블을 배치합니다.",
"c_cpp.configuration.vcFormat.indent.gotoLabels.leftmostColumn.description": "코드의 맨 왼쪽 가장자리에 goto 레이블을 배치합니다.",
"c_cpp.configuration.vcFormat.indent.gotoLabels.none.description": "goto 레이블에 서식이 지정되지 않습니다.",
"c_cpp.configuration.vcFormat.indent.preprocessor.description": "전처리기 지시문의 위치",
"c_cpp.configuration.vcFormat.indent.preprocessor.oneLeft.description": "편집기: 탭 크기 설정에 지정된 만큼 현재 코드 들여쓰기의 왼쪽으로 전처리기 지시문을 배치합니다.",
"c_cpp.configuration.vcFormat.indent.preprocessor.oneLeft.description": "편집기: 탭 크기 설정에 지정된 만큼 현재 코드 들여쓰기의 왼쪽으로 전처리기 지시문을 배치합니다.",
"c_cpp.configuration.vcFormat.indent.preprocessor.leftmostColumn.description": "전처리기 지시문을 코드의 맨 왼쪽 가장자리에 배치합니다.",
"c_cpp.configuration.vcFormat.indent.preprocessor.none.description": "전처리기 지시문에 서식이 지정되지 않습니다.",
"c_cpp.configuration.vcFormat.indent.accessSpecifiers.description": "클래스 또는 구조체 정의를 기준으로 편집기: 탭 크기 설정에 지정된 만큼 액세스 지정자를 들여 씁니다.",
"c_cpp.configuration.vcFormat.indent.namespaceContents.description": "바깥쪽 네임스페이스를 기준으로 편집기: 탭 크기 설정에 지정된 만큼 코드를 들여 씁니다.",
"c_cpp.configuration.vcFormat.indent.preserveComment.description": "주석의 들여쓰기는 서식 작업을 수행하는 동안 변경되지 않습니다.",
"c_cpp.configuration.vcFormat.indent.accessSpecifiers.description": "클래스 또는 구조체 정의를 기준으로 편집기: 탭 크기 설정에 지정된 만큼 액세스 지정자를 들여 씁니다.",
"c_cpp.configuration.vcFormat.indent.namespaceContents.description": "바깥쪽 네임스페이스를 기준으로 편집기: 탭 크기 설정에 지정된 만큼 코드를 들여 씁니다.",
"c_cpp.configuration.vcFormat.indent.preserveComments.description": "주석의 들여쓰기는 서식 작업을 수행하는 동안 변경되지 않습니다.",
"c_cpp.configuration.vcFormat.newLine.beforeOpenBrace.namespace.description": "네임스페이스의 여는 중괄호 위치",
"c_cpp.configuration.vcFormat.newLine.beforeOpenBrace.type.description": "형식 정의의 여는 중괄호 위치",
"c_cpp.configuration.vcFormat.newLine.beforeOpenBrace.lambda.description": "람다 함수의 여는 중괄호 위치",
@@ -137,7 +137,9 @@
"c_cpp.configuration.commentContinuationPatterns.description": "여러 줄 또는 한 줄 주석 블록 내에서 <Enter> 키를 누를 때 사용할 편집기 동작을 정의합니다.",
"c_cpp.configuration.configurationWarnings.description": "구성 공급자 확장이 소스 파일의 구성을 제공할 수 없는 경우 팝업 알림을 표시할지 여부를 결정합니다.",
"c_cpp.configuration.intelliSenseCachePath.description": "IntelliSense에서 사용하는 캐시되고 미리 컴파일된 헤더의 폴더 경로를 정의합니다. 기본 캐시 경로는 Windows의 \"%LocalAppData%/Microsoft/vscode-cpptools\", Linux의 \"$XDG_CACHE_HOME/vscode-cpptools/\"(또는 XDG_CACHE_HOME이 정의되지 않은 경우 \"$HOME/.cache/vscode-cpptools/\"), Mac의 \"$HOME/Library/Caches/vscode-cpptools/\"입니다. 경로를 지정하지 않거나 지정한 경로가 잘못된 경우 기본 경로를 사용합니다.",
"c_cpp.configuration.intelliSenseCacheSize.description": "캐시된 미리 컴파일된 헤더에 대한 작업 영역당 하드 드라이브 공간의 최대 크기(MB)입니다. 실제 사용량은 이 값을 기준으로 변동될 수 있습니다. 기본 크기는 5120MB입니다. 크기가 0이면 미리 컴파일된 헤더 캐싱이 사용하지 않도록 설정됩니다.",
"c_cpp.configuration.intelliSenseCacheSize.description": "캐시된 미리 컴파일된 헤더에 대한 작업 영역당 하드 드라이브 공간의 최대 크기(MB)입니다. 실제 사용량은 이 값을 기준으로 변동될 수 있습니다. 기본 크기는 5,120MB입니다. 크기가 0이면 미리 컴파일된 헤더 캐싱이 사용하지 않도록 설정됩니다.",
"c_cpp.configuration.intelliSenseMemoryLimit.description": "IntelliSense 프로세스의 메모리 사용량 제한(MB)입니다. 기본 제한은 4,096MB이며 최대 제한은 16GB입니다. 확장은 IntelliSense 프로세스가 제한을 초과하면 해당 프로세스를 종료했다가 다시 시작합니다.",
"c_cpp.configuration.intelliSenseUpdateDelay.description": "수정 후에 IntelliSense에서 업데이트를 시작하기 전까지의 지연 시간(밀리초)을 제어합니다.",
"c_cpp.configuration.default.includePath.description": "c_cpp_properties.json에 \"includePath\"가 지정되지 않은 경우 구성에 사용할 값입니다. \"includePath\"가 지정된 경우 배열에 \"${default}\"를 추가하여 이 설정의 값을 삽입합니다.",
"c_cpp.configuration.default.defines.description": "\"defines\"가 지정되지 않은 경우 구성에서 사용할 값 또는 \"${default}\"가 \"defines\"에 있는 경우 삽입할 값입니다.",
"c_cpp.configuration.default.macFrameworkPath.description": "\"macFrameworkPath\"가 지정되지 않은 경우 구성에서 사용할 값 또는 \"${default}\"가 \"macFrameworkPath\"에 있는 경우 삽입할 값입니다.",
@@ -206,7 +208,7 @@
"c_cpp.debuggers.miDebuggerArgs.description": "MI 디버거(예: gdb)의 추가 인수입니다.",
"c_cpp.debuggers.miDebuggerServerAddress.description": "연결할 MI 디버거 서버의 네트워크 주소입니다(예: localhost:1234).",
"c_cpp.debuggers.stopAtEntry.description": "선택적 매개 변수입니다. True이면 디버거가 대상의 진입점에서 중지됩니다. processId가 전달되는 경우 영향을 주지 않습니다.",
"c_cpp.debuggers.debugServerPath.description": "시작할 디버그 서버의 선택적 전체 경로입니다. 기본값은 null입니다.",
"c_cpp.debuggers.debugServerPath.description": "시작할 디버그 서버의 전체 경로입니다(선택 사항). 기본값은 null입니다. 이 옵션은 \"miDebugServerAddress\"와 함께 사용되거나 \"-target-select remote <server:port>\"를 실행하는 \"customSetupCommand\"와 자체 서버와 함께 사용됩니다.",
"c_cpp.debuggers.debugServerArgs.description": "선택적 디버그 서버 인수입니다. 기본값은 null입니다.",
"c_cpp.debuggers.serverStarted.description": "디버그 서버 출력에서 찾을 서버에서 시작한 패턴(선택 사항)입니다. 기본값은 null입니다.",
"c_cpp.debuggers.filterStdout.description": "서버에서 시작한 패턴을 stdout 스트림에서 검색하고, stdout를 디버그 출력에 기록합니다. 기본값은 true입니다.",
@@ -230,5 +232,8 @@
"c_cpp.taskDefinitions.args.description": "컴파일러 또는 컴파일 스크립트에 전달할 추가 인수",
"c_cpp.taskDefinitions.options.description": "추가 명령 옵션",
"c_cpp.taskDefinitions.options.cwd.description": "실행된 프로그램 또는 스크립트의 현재 작업 디렉터리입니다. 생략된 경우 Code의 현재 작업 영역 루트가 사용됩니다.",
"c_cpp.taskDefinitions.detail.description": "작업의 추가 세부 정보"
"c_cpp.taskDefinitions.detail.description": "작업의 추가 세부 정보",
"c_cpp.debuggers.sourceFileMap.sourceFileMapEntry.description": "같은 소스 트리의 현재 및 컴파일 시간 경로입니다. EditorPath에 있는 파일은 중단점 일치를 위해 CompileTimePath 경로에 매핑되고 stacktrace 위치를 표시할 때 CompileTimePath에서 EditorPath로 매핑됩니다.",
"c_cpp.debuggers.sourceFileMap.sourceFileMapEntry.editorPath.description": "편집기가 사용할 소스 트리의 경로입니다.",
"c_cpp.debuggers.sourceFileMap.sourceFileMapEntry.useForBreakpoints.description": "이 항목이 스택 프레임 위치 매핑에만 사용되면 False입니다. 이 항목이 중단점 위치를 지정할 때도 사용되어야 하면 True입니다."
}
@@ -17,6 +17,7 @@
"envfale.failed": "{0}을(를) 사용하지 못했습니다. 이유: {1}",
"replacing.sourcepath": "{0} '{1}'을(를) '{2}'(으)로 바꾸는 중입니다.",
"replacing.targetpath": "{0} '{1}'을(를) '{2}'(으)로 바꾸는 중입니다.",
"replacing.editorPath": "{0} '{1}'을(를) '{2}'(으)로 바꾸는 중입니다.",
"resolving.variables.in.sourcefilemap": "{0}에서 변수를 확인하는 중...",
"open.envfile": "{0} 열기",
"unexpected.os": "예기치 않은 OS 유형",
@@ -7,6 +7,6 @@
"build.and.debug.active.file": "활성 파일 빌드 및 디버그",
"cannot.build.non.cpp": "활성 파일이 C 또는 C++ 소스 파일이 아니므로 빌드 및 디버그할 수 없습니다.",
"no.compiler.found": "컴파일러를 찾을 수 없음",
"select.compiler": "컴파일러 선택",
"select.configuration": "Select a configuration",
"cl.exe.not.available": "{0} 빌드 및 디버그는 VS의 개발자 명령 프롬프트에서 VS Code를 실행하는 경우에만 사용할 수 있습니다."
}
@@ -5,7 +5,7 @@
// Do not edit this file. It is machine generated.
{
"c.cpp.debug.protocol": "C/C++ 디버그 프로토콜",
"c.cpp.warnings": "C/C++ Configuration Warnings",
"c.cpp.warnings": "C/C++ 구성 경고",
"unable.to.start": "C/C++ 언어 서버를 시작할 수 없습니다. IntelliSense 기능을 사용할 수 없습니다. 오류: {0}",
"check.permissions": "EPERM: '{0}'에 대한 사용 권한 확인",
"server.crashed2": "지난 3분 동안 언어 서버에서 크래시가 5회 발생했습니다. 다시 시작되지 않습니다.",
+30 -29
View File
@@ -145,7 +145,7 @@
"timed_out_attempting_to_communicate_with_process": "프로세스와 통신을 시도하는 동안 시간이 초과되었습니다.",
"process_failed_to_run": "프로세스를 실행하지 못했습니다.",
"wsl_not_detected": "WSL이 검색되지 않음",
"compiler_in_compilerpath_not_found": "Specified compiler was not found: {0}",
"compiler_in_compilerpath_not_found": "지정한 컴파일러를 찾을 수 없습니다. {0}",
"config_data_invalid": "구성 데이터가 잘못됨, {0}",
"cmake_executable_not_found": "{0}에서 CMake 실행 파일을 찾을 수 없음",
"no_args_provider": "인수 공급자가 없음",
@@ -176,32 +176,33 @@
"exceptions_label": "예외:",
"template_parameters_label": "템플릿 매개 변수:",
"compiler_probe_command_line": "컴파일러 프로브 명령줄: {0}",
"c_compiler_from_compiler_path": "Attempting to get defaults from C compiler in \"compilerPath\" property: '{0}'",
"cpp_compiler_from_compiler_path": "Attempting to get defaults from C++ compiler in \"compilerPath\" property: '{0}'",
"c_compiler_from_compile_commands": "Attempting to get defaults from C compiler in compile_commands.json file: '{0}'",
"cpp_compiler_from_compile_commands": "Attempting to get defaults from C++ compiler in compile_commands.json file: '{0}'",
"c_intellisense_mode_changed": "For C source files, IntelliSenseMode was changed from \"{0}\" to \"{1}\".",
"cpp_intellisense_mode_changed": "For C++ source files, IntelliSenseMode was changed from \"{0}\" to \"{1}\".",
"c_std_version_changed": "For C source files, the cStandard was changed from \"{0}\" to \"{1}\".",
"cpp_std_version_changed": "For C++ source files, the cppStandard was changed from \"{0}\" to \"{1}\".",
"c_intellisense_mode_and_std_version_changed": "For C source files, IntelliSenseMode was changed from \"{0}\" to \"{1}\" and cStandard was changed from \"{2}\" to \"{3}\".",
"cpp_intellisense_mode_and_std_version_changed": "For C++ source files, IntelliSenseMode was changed from \"{0}\" to \"{1}\" and cppStandard changed from \"{2}\" to \"{3}\".",
"c_intellisense_mode_changed_with_path": "For C source files, IntelliSenseMode was changed from \"{0}\" to \"{1}\" based on compiler args and probing compilerPath: \"{2}\"",
"cpp_intellisense_mode_changed_with_path": "For C++ source files, IntelliSenseMode was changed from \"{0}\" to \"{1}\" based on compiler args and probing compilerPath: \"{2}\"",
"c_std_version_changed_with_path": "For C source files, the cStandard was changed from \"{0}\" to \"{1}\" based on compiler args and probing compilerPath: \"{2}\"",
"cpp_std_version_changed_with_path": "For C++ source files, the cppStandard was changed from \"{0}\" to \"{1}\" based on compiler args and probing compilerPath: \"{2}\"",
"c_intellisense_mode_and_std_version_changed_with_path": "For C source files, IntelliSenseMode was changed from \"{0}\" to \"{1}\" and cStandard was changed from \"{2}\" to \"{3}\" based on compiler args and probing compilerPath: \"{4}\"",
"cpp_intellisense_mode_and_std_version_changed_with_path": "For C++ source files, IntelliSenseMode was changed from \"{0}\" to \"{1}\" and cppStandard changed from \"{2}\" to \"{3}\" based on compiler args and probing compilerPath: \"{4}\"",
"compiler_path_changed": "Unable to resolve configuration with compilerPath \"{0}\". Using \"{1}\" instead.",
"compiler_path_invalid": "Unable to resolve configuration with compilerPath: \"{0}\"",
"compiler_path_empty": "Skipping probe of compiler due to explicitly empty compilerPath",
"msvc_intellisense_specified": "MSVC intelliSenseMode specified. Configuring for compiler cl.exe.",
"unable_to_configure_cl_exe": "Unable to configure for compiler cl.exe.",
"probing_compiler_default_target": "Probing compiler's default target using command line: \"{0}\" {1}",
"compiler_default_target": "Compiler returned default target value: {0}",
"c_probing_compiler_default_standard": "Probing compiler for default C language standard using command line: {0}",
"cpp_probing_compiler_default_standard": "Probing compiler for default C++ language standard using command line: {0}",
"detected_language_standard_version": "Detected language standard version: {0}",
"unhandled_default_target_detected": "Unhandled default compiler target value detected: {0}",
"unhandled_target_arg_detected": "Unhandled target argument value detected: {0}"
"c_compiler_from_compiler_path": "\"compilerPath\" 속성의 C 컴파일러에서 기본값을 가져오려고 합니다. '{0}'",
"cpp_compiler_from_compiler_path": "\"compilerPath\" 속성의 C++ 컴파일러에서 기본값을 가져오려고 합니다. '{0}'",
"c_compiler_from_compile_commands": "compile_commands.json 파일의 C 컴파일러에서 기본값을 가져오려고 합니다. '{0}'",
"cpp_compiler_from_compile_commands": "compile_commands.json 파일의 C++ 컴파일러에서 기본값을 가져오려고 합니다. '{0}'",
"c_intellisense_mode_changed": "C 소스 파일에서는 IntelliSenseMode가 \"{0}\"에서 \"{1}\"(으)로 변경되었습니다.",
"cpp_intellisense_mode_changed": "C++ 소스 파일에서는 IntelliSenseMode가 \"{0}\"에서 \"{1}\"(으)로 변경되었습니다.",
"c_std_version_changed": "C 소스 파일에서는 cStandard가 \"{0}\"에서 \"{1}\"(으)로 변경되었습니다.",
"cpp_std_version_changed": "C++ 소스 파일에서는 cppStandard가 \"{0}\"에서 \"{1}\"(으)로 변경되었습니다.",
"c_intellisense_mode_and_std_version_changed": "C 소스 파일에서는 IntelliSenseMode가 \"{0}\"에서 \"{1}\"(으)로 변경되고 cStandard \"{2}\"에서 \"{3}\"(으)로 변경되었습니다.",
"cpp_intellisense_mode_and_std_version_changed": "C++ 소스 파일에서는 IntelliSenseMode가 \"{0}\"에서 \"{1}\"(으)로 변경되고 cppStandard \"{2}\"에서 \"{3}\"(으)로 변경되었습니다.",
"c_intellisense_mode_changed_with_path": "C 소스 파일에서는 IntelliSenseMode가 컴파일러 인수 및 프로빙 compilerPath(\"{2}\")에 따라 \"{0}\"에서 \"{1}\"(으)로 변경되었습니다.",
"cpp_intellisense_mode_changed_with_path": "C++ 소스 파일에서는 IntelliSenseMode가 컴파일러 인수 및 프로빙 compilerPath(\"{2}\")에 따라 \"{0}\"에서 \"{1}\"(으)로 변경되었습니다.",
"c_std_version_changed_with_path": "C 소스 파일에서는 cStandard가 컴파일러 인수 및 프로빙 compilerPath(\"{2}\")에 따라 \"{0}\"에서 \"{1}\"(으)로 변경되었습니다.",
"cpp_std_version_changed_with_path": "C++ 소스 파일에서는 cppStandard가 컴파일러 인수 및 프로빙 compilerPath(\"{2}\")에 따라 \"{0}\"에서 \"{1}\"(으)로 변경되었습니다.",
"c_intellisense_mode_and_std_version_changed_with_path": "C 소스 파일에서는 컴파일러 인수 및 프로빙 compilerPath(\"{4}\")에 따라 IntelliSenseMode가 \"{0}\"에서 \"{1}\"(으)로 변경되고 cStandard \"{2}\"에서 \"{3}\"(으)로 변경되었습니다.",
"cpp_intellisense_mode_and_std_version_changed_with_path": "C++ 소스 파일에서는 컴파일러 인수 및 프로빙 compilerPath(\"{4}\")에 따라 IntelliSenseMode가 \"{0}\"에서 \"{1}\"(으)로 변경되고 cppStandard \"{2}\"에서 \"{3}\"(으)로 변경되었습니다.",
"compiler_path_changed": "CompilerPath \"{0}\"인 구성을 확인할 수 없습니다. \"{1}\"을(를) 대신 사용하세요.",
"compiler_path_invalid": "CompilerPath \"{0}\"인 구성을 확인할 수 없습니다.",
"compiler_path_empty": "명시적으로 빈 compilerPath로 인해 컴파일러 검색을 건너뜁니다.",
"msvc_intellisense_specified": "MSVC intelliSenseMode를 지정했습니다. 컴파일러 cl.exe에 대해 구성합니다.",
"unable_to_configure_cl_exe": "컴파일러 cl.exe를 구성할 수 없습니다.",
"probing_compiler_default_target": "명령줄을 사용하여 컴파일러의 기본 대상을 검색하는 중: \"{0}\" {1}",
"compiler_default_target": "컴파일러가 기본 대상 값을 반환함: {0}",
"c_probing_compiler_default_standard": "명령줄을 사용하여 기본 C 언어 표준에 대한 컴파일러를 검색하는 중: {0}",
"cpp_probing_compiler_default_standard": "명령줄을 사용하여 기본 C++ 언어 표준에 대한 컴파일러를 검색하는 중: {0}",
"detected_language_standard_version": "언어 표준 버전이 검색됨: {0}",
"unhandled_default_target_detected": "처리되지 않은 기본 컴파일러 대상 값이 검색됨: {0}",
"unhandled_target_arg_detected": "처리되지 않은 대상 인수 값이 검색됨: {0}",
"memory_limit_shutting_down_intellisense": "IntelliSense 서버 {0}을(를) 종료하는 중입니다. 메모리 사용량이 {1}MB이며 {2}MB 한도를 초과했습니다."
}
+9 -4
View File
@@ -50,7 +50,7 @@
"c_cpp.configuration.vcFormat.indent.preprocessor.none.description": "Dyrektywy preprocesora nie będą formatowane.",
"c_cpp.configuration.vcFormat.indent.accessSpecifiers.description": "Dla specyfikatorów dostępu jest stosowane wcięcie względem definicji klasy lub struktury według liczby określonej w ustawieniu Edytor: rozmiar tabulatora",
"c_cpp.configuration.vcFormat.indent.namespaceContents.description": "Dla kodu tworzone jest wcięcie względem otaczającej go przestrzeni nazw o szerokości określonej w ustawieniu Edytor: rozmiar tabulatora",
"c_cpp.configuration.vcFormat.indent.preserveComment.description": "Wcięcia komentarzy nie zostaną zmienione podczas operacji formatowania.",
"c_cpp.configuration.vcFormat.indent.preserveComments.description": "Wcięcia komentarzy nie zostaną zmienione podczas operacji formatowania.",
"c_cpp.configuration.vcFormat.newLine.beforeOpenBrace.namespace.description": "Pozycja otwierających nawiasów klamrowych dla przestrzeni nazw",
"c_cpp.configuration.vcFormat.newLine.beforeOpenBrace.type.description": "Pozycja otwierających nawiasów klamrowych dla definicji typów",
"c_cpp.configuration.vcFormat.newLine.beforeOpenBrace.lambda.description": "Pozycja otwierających nawiasów klamrowych dla funkcji lambda",
@@ -137,7 +137,9 @@
"c_cpp.configuration.commentContinuationPatterns.description": "Definiuje zachowanie edytora po naciśnięciu klawisza Enter wewnątrz wielowierszowego lub jednowierszowego bloku komentarza.",
"c_cpp.configuration.configurationWarnings.description": "Określa, czy powiadomienia wyskakujące mają być wyświetlane, gdy rozszerzenie dostawcy konfiguracji nie może udostępnić konfiguracji dla pliku źródłowego.",
"c_cpp.configuration.intelliSenseCachePath.description": "Definiuje ścieżkę folderu dla wstępnie skompilowanych nagłówków zapisanych w pamięci podręcznej używanych przez funkcję IntelliSense. Domyślna ścieżka pamięci podręcznej to „%LocalAppData%/Microsoft/vscode-cpptools” w systemie Windows, „$XDG_CACHE_HOME/vscode-cpptools/” w systemie Linux (lub „$HOME/.cache/vscode-cpptools/”, jeśli wartość XDG_CACHE_HOME nie jest zdefiniowana) i „~/Library/Caches/vscode-cpptools/” na komputerach Mac. Ścieżka domyślna zostanie użyta, jeśli nie zostanie określona żadna ścieżka lub określona ścieżka będzie nieprawidłowa.",
"c_cpp.configuration.intelliSenseCacheSize.description": "Maksymalny rozmiar miejsca na dysku twardym na obszar roboczy w megabajtach dla prekompilowanych nagłówków zapisanych w pamięci podręcznej; rzeczywiste użycie może oscylować wokół tej wartości. Rozmiar domyślny to 5120 MB. Buforowanie wstępnie skompilowane nagłówków jest wyłączone, gdy rozmiar ma wartość 0.",
"c_cpp.configuration.intelliSenseCacheSize.description": "Maksymalny rozmiar miejsca na dysku twardym na obszar roboczy w megabajtach (MB) dla buforowanych prekompilowanych nagłówków; rzeczywiste użycie może oscylować wokół tej wartości. Rozmiar domyślny to 5120 MB. Buforowanie prekompilowanych nagłówków jest wyłączone, gdy rozmiar ma wartość 0.",
"c_cpp.configuration.intelliSenseMemoryLimit.description": "Limit użycia pamięci w megabajtach (MB) dla procesu funkcji IntelliSense. Domyślny limit to 4096 MB, a maksymalny limit to 16 GB. Po przekroczeniu limitu rozszerzenie zamknie, a następnie ponownie uruchomi proces funkcji IntelliSense.",
"c_cpp.configuration.intelliSenseUpdateDelay.description": "Steruje opóźnieniem w milisekundach, po którym funkcja IntelliSense rozpocznie aktualizowanie po modyfikacji.",
"c_cpp.configuration.default.includePath.description": "Wartość, która ma być używana w konfiguracji, jeśli element „includePath” nie jest określony w pliku c_cpp_properties.json. Jeśli element „includePath” jest określony, dodaj wartość „${default}” do tablicy, aby wstawić wartości z tego ustawienia.",
"c_cpp.configuration.default.defines.description": "Wartość do użycia w konfiguracji, jeśli element „defines” nie został określony, lub wartości do wstawienia, jeśli element „${default}” istnieje w ramach elementu „defines”.",
"c_cpp.configuration.default.macFrameworkPath.description": "Wartość do użycia w konfiguracji, jeśli element „macFrameworkPath” nie został określony, lub wartości do wstawienia, jeśli element „${default}” istnieje w ramach elementu „macFrameworkPath”.",
@@ -206,7 +208,7 @@
"c_cpp.debuggers.miDebuggerArgs.description": "Dodatkowe argumenty dla debugera MI (takiego jak gdb).",
"c_cpp.debuggers.miDebuggerServerAddress.description": "Adres sieciowy serwera debugera MI, z którym ma zostać nawiązane połączenie (przykład: localhost:1234).",
"c_cpp.debuggers.stopAtEntry.description": "Parametr opcjonalny. Jeśli wartość to true, debuger powinien zostać zatrzymany w punkcie wejścia obiektu docelowego. W przypadku przekazania identyfikatora procesu parametr ten nie ma żadnego efektu.",
"c_cpp.debuggers.debugServerPath.description": "Opcjonalna pełna ścieżka do serwera debugowania do uruchomienia. Wartość domyślna to null.",
"c_cpp.debuggers.debugServerPath.description": "Opcjonalna pełna ścieżka do serwera debugowania, który ma zostać uruchomiony. Wartość domyślna to null. Jest ona używana w połączeniu z opcją „miDebugServerAddress” lub Twoim własnym serwerem wraz z poleceniem „customSetupCommand” z opcją „-target-select remote <serwer:port>”.",
"c_cpp.debuggers.debugServerArgs.description": "Opcjonalne argumenty serwera debugowania. Wartość domyślna to null.",
"c_cpp.debuggers.serverStarted.description": "Opcjonalny wzorzec uruchomiony przez serwer do wyszukania w danych wyjściowych serwera debugowania. Wartością domyślną jest null.",
"c_cpp.debuggers.filterStdout.description": "Wyszukiwanie strumienia stdout dla wzorca uruchomionego przez serwer i rejestrowanie strumienia stdout w danych wyjściowych debugowania. Wartością domyślną jest true.",
@@ -230,5 +232,8 @@
"c_cpp.taskDefinitions.args.description": "Dodatkowe argumenty do przekazania do kompilatora lub skryptu kompilacji",
"c_cpp.taskDefinitions.options.description": "Dodatkowe opcje poleceń",
"c_cpp.taskDefinitions.options.cwd.description": "The current working directory of the executed program or script. If omitted Code's current workspace root is used.",
"c_cpp.taskDefinitions.detail.description": "Dodatkowe szczegóły zadania"
"c_cpp.taskDefinitions.detail.description": "Dodatkowe szczegóły zadania",
"c_cpp.debuggers.sourceFileMap.sourceFileMapEntry.description": "Ścieżki bieżące i czasu kompilacji do tych samych drzew źródeł. Pliki znalezione w ścieżce EditorPath są mapowane na ścieżkę CompileTimePath na potrzeby dopasowywania punktu przerwania i mapowane ze ścieżki CompileTimePath na ścieżkę EditorPath podczas wyświetlania lokalizacji śladu stosu.",
"c_cpp.debuggers.sourceFileMap.sourceFileMapEntry.editorPath.description": "Ścieżka do drzewa źródeł, które będzie używane przez edytor.",
"c_cpp.debuggers.sourceFileMap.sourceFileMapEntry.useForBreakpoints.description": "Wartość false, jeśli ten wpis jest używany tylko do mapowania lokalizacji ramki stosu. Wartość true, jeśli ten wpis powinien być również używany podczas określania lokalizacji punktów przerwania."
}
@@ -17,6 +17,7 @@
"envfale.failed": "Nie można użyć elementu {0}. Przyczyna: {1}",
"replacing.sourcepath": "Zamienianie wartości zmiennej {0} z „{1}” na „{2}”.",
"replacing.targetpath": "Zamienianie wartości zmiennej {0} z „{1}” na „{2}”.",
"replacing.editorPath": "Zamienianie elementu {0} „{1}” na element „{2}”.",
"resolving.variables.in.sourcefilemap": "Trwa rozpoznawanie zmiennych w {0}...",
"open.envfile": "Otwórz element {0}",
"unexpected.os": "Nieoczekiwany typ systemu operacyjnego",
@@ -7,6 +7,6 @@
"build.and.debug.active.file": "Kompiluj i debuguj aktywny plik",
"cannot.build.non.cpp": "Nie można skompilować i debugować, ponieważ aktywny plik nie jest plikiem źródłowym języka C lub C++.",
"no.compiler.found": "Nie znaleziono kompilatora",
"select.compiler": "Wybierz kompilator",
"select.configuration": "Select a configuration",
"cl.exe.not.available": "{0} — funkcji kompilacji i debugowania można używać tylko wtedy, gdy program VS Code został uruchomiony z wiersza polecenia dla deweloperów w programie VS."
}
@@ -203,5 +203,6 @@
"cpp_probing_compiler_default_standard": "Sondowanie kompilatora domyślnego standardu języka C++ przy użyciu wiersza polecenia: {0}",
"detected_language_standard_version": "Wykryta wersja standardowa języka: {0}",
"unhandled_default_target_detected": "Wykryto nieobsługiwaną domyślną wartość docelową kompilatora: {0}",
"unhandled_target_arg_detected": "Wykryto nieobsługiwaną docelową wartość argumentu: {0}"
"unhandled_target_arg_detected": "Wykryto nieobsługiwaną docelową wartość argumentu: {0}",
"memory_limit_shutting_down_intellisense": "Zamykanie serwera funkcji IntelliSense: {0}. Użycie pamięci to {1} MB i przekroczyło limit wynoszący {2} MB."
}
+9 -4
View File
@@ -50,7 +50,7 @@
"c_cpp.configuration.vcFormat.indent.preprocessor.none.description": "As diretivas de pré-processador não serão formatadas.",
"c_cpp.configuration.vcFormat.indent.accessSpecifiers.description": "Os especificadores de acesso são recuados em relação às definições de classe ou struct pelo valor especificado na configuração Editor: Tamanho da Tabulação",
"c_cpp.configuration.vcFormat.indent.namespaceContents.description": "O código é recuado em relação ao namespace delimitador com o valor especificado no Editor: configuração do Tamanho da Guia",
"c_cpp.configuration.vcFormat.indent.preserveComment.description": "O recuo dos comentários não é alterado durante as operações de formatação.",
"c_cpp.configuration.vcFormat.indent.preserveComments.description": "O recuo dos comentários não é alterado durante as operações de formatação.",
"c_cpp.configuration.vcFormat.newLine.beforeOpenBrace.namespace.description": "A posição das chaves de abertura para namespaces",
"c_cpp.configuration.vcFormat.newLine.beforeOpenBrace.type.description": "A posição das chaves de abertura para definições de tipo",
"c_cpp.configuration.vcFormat.newLine.beforeOpenBrace.lambda.description": "A posição das chaves de abertura para funções lambda",
@@ -137,7 +137,9 @@
"c_cpp.configuration.commentContinuationPatterns.description": "Define o comportamento do editor para quando a tecla Enter é pressionada dentro de um bloco de comentário de linha única ou de várias linhas.",
"c_cpp.configuration.configurationWarnings.description": "Determina se as notificações pop-up serão mostradas quando uma extensão do provedor de configuração não puder fornecer uma configuração para um arquivo de origem.",
"c_cpp.configuration.intelliSenseCachePath.description": "Define o caminho da pasta para os cabeçalhos pré-compilados armazenados em cache usados pelo IntelliSense. O caminho do cache padrão é \"%LocalAppData%/Microsoft/vscode-cpptools\" no Windows, \"$XDG_CACHE_HOME/vscode-cpptools/\" no Linux (ou \"~/.cache/vscode-cpptools/\", quando XDG_CACHE_HOME não está definido) e \"$HOME/Library/Caches/vscode-cpptools/\" no Mac. O caminho padrão será usado se nenhum outro for especificado ou se o caminho definido for inválido.",
"c_cpp.configuration.intelliSenseCacheSize.description": "Tamanho máximo do espaço de disco rígido por workspace, em megabytes, para cabeçalhos pré-compilados armazenados em cache; o uso real pode flutuar ao redor desse valor. O tamanho padrão é de 5120 MB. O cache pré-compilado de cabeçalho é desabilitado quando o tamanho é 0.",
"c_cpp.configuration.intelliSenseCacheSize.description": "Tamanho máximo do espaço em disco rígido por workspace, em MBs (megabytes), para cabeçalhos pré-compilados armazenados em cache. O uso real pode flutuar em torno desse valor. O tamanho padrão é 5120 MB. O caching de cabeçalho pré-compilado é desabilitado quando o tamanho é 0.",
"c_cpp.configuration.intelliSenseMemoryLimit.description": "Limite de uso de memória em MBs (megabytes) de um processo do IntelliSense. O limite padrão é 4096 MB e o limite máximo é 16 GB. Quando um processo do IntelliSense exceder o limite, a extensão o desligará e o reinicializará.",
"c_cpp.configuration.intelliSenseUpdateDelay.description": "Controla o atraso em milissegundos até que o IntelliSense comece a ser atualizado após uma modificação.",
"c_cpp.configuration.default.includePath.description": "O valor a ser usado em uma configuração se \"includePath\" não estiver especificado em c_cpp_properties.json. Se \"includePath\" estiver especificado, adicione \"${default}\" à matriz para inserir os valores dessa configuração.",
"c_cpp.configuration.default.defines.description": "O valor a ser usado em uma configuração se \"defines\" não for especificado ou os valores a serem inseridos se \"${default}\" estiver presente em \"defines\".",
"c_cpp.configuration.default.macFrameworkPath.description": "O valor a ser usado em uma configuração se \"macFrameworkPath\" não for especificado ou os valores a serem inseridos se \"${default}\" estiver presente em \"macFrameworkPath\".",
@@ -206,7 +208,7 @@
"c_cpp.debuggers.miDebuggerArgs.description": "Argumentos adicionais para o depurador MI (como o gdb).",
"c_cpp.debuggers.miDebuggerServerAddress.description": "Endereço de rede do Servidor de Depurador MI ao qual se conectar (exemplo: localhost:1234).",
"c_cpp.debuggers.stopAtEntry.description": "Parâmetro opcional. Se for true, o depurador deverá parar no ponto de entrada do destino. Se processId for passado, não terá efeito.",
"c_cpp.debuggers.debugServerPath.description": "Caminho completo opcional para o servidor de depuração iniciar. O padrão é null.",
"c_cpp.debuggers.debugServerPath.description": "Caminho completo opcional para o servidor de depuração a ser iniciado. O padrão é nulo. Ele é usado em conjunto com \"miDebugServerAddress\" ou com seu servidor com um \"customSetupCommand\" que executa \"-target-select remote <server:port>\"`.",
"c_cpp.debuggers.debugServerArgs.description": "Args opcionais do servidor de depuração. O padrão é null.",
"c_cpp.debuggers.serverStarted.description": "Padrão iniciado pelo servidor opcional para procurar na saída do servidor de depuração. O padrão é null.",
"c_cpp.debuggers.filterStdout.description": "Pesquise o fluxo stdout para o padrão iniciado pelo servidor e log stdout para depurar a saída. O padrão é true.",
@@ -230,5 +232,8 @@
"c_cpp.taskDefinitions.args.description": "Argumentos adicionais a serem passados para o compilador ou para o script de compilação",
"c_cpp.taskDefinitions.options.description": "Opções de comando adicionais",
"c_cpp.taskDefinitions.options.cwd.description": "O diretório de trabalho atual do programa executado ou do script. Se omitido raiz de espaço de trabalho atual do código é usado.",
"c_cpp.taskDefinitions.detail.description": "Detalhes adicionais da tarefa"
"c_cpp.taskDefinitions.detail.description": "Detalhes adicionais da tarefa",
"c_cpp.debuggers.sourceFileMap.sourceFileMapEntry.description": "Os caminhos atual e do tempo de compilação são mapeados para as mesmas árvores de origem. Os arquivos encontrados em EditorPath são mapeados para o caminho CompileTimePath para correspondência de ponto de interrupção e mapeados de CompileTimePath para EditorPath ao exibir os locais de rastreamento de pilha.",
"c_cpp.debuggers.sourceFileMap.sourceFileMapEntry.editorPath.description": "O caminho para a árvore de origem que o editor usará.",
"c_cpp.debuggers.sourceFileMap.sourceFileMapEntry.useForBreakpoints.description": "False quando esta entrada é usada apenas para o mapeamento de local de registro de ativação. True quando esta entrada também deve ser usada ao especificar locais de ponto de interrupção."
}
@@ -17,6 +17,7 @@
"envfale.failed": "Falha ao usar {0}. Motivo: {1}",
"replacing.sourcepath": "Substituindo {0} '{1}' por '{2}'.",
"replacing.targetpath": "Substituindo {0} '{1}' por '{2}'.",
"replacing.editorPath": "Substituindo '{1}' do {0} por '{2}'.",
"resolving.variables.in.sourcefilemap": "Resolvendo variáveis em {0}...",
"open.envfile": "Abrir {0}",
"unexpected.os": "Tipo de SO inesperado",
@@ -7,6 +7,6 @@
"build.and.debug.active.file": "Criar e depurar o arquivo ativo",
"cannot.build.non.cpp": "Não é possível criar e depurar porque o arquivo ativo não é um arquivo de origem C ou C++.",
"no.compiler.found": "Nenhum compilador encontrado",
"select.compiler": "Selecionar um compilador",
"select.configuration": "Select a configuration",
"cl.exe.not.available": "A criação e a depuração de {0} só podem ser usadas quando o VS Code é executado por meio do Prompt de Comando do Desenvolvedor para VS."
}
@@ -195,7 +195,7 @@
"compiler_path_changed": "Não é possível resolver a configuração com compilerPath \"{0}\". Em vez disso, use \"{1}\".",
"compiler_path_invalid": "Não é possível resolver a configuração com compilerPath: \"{0}\"",
"compiler_path_empty": "Ignorando a investigação do compilador devido a um compilerPath explicitamente vazio",
"msvc_intellisense_specified": "O intelliSenseMode do MSVC foi especificado. Configurando para cl.exe do compilador.",
"msvc_intellisense_specified": "O intelliSenseMode do MSVC foi especificado. Configurando para cl.exe do compilador.",
"unable_to_configure_cl_exe": "Não é possível configurar o compilador cl.exe.",
"probing_compiler_default_target": "Investigando o destino padrão do compilador usando a linha de comando: \"{0}\" {1}",
"compiler_default_target": "O compilador retornou o valor de destino padrão: {0}",
@@ -203,5 +203,6 @@
"cpp_probing_compiler_default_standard": "Investigando o compilador para obter o padrão de linguagem C++ padrão usando a linha de comando: {0}",
"detected_language_standard_version": "Versão padrão da linguagem detectada: {0}",
"unhandled_default_target_detected": "Foi detectado um valor de destino do compilador padrão não tratado: {0}",
"unhandled_target_arg_detected": "Foi detectado um valor de argumento de destino não tratado: {0}"
"unhandled_target_arg_detected": "Foi detectado um valor de argumento de destino não tratado: {0}",
"memory_limit_shutting_down_intellisense": "Desligando o servidor do IntelliSense: {0}. O uso de memória é {1} MB e excedeu o limite de {2} MB."
}
+9 -4
View File
@@ -50,7 +50,7 @@
"c_cpp.configuration.vcFormat.indent.preprocessor.none.description": "Директивы препроцессора форматироваться не будут.",
"c_cpp.configuration.vcFormat.indent.accessSpecifiers.description": "Добавление отступа для описателей доступа относительно определений классов или структур на величину, указанную параметром \"Редактор: Размер табуляции\".",
"c_cpp.configuration.vcFormat.indent.namespaceContents.description": "Код располагается относительно вмещающего пространства имен с отступом, размер которого определяется параметром редактора \"Размер шага табуляции\".",
"c_cpp.configuration.vcFormat.indent.preserveComment.description": "Отступ комментариев не был изменен во время операций форматирования.",
"c_cpp.configuration.vcFormat.indent.preserveComments.description": "Отступ комментариев не был изменен во время операций форматирования.",
"c_cpp.configuration.vcFormat.newLine.beforeOpenBrace.namespace.description": "Положение открывающих фигурных скобок для пространств имен.",
"c_cpp.configuration.vcFormat.newLine.beforeOpenBrace.type.description": "Положение открывающих фигурных скобок для определений типов.",
"c_cpp.configuration.vcFormat.newLine.beforeOpenBrace.lambda.description": "Положение открывающих фигурных скобок для лямбда-функций.",
@@ -137,7 +137,9 @@
"c_cpp.configuration.commentContinuationPatterns.description": "Определяет поведение редактора при нажатии клавиши ВВОД внутри многострочного или однострочного примечания.",
"c_cpp.configuration.configurationWarnings.description": "Определяет, будут ли отображаться всплывающие уведомления, если расширение поставщика конфигурации не может предоставить конфигурацию для исходного файла.",
"c_cpp.configuration.intelliSenseCachePath.description": "Определяет путь к папке для кэшированных предварительно скомпилированных заголовков, используемых IntelliSense. Путь к кэшу по умолчанию: \"%LocalAppData%/Microsoft/vscode-cpptools\" в Windows, \"$XDG_CACHE_HOME/vscode-cpptools/\" в Linux (или \"$HOME/.cache/vscode-cpptools/\", если переменная среды XDG_CACHE_HOME не определена) и \"$HOME/Library/Caches/vscode-cpptools/\" в Mac. Если путь не указан или не является допустимым, используется путь по умолчанию.",
"c_cpp.configuration.intelliSenseCacheSize.description": "Максимальный размер (в мегабайтах) пространства на жестком диске для каждой рабочей области, предназначенный для кэшированных предкомпилированных заголовков; фактическое использование может колебаться в районе этого значения. Размер по умолчанию — 5120 МБ. Кэширование предкомпилированных заголовков отключено, если размер равен 0.",
"c_cpp.configuration.intelliSenseCacheSize.description": "Максимальный размер пространства на жестком диске для каждой рабочей области в мегабайтах (МБ), предназначенный для кэшированных предкомпилированных заголовков; фактическое использование может колебаться в районе этого значения. Размер по умолчанию — 5120 МБ. Кэширование предкомпилированных заголовков отключено, если размер равен 0.",
"c_cpp.configuration.intelliSenseMemoryLimit.description": "Ограничение на использование памяти в мегабайтах (МБ) для процесса IntelliSense. По умолчанию ограничение равно 4096 МБ, максимальное ограничение — 16 ГБ. При превышении ограничения расширение завершит работу и перезапустит процесс IntelliSense.",
"c_cpp.configuration.intelliSenseUpdateDelay.description": "Управляет задержкой в миллисекундах, прежде чем IntelliSense начнет обновление после изменения.",
"c_cpp.configuration.default.includePath.description": "Значение, используемое в конфигурации, если путь includePath не указан в файле c_cpp_properties.js. Если путь includePath задан, добавьте \"${default}\" в массив, чтобы вставить значения из этого параметра.",
"c_cpp.configuration.default.defines.description": "Значение, используемое в конфигурации, если параметр \"defines\" не указан, или вставляемые значения, если в \"defines\" присутствует значение \"${default}\".",
"c_cpp.configuration.default.macFrameworkPath.description": "Значение, используемое в конфигурации, если параметр \"macFrameworkPath\" не указан, или вставляемые значения, если в \"macFrameworkPath\" присутствует значение \"${default}\".",
@@ -206,7 +208,7 @@
"c_cpp.debuggers.miDebuggerArgs.description": "Дополнительные аргументы для отладчика MI (например, GDB).",
"c_cpp.debuggers.miDebuggerServerAddress.description": "Сетевой адрес сервера отладчика MI, к которому требуется подключиться (пример: localhost:1234).",
"c_cpp.debuggers.stopAtEntry.description": "Необязательный параметр. Если задано значение true, отладчик должен остановиться на точке входа целевого объекта. Если передается идентификатор процесса (processId), он не оказывает никакого влияния.",
"c_cpp.debuggers.debugServerPath.description": "Необязательный полный путь к серверу отладки для запуска. Значение по умолчанию: null.",
"c_cpp.debuggers.debugServerPath.description": "Необязательный полный путь к запускаемому серверу отладки. По умолчанию имеет значение NULL. Применяется с параметром \"miDebugServerAddress\" или с вашим собственным сервером через команду \"customSetupCommand\", использующую \"-target-select remote <server:port>\".",
"c_cpp.debuggers.debugServerArgs.description": "Необязательные аргументы сервера отладки. Значение по умолчанию: null.",
"c_cpp.debuggers.serverStarted.description": "Дополнительный запускаемый сервером шаблон для поиска в выходных данных сервера отладки. Значение по умолчанию: null.",
"c_cpp.debuggers.filterStdout.description": "Поиск запущенного сервером шаблона в потоке stdout и регистрация stdout в выходных данных отладки. Значение по умолчанию: true.",
@@ -230,5 +232,8 @@
"c_cpp.taskDefinitions.args.description": "Дополнительные аргументы для передачи компилятору или скрипту компиляции",
"c_cpp.taskDefinitions.options.description": "Дополнительные параметры команды",
"c_cpp.taskDefinitions.options.cwd.description": "Текущий рабочий каталог выполняемой программы или сценария. Если этот параметр опущен, используется корневой каталог текущей рабочей области Code.",
"c_cpp.taskDefinitions.detail.description": "Дополнительные сведения о задаче"
"c_cpp.taskDefinitions.detail.description": "Дополнительные сведения о задаче",
"c_cpp.debuggers.sourceFileMap.sourceFileMapEntry.description": "Текущие пути и пути времени компиляции к одним и тем же деревьям SourceTree. Файлы по пути EditorPath сопоставляются с путем CompileTimePath для сопоставления точек останова, а также сопоставляются из пути CompileTimePath с путем EditorPath при отображении расположений трассировки стека.",
"c_cpp.debuggers.sourceFileMap.sourceFileMapEntry.editorPath.description": "Путь к дереву SourceTree, которое будет использоваться редактором.",
"c_cpp.debuggers.sourceFileMap.sourceFileMapEntry.useForBreakpoints.description": "Значение false, если эта запись используется только для сопоставления расположений кадра стека. Значение true, если эта запись также должна использоваться при указании расположений точек останова."
}
@@ -17,6 +17,7 @@
"envfale.failed": "Не удалось использовать {0}. Причина: {1}",
"replacing.sourcepath": "Выполняется замена значения {0} с \"{1}\" на \"{2}\".",
"replacing.targetpath": "Выполняется замена значения {0} с \"{1}\" на \"{2}\".",
"replacing.editorPath": "Выполняется замена {0} \"{1}\" на \"{2}\".",
"resolving.variables.in.sourcefilemap": "Разрешение переменных в {0}...",
"open.envfile": "Открыть {0}",
"unexpected.os": "Непредвиденный тип ОС",
@@ -7,6 +7,6 @@
"build.and.debug.active.file": "Сборка и отладка активного файла",
"cannot.build.non.cpp": "Не удается выполнить сборку и отладку, так как активный файл не является исходным файлом C или C++.",
"no.compiler.found": "Компилятор не найден",
"select.compiler": "Выберите компилятор",
"select.configuration": "Select a configuration",
"cl.exe.not.available": "Сборку и отладку {0} можно использовать только при запуске VS Code из Командной строки разработчика для VS."
}

Some files were not shown because too many files have changed in this diff Show More