Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -1475,6 +1475,12 @@
"cswutil80"
],
"when": "config.consistem.converterItem.autoConvertOnSave"
},
"consistem.converterItem.timeout": {
"markdownDescription": "Tempo limite (ms) aplicado às chamadas de conversão de item (`Converter Item`, `Converter Item Customizado` e conversão automática ao salvar). Use um valor mais alto em servidores/máquinas lentas. Use `0` para desativar o tempo limite. As demais chamadas do módulo continuam usando `objectscript.ccs.requestTimeout`.",
"type": "number",
"default": 180000,
"minimum": 0
}
}
},
Expand Down
16 changes: 14 additions & 2 deletions src/ccs/commands/converterItem.ts
Original file line number Diff line number Diff line change
Expand Up @@ -91,7 +91,7 @@ export async function convertCurrentItemCustom(): Promise<void> {
strParamPersist,
};

const responseText = await sharedClient.convertCustom(editor.document, payload);
const responseText = await withConversionProgress(item, () => sharedClient.convertCustom(editor.document, payload));

renderConversionOutput(responseText);
} catch (error) {
Expand Down Expand Up @@ -131,7 +131,9 @@ async function convertDocumentItem(
const item = getItemName(document);

try {
const responseText = await sharedClient.convertDefault(document, item, flgDisplayLinasNaoConv);
const responseText = await withConversionProgress(item, () =>
sharedClient.convertDefault(document, item, flgDisplayLinasNaoConv)
);
renderConversionOutput(responseText);
} catch (error) {
if (silentError) {
Expand All @@ -157,6 +159,16 @@ function isInExcludedPackage(document: vscode.TextDocument, excludedPackages: st
return pathParts.some((part) => normalizedExcluded.has(part));
}

function withConversionProgress<T>(item: string, task: () => Promise<T>): Thenable<T> {
return vscode.window.withProgress(
{
location: vscode.ProgressLocation.Window,
title: `Convertendo item ${item}...`,
},
task
);
}

function renderConversionOutput(responseText: string): void {
responseText
.split(/\r?\n/)
Expand Down
3 changes: 2 additions & 1 deletion src/ccs/config/schema.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,11 +5,12 @@ As opções abaixo controlam as integrações específicas para o fork da Consis
| Chave | Tipo | Padrão | Descrição |
| ----------------------------------------- | ------------------------- | -------------- | ----------------------------------------------------------------------------------------------------------------- |
| `objectscript.ccs.endpoint` | `string` | `undefined` | URL base alternativa para a API. Se não definida, a URL é derivada da conexão ativa do Atelier. |
| `objectscript.ccs.requestTimeout` | `number` | `5000` | Tempo limite (ms) aplicado às chamadas HTTP do módulo. Valores menores ou inválidos são normalizados para zero. |
| `objectscript.ccs.requestTimeout` | `number` | `5000` | Tempo limite (ms) aplicado às chamadas HTTP rápidas do módulo (definição, documentação, gatilhos etc.). Valores negativos/inválidos são normalizados; `0` desativa o tempo limite. Não se aplica à conversão de item. |
| `objectscript.ccs.debugLogging` | `boolean` | `false` | Quando verdadeiro, registra mensagens detalhadas no `ObjectScript` Output Channel. |
| `objectscript.ccs.flags` | `Record<string, boolean>` | `{}` | Feature flags opcionais que podem ser lidas pelas features do módulo. |
| `consistem.converterItem.autoConvertOnSave` | `boolean` | `true` | Quando verdadeiro, executa a conversão simples ao salvar arquivos `.mac`. |
| `consistem.converterItem.autoConvertExcludePackages` | `string[]` | `["cswutil70","cswutil80"]` | Lista de pacotes/pastas excluídos da conversão automática ao salvar. |
| `consistem.converterItem.timeout` | `number` | `180000` | Tempo limite (ms) exclusivo das chamadas de conversão de item (manual, customizada e automática ao salvar). Aumente em servidores/máquinas lentas; `0` desativa o tempo limite. |

> Compatibilidade: as chaves antigas `objectscript.ccs.autoConvertOnSave` e
> `objectscript.ccs.autoConvertExcludePackages` ainda são lidas como fallback.
Expand Down
13 changes: 10 additions & 3 deletions src/ccs/config/settings.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ import * as vscode from "vscode";
export interface CcsSettings {
endpoint?: string;
requestTimeout: number;
convertTimeout: number;
debugLogging: boolean;
flags: Record<string, boolean>;
autoConvertOnSave: boolean;
Expand All @@ -12,15 +13,20 @@ export interface CcsSettings {
const CCS_CONFIGURATION_SECTION = "objectscript.ccs";
const CONSISTEM_CONFIGURATION_SECTION = "consistem";
const DEFAULT_TIMEOUT = 5000;
const DEFAULT_CONVERT_TIMEOUT = 180000;
const DEFAULT_AUTO_CONVERT_EXCLUDE_PACKAGES = ["cswutil70", "cswutil80"];

export function getCcsSettings(): CcsSettings {
const configuration = vscode.workspace.getConfiguration(CCS_CONFIGURATION_SECTION);
const endpoint = sanitizeEndpoint(configuration.get<string | undefined>("endpoint"));
const requestTimeout = coerceTimeout(configuration.get<number | undefined>("requestTimeout"));
const requestTimeout = coerceTimeout(configuration.get<number | undefined>("requestTimeout"), DEFAULT_TIMEOUT);
const debugLogging = Boolean(configuration.get<boolean | undefined>("debugLogging"));
const flags = configuration.get<Record<string, boolean>>("flags") ?? {};
const consistemConfiguration = vscode.workspace.getConfiguration(CONSISTEM_CONFIGURATION_SECTION);
const convertTimeout = coerceTimeout(
consistemConfiguration.get<number | undefined>("converterItem.timeout"),
DEFAULT_CONVERT_TIMEOUT
);
const autoConvertOnSave = getAutoConvertOnSaveSetting(consistemConfiguration);
const autoConvertExcludePackages = sanitizeExcludePackages(
getAutoConvertExcludePackagesSetting(consistemConfiguration)
Expand All @@ -29,6 +35,7 @@ export function getCcsSettings(): CcsSettings {
return {
endpoint,
requestTimeout,
convertTimeout,
debugLogging,
flags,
autoConvertOnSave,
Expand All @@ -53,9 +60,9 @@ function sanitizeEndpoint(endpoint?: string): string | undefined {
return trimmed.replace(/\/+$/, "");
}

function coerceTimeout(timeout: number | undefined): number {
function coerceTimeout(timeout: number | undefined, defaultTimeout: number): number {
if (typeof timeout !== "number" || Number.isNaN(timeout)) {
return DEFAULT_TIMEOUT;
return defaultTimeout;
}

return Math.max(0, Math.floor(timeout));
Expand Down
4 changes: 2 additions & 2 deletions src/ccs/sourcecontrol/clients/converterClient.ts
Original file line number Diff line number Diff line change
Expand Up @@ -95,12 +95,12 @@ export class ConverterClient {
? ROUTES.converterArquivoCustomizado(api.ns)
: ROUTES.converterArquivo(api.ns);

const { requestTimeout } = getCcsSettings();
const { convertTimeout } = getCcsSettings();
const { signal, dispose } = createAbortSignal(token);

try {
const response = await sourceControlApi.post<string>(route, body, {
timeout: requestTimeout,
timeout: convertTimeout,
signal,
responseType: "text",
transformResponse: (data) => data,
Expand Down