-
Notifications
You must be signed in to change notification settings - Fork 1
VS Code ObjectScript — Cross‐workspace Go to Definition
Wiki técnica da implementação para multi-root workspaces (DESENV7* ↔ COMP-7.0)
-
Problema: F12 (Go to Definition) caía no servidor (
isfs-readonly://) quando o alvo estava em uma pasta-irmã do workspace com namespace diferente (ex.: origem emDESENV75→ destino emCOMP70). -
Solução: O resolver agora procura primeiro arquivos locais também em outros folders do workspace. Foi adicionada a configuração
objectscript.export.searchOtherWorkspaceFolders. -
Impacto: F12 abre
file://do COMP-7.0 mesmo quando disparado de um DESENV7*, se houver cópia local. Só cai no servidor se não existir arquivo local.
-
Nova config:
objectscript.export.searchOtherWorkspaceFolders: string[]- Lista de nomes de folders do workspace a considerar antes do servidor.
- Aceita
"*"para todos os folders locais (não-ISFS).
-
Ordem de resolução (prioridade):
- Pasta atual do arquivo (workspace folder ativo)
- Folders “iguais” (mesmo server+namespace — comportamento antigo)
- Folders listados em
searchOtherWorkspaceFoldersou todos ("*") -
Fallback: servidor (
isfs…)
-
Código afetado:
-
src/providers/DocumentContentProvider.ts→getUri()expande a busca multi-root e chamafindLocalUripara cada candidato. -
package.json→ schema da nova setting. -
README/CHANGELOGatualizados.
-
-
Testes:
- Fixtures multi-root (
client+shared) - Integração: garante
file://quando há cópia local eserver URIquando não há.
- Fixtures multi-root (
Não defina objectscript.conn aqui para evitar conflito de namespace. Mantenha export, busca e demais ajustes globais.
C:\workspacecsw\projetos\7.5\.vscode\settings.json
{
"objectscript.conn": {
"server": "consistem",
"ns": "DESENV75",
"host": "localhost",
"port": 57772,
"active": true
},
"objectscript.export": {
"folder": ".",
"atelier": true,
"addCategory": false,
"searchOtherWorkspaceFolders": [
"COMP-7.0"
]
},
"objectscript.compileOnSave": true
}C:\workspacecsw\projetos\COMP-7.0\.vscode\settings.json
{
"objectscript.conn": {
"server": "consistem",
"ns": "COMP70",
"host": "localhost",
"port": 57772,
"active": true
},
"objectscript.export": {
"folder": ".",
"atelier": true,
"addCategory": false,
},
"objectscript.compileOnSave": true
}Dica: para incluir todos os folders locais do workspace, use:
"searchOtherWorkspaceFolders": ["*"]
-
Atualize a extensão para a versão que contém a feature.
-
No folder consumidor (ex.:
7.5), configuresearchOtherWorkspaceFolderscom"COMP-7.0"(ou"*"). -
Garanta
objectscript.connpor pasta (DESENV75 ↔ COMP70). -
Reload Window no VS Code.
-
Abra um arquivo local em
DESENV75e tecle F12 para uma rotina doCOMP70.- Esperado: abrir file://…COMP-7.0… (editável).
- Apenas se não houver cópia local: abrir isfs… (read-only).
-
Ainda abre read-only:
- Verifique se a rotina existe localmente no folder listado.
- Confirme se você abriu a aba a partir da árvore local (não
(localhost:57772)). - Use View → Output → ObjectScript e aumente o log para Debug para ver as pastas testadas.
-
Compilação falha no COMP70 com “Controle de fonte…”
- É Server Source Control (SSC): faça checkout do item (ou alinhe a política).
- A resolução de arquivo local (F12) é independente da compilação.
-
Fixture multi-root:
client(consumidor) eshared(fonte). -
clientconfigura"searchOtherWorkspaceFolders": ["shared"]. -
Teste 1: F12 em
MultiRoot.Sharedretornafile://…shared…. -
Teste 2: F12 em
MultiRoot.ServerOnly(não existe local) retorna URI de servidor. - Helper aguarda o índice da extensão (até 10s) para evitar corrida.
-
Preciso listar todas as pastas? Não. Use
"*"para buscar todos os folders locais do workspace; ou liste só os que você quer priorizar. -
Impacta performance? A busca tenta
findLocalUripor folder. Para muitos roots, prefira nomear apenas os necessários (ou use"*"se aceitável). -
Pode quebrar compilação? Não. Compilação continua regida por
objectscript.conndo folder e pelo SSC do servidor.
### Enhancements
- Cross-workspace Go to Definition: adiciona `objectscript.export.searchOtherWorkspaceFolders` para priorizar arquivos locais em folders-irmãos do workspace antes de recorrer ao servidor.- Remova
searchOtherWorkspaceFoldersdas settings. - O comportamento volta a considerar somente a pasta atual (e irmãs de mesmo namespace), com fallback para servidor.
{ "folders": [ { "name": "DESENV75", "path": "C:\\workspacecsw\\projetos\\7.5" }, { "name": "COMP-7.0", "path": "C:\\workspacecsw\\projetos\\COMP-7.0" } ], "settings": { "search.exclude": { "**/.svn": true, "**/classes": true, "**/classescls": false, "**/outros": true, "**/paginas": true, "**/relatorios": true, "**/src": true }, "objectscript.export": { "folder": ".", "atelier": true, "addCategory": false }, "objectscript.syncLocalChanges": "all", "objectscript.compileOnSave": true } }