Skip to content

Commit

Permalink
fix: early out on checking binary files. (#1337)
Browse files Browse the repository at this point in the history
* fix: early out on checking binary files.
* Update snapshots for ignored files.
  • Loading branch information
Jason3S authored Jun 12, 2021
1 parent 4ebb29e commit a948808
Show file tree
Hide file tree
Showing 15 changed files with 143 additions and 54 deletions.
4 changes: 2 additions & 2 deletions integration-tests/config/config.json
Original file line number Diff line number Diff line change
Expand Up @@ -149,7 +149,7 @@
{
"path": "microsoft/TypeScript-Website",
"url": "https://github.com/microsoft/TypeScript-Website.git",
"commit": "67aaf900841fbae4069c3d0ac964a268380f92d8",
"commit": "4e30de8dd763bc161d88783cd0045ddf5afd5cc1",
"args": [
"--config=${repoConfig}/cspell.json",
"**/*.*"
Expand Down Expand Up @@ -256,7 +256,7 @@
"-e",
"{*.BUILD,BUILD,CHANGELOG.md,*.sh,*.cfg,*.ps1,Dockerfile.*,*.Dockerfile,*.{yaml,xml,json,cmake}}"
],
"commit": "cd358c23a0217a8a4c7230325c2840852f8f4c3f"
"commit": "8663096726fb803cb2c372da927708a57064e465"
},
{
"path": "graphql/graphql-spec",
Expand Down
2 changes: 1 addition & 1 deletion integration-tests/snapshots/AdaDoom3/AdaDoom3/snapshot.txt
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ Repository: AdaDoom3/AdaDoom3
Url: "https://github.com/AdaDoom3/AdaDoom3.git"
Args: ["**/*.*"]
Lines:
CSpell: Files checked: 117, Issues found: 3283 in 101 files
CSpell: Files checked: 103, Issues found: 3283 in 101 files
exit code: 1
./Engine/Assembly/PPC/neo-engine-cpu.adb:5:78 - Unknown word (Squirek) -- Copyright (C) 2016 Justin Squirek
./Engine/Assembly/x86-64/neo-engine-cpu.adb:101:111 - Unknown word (OSXSAVE) -- ECX_Register, 27); -- OSXSAVE
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ Repository: googleapis/google-cloud-cpp
Url: "https://github.com/googleapis/google-cloud-cpp.git"
Args: ["--config=../../../../config/repositories/googleapis/google-cloud-cpp/cspell.json","**/*","-e","{*.BUILD,BUILD,CHANGELOG.md,*.sh,*.cfg,*.ps1,Dockerfile.*,*.Dockerfile,*.{yaml,xml,json,cmake}}"]
Lines:
CSpell: Files checked: 1759, Issues found: 9118 in 1113 files
CSpell: Files checked: 1767, Issues found: 9146 in 1119 files
exit code: 1
./ARCHITECTURE.md:186:1 - Unknown word (discoverability) -- discoverability of available option
./ARCHITECTURE.md:22:61 - Unknown word (retriable) -- RPCs that fail with a retriable error,
Expand Down Expand Up @@ -78,10 +78,12 @@ Lines:
./ci/kokoro/README.md:43:23 - Unknown word (toolchains) -- Test with different toolchains from the ones provided
./ci/kokoro/README.md:58:21 - Unknown word (backoff) -- "try N times with a backoff" do not work during
./ci/kokoro/README.md:8:70 - Unknown word (prjects) -- supporting Open Source prjects,
./ci/kokoro/windows/build-32.bat:16:1 - Unknown word (choco) -- choco install --no-progress
./ci/kokoro/windows/build-32.bat:18:24 - Unknown word (chocolatey's) -- REM Change PATH to use chocolatey's version of Bazel
./ci/kokoro/windows/build-32.bat:27:98 - Unknown word (vcvars) -- Community\VC\Auxiliary\Build\vcvars32.bat"
./ci/kokoro/windows/build-32.bat:33:5 - Unknown word (errorlevel) -- if %errorlevel% neq 0 exit /b %errorlevel
./ci/kokoro/windows/build-32.bat:15:24 - Unknown word (chocolatey's) -- REM Change PATH to use chocolatey's version of Bazel
./ci/kokoro/windows/build-32.bat:19:98 - Unknown word (vcvars) -- Community\VC\Auxiliary\Build\vcvars32.bat"
./ci/kokoro/windows/build-32.bat:25:5 - Unknown word (errorlevel) -- if %errorlevel% neq 0 exit /b %errorlevel
./ci/kokoro/windows/build.bat:15:13 - Unknown word (Bazelisk) -- REM Install Bazelisk using Chocolatey.
./ci/kokoro/windows/build.bat:16:1 - Unknown word (choco) -- choco install --no-progress
./ci/kokoro/windows/build.bat:16:32 - Unknown word (bazelisk) -- install --no-progress -y bazelisk
./ci/verify_current_targets/CMakeLists.txt:17:1 - Unknown word (cmake) -- cmake_minimum_required(VERSION
./ci/verify_current_targets/CMakeLists.txt:34:28 - Unknown word (firestore) -- firestore iam logging)
./ci/verify_current_targets/CMakeLists.txt:45:47 - Unknown word (ARGN) -- "${name}" PRIVATE ${ARGN})
Expand Down Expand Up @@ -137,11 +139,11 @@ Lines:
./doc/packaging.md:106:5 - Unknown word (CXXFLAGS) -- GCS_CXXFLAGS := $(shell pkg-config
./doc/packaging.md:106:55 - Unknown word (cflags) -- config storage_client --cflags)
./doc/packaging.md:107:5 - Unknown word (CXXLDFLAGS) -- GCS_CXXLDFLAGS := $(shell pkg-config
./doc/packaging.md:1225:21 - Unknown word (epel) -- sudo dnf install -y epel-release && \
./doc/packaging.md:1376:21 - Unknown word (centos) -- sudo yum install -y centos-release-scl yum-utils
./doc/packaging.md:1377:46 - Unknown word (rhscl) -- -enable rhel-server-rhscl-7-rpms
./doc/packaging.md:1377:54 - Unknown word (rpms) -- rhel-server-rhscl-7-rpms
./doc/packaging.md:1379:55 - Unknown word (devtoolset) -- ccache cmake3 curl-devel devtoolset-7 gcc gcc-c++ \
./doc/packaging.md:1226:21 - Unknown word (epel) -- sudo dnf install -y epel-release && \
./doc/packaging.md:1377:21 - Unknown word (centos) -- sudo yum install -y centos-release-scl yum-utils
./doc/packaging.md:1378:46 - Unknown word (rhscl) -- -enable rhel-server-rhscl-7-rpms
./doc/packaging.md:1378:54 - Unknown word (rpms) -- rhel-server-rhscl-7-rpms
./doc/packaging.md:1380:55 - Unknown word (devtoolset) -- ccache cmake3 curl-devel devtoolset-7 gcc gcc-c++ \
./doc/packaging.md:156:5 - Unknown word (srcs) -- srcs = [
./doc/packaging.md:187:42 - Unknown word (Microgenerator) -- protobuf-gh] | 3.14.0 | C++ Microgenerator support |
./doc/packaging.md:213:10 - Unknown word (makecache) -- sudo dnf makecache && \
Expand Down Expand Up @@ -183,15 +185,15 @@ Lines:
./external/googleapis/config.pc.in:18:1 - Unknown word (includedir) -- includedir=${prefix}/@CMAKE_INSTALL
./external/googleapis/config.pc.in:18:37 - Unknown word (INCLUDEDIR) -- prefix}/@CMAKE_INSTALL_INCLUDEDIR@
./external/googleapis/config.pc.in:26:1 - Unknown word (Cflags) -- Cflags: -I${includedir}
./generator/CMakeLists.txt:113:18 - Unknown word (gmock) -- # the GTest::gmock target, and the target
./generator/CMakeLists.txt:148:14 - Unknown word (fname) -- foreach (fname ${google_cloud_cpp_generator
./generator/CMakeLists.txt:164:62 - Unknown word (bigobj) -- .obj file. Add the /bigobj option to
./generator/CMakeLists.txt:174:26 - Unknown word (everytime) -- build all the tests everytime they create a new package
./generator/CMakeLists.txt:31:14 - Unknown word (codegen) -- internal/codegen_utils.cc
./generator/CMakeLists.txt:38:14 - Unknown word (idempotency) -- internal/idempotency_policy_generator.cc
./generator/CMakeLists.txt:83:9 - Unknown word (protoc) -- # Build protoc plugin executable
./generator/CMakeLists.txt:90:29 - Unknown word (SRCS) -- protobuf_generate_cpp(PROTO_SRCS PROTO_HDRS generator
./generator/CMakeLists.txt:90:40 - Unknown word (HDRS) -- cpp(PROTO_SRCS PROTO_HDRS generator_config.proto
./generator/CMakeLists.txt:115:18 - Unknown word (gmock) -- # the GTest::gmock target, and the target
./generator/CMakeLists.txt:150:14 - Unknown word (fname) -- foreach (fname ${google_cloud_cpp_generator
./generator/CMakeLists.txt:166:62 - Unknown word (bigobj) -- .obj file. Add the /bigobj option to
./generator/CMakeLists.txt:176:26 - Unknown word (everytime) -- build all the tests everytime they create a new package
./generator/CMakeLists.txt:33:14 - Unknown word (codegen) -- internal/codegen_utils.cc
./generator/CMakeLists.txt:40:14 - Unknown word (idempotency) -- internal/idempotency_policy_generator.cc
./generator/CMakeLists.txt:85:9 - Unknown word (protoc) -- # Build protoc plugin executable
./generator/CMakeLists.txt:92:29 - Unknown word (SRCS) -- protobuf_generate_cpp(PROTO_SRCS PROTO_HDRS generator
./generator/CMakeLists.txt:92:40 - Unknown word (HDRS) -- cpp(PROTO_SRCS PROTO_HDRS generator_config.proto
./generator/generator.h:26:8 - Unknown word (microgenerator) -- * C++ microgenerator plugin entry point.
./generator/generator_config.proto:23:27 - Unknown word (rpcs) -- repeated string omitted_rpcs = 4;
./generator/google_cloud_cpp_generator_testing.bzl:19:36 - Unknown word (hdrs) -- cpp_generator_testing_hdrs = [
Expand All @@ -211,8 +213,8 @@ Lines:
./generator/internal/codegen_utils.cc:59:18 - Unknown word (Googleapis) -- Status ProcessArgGoogleapisCommitHash(
./generator/internal/codegen_utils_test.cc:54:22 - Unknown word (baaaaa) -- EXPECT_EQ("foo_bar_baaaaa", CamelCaseToSnakeCase
./generator/internal/codegen_utils_test.cc:54:59 - Unknown word (BAAAAA) -- CamelCaseToSnakeCase("fooBarBAAAAA"));
./generator/internal/descriptor_utils.cc:374:8 - Unknown word (smatch) -- std::smatch match;
./generator/internal/descriptor_utils.cc:54:27 - Unknown word (CPPTYPE) -- case FieldDescriptor::CPPTYPE_INT32:
./generator/internal/descriptor_utils.cc:375:8 - Unknown word (smatch) -- std::smatch match;
./generator/internal/descriptor_utils.cc:55:27 - Unknown word (CPPTYPE) -- case FieldDescriptor::CPPTYPE_INT32:
./generator/internal/descriptor_utils_test.cc:745:10 - Unknown word (endcond) -- /// @endcond
./generator/internal/predicate_utils_test.cc:835:44 - Unknown word (falsefragment) -- std::string("fragment0_falsefragment1_true"));
./generator/internal/printer_test.cc:53:33 - Unknown word (Inigo) -- VarsDictionary vars{{"name", "Inigo Montoya"}};
Expand Down
2 changes: 1 addition & 1 deletion integration-tests/snapshots/mdx-js/mdx/snapshot.txt
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ Repository: mdx-js/mdx
Url: "https://github.com/mdx-js/mdx"
Args: ["--config=../../../../config/repositories/mdx-js/mdx/cspell.json","**/*.*"]
Lines:
CSpell: Files checked: 303, Issues found: 644 in 119 files
CSpell: Files checked: 297, Issues found: 644 in 119 files
exit code: 1
./docs/about.mdx:11:60 - Unknown word (Vercel) -- [Evil Rabbit][] of [Vercel][] and are
./docs/about.mdx:16:28 - Unknown word (lpine) -- John Otander][john] ([@4lpine][4lpine]) – [Components
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ Repository: microsoft/TypeScript-Website
Url: "https://github.com/microsoft/TypeScript-Website.git"
Args: ["--config=../../../../config/repositories/microsoft/TypeScript-Website/cspell.json","**/*.*"]
Lines:
CSpell: Files checked: 727, Issues found: 658 in 147 files
CSpell: Files checked: 657, Issues found: 658 in 147 files
exit code: 1
./docs/Deprecating a page.md:3:109 - Unknown word (Dont) -- deleting because [Cool URIs Dont Change](https://www
./docs/New TypeScript Version.md:115:67 - Unknown word (schemastore) -- schemastore.git /tmp/schemastore
Expand Down
2 changes: 1 addition & 1 deletion integration-tests/snapshots/pycontribs/jira/snapshot.txt
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ Repository: pycontribs/jira
Url: "https://github.com/pycontribs/jira.git"
Args: ["**/*.*"]
Lines:
CSpell: Files checked: 46, Issues found: 441 in 32 files
CSpell: Files checked: 41, Issues found: 441 in 32 files
exit code: 1
./AUTHORS.rst:3:21 - Unknown word (Contribs) -- Development Team (PyContribs)
./AUTHORS.rst:5:7 - Unknown word (Speakmon) -- - Ben Speakmon <ben.speakmon@gmail
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,5 +3,5 @@ Repository: w3c/aria-practices
Url: "https://github.com/w3c/aria-practices.git"
Args: ["**/*.*"]
Lines:
CSpell: Files checked: 330, Issues found: 0 in 0 files
CSpell: Files checked: 289, Issues found: 0 in 0 files
exit code: 0
2 changes: 1 addition & 1 deletion integration-tests/snapshots/w3c/specberus/snapshot.txt
Original file line number Diff line number Diff line change
Expand Up @@ -3,5 +3,5 @@ Repository: w3c/specberus
Url: "https://github.com/w3c/specberus.git"
Args: ["**/*.*"]
Lines:
CSpell: Files checked: 136, Issues found: 0 in 0 files
CSpell: Files checked: 130, Issues found: 0 in 0 files
exit code: 0
42 changes: 42 additions & 0 deletions packages/cspell-lib/src/LanguageIds.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -16,4 +16,46 @@ describe('Validate LanguageIds', () => {
.toArray();
expect(Object.keys(badExtensions)).toHaveLength(0);
});

test.each`
ext | expected
${'.md'} | ${false}
${'.exe'} | ${true}
${'.obj'} | ${true}
${'.dll'} | ${true}
${'.gif'} | ${true}
${'.jpeg'} | ${true}
${'.jpg'} | ${true}
${'.txt'} | ${false}
${'md'} | ${false}
${'exe'} | ${true}
${'obj'} | ${true}
${'dll'} | ${true}
${'gif'} | ${true}
${'txt'} | ${false}
`('isBinaryExt $ext => $expected', ({ ext, expected }) => {
expect(LangId.isBinaryExt(ext)).toBe(expected);
});

test.each`
ext | expected
${'.md'} | ${false}
${'.exe'} | ${true}
${'.obj'} | ${true}
${'.dll'} | ${true}
${'.gif'} | ${true}
${'.jpeg'} | ${true}
${'.jpg'} | ${true}
${'.txt'} | ${false}
${'md'} | ${false}
${'exe'} | ${true}
${'obj'} | ${true}
${'dll'} | ${true}
${'gif'} | ${true}
${'txt'} | ${false}
${'pdf'} | ${true}
${'lock'} | ${true}
`('isGeneratedExt $ext => $expected', ({ ext, expected }) => {
expect(LangId.isGeneratedExt(ext)).toBe(expected);
});
});
48 changes: 42 additions & 6 deletions packages/cspell-lib/src/LanguageIds.ts
Original file line number Diff line number Diff line change
Expand Up @@ -52,13 +52,14 @@ export const languageExtensionDefinitions: LanguageExtensionDefinitions = [
{ id: 'jade', extensions: ['.jade', '.pug'] },
{ id: 'java', extensions: ['.java', '.jav'] },
{ id: 'javascriptreact', extensions: ['.jsx'] },
{ id: 'javascript', extensions: ['.js', '.mjs', '.es6'] },
{ id: 'javascript', extensions: ['.js', '.mjs', '.es6', '.cjs'] },
{
id: 'json',
extensions: ['.json', '.jsonc', '.bowerrc', '.jshintrc', '.jscsrc', '.eslintrc', '.babelrc', '.webmanifest'],
},
{ id: 'less', extensions: ['.less'] },
{ id: 'literate haskell', extensions: ['.lhs'] },
{ id: 'lock', extensions: ['.lock'] },
{ id: 'lua', extensions: ['.lua'] },
{ id: 'makefile', extensions: ['.mk'] },
{ id: 'markdown', extensions: ['.md', '.mdown', '.markdown', '.markdn'] },
Expand Down Expand Up @@ -171,6 +172,7 @@ export const languageExtensionDefinitions: LanguageExtensionDefinitions = [
{ id: 'yaml', extensions: ['.eyaml', '.eyml', '.yaml', '.yml'] },
{ id: 'latex', extensions: ['.tex'] },
{ id: 'map', extensions: ['.map'] },
{ id: 'pdf', extensions: ['.pdf'] },

//
// Special file types used to prevent spell checking.
Expand All @@ -183,9 +185,46 @@ export const languageExtensionDefinitions: LanguageExtensionDefinitions = [
},
];

export const languageIds: string[] = languageExtensionDefinitions.map(({ id }) => id);
export type LanguageId = string;

let mapExtensionToLanguageIds: ExtensionToLanguageIdMap;
export const binaryLanguages = new Set(['binary', 'image']);

export const generatedFiles = new Set([...binaryLanguages, 'map', 'lock', 'pdf']);

export const languageIds: LanguageId[] = languageExtensionDefinitions.map(({ id }) => id);

const mapExtensionToLanguageIds: ExtensionToLanguageIdMap = buildLanguageExtensionMap(languageExtensionDefinitions);

export function isBinaryExt(ext: string): boolean {
return isBinary(getLanguagesForExt(ext));
}

export function isBinary(languageId: LanguageId | LanguageId[] | Iterable<LanguageId>): boolean {
return doesSetContainAnyOf(binaryLanguages, languageId);
}

export function isGeneratedExt(ext: string): boolean {
return isGenerated(getLanguagesForExt(ext));
}

export function isGenerated(languageId: LanguageId | LanguageId[] | Iterable<LanguageId>): boolean {
return doesSetContainAnyOf(generatedFiles, languageId);
}

function doesSetContainAnyOf(
setOfIds: Set<LanguageId>,
languageId: LanguageId | LanguageId[] | Iterable<LanguageId>
): boolean {
if (typeof languageId === 'string') {
return setOfIds.has(languageId);
}
for (const id of languageId) {
if (setOfIds.has(id)) {
return true;
}
}
return false;
}

export function buildLanguageExtensionMap(defs: LanguageExtensionDefinitions): ExtensionToLanguageIdMap {
return defs.reduce((map, def) => {
Expand All @@ -197,9 +236,6 @@ export function buildLanguageExtensionMap(defs: LanguageExtensionDefinitions): E
}

export function getLanguagesForExt(ext: string): string[] {
if (!mapExtensionToLanguageIds) {
mapExtensionToLanguageIds = buildLanguageExtensionMap(languageExtensionDefinitions);
}
return genSequence([ext, '.' + ext])
.map((ext) => mapExtensionToLanguageIds.get(ext))
.filter((a) => !!a)
Expand Down
1 change: 1 addition & 0 deletions packages/cspell-lib/src/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,7 @@ export {
spellCheckFile,
SpellCheckFileOptions,
SpellCheckFileResult,
isBinaryFile,
} from './spellCheckFile';

import * as Text from './util/text';
Expand Down
23 changes: 16 additions & 7 deletions packages/cspell-lib/src/spellCheckFile.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import { CSpellSettingsWithSourceTrace, CSpellUserSettings, PnPSettings } from '@cspell/cspell-types';
import { readFile } from 'fs-extra';
import { URI } from 'vscode-uri';
import { getLanguagesForExt } from './LanguageIds';
import { URI, Utils as UriUtils } from 'vscode-uri';
import { getLanguagesForExt as _getLanguagesForExt, isGenerated } from './LanguageIds';
import {
calcOverrideSettings,
getDefaultSettings,
Expand All @@ -14,6 +14,9 @@ import { validateText, ValidateTextOptions, ValidationIssue } from './validator'
import * as path from 'path';
import { combineTextAndLanguageSettings } from './Settings/TextDocumentSettings';
import { GlobMatcher } from 'cspell-glob';
import { memorizer } from './util/Memorizer';

const getLanguagesForExt = memorizer(_getLanguagesForExt);

export interface SpellCheckFileOptions extends ValidateTextOptions {
/**
Expand Down Expand Up @@ -261,17 +264,23 @@ export function determineFinalDocumentSettings(
};
}

function isBinaryDoc(document: Document): boolean {
return isBinaryFile(URI.parse(document.uri).fsPath, document.languageId);
export function isBinaryDoc(document: Document): boolean {
return isBinaryFile(URI.parse(document.uri), document.languageId);
}

function isBinaryFile(filename: string, languageId?: string | string[]): boolean {
const ext = path.extname(filename);
export function isBinaryFile(filename: URI, languageId?: string | string[]): boolean {
const ext = UriUtils.extname(filename);
return isBinaryExt(ext, languageId);
}

const isBinaryExt = memorizer(_isBinaryExt);

function _isBinaryExt(ext: string, languageId: string | string[] | undefined): boolean {
languageId = languageId || [];
languageId = typeof languageId === 'string' ? languageId.split(',') : languageId;
languageId = languageId.map((a) => a.trim());
const languageIds = new Set(languageId.length ? languageId : getLanguagesForExt(ext));
return languageIds.has('binary') || languageIds.has('image');
return isGenerated(languageIds);
}

export function fileToDocument(file: string): Document;
Expand Down
16 changes: 5 additions & 11 deletions packages/cspell-lib/src/util/Memorizer.ts
Original file line number Diff line number Diff line change
@@ -1,20 +1,14 @@
export type ArgType = number | string | boolean | undefined | null;
type A = ArgType;
const defaultSize = 50000;

export function memorizer<A0 extends A, T>(fn: (arg: A0) => T, size?: number): (arg0: A0) => T;
export function memorizer<A0 extends A, A1 extends A, T>(
fn: (arg: A0, arg1: A1) => T,
size?: number
): (arg0: A0, arg1: A1) => T;

export function memorizer<A0 extends A, A1 extends A, A2 extends A, T>(
export function memorizer<A0, T>(fn: (arg: A0) => T, size?: number): (arg0: A0) => T;
export function memorizer<A0, A1, T>(fn: (arg: A0, arg1: A1) => T, size?: number): (arg0: A0, arg1: A1) => T;
export function memorizer<A0, A1, A2, T>(
fn: (arg: A0, arg1: A1, arg2: A2) => T,
size?: number
): (arg0: A0, arg1: A1, arg2: A2) => T;
export function memorizer<T>(fn: (...args: ArgType[]) => T, size: number = defaultSize): (...args: ArgType[]) => T {
export function memorizer<A, T>(fn: (...args: A[]) => T, size: number = defaultSize): (...args: A[]) => T {
const cache = new Map<string, T>();
return (...args: ArgType[]) => {
return (...args: A[]) => {
const key = args.join('>!@[');
if (!cache.has(key)) {
if (cache.size >= size) {
Expand Down
3 changes: 2 additions & 1 deletion packages/cspell/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -77,7 +77,8 @@
"fs-extra": "^10.0.0",
"get-stdin": "^8.0.0",
"glob": "^7.1.7",
"strip-ansi": "^6.0.0"
"strip-ansi": "^6.0.0",
"vscode-uri": "^3.0.2"
},
"engines": {
"node": ">=12.0.0"
Expand Down
Loading

0 comments on commit a948808

Please sign in to comment.