jiebi/CodeConvo huggingface dataset:
Change:
enabled: <img width="662" alt="image" src="https://user-"disabled: <img width="683" alt="image" src="https://user-"The fix in asks the following follow up questions: "being disabled" be styled differently than "being enabled"? Right now they are rendered identically. the event of disablement, it looks like the only valid thing that can take focus is the entire quick pick container which asks the following questions: does it look right? is it accessible? what do you think?
What are the use cases for a disabled quick pick?
Yeah it's a good question... I'm not entirely sure. I think maybe when you have server-side validation... so: "Enter the name of the Azure Static Web App you want to create" type in 'foo' and hit Enter quick pick sets the property and the property to signal that the input is being processed got a result from slow API saying 'foo already exists'... surface that to the user and reenable input
Seems like we should be dimming the value text and setting the input use a attribute to start. I assume we're showing progress via a notification or some other indicator? <img width="581" alt="CleanShot 2022-12-06 at 10 53 05 src="https://user-"
Our azure extension friends are hitting this - the actual user issue for them is that focus is not preserved. So the quick pick shows up first as disabled, and then later they enable it (once API request comes back). And the focus is not there - so the user can not hit enter. Can we look into making sure that on quick pick enablement we pass focus into the input box (if the focus is already anywhere in the big quick pick element)? Please correct me if needed
Friendly ping! Looks like this issue requires some further steps to be verified. Please provide us with the steps necessary to verify this issue.
Verification: a new extension with this code in inside the callback of the hello world command F5 the Hello World command from the command palette The focus should still be in the input box (and not on the outer area like the screenshot above shows) and you should not be able to change the contents of the input box.

Discussion:
this.getUI().inputBox.enabled = enabled; this.getUI().ok.enabled = enabled; this.getUI().list.enabled = enabled; <del> if (!enabled) { this.getUI().container.focus(); } </del> } }

} set enabled(enabled: boolean) { <del> this.findInput.setEnabled(enabled); </del> <ins> // We can't disable the input box because it is still used for // navigating the list. Instead, we disable the list and the OK // so that nothing can be selected. // TODO: should this be what we do for all find inputs? Or maybe some _other_ API // on findInput to change it to readonly? this.findInput.inputBox.inputElement.toggleAttribute('readonly', !enabled); // TODO: styles of the quick pick need to be moved to the CSS instead of being in line // so things like this can be done in CSS // this.findInput.inputBox.inputElement.classList.toggle('disabled', !enabled); </ins> } set toggles(toggles: Toggle[] | undefined) {
Change:
create new branch from... from ref picker on desktop git repo :bug: I'm asked to provide a branch name, I would expect to first be asked to pick a ref to create my branch from since the suggests additional prompts that are contextual to that action

Discussion:
} private async _branch(repository: Repository, defaultName?: string, from = false): Promise<void> { <del> const branchName = await this.promptForBranchName(repository, defaultName); if (!branchName) { return; } </del> let target = 'HEAD'; if (from) {

return [new HEADItem(repository), ...await createCheckoutItems(repository)]; }; <del> const placeHolder = l10n.t('Select a ref to create the "{0}" branch from', branchName); </del> <ins> const placeHolder = l10n.t('Select a ref to create the branch from'); </ins> const choice = await window.showQuickPick(getRefPicks(), { placeHolder }); if (!choice) {

} } <ins> const branchName = await this.promptForBranchName(repository, defaultName); if (!branchName) { return; } </ins> await repository.branch(branchName, true, target); }
Change:
<!-- Do Not Delete This! bugreporttemplate --<!-- Please read our Rules of Conduct: --<!-- Read our guide about submitting issues: --<!-- Search existing issues to avoid creating duplicates. --<!-- Test using the latest Insiders build to see if your issue has already been fixed: --<!-- Instead of creating your report here, use 'Report Issue' from the 'Help' menu in VS Code to pre-fill useful information. --<!-- Launch with to check. --Does this issue occur when all extensions are disabled?: Yes/No <!-- If you answered No above, use 'Help: Start Extension Bisect' from Command Palette to try to identify the cause. --<!-- Issues caused by an extension need to be reported directly to the extension publisher. The 'Help Report Issue' dialog can assist with this. --- VS Code Version: 1.72.2 OS Version: macOS Monterey 12.5 Steps to Reproduce: custom HISTFILE (example custom HISTFILE per project) integrated terminal (zsh) in VS code will be /Users//.zsh_history instead of custom history file What i use: vscode I found that the changes made to break the ability to use a custom HISTFILE because the HISTFILE is always overwritten by these changes:
Trying to set HISTFILE directly in settings, fails the same way HISTFILE is always set to
Hi I have opened a PR with a possible solution to this issue. Let me know, if it solves the problem.
thanks a lot Sorry for the stupid question, but do you have any macos silicon build that I could try ? I never contributed to vscode and finding how to compile it from source may take some time
Unfortunately, I don't have a Mac, however, I use Linux with Zsh so I could reproduce the bug and I could test the fix on it.
I think this might be related to with McFly.

Discussion:
ZDOTDIR=$VSCODE_ZDOTDIR fi <del> if [[ -f $USER_ZDOTDIR/.zsh_history ]]; then </del> <ins> if [[ -f $USER_ZDOTDIR/.zsh_history && -z HISTFILE ]]; then </ins> HISTFILE=$USER_ZDOTDIR/.zsh_history fi fi
Change:
I don't think this should be lumped into the resolvers proposal. The JS/TS extension currently depends on resolvers just for this one property
Unsure, we really don't want anyone to use this and it only exists for complex reconnection explainers. Once such cases are more properly modelled it should go away again
What is JS/TS using this for? The normal modals should really be enough
looked this which doesn't seem to justify the use of a custom modal. So, I'd suggest to let TS use a normal modal dialog instead

Discussion:
"aiKey": "0c6ae279ed8443289764825290e4f9e2-1a736e7c-1324-4338-be46-fc2a58ae4d14-7255", "enabledApiProposals": [ "telemetryLogger", <del> "resolvers", </del> "workspaceTrust" ], "capabilities": {

detail: vscode.l10n.t( "The workspace is using an old version of TypeScript ({0}).nnBefore reporting an issue, please update the workspace to use the latest stable TypeScript release to make sure the bug has not already been fixed.", (previousState.type === ServerState.Type.Errored && previousState.error instanceof TypeScriptServerError ? previousState.error.version.apiVersion?.displayName : undefined) + ''), <del> useCustom: true </del> }); } else { const args = previousState.type === ServerState.Type.Errored && previousState.error instanceof TypeScriptServerError

"include": [ "src/**/*", "../../src/vscode-dts/vscode.d.ts", <del> "../../src/vscode-dts/vscode.proposed.resolvers.d.ts", </del> "../../src/vscode-dts/vscode.proposed.workspaceTrust.d.ts", ] }
Change:
Timeline view to under the SCM view the SCM view the SCM view refreshes The Timeline view refreshes as well Then, the SCM view refreshes again !
VS Code Will execute the command when clicking the refresh button. and Then, it will go into here which causes it refresh twice. After method is executed, will be notified to update. This means that the method will be executed again.
Here is the sequence of events: the SCM viewlet will call status - show progress in SCM viewlet listens to status operations and emit event provides the timeline items - show progress in Timeline view While providing timeline items it calls - show progress on the SCM viewlet
I have made a tactical change so that no progress is being shown while running the operation. By doing so, we will not be showing progress in the "Source Control" view while the Timeline is refreshing. This however does not fix the fact that when the Timeline is shown, it refreshes every time is being executed which is excessive. one approach that would be valuable in multiple scenarios would be for the event to pass the name of the "Operation" that was executed. This would enable listeners of the event to decide whether they want to do something or not based on the operation that was just executed. what do you think?
Love it.

Discussion:
HashObject: { kind: OperationKind.HashObject, blocking: false, readOnly: false, remote: false, retry: false, showProgress: true } as HashObjectOperation, Ignore: { kind: OperationKind.Ignore, blocking: false, readOnly: false, remote: false, retry: false, showProgress: true } as IgnoreOperation, Log: { kind: OperationKind.Log, blocking: false, readOnly: true, remote: false, retry: false, showProgress: true } as LogOperation, <del> LogFile: { kind: OperationKind.LogFile, blocking: false, readOnly: true, remote: false, retry: false, showProgress: true } as LogFileOperation, </del> <ins> LogFile: { kind: OperationKind.LogFile, blocking: false, readOnly: true, remote: false, retry: false, showProgress: false } as LogFileOperation, </ins> Merge: { kind: OperationKind.Merge, blocking: false, readOnly: false, remote: false, retry: false, showProgress: true } as MergeOperation, MergeAbort: { kind: OperationKind.MergeAbort, blocking: false, readOnly: false, remote: false, retry: false, showProgress: true } as MergeAbortOperation, MergeBase: { kind: OperationKind.MergeBase, blocking: false, readOnly: true, remote: false, retry: false, showProgress: true } as MergeBaseOperation,
Change:
I've reviewed/approved a couple update-localization PRs (e.g. ) and observed that there's always a few changes just due to reordered properties. E.g. in Would be great if we can avoid these, to keep the number of changes small and simplify the reviewing.
Fixed in ^^^ keep in mind that this change won't be used until around the 17th of Nov.

Discussion:
const i18nPackVersion = '1.0.0'; function getRecordFromL10nJsonFormat(l10nJsonFormat) { const record = {}; <del> for (const key of Object.keys(l10nJsonFormat)) { </del> <ins> for (const key of Object.keys(l10nJsonFormat).sort()) { </ins> const value = l10nJsonFormat[key]; record[key] = typeof value === 'string' ? value : value.message; }

function getRecordFromL10nJsonFormat(l10nJsonFormat: l10nJsonFormat): Record<string, string> { const record: Record<string, string> = {}; <del> for (const key of Object.keys(l10nJsonFormat)) { </del> <ins> for (const key of Object.keys(l10nJsonFormat).sort()) { </ins> const value = l10nJsonFormat[key]; record[key] = typeof value === 'string' ? value : value.message; }
Change:
Testing Using the simple file dialog this is a bit inconvenient: <img width="567" alt="image" src="https://user-"
(Also on Linux which I'm supposed to test.)

Discussion:
import * as vscode from 'vscode'; import * as nls from 'vscode-nls'; <ins> import { Utils } from 'vscode-uri'; </ins> import { Command } from '../commandManager'; import { createUriListSnippet, getParentDocumentUri, imageFileExtensions } from '../languageFeatures/dropIntoEditor'; import { coalesce } from '../util/arrays';

if (docUri.scheme === Schemes.untitled) { return vscode.workspace.workspaceFolders?.[0]?.uri; } <del> return docUri; </del> <ins> return Utils.dirname(docUri); </ins> } async function insertLink(activeEditor: vscode.TextEditor, selectedFiles: vscode.Uri[], insertAsImage: boolean): Promise<void> {
Change:
Testing using latest Insiders click Turn on Remote Tunnel Access log in using the GitHub flow Unable to turn on remote tunnel
Can you specify a different machine name with the setting ?
:+1: Using worked for me
I'm unable to verify the issue right now because my Ubuntu VM broke. is the issue resolved for you without having to set the setting?
I confirm, the issue is fixed for me

Discussion:
} else { this._logger.info(message); } <del> const m = message.match(/^s*Open this link in your browser (https://([^/]+)/([^/]+)/([^/]+))/); </del> <ins> const m = message.match(/^s*Open this link in your browser (https://([^/s]+)/([^/s]+)/([^/s]+))/); </ins> if (m) { const info: ConnectionInfo = { link: m[1], domain: m[2], extensionId: 'ms-vscode.remote-server', hostName: m[4] }; this.setTunnelStatus(TunnelStates.connected(info));

tunnelProcess.kill(); } }); <del> this._logger.info(`${logLabel} appRoot ${this.environmentService.appRoot}`); this._logger.info(`${logLabel} process.execPath ${process.execPath}`); </del> if (process.env['VSCODE_DEV']) { onOutput('Compiling tunnel CLI from sources and run', false); onOutput(`${logLabel} Spawning: cargo run -- tunnel ${commandArgs.join(' ')}`, false);

} const hostName = hostname(); if (hostName && hostName.match(/^([w-]+)$/)) { <del> return hostName; </del> <ins> return hostName.substring(0, 20); </ins> } return undefined;
Change:
Testing After enabling remote tunnel access, a link like this is printed: The browser ends up redirecting to It would be nicer to genrate the vanity format

Discussion:
fn print_listening(log: &log::Logger, tunnel_name: &str) { debug!(log, "VS Code Server is listening for incoming connections"); <del> let extension_name = "+ms-vscode.remote-server"; </del> let home_dir = dirs::home_dir().unwrap_or_else(|| PathBuf::from("")); let current_dir = env::current_dir().unwrap_or_else(|_| PathBuf::from(""));

let mut addr = url::Url::parse("https://insiders.vscode.dev").unwrap(); { let mut ps = addr.path_segments_mut().unwrap(); <del> ps.push(extension_name); </del> <ins> ps.push("tunnel"); </ins> ps.push(tunnel_name); for segment in &dir { let as_str = segment.to_string_lossy();
Change:
Testing I have two "onDidChangeLogLevel" listeners: one on "" and one on my channel and I'm setting the log levels with this action: ! In the test items description you said: log level change is being propagated in env and also in your log output channel For me only the listener on "" fires.

Discussion:
if (isString(languageId) && !languageId.trim()) { throw new Error('illegal argument `languageId`. must not be empty'); } <del> const logLevel = this.getDefaultLogLevel(extension); </del> <ins> let logLevel: LogLevel | undefined; const logLevelValue = this.initData.environment.extensionLogLevel?.find(([identifier]) => ExtensionIdentifier.equals(extension.identifier, identifier))?.[1]; if (logLevelValue) { logLevel = parseLogLevel(logLevelValue); } </ins> const extHostOutputChannel = log ? this.doCreateLogOutputChannel(name, logLevel, extension) : this.doCreateOutputChannel(name, languageId, extension); extHostOutputChannel.then(channel => { this.channels.set(channel.id, channel); channel.visible = channel.id === this.visibleChannelId; }); <del> return log ? this.createExtHostLogOutputChannel(name, logLevel, <Promise<ExtHostOutputChannel>>extHostOutputChannel) : this.createExtHostOutputChannel(name, <Promise<ExtHostOutputChannel>>extHostOutputChannel); </del> <ins> return log ? this.createExtHostLogOutputChannel(name, logLevel ?? this.logService.getLevel(), <Promise<ExtHostOutputChannel>>extHostOutputChannel) : this.createExtHostOutputChannel(name, <Promise<ExtHostOutputChannel>>extHostOutputChannel); </ins> } private async doCreateOutputChannel(name: string, languageId: string | undefined, extension: IExtensionDescription): Promise<ExtHostOutputChannel> {

return new ExtHostOutputChannel(id, name, logger, this.proxy, extension); } <del> private async doCreateLogOutputChannel(name: string, logLevel: LogLevel, extension: IExtensionDescription): Promise<ExtHostLogOutputChannel> { </del> <ins> private async doCreateLogOutputChannel(name: string, logLevel: LogLevel | undefined, extension: IExtensionDescription): Promise<ExtHostLogOutputChannel> { </ins> const extensionLogDir = await this.createExtensionLogDirectory(extension); const file = this.extHostFileSystemInfo.extUri.joinPath(extensionLogDir, `${name.replace(/[/:*?"<>|]/g, '')}.log`); const logger = this.loggerService.createLogger(file, { name }, logLevel);

return new ExtHostLogOutputChannel(id, name, logger, this.proxy, extension); } <del> private getDefaultLogLevel(extension: IExtensionDescription): LogLevel { let logLevel: LogLevel | undefined; const logLevelValue = this.initData.environment.extensionLogLevel?.find(([identifier]) => ExtensionIdentifier.equals(extension.identifier, identifier))?.[1]; if (logLevelValue) { logLevel = parseLogLevel(logLevelValue); } return logLevel ?? this.logService.getLevel(); } </del> private createExtensionLogDirectory(extension: IExtensionDescription): Thenable<URI> { let extensionLogDirectoryPromise = this.extensionLogDirectoryPromise.get(extension.identifier.value); if (!extensionLogDirectoryPromise) {
Change:
Testing <img width="445" alt="Screenshot showing notification that the tunnel is ready, but the link to access the tunnel from doesn't render properly due to an extra space in the link." src="https://user-"

Discussion:
} else { this._logger.info(message); } <del> const m = message.match(/^s*Open this link in your browser (https://([^/]+)/([^/]+)/([^/]+))/); </del> <ins> const m = message.match(/^s*Open this link in your browser (https://([^/s]+)/([^/s]+)/([^/s]+))/); </ins> if (m) { const info: ConnectionInfo = { link: m[1], domain: m[2], extensionId: 'ms-vscode.remote-server', hostName: m[4] }; this.setTunnelStatus(TunnelStates.connected(info));

tunnelProcess.kill(); } }); <del> this._logger.info(`${logLabel} appRoot ${this.environmentService.appRoot}`); this._logger.info(`${logLabel} process.execPath ${process.execPath}`); </del> if (process.env['VSCODE_DEV']) { onOutput('Compiling tunnel CLI from sources and run', false); onOutput(`${logLabel} Spawning: cargo run -- tunnel ${commandArgs.join(' ')}`, false);

} const hostName = hostname(); if (hostName && hostName.match(/^([w-]+)$/)) { <del> return hostName; </del> <ins> return hostName.substring(0, 20); </ins> } return undefined;
Change:
Testing the API lacks an explanation of the interaction between channel log levels and app log levels. the comments of the individual log methods all have the form "Messages are only printed when the user has enabled xxx logging" but nowhere is explained how "xxx logging enablement" is related to the log level. I would rather expect something like "xxx messages are only logged when the log level is xxx or lower."

Discussion:
export interface LogOutputChannel extends OutputChannel { /** <del> * The current log level of the channel. </del> <ins> * The current log level of the channel. Defaults to application {@link env.logLevel application log level}. </ins> */ readonly logLevel: LogLevel;

/** * Log the given trace message to the channel. * <del> * Messages are only printed when the user has enabled trace logging. </del> <ins> * Messages are only logged when the {@link LogOutputChannel.logLevel log level} is {@link LogLevel.Trace trace}. </ins> * * @param message trace message to log */

/** * Log the given debug message to the channel. * <del> * Messages are only printed when the user has enabled debug logging. </del> <ins> * Messages are only logged when the {@link LogOutputChannel.logLevel log level} is {@link LogLevel.Debug debug} or lower. </ins> * * @param message debug message to log */

/** * Log the given info message to the channel. * <del> * Messages are only printed when the user has enabled info logging. </del> <ins> * Messages are only logged when the {@link LogOutputChannel.logLevel log level} is {@link LogLevel.Info info} or lower. </ins> * * @param message info message to log */

/** * Log the given warning message to the channel. * <del> * Messages are only printed when the user has enabled warn logging. </del> <ins> * Messages are only logged when the {@link LogOutputChannel.logLevel log level} is {@link LogLevel.Warn warn} or lower. </ins> * * @param message warning message to log */

/** * Log the given error or error message to the channel. * <del> * Messages are only printed when the user has enabled error logging. </del> <ins> * Messages are only logged when the {@link LogOutputChannel.logLevel log level} is {@link LogLevel.Error error} or lower. </ins> * * @param error Error or error message to log */
Change:
Testing Pasting it as text does that.
Same cause as . The parsed hostname also included a
Marking as dup

Discussion:
} else { this._logger.info(message); } <del> const m = message.match(/^s*Open this link in your browser (https://([^/]+)/([^/]+)/([^/]+))/); </del> <ins> const m = message.match(/^s*Open this link in your browser (https://([^/s]+)/([^/s]+)/([^/s]+))/); </ins> if (m) { const info: ConnectionInfo = { link: m[1], domain: m[2], extensionId: 'ms-vscode.remote-server', hostName: m[4] }; this.setTunnelStatus(TunnelStates.connected(info));

tunnelProcess.kill(); } }); <del> this._logger.info(`${logLabel} appRoot ${this.environmentService.appRoot}`); this._logger.info(`${logLabel} process.execPath ${process.execPath}`); </del> if (process.env['VSCODE_DEV']) { onOutput('Compiling tunnel CLI from sources and run', false); onOutput(`${logLabel} Spawning: cargo run -- tunnel ${commandArgs.join(' ')}`, false);

} const hostName = hostname(); if (hostName && hostName.match(/^([w-]+)$/)) { <del> return hostName; </del> <ins> return hostName.substring(0, 20); </ins> } return undefined;
Change:
Testing Version: 1.73.0-insider Commit: Date: 2022-10-25T05:18:20.717Z Electron: 19.0.17 Chromium: 102.0.5005.167 16.14.2 V8: 10.2.154.15-electron.0 OS: Darwin arm64 21.6.0 Sandboxed: Yes 1) open a text file with a super long line, in my case 12K characters 2) toggle word wrap 3) scroll to the end -blue button (great!) 4) press the button Observed issues: 1) toggling line wrap or closing and reopening the editor does not bring back the blue button (I would have expected so) 2) <kbdcmd</kbd+<kbdArrowRight</kbddoes not bring me to the end of the line but only half-way 3) scrolling to the end of line and mouse clicking puts the cursor in the same position as 2) 4) scrolling to the end of line does not show me the end of the line but is around 15 characters short Recording of issues: Proposal: Rather than trying to deal with these long lines, use the button to enable line wrapping so that I can confidently deal with these long lines.
I see how it's broken in your screen recording, but I'm having a hard time reproducing. Could you please share your test file? I tried with (87K chars) and could not reproduce: https://user-
Well, it looks like we all think alike.. :). I concatenated two long lines and ran into a situation where Chromium cuts off rendering after 1MM pixels. I thought only IE had such a limit and this might be a new Chromium limitation. But in any case, it would be interesting to get your file to check if you were running into the same thing or not: <img width="739" alt="Screenshot 2022-10-26 at 16 36 27" src="https://user-"
This is the file I used, zipped up:
with the exception of me attempting to test on 1.8 million characters, , the button, reloading, etc, works like a charm. ! note that in large cases that the initial 12k from Kai, (I tested up to some 53k), doesn't go to end of the line, but goes to the button. pressing the button, then will then go to end of the line.

Discussion:
this._overflowGuardContainer.setWidth(layoutInfo.width); this._overflowGuardContainer.setHeight(layoutInfo.height); <del> this._linesContent.setWidth(1000000); this._linesContent.setHeight(1000000); </del> <ins> // https://stackoverflow.com/questions/38905916/content-in-google-chrome-larger-than-16777216-px-not-being-rendered this._linesContent.setWidth(16777216); this._linesContent.setHeight(16777216); </ins> } private _getEditorClassName() {