#!/usr/bin/env python3 # Copyright (c) 2026, the Dart project authors. Please see the AUTHORS file # for details. All rights reserved. Use of this source code is governed by a # BSD-style license that can be found in the LICENSE file. """Analysis server specific presubmit script. See http://dev.chromium.org/developers/how-tos/depottools/presubmit-scripts for more details about the presubmit API built into gcl. """ import importlib.util import importlib.machinery import os.path import subprocess USE_PYTHON3 = True PRESUBMIT_VERSION = '2.0.0' def load_source(modname, filename): loader = importlib.machinery.SourceFileLoader(modname, filename) spec = importlib.util.spec_from_file_location(modname, filename, loader=loader) module = importlib.util.module_from_spec(spec) # The module is always executed and not cached in sys.modules. # Uncomment the following line to cache the module. # sys.modules[module.__name__] = module loader.exec_module(module) return module def CheckSorted(input_api, output_api): local_root = input_api.change.RepositoryRoot() utils = load_source('utils', os.path.join(local_root, 'tools', 'utils.py')) dart = os.path.join(utils.CheckedInSdkPath(), 'bin', 'dart') windows = utils.GuessOS() == 'win32' if windows: dart += '.exe' sourceArgs = [ arg for git_file in input_api.AffectedTestableFiles() for arg in ('-s', git_file.AbsoluteLocalPath()) ] result = subprocess.run([ dart, 'run', os.path.join(local_root, 'pkg', 'analysis_server', 'test', 'verify_sorted_test.dart'), ] + sourceArgs, capture_output=True) if result.returncode != 0: unsorted_file_details = [ line for line in result.stdout.decode('utf-8').splitlines() if 'Unsorted file' in line ] if len(unsorted_file_details) == 0: return [ output_api.PresubmitError('\n'.join([ 'CheckSorted: could not parse output of verify_sorted_test.dart', 'Stdout:', result.stdout.decode('utf-8'), '', 'Stderr:', result.stderr.decode('utf-8') ])) ] return [ output_api.PresubmitError('\n'.join(unsorted_file_details)) ] return []