Skip to content

Commit 14021bf

Browse files
feat: Fancy decorations, simple or disabled
Decorations can now be set to "fancy" (colorful), "simple" (less flashy but just as informative as fancy) or "disabled".
1 parent 1913b49 commit 14021bf

File tree

8 files changed

+72
-24
lines changed

8 files changed

+72
-24
lines changed

package.json

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -120,8 +120,18 @@
120120
},
121121
"npm-outdated.decorations": {
122122
"order": 3000,
123-
"type": "boolean",
124-
"default": true,
123+
"type": "string",
124+
"enum": [
125+
"fancy",
126+
"simple",
127+
"disabled"
128+
],
129+
"enumDescriptions": [
130+
"%npm-outdated.configuration.decorations.fancy.description%",
131+
"%npm-outdated.configuration.decorations.simple.description%",
132+
"%npm-outdated.configuration.decorations.disabled.description%"
133+
],
134+
"default": "fancy",
125135
"markdownDescription": "%npm-outdated.configuration.decorations.description%"
126136
},
127137
"npm-outdated.cacheLifetime": {

package.nls.json

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,9 @@
55
"npm-outdated.configuration.majorUpdateProtection.description": "Avoid suggesting that a package be upgraded to a `major` version directly. The suggestion will only happen if the user-defined version is the latest `minor` version available.",
66
"npm-outdated.configuration.identifySecurityAdvisories.description": "Identifies packages used with known security advisories.",
77
"npm-outdated.configuration.decorations.description": "Displays decorations on the right side of packages containing more details about upgrade possibilities.",
8+
"npm-outdated.configuration.decorations.fancy.description": "Details are colorful and much easier to identify.",
9+
"npm-outdated.configuration.decorations.simple.description": "Details are displayed in a simpler, less flashy, but still informative way. Helps performance if you don't care about colors.",
10+
"npm-outdated.configuration.decorations.disabled.description": "Details will not be displayed directly, but you will still see it when hovering over the package version in a tooltip.",
811
"npm-outdated.configuration.cacheLifetime.description": "Time in minutes in which the versions of packages already analyzed will be kept internally. Performance improvement.",
912
"npm-outdated.configuration.parallelProcessesLimit.description": "Defines how much packages can be analyzed together. A high value processes faster but consumes much more CPU. Set `0` to disable this limit (but use with moderation)."
1013
}

package.nls.pt-br.json

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,10 @@
44
"npm-outdated.configuration.level.description": "Diferença mínima *semver* necessária para que uma dependência seja exibida como desatualizada. Veja a [documentação Semver](https://docs.npmjs.com/cli/v6/using-npm/semver) (*em inglês*) para mais detalhes.",
55
"npm-outdated.configuration.majorUpdateProtection.description": "Evita que uma dependência possa atualizar para uma versão `major` diretamente. Uma sugestão deste tipo só acontecerá se a versão definida pelo usuário já estiver na última versão `minor` disponível.",
66
"npm-outdated.configuration.identifySecurityAdvisories.description": "Identifica as dependências utilizadas com avisos de segurança conhecidos.",
7-
"npm-outdated.configuration.decorations.description": "Exibe decorações ao lado direito dos pacotes contendo mais detalhes sobre as possibilidades de atualização.",
7+
"npm-outdated.configuration.decorations.description": "Exibe decorações ao lado direito das dependências contendo mais detalhes sobre as possibilidades de atualização.",
8+
"npm-outdated.configuration.decorations.fancy.description": "Os detalhes são coloridos e muito mais fáceis de identificar.",
9+
"npm-outdated.configuration.decorations.simple.description": "Os detalhes são exibidos de uma forma mais simples, menos chamativa, mas ainda informativa. Ajuda na performance se você não se importa com as cores.",
10+
"npm-outdated.configuration.decorations.disabled.description": "Os detalhes não serão exibidos diretamente, mas você ainda verá ao passar o mouse na versão da dependência em uma tooltip.",
811
"npm-outdated.configuration.cacheLifetime.description": "Quantidade de minutos na qual as versões das dependências já analisadas poderão ser mantidas internamente em cache. Melhora o desempenho.",
912
"npm-outdated.configuration.parallelProcessesLimit.description": "Define quantas dependências poderão ser analisadas ao mesmo tempo. Um valor alto torna o processo mais rápido, porém, consome mais CPU. Defina como `0` para desativar este limite (mas use com moderação)."
1013
}

src/Diagnostic.ts

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -37,9 +37,9 @@ import {
3737
import { PackageInfo } from "./PackageInfo"
3838
import { name as packageName } from "./plugin.json"
3939
import {
40+
getDecorationsMode,
4041
getParallelProcessesLimit,
4142
identifySecurityAdvisories,
42-
isDecorationsEnabled,
4343
} from "./Settings"
4444
import { Icons } from "./Theme"
4545
import { promiseLimit } from "./Utils"
@@ -228,9 +228,10 @@ export const generatePackagesDiagnostics = async (
228228
// Read dependencies from package.json to get the name of packages used.
229229
const packagesInfos = Object.values(await getDocumentPackages(document))
230230

231-
const documentDecorations = isDecorationsEnabled()
232-
? new DocumentDecoration(document)
233-
: undefined
231+
const documentDecorations =
232+
getDecorationsMode() !== "disabled"
233+
? new DocumentDecoration(document)
234+
: undefined
234235

235236
const documentDiagnostics = new DocumentDiagnostics(
236237
document,

src/DocumentDecoration.ts

Lines changed: 30 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ import {
1414
import { PackageRelatedDiagnostic } from "./Diagnostic"
1515
import { PackageAdvisory } from "./NPM"
1616
import { PackageInfo } from "./PackageInfo"
17+
import { getDecorationsMode } from "./Settings"
1718
import { Icons, Margins, ThemeDark, ThemeLight } from "./Theme"
1819
import { lazyCallback } from "./Utils"
1920

@@ -131,29 +132,47 @@ export class DocumentDecoration {
131132
decorationManager.flushLine(line)
132133
}
133134

134-
messages.forEach((message, messageIndex) => {
135-
const decorationLayer = decorationManager.getLayer(messageIndex)
135+
if (getDecorationsMode() === "simple") {
136+
const decorationLayer = decorationManager.getLayer(0)
136137

137138
decorationLayer.lines.set(line, {
138139
range: new Range(line, 4096, line, 4096),
139140
renderOptions: {
140141
after: {
141-
contentText: message.message,
142+
contentText: messages.map((message) => message.message).join(" "),
142143
...ThemeLight.DEFAULT,
143-
...(messageIndex === 0
144-
? Margins.MARGIN_INITIAL
145-
: Margins.MARGIN_THEN),
146-
...message.styleDefault,
144+
...Margins.MARGIN_INITIAL,
147145
},
148146
dark: {
147+
after: { ...ThemeDark.DEFAULT },
148+
},
149+
},
150+
})
151+
} else {
152+
messages.forEach((message, messageIndex) => {
153+
const decorationLayer = decorationManager.getLayer(messageIndex)
154+
155+
decorationLayer.lines.set(line, {
156+
range: new Range(line, 4096, line, 4096),
157+
renderOptions: {
149158
after: {
150-
...ThemeDark.DEFAULT,
151-
...message.styleDark,
159+
contentText: message.message,
160+
...ThemeLight.DEFAULT,
161+
...(messageIndex === 0
162+
? Margins.MARGIN_INITIAL
163+
: Margins.MARGIN_THEN),
164+
...message.styleDefault,
165+
},
166+
dark: {
167+
after: {
168+
...ThemeDark.DEFAULT,
169+
...message.styleDark,
170+
},
152171
},
153172
},
154-
},
173+
})
155174
})
156-
})
175+
}
157176

158177
this.render()
159178
}

src/Settings.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,8 +24,8 @@ export const identifySecurityAdvisories = (): boolean =>
2424

2525
// Displays decorations on the right side of packages.
2626
// Default: true.
27-
export const isDecorationsEnabled = (): boolean =>
28-
workspace.getConfiguration().get<boolean>(`${packageName}.decorations`)!
27+
export const getDecorationsMode = (): "fancy" | "simple" | "disabled" =>
28+
workspace.getConfiguration().get(`${packageName}.decorations`)!
2929

3030
// Time in minutes in which the versions of packages already analyzed will be kept internally.
3131
// Default: 60 minutes.

src/TestUtils.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ jest.mock("./Utils", () => ({
3333

3434
interface PluginConfigurations {
3535
cacheLifetime?: number
36-
decorations?: boolean
36+
decorations?: "fancy" | "simple" | "disabled"
3737
identifySecurityAdvisories?: boolean
3838
level?: ReleaseType
3939
majorUpdateProtection?: boolean
@@ -42,7 +42,7 @@ interface PluginConfigurations {
4242

4343
const DefaultPluginConfigurations: PluginConfigurations = {
4444
cacheLifetime: 0,
45-
decorations: true,
45+
decorations: "fancy",
4646
identifySecurityAdvisories: true,
4747
level: "patch",
4848
majorUpdateProtection: true,

src/extension.test.ts

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -280,16 +280,28 @@ describe("package diagnostics", () => {
280280
expect(decorations).toStrictEqual([])
281281
})
282282

283+
it("decorations simple", async () => {
284+
const { decorations } = await vscodeSimulator({
285+
configurations: { decorations: "simple" },
286+
packageJson: { devDependencies: { "npm-outdated": "^1.0.0" } },
287+
packagesInstalled: { "npm-outdated": "1.0.0" },
288+
packagesRepository: { "npm-outdated": ["1.0.0", "1.0.1"] },
289+
})
290+
291+
expect(decorations[0]).toContain(
292+
`${Icons.UPDATABLE} Update available: 1.0.1`
293+
)
294+
})
295+
283296
it("decorations disabled", async () => {
284297
const { decorations } = await vscodeSimulator({
285-
configurations: { decorations: false },
298+
configurations: { decorations: "disabled" },
286299
packageJson: { devDependencies: { "npm-outdated": "^1.0.0" } },
287300
packagesInstalled: { "npm-outdated": "1.0.0" },
288301
packagesRepository: { "npm-outdated": ["1.0.0", "1.0.1"] },
289302
})
290303

291304
expect(decorations).toStrictEqual([])
292-
expect(decorations).toStrictEqual([])
293305
})
294306

295307
it("package dependes on auth, so npm view will be used (found)", async () => {

0 commit comments

Comments
 (0)