mirror of
https://github.com/pre-commit/pre-commit.git
synced 2026-02-17 16:24:40 +04:00
Dart introduced sound null safety in version 2.12.0, and as of Dart 3,
null safety is mandatory. Older Dart SDKs allowed both pre-null safety
and null-safe packages, but modern Dart SDKs, where most source code is
null-safe, now reject pre-null safety packages.
The current `pubspec.yaml` template with `sdk: '>=2.10.0'` is
incompatible with recent Dart SDKs, leading to the following error:
An unexpected error has occurred: CalledProcessError: command: ('/path/to/dart-sdk/bin/dart', 'pub', 'get')
return code: 65
stdout:
Resolving dependencies...
stderr:
The lower bound of "sdk: '>=2.10.0'" must be 2.12.0'
or higher to enable null safety.
The current Dart SDK (3.8.3) only supports null safety.
For details, see https://dart.dev/null-safety
To ensure compatibility with the modern Dart ecosystem, this commit
updates the minimum Dart SDK version to 2.12.0 or higher,
which implicitly supports null safety.
Additionally, `testing/get-dart.sh` has been updated to verify that
the pre-commit hook functions correctly with the latest Dart versions.
62 lines
1.4 KiB
Python
62 lines
1.4 KiB
Python
from __future__ import annotations
|
|
|
|
import re_assert
|
|
|
|
from pre_commit.languages import dart
|
|
from pre_commit.store import _make_local_repo
|
|
from testing.language_helpers import run_language
|
|
|
|
|
|
def test_dart(tmp_path):
|
|
pubspec_yaml = '''\
|
|
environment:
|
|
sdk: '>=2.12.0 <4.0.0'
|
|
|
|
name: hello_world_dart
|
|
|
|
executables:
|
|
hello-world-dart:
|
|
|
|
dependencies:
|
|
ansicolor: ^2.0.1
|
|
'''
|
|
hello_world_dart_dart = '''\
|
|
import 'package:ansicolor/ansicolor.dart';
|
|
|
|
void main() {
|
|
AnsiPen pen = new AnsiPen()..red();
|
|
print("hello hello " + pen("world"));
|
|
}
|
|
'''
|
|
tmp_path.joinpath('pubspec.yaml').write_text(pubspec_yaml)
|
|
bin_dir = tmp_path.joinpath('bin')
|
|
bin_dir.mkdir()
|
|
bin_dir.joinpath('hello-world-dart.dart').write_text(hello_world_dart_dart)
|
|
|
|
expected = (0, b'hello hello world\n')
|
|
assert run_language(tmp_path, dart, 'hello-world-dart') == expected
|
|
|
|
|
|
def test_dart_additional_deps(tmp_path):
|
|
_make_local_repo(str(tmp_path))
|
|
|
|
ret = run_language(
|
|
tmp_path,
|
|
dart,
|
|
'hello-world-dart',
|
|
deps=('hello_world_dart',),
|
|
)
|
|
assert ret == (0, b'hello hello world\n')
|
|
|
|
|
|
def test_dart_additional_deps_versioned(tmp_path):
|
|
_make_local_repo(str(tmp_path))
|
|
|
|
ret, out = run_language(
|
|
tmp_path,
|
|
dart,
|
|
'secure-random -l 4 -b 16',
|
|
deps=('encrypt:5.0.0',),
|
|
)
|
|
assert ret == 0
|
|
re_assert.Matches('^[a-f0-9]{8}\n$').assert_matches(out.decode())
|