diff --git a/.clang-format b/.clang-format new file mode 100644 index 000000000..e449561dc --- /dev/null +++ b/.clang-format @@ -0,0 +1,298 @@ +--- +Language: Cpp +BasedOnStyle: Google +AccessModifierOffset: -1 +AlignAfterOpenBracket: Align +AlignArrayOfStructures: None +AlignConsecutiveAssignments: + Enabled: false + AcrossEmptyLines: false + AcrossComments: false + AlignCompound: false + PadOperators: true +AlignConsecutiveBitFields: + Enabled: false + AcrossEmptyLines: false + AcrossComments: false + AlignCompound: false + PadOperators: false +AlignConsecutiveDeclarations: + Enabled: false + AcrossEmptyLines: false + AcrossComments: false + AlignCompound: false + PadOperators: false +AlignConsecutiveMacros: + Enabled: false + AcrossEmptyLines: false + AcrossComments: false + AlignCompound: false + PadOperators: false +AlignConsecutiveShortCaseStatements: + Enabled: false + AcrossEmptyLines: false + AcrossComments: false + AlignCaseColons: false +AlignEscapedNewlines: Left +AlignOperands: Align +AlignTrailingComments: + Kind: Always + OverEmptyLines: 0 +AllowAllArgumentsOnNextLine: true +AllowAllParametersOfDeclarationOnNextLine: true +AllowShortBlocksOnASingleLine: Never +AllowShortCaseLabelsOnASingleLine: false +AllowShortEnumsOnASingleLine: true +AllowShortFunctionsOnASingleLine: Inline +AllowShortIfStatementsOnASingleLine: Never +AllowShortLambdasOnASingleLine: All +AllowShortLoopsOnASingleLine: false +AlwaysBreakAfterDefinitionReturnType: None +AlwaysBreakAfterReturnType: None +AlwaysBreakBeforeMultilineStrings: true +AlwaysBreakTemplateDeclarations: Yes +AttributeMacros: + - __capability +BinPackArguments: true +BinPackParameters: true +BitFieldColonSpacing: Both +BraceWrapping: + AfterCaseLabel: false + AfterClass: false + AfterControlStatement: Never + AfterEnum: false + AfterExternBlock: false + AfterFunction: false + AfterNamespace: false + AfterObjCDeclaration: false + AfterStruct: false + AfterUnion: false + BeforeCatch: false + BeforeElse: false + BeforeLambdaBody: false + BeforeWhile: false + IndentBraces: false + SplitEmptyFunction: true + SplitEmptyRecord: true + SplitEmptyNamespace: true +BreakAfterAttributes: Always +BreakAfterJavaFieldAnnotations: false +BreakArrays: true +BreakBeforeBinaryOperators: None +BreakBeforeConceptDeclarations: Always +BreakBeforeBraces: Attach +BreakBeforeInlineASMColon: OnlyMultiline +BreakBeforeTernaryOperators: true +BreakConstructorInitializers: BeforeColon +BreakInheritanceList: BeforeColon +BreakStringLiterals: true +ColumnLimit: 80 +CommentPragmas: '^ IWYU pragma:' +CompactNamespaces: false +ConstructorInitializerIndentWidth: 4 +ContinuationIndentWidth: 4 +Cpp11BracedListStyle: true +DerivePointerAlignment: false +DisableFormat: false +EmptyLineAfterAccessModifier: Never +EmptyLineBeforeAccessModifier: LogicalBlock +ExperimentalAutoDetectBinPacking: false +FixNamespaceComments: true +ForEachMacros: + - foreach + - Q_FOREACH + - BOOST_FOREACH +IfMacros: + - KJ_IF_MAYBE +IncludeBlocks: Regroup +IncludeCategories: + # C standard library headers + # + # https://en.cppreference.com/w/cpp/header: + # * C compatibility headers + # * Special C compatibility headers + # * Empty C headers + # * Meaningless C headers + # * Unsupported C headers + - Regex: '^<(assert\.h|ctype\.h|errno\.h|fenv\.h|float\.h|inttypes\.h|limits\.h|locale\.h|math\.h|setjmp\.h|signal\.h|stdarg\.h|stddef\.h|stdint\.h|stdio\.h|stdlib\.h|string\.h|time\.h|uchar\.h|wchar\.h|wctype\.h|stdatomic\.h|ccomplex|complex\.h|ctgmath|tgmath\.h|ciso646|cstdalign|cstdbool|iso646\.h|stdalign\.h|stdbool\.h|stdatomic\.h|stdnoreturn\.h|threads\.h)>' + Priority: 1 + SortPriority: 0 + # Linux system headers + - Regex: '^<((arpa\/|linux\/|net/|netinet\/|sys\/).*|arm_neon\.h|dirent\.h|dlfcn\.h|fcntl\.h|ifaddrs\.h|jni\.h|libgen\.h|poll\.h|spawn\.h|termios\.h|unistd\.h)>' + Priority: 1 + SortPriority: 1 + # winsock2.h + - Regex: '^' + Priority: 1 + SortPriority: 2 + # windows.h + - Regex: '^' + Priority: 1 + SortPriority: 3 + # Windows def.h headers + - Regex: '^<(comdef\.h|ws2def\.h|ws2ipdef\.h)>' + Priority: 1 + SortPriority: 4 + # Windows system headers + - Regex: '^<(dbghelp\.h|dbt\.h|delayimp\.h|dshow\.h|io\.h|iphlpapi\.h|ks\.h|ksmedia\.h|memoryapi\.h|mfapi\.h|mferror\.h|mfidl\.h|mfreadwrite\.h|netioapi\.h|ntstatus\.h|shellapi\.h|shlobj\.h|shlwapi\.h|sysinfoapi\.h|windns\.h|windowsx\.h|winternl\.h|ws2tcpip\.h)>' + Priority: 1 + SortPriority: 5 + # C++ standard library headers (lowercase and underscores with no .h suffix) + - Regex: '^<([a-z_]+|cxxabi\.h)>' + Priority: 2 + SortPriority: 6 + # Other library headers (angle brackets) + - Regex: '^<.*' + Priority: 3 + SortPriority: 7 + # Project headers (double quotes) + - Regex: '^".*' + Priority: 4 + SortPriority: 8 +IncludeIsMainRegex: '(Test|_bench|_test)?$' +IncludeIsMainSourceRegex: '' +IndentAccessModifiers: false +IndentCaseBlocks: false +IndentCaseLabels: true +IndentExternBlock: AfterExternBlock +IndentGotoLabels: true +IndentPPDirectives: None +IndentRequiresClause: true +IndentWidth: 2 +IndentWrappedFunctionNames: false +InsertBraces: false +InsertNewlineAtEOF: false +InsertTrailingCommas: None +IntegerLiteralSeparator: + Binary: 0 + BinaryMinDigits: 0 + Decimal: 0 + DecimalMinDigits: 0 + Hex: 0 + HexMinDigits: 0 +JavaScriptQuotes: Leave +JavaScriptWrapImports: true +KeepEmptyLinesAtTheStartOfBlocks: false +KeepEmptyLinesAtEOF: false +LambdaBodyIndentation: Signature +LineEnding: DeriveLF +MacroBlockBegin: '' +MacroBlockEnd: '' +Macros: + - 'HAL_ENUM(name)=enum name' +MaxEmptyLinesToKeep: 1 +NamespaceIndentation: None +ObjCBinPackProtocolList: Never +ObjCBlockIndentWidth: 2 +ObjCBreakBeforeNestedBlockParam: true +ObjCSpaceAfterProperty: false +ObjCSpaceBeforeProtocolList: true +PackConstructorInitializers: NextLine +PenaltyBreakAssignment: 2 +PenaltyBreakBeforeFirstCallParameter: 1 +PenaltyBreakComment: 300 +PenaltyBreakFirstLessLess: 120 +PenaltyBreakOpenParenthesis: 0 +PenaltyBreakString: 1000 +PenaltyBreakTemplateDeclaration: 10 +PenaltyExcessCharacter: 1000000 +PenaltyIndentedWhitespace: 0 +PenaltyReturnTypeOnItsOwnLine: 200 +PointerAlignment: Left +PPIndentWidth: -1 +QualifierAlignment: Leave +RawStringFormats: + - Language: Cpp + Delimiters: + - cc + - CC + - cpp + - Cpp + - CPP + - 'c++' + - 'C++' + CanonicalDelimiter: '' + BasedOnStyle: google + - Language: TextProto + Delimiters: + - pb + - PB + - proto + - PROTO + EnclosingFunctions: + - EqualsProto + - EquivToProto + - PARSE_PARTIAL_TEXT_PROTO + - PARSE_TEST_PROTO + - PARSE_TEXT_PROTO + - ParseTextOrDie + - ParseTextProtoOrDie + - ParseTestProto + - ParsePartialTestProto + CanonicalDelimiter: pb + BasedOnStyle: google +ReferenceAlignment: Pointer +ReflowComments: true +RemoveBracesLLVM: false +RemoveParentheses: Leave +RemoveSemicolon: false +RequiresClausePosition: OwnLine +RequiresExpressionIndentation: OuterScope +SeparateDefinitionBlocks: Leave +ShortNamespaceLines: 1 +SortIncludes: true +SortJavaStaticImport: Before +SortUsingDeclarations: LexicographicNumeric +SpaceAfterCStyleCast: false +SpaceAfterLogicalNot: false +SpaceAfterTemplateKeyword: true +SpaceAroundPointerQualifiers: Default +SpaceBeforeAssignmentOperators: true +SpaceBeforeCaseColon: false +SpaceBeforeCpp11BracedList: false +SpaceBeforeCtorInitializerColon: true +SpaceBeforeInheritanceColon: true +SpaceBeforeJsonColon: false +SpaceBeforeParens: ControlStatements +SpaceBeforeParensOptions: + AfterControlStatements: true + AfterForeachMacros: true + AfterFunctionDefinitionName: false + AfterFunctionDeclarationName: false + AfterIfMacros: true + AfterOverloadedOperator: false + AfterRequiresInClause: false + AfterRequiresInExpression: false + BeforeNonEmptyParentheses: false +SpaceBeforeRangeBasedForLoopColon: true +SpaceBeforeSquareBrackets: false +SpaceInEmptyBlock: false +SpacesBeforeTrailingComments: 2 +SpacesInAngles: Never +SpacesInContainerLiterals: true +SpacesInLineCommentPrefix: + Minimum: 1 + Maximum: -1 +SpacesInParens: Never +SpacesInParensOptions: + InCStyleCasts: false + InConditionalStatements: false + InEmptyParentheses: false + Other: false +SpacesInSquareBrackets: false +Standard: c++20 +StatementAttributeLikeMacros: + - Q_EMIT +StatementMacros: + - Q_UNUSED + - QT_REQUIRE_VERSION +TabWidth: 8 +UseTab: Never +VerilogBreakBetweenInstancePorts: true +WhitespaceSensitiveMacros: + - BOOST_PP_STRINGIZE + - CF_SWIFT_NAME + - NS_SWIFT_NAME + - PP_STRINGIZE + - STRINGIZE +... diff --git a/.github/workflows/dist.yml b/.github/workflows/dist.yml index 08db2423a..40985f740 100644 --- a/.github/workflows/dist.yml +++ b/.github/workflows/dist.yml @@ -48,6 +48,12 @@ jobs: runs-on: ubuntu-latest steps: - uses: actions/checkout@v6 + with: + fetch-depth: 0 + - name: Fetch all history and metadata + run: | + git checkout -b pr + git branch -f main origin/main - uses: psf/black@stable - uses: actions/setup-python@v6 @@ -76,6 +82,31 @@ jobs: run: | ./rdev.sh ci check-tag + - name: Install wpiformat + run: python -m pip install wpiformat==2026.64 + + - name: Run wpiformat + run: wpiformat + + - name: Check output + run: git --no-pager diff --exit-code HEAD + - name: Generate diff + run: git diff HEAD > wpiformat-fixes.patch + if: ${{ failure() }} + - uses: actions/upload-artifact@v7 + with: + archive: false + path: wpiformat-fixes.patch + if: ${{ failure() }} + + - name: Write to job summary + run: | + echo '```diff' >> $GITHUB_STEP_SUMMARY + cat wpiformat-fixes.patch >> $GITHUB_STEP_SUMMARY + echo '' >> $GITHUB_STEP_SUMMARY + echo '```' >> $GITHUB_STEP_SUMMARY + if: ${{ failure() }} + # # Build pure wheels first # diff --git a/.wpiformat b/.wpiformat new file mode 100644 index 000000000..3aefecb3e --- /dev/null +++ b/.wpiformat @@ -0,0 +1,13 @@ +generatedFileExclude { + .*/type_casters/ + .*\.py$ + .*\.py$ +} + +modifiableFileExclude { + subprojects/robotpy-cscore/cscore/cvnp +} + +licenseUpdateExclude { + .* +} diff --git a/.wpiformat-license b/.wpiformat-license new file mode 100644 index 000000000..e69de29bb diff --git a/README.md b/README.md index 386839322..ef0236225 100644 --- a/README.md +++ b/README.md @@ -73,4 +73,3 @@ We only support cross-compiling for RoboRIO and raspbian via the WPILib docker build containers. See `.github/workflows/dist.yml`'s `cross-build` job for the name of the containers and the steps that must be run inside the container. - diff --git a/docs/.gitignore b/docs/.gitignore index 8d41ac2c0..2cbebde06 100644 --- a/docs/.gitignore +++ b/docs/.gitignore @@ -92,4 +92,4 @@ /romi/ /xrp.rst -/xrp/ \ No newline at end of file +/xrp/ diff --git a/docs/api.rst b/docs/api.rst index 004877d70..8343e3be4 100644 --- a/docs/api.rst +++ b/docs/api.rst @@ -32,7 +32,7 @@ CSCore API .. toctree:: :maxdepth: 1 - + cscore cscore.imagewriter @@ -52,7 +52,7 @@ WPIMath API ----------- WPIMath provides a comprehensive set of mathematical functions and utilities -tailored to the needs of robotics applications. +tailored to the needs of robotics applications. .. toctree:: :maxdepth: 1 @@ -84,7 +84,7 @@ WPIUtil API ----------- The C++ version of the WPIUtil library contains various utilities that -user code and WPILib can use to accomplish common tasks that aren't +user code and WPILib can use to accomplish common tasks that aren't necessarily provided by the C++ standard library. Much of the content in WPIUtil is not useful for Python teams, so we @@ -102,7 +102,7 @@ of things in it. .. _hal_api: -HAL API +HAL API ------- The WPILib Hardware Abstraction Layer (HAL) is used by WPILib to interact @@ -141,7 +141,7 @@ These are special devices for use with the XRP product. Commands V2 API --------------- -Objects in this package allow you to implement a robot using the +Objects in this package allow you to implement a robot using the latest version of WPILib's Command-based programming. Command based programming is a design pattern to help you organize your robot programs, by organizing your robot program into components diff --git a/examples/CONTRIBUTING.md b/examples/CONTRIBUTING.md index 500563380..f35475b97 100644 --- a/examples/CONTRIBUTING.md +++ b/examples/CONTRIBUTING.md @@ -138,7 +138,7 @@ class SomeClass: def __init__(self): """ This describes what the constructor does - """ + """ def my_function(self, a: int) -> int: """ @@ -152,7 +152,7 @@ class SomeClass: Command-based robot specific things ----------------------------------- -We use `commands2.TimedCommandRobot` instead of TimedRobot. It provides a +We use `commands2.TimedCommandRobot` instead of TimedRobot. It provides a `robot_periodic` method for you, so it doesn't need to be included from the java code unless robot_periodic function does something other than run the command scheduler. diff --git a/examples/cscore/CameraServer.java b/examples/cscore/CameraServer.java index af9bc72a2..c16dfe61c 100644 --- a/examples/cscore/CameraServer.java +++ b/examples/cscore/CameraServer.java @@ -12,10 +12,10 @@ /** * Provides a way to launch an out of process Python robotpy-cscore based * camera service instance from a Java robot program. - * + * * You must have Python and python36-robotpy-cscore installed, or this * just simply won't work. Refer to the RobotPy documentation for details. - * + * * The python code should be a single file, and must compiled into your java * jar file. If your file was in the src directory as 'vision.py', you would * add this to the 'project' section of build.xml: @@ -45,18 +45,17 @@ // // public class CameraServer { - public static String visionPath = "/home/lvuser/vision.py"; private static boolean isAlive = false; private static boolean launched = false; - + /** * @return true if the vision process is (probably) alive */ public static boolean isAlive() { return isAlive; } - + /** * Launches an embedded resource called "vision.py" which contains a * "main" function. @@ -64,11 +63,11 @@ public static boolean isAlive() { public static void startPythonVision() { startPythonVision("/vision.py", "main"); } - + /** * Call this function to launch a python vision program in an external * process. - * + * * @param resource The resource built into the jar (see above), such as /vision.py * @param functionName The name of the function to call */ @@ -77,9 +76,9 @@ public static void startPythonVision(String resource, String functionName) { if (launched) { return; } - + launched = true; - + System.out.println("Launching python process from " + resource); try { @@ -88,35 +87,35 @@ public static void startPythonVision(String resource, String functionName) { if (is == null) { throw new IOException("Resource " + resource + " not found"); } - + Files.copy(is, Paths.get(visionPath), StandardCopyOption.REPLACE_EXISTING); - + // launch the process ProcessBuilder pb = new ProcessBuilder(); pb.command("/usr/local/bin/python3", "-m", "cscore", visionPath + ":" + functionName); - + // we open a pipe to it so that when the robot program exits, the child dies pb.redirectInput(Redirect.PIPE); - + // and let us see stdout/stderr pb.redirectOutput(Redirect.INHERIT); pb.redirectError(Redirect.INHERIT); - + final Process p = pb.start(); isAlive = true; - + Thread t = new Thread(()-> { try { p.waitFor(); } catch (InterruptedException e) { // empty } - + isAlive = false; }); t.setDaemon(true); t.start(); - + } catch (IOException e) { System.out.println("Error launching vision! " + e.toString()); //if (!DriverStation.getInstance().isFMSAttached()) { diff --git a/examples/robot/.gitignore b/examples/robot/.gitignore index cb80cf5f4..d4d24ccad 100644 --- a/examples/robot/.gitignore +++ b/examples/robot/.gitignore @@ -19,4 +19,4 @@ simgui*.json opkg_cache pip_cache -networktables.* \ No newline at end of file +networktables.* diff --git a/subprojects/pyntcore/.gitignore b/subprojects/pyntcore/.gitignore index 7c544c7a1..9f82796ee 100644 --- a/subprojects/pyntcore/.gitignore +++ b/subprojects/pyntcore/.gitignore @@ -14,4 +14,4 @@ __pycache__ /ntcore/_init__ntcore.py /ntcore/ntcore.pc /ntcore/version.py -/ntcore/trampolines \ No newline at end of file +/ntcore/trampolines diff --git a/subprojects/pyntcore/tests/requirements.txt b/subprojects/pyntcore/tests/requirements.txt index 55b033e90..e079f8a60 100644 --- a/subprojects/pyntcore/tests/requirements.txt +++ b/subprojects/pyntcore/tests/requirements.txt @@ -1 +1 @@ -pytest \ No newline at end of file +pytest diff --git a/subprojects/robotpy-apriltag/.gitignore b/subprojects/robotpy-apriltag/.gitignore index ec19347c6..b707602be 100644 --- a/subprojects/robotpy-apriltag/.gitignore +++ b/subprojects/robotpy-apriltag/.gitignore @@ -15,4 +15,4 @@ __pycache__ /robotpy_apriltag/_init__apriltag.py /robotpy_apriltag/apriltag.pc /robotpy_apriltag/version.py -/robotpy_apriltag/trampolines \ No newline at end of file +/robotpy_apriltag/trampolines diff --git a/subprojects/robotpy-apriltag/tests/requirements.txt b/subprojects/robotpy-apriltag/tests/requirements.txt index d184d44b4..b9e5cbe92 100644 --- a/subprojects/robotpy-apriltag/tests/requirements.txt +++ b/subprojects/robotpy-apriltag/tests/requirements.txt @@ -1,2 +1,2 @@ pytest -opencv-python~=4.6 \ No newline at end of file +opencv-python~=4.6 diff --git a/subprojects/robotpy-cscore/.gittrack b/subprojects/robotpy-cscore/.gittrack index 2b0260e92..c44cba258 100644 --- a/subprojects/robotpy-cscore/.gittrack +++ b/subprojects/robotpy-cscore/.gittrack @@ -3,4 +3,3 @@ validation_root = cscore exclude_commits_file = .gittrackexclude upstream_root = ../allwpilib/cameraserver/src/main/java upstream_commit = 60c2f5905191c25c3e4ff2fc735cec2ca5f012bf - diff --git a/subprojects/robotpy-cscore/LICENSE b/subprojects/robotpy-cscore/LICENSE index d34ec946e..f5c3a2243 100644 --- a/subprojects/robotpy-cscore/LICENSE +++ b/subprojects/robotpy-cscore/LICENSE @@ -14,8 +14,8 @@ modification, are permitted provided that the following conditions are met: THIS SOFTWARE IS PROVIDED BY ROBOTPY AND CONTRIBUTORS``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY NONINFRINGEMENT AND FITNESS FOR A PARTICULAR -PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ROBOTPY OR CONTRIBUTORS BE LIABLE FOR +WARRANTIES OF MERCHANTABILITY NONINFRINGEMENT AND FITNESS FOR A PARTICULAR +PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ROBOTPY OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND diff --git a/subprojects/robotpy-cscore/README.rst b/subprojects/robotpy-cscore/README.rst index d7eca153b..cfbef79c8 100644 --- a/subprojects/robotpy-cscore/README.rst +++ b/subprojects/robotpy-cscore/README.rst @@ -1,7 +1,7 @@ robotpy-cscore ============== -These are python bindings for the cscore library, which is a high performance +These are python bindings for the cscore library, which is a high performance library used in the FIRST Robotics competition to serve video to/from robots. However, the core library is suitable for use in other applications, and is comparable to something like mjpg-streamer. diff --git a/subprojects/robotpy-cscore/cscore/src/main.cpp b/subprojects/robotpy-cscore/cscore/src/main.cpp index 15fb40152..3813ee780 100644 --- a/subprojects/robotpy-cscore/cscore/src/main.cpp +++ b/subprojects/robotpy-cscore/cscore/src/main.cpp @@ -4,16 +4,16 @@ #include "wpi/cs/cscore_cpp.hpp" SEMIWRAP_PYBIND11_MODULE(m) { - initWrapper(m); + initWrapper(m); - static int unused; // the capsule needs something to reference - py::capsule cleanup(&unused, [](void *) { - // don't release gil until after calling this - wpi::cs::SetDefaultLogger(20 /* WPI_LOG_INFO */); - - // but this MUST release the gil, or deadlock may occur - py::gil_scoped_release __release; - CS_Shutdown(); - }); - m.add_object("_cleanup", cleanup); + static int unused; // the capsule needs something to reference + py::capsule cleanup(&unused, [](void*) { + // don't release gil until after calling this + wpi::cs::SetDefaultLogger(20 /* WPI_LOG_INFO */); + + // but this MUST release the gil, or deadlock may occur + py::gil_scoped_release __release; + CS_Shutdown(); + }); + m.add_object("_cleanup", cleanup); } diff --git a/subprojects/robotpy-cscore/semiwrap/CvSource.yml b/subprojects/robotpy-cscore/semiwrap/CvSource.yml index 44bd4b147..4388fbb5b 100644 --- a/subprojects/robotpy-cscore/semiwrap/CvSource.yml +++ b/subprojects/robotpy-cscore/semiwrap/CvSource.yml @@ -14,4 +14,3 @@ classes: overloads: cv::Mat&: cv::Mat&, wpi::util::PixelFormat, bool: - \ No newline at end of file diff --git a/subprojects/robotpy-cscore/semiwrap/HttpCamera.yml b/subprojects/robotpy-cscore/semiwrap/HttpCamera.yml index 8947fd3a1..4762f9ddc 100644 --- a/subprojects/robotpy-cscore/semiwrap/HttpCamera.yml +++ b/subprojects/robotpy-cscore/semiwrap/HttpCamera.yml @@ -20,4 +20,4 @@ classes: std::span: std::initializer_list: ignore: true - GetUrls: \ No newline at end of file + GetUrls: diff --git a/subprojects/robotpy-cscore/semiwrap/ImageSink.yml b/subprojects/robotpy-cscore/semiwrap/ImageSink.yml index aec78ab6e..10398c08a 100644 --- a/subprojects/robotpy-cscore/semiwrap/ImageSink.yml +++ b/subprojects/robotpy-cscore/semiwrap/ImageSink.yml @@ -6,4 +6,4 @@ classes: SetDescription: GetError: SetEnabled: - ImageSink: \ No newline at end of file + ImageSink: diff --git a/subprojects/robotpy-cscore/semiwrap/ImageSource.yml b/subprojects/robotpy-cscore/semiwrap/ImageSource.yml index d296431aa..dd6887048 100644 --- a/subprojects/robotpy-cscore/semiwrap/ImageSource.yml +++ b/subprojects/robotpy-cscore/semiwrap/ImageSource.yml @@ -15,4 +15,4 @@ classes: const VideoProperty&, std::span: const VideoProperty&, std::initializer_list: ignore: true - ImageSource: \ No newline at end of file + ImageSource: diff --git a/subprojects/robotpy-cscore/semiwrap/MjpegServer.yml b/subprojects/robotpy-cscore/semiwrap/MjpegServer.yml index 5e8949d66..b8f7ce94f 100644 --- a/subprojects/robotpy-cscore/semiwrap/MjpegServer.yml +++ b/subprojects/robotpy-cscore/semiwrap/MjpegServer.yml @@ -13,4 +13,4 @@ classes: SetResolution: SetFPS: SetCompression: - SetDefaultCompression: \ No newline at end of file + SetDefaultCompression: diff --git a/subprojects/robotpy-cscore/semiwrap/UsbCamera.yml b/subprojects/robotpy-cscore/semiwrap/UsbCamera.yml index dc0a7d3c7..bfd2c452c 100644 --- a/subprojects/robotpy-cscore/semiwrap/UsbCamera.yml +++ b/subprojects/robotpy-cscore/semiwrap/UsbCamera.yml @@ -11,4 +11,4 @@ classes: SetPath: GetPath: GetInfo: - SetConnectVerbose: \ No newline at end of file + SetConnectVerbose: diff --git a/subprojects/robotpy-cscore/semiwrap/UsbCameraInfo.yml b/subprojects/robotpy-cscore/semiwrap/UsbCameraInfo.yml index 5c8b7c366..521ef3ed0 100644 --- a/subprojects/robotpy-cscore/semiwrap/UsbCameraInfo.yml +++ b/subprojects/robotpy-cscore/semiwrap/UsbCameraInfo.yml @@ -6,4 +6,4 @@ classes: name: otherPaths: vendorId: - productId: \ No newline at end of file + productId: diff --git a/subprojects/robotpy-cscore/semiwrap/VideoCamera.yml b/subprojects/robotpy-cscore/semiwrap/VideoCamera.yml index d3baabe30..b10d7ce83 100644 --- a/subprojects/robotpy-cscore/semiwrap/VideoCamera.yml +++ b/subprojects/robotpy-cscore/semiwrap/VideoCamera.yml @@ -15,4 +15,4 @@ classes: SetWhiteBalanceManual: SetExposureAuto: SetExposureHoldCurrent: - SetExposureManual: \ No newline at end of file + SetExposureManual: diff --git a/subprojects/robotpy-cscore/semiwrap/VideoEvent.yml b/subprojects/robotpy-cscore/semiwrap/VideoEvent.yml index febd959a5..e13a3a5ff 100644 --- a/subprojects/robotpy-cscore/semiwrap/VideoEvent.yml +++ b/subprojects/robotpy-cscore/semiwrap/VideoEvent.yml @@ -4,4 +4,4 @@ classes: methods: GetSource: GetSink: - GetProperty: \ No newline at end of file + GetProperty: diff --git a/subprojects/robotpy-cscore/semiwrap/VideoListener.yml b/subprojects/robotpy-cscore/semiwrap/VideoListener.yml index 57823add4..ccb185221 100644 --- a/subprojects/robotpy-cscore/semiwrap/VideoListener.yml +++ b/subprojects/robotpy-cscore/semiwrap/VideoListener.yml @@ -4,4 +4,4 @@ classes: VideoListener: overloads: "": - std::function, int, bool: \ No newline at end of file + std::function, int, bool: diff --git a/subprojects/robotpy-cscore/semiwrap/VideoMode.yml b/subprojects/robotpy-cscore/semiwrap/VideoMode.yml index 6ed04efe7..a49730c2c 100644 --- a/subprojects/robotpy-cscore/semiwrap/VideoMode.yml +++ b/subprojects/robotpy-cscore/semiwrap/VideoMode.yml @@ -24,4 +24,3 @@ classes: .def_readwrite("width", &VideoMode::width) .def_readwrite("height", &VideoMode::height) .def_readwrite("fps", &VideoMode::fps) - \ No newline at end of file diff --git a/subprojects/robotpy-cscore/semiwrap/VideoProperty.yml b/subprojects/robotpy-cscore/semiwrap/VideoProperty.yml index 12948a76f..3c16470ac 100644 --- a/subprojects/robotpy-cscore/semiwrap/VideoProperty.yml +++ b/subprojects/robotpy-cscore/semiwrap/VideoProperty.yml @@ -24,4 +24,4 @@ classes: wpi::util::SmallVectorImpl& [const]: SetString: GetChoices: - GetLastStatus: \ No newline at end of file + GetLastStatus: diff --git a/subprojects/robotpy-cscore/semiwrap/VideoSink.yml b/subprojects/robotpy-cscore/semiwrap/VideoSink.yml index fd931e5aa..fea3cdd6c 100644 --- a/subprojects/robotpy-cscore/semiwrap/VideoSink.yml +++ b/subprojects/robotpy-cscore/semiwrap/VideoSink.yml @@ -24,4 +24,4 @@ classes: GetSource: GetSourceProperty: GetLastStatus: - EnumerateSinks: \ No newline at end of file + EnumerateSinks: diff --git a/subprojects/robotpy-cscore/semiwrap/VideoSource.yml b/subprojects/robotpy-cscore/semiwrap/VideoSource.yml index a9abf52cc..16143714d 100644 --- a/subprojects/robotpy-cscore/semiwrap/VideoSource.yml +++ b/subprojects/robotpy-cscore/semiwrap/VideoSource.yml @@ -42,4 +42,4 @@ classes: EnumerateVideoModes: GetLastStatus: EnumerateSinks: - EnumerateSources: \ No newline at end of file + EnumerateSources: diff --git a/subprojects/robotpy-cscore/semiwrap/cscore_cpp.yml b/subprojects/robotpy-cscore/semiwrap/cscore_cpp.yml index 888685231..86d6d024d 100644 --- a/subprojects/robotpy-cscore/semiwrap/cscore_cpp.yml +++ b/subprojects/robotpy-cscore/semiwrap/cscore_cpp.yml @@ -239,4 +239,4 @@ functions: GetHostname: ignore: true GetNetworkInterfaces: - ignore: true \ No newline at end of file + ignore: true diff --git a/subprojects/robotpy-cscore/tests/requirements.txt b/subprojects/robotpy-cscore/tests/requirements.txt index 107957bd5..e9a91b711 100644 --- a/subprojects/robotpy-cscore/tests/requirements.txt +++ b/subprojects/robotpy-cscore/tests/requirements.txt @@ -1,2 +1,2 @@ pytest -numpy \ No newline at end of file +numpy diff --git a/subprojects/robotpy-hal/.gitignore b/subprojects/robotpy-hal/.gitignore index d6452b7d5..fd371d24c 100644 --- a/subprojects/robotpy-hal/.gitignore +++ b/subprojects/robotpy-hal/.gitignore @@ -17,4 +17,4 @@ __pycache__ /hal/simulation/trampolines /dist -/build \ No newline at end of file +/build diff --git a/subprojects/robotpy-romi/.gitignore b/subprojects/robotpy-romi/.gitignore index 9eabdb790..0c5871f6a 100644 --- a/subprojects/robotpy-romi/.gitignore +++ b/subprojects/robotpy-romi/.gitignore @@ -8,4 +8,4 @@ /romi/trampolines /romi/_init__romi.py /romi/romi.pc -/romi/version.py \ No newline at end of file +/romi/version.py diff --git a/subprojects/robotpy-wpilib/.gitignore b/subprojects/robotpy-wpilib/.gitignore index 569b089cd..3168caf9d 100644 --- a/subprojects/robotpy-wpilib/.gitignore +++ b/subprojects/robotpy-wpilib/.gitignore @@ -13,7 +13,7 @@ htmlcov *.dll *.dylib -build +build dist MANIFEST diff --git a/subprojects/robotpy-wpilog/tests/requirements.txt b/subprojects/robotpy-wpilog/tests/requirements.txt index 55b033e90..e079f8a60 100644 --- a/subprojects/robotpy-wpilog/tests/requirements.txt +++ b/subprojects/robotpy-wpilog/tests/requirements.txt @@ -1 +1 @@ -pytest \ No newline at end of file +pytest diff --git a/subprojects/robotpy-wpimath/.gitignore b/subprojects/robotpy-wpimath/.gitignore index b76e30d9c..5af43c2c7 100644 --- a/subprojects/robotpy-wpimath/.gitignore +++ b/subprojects/robotpy-wpimath/.gitignore @@ -13,7 +13,7 @@ htmlcov *.dll *.dylib -build +build dist MANIFEST diff --git a/subprojects/robotpy-wpimath/tests/cpp/.gitignore b/subprojects/robotpy-wpimath/tests/cpp/.gitignore index fa044c389..ec3558c7e 100644 --- a/subprojects/robotpy-wpimath/tests/cpp/.gitignore +++ b/subprojects/robotpy-wpimath/tests/cpp/.gitignore @@ -4,4 +4,4 @@ /wpimath_test/wpimath_test.pc /wpimath_test/_init__wpimath_test.py -/wpimath_test/trampolines \ No newline at end of file +/wpimath_test/trampolines diff --git a/subprojects/robotpy-wpimath/tests/requirements.txt b/subprojects/robotpy-wpimath/tests/requirements.txt index 55b033e90..e079f8a60 100644 --- a/subprojects/robotpy-wpimath/tests/requirements.txt +++ b/subprojects/robotpy-wpimath/tests/requirements.txt @@ -1 +1 @@ -pytest \ No newline at end of file +pytest diff --git a/subprojects/robotpy-wpinet/tests/requirements.txt b/subprojects/robotpy-wpinet/tests/requirements.txt index 55b033e90..e079f8a60 100644 --- a/subprojects/robotpy-wpinet/tests/requirements.txt +++ b/subprojects/robotpy-wpinet/tests/requirements.txt @@ -1 +1 @@ -pytest \ No newline at end of file +pytest diff --git a/subprojects/robotpy-wpiutil/.gitignore b/subprojects/robotpy-wpiutil/.gitignore index 50e912050..69f9963f1 100644 --- a/subprojects/robotpy-wpiutil/.gitignore +++ b/subprojects/robotpy-wpiutil/.gitignore @@ -20,4 +20,4 @@ __pycache__ /tests/cpp/build /tests/cpp/wpiutil_test/_initmodule.py /tests/cpp/wpiutil_test/pkgcfg.py -/tests/cpp/wpiutil_test/version.py \ No newline at end of file +/tests/cpp/wpiutil_test/version.py diff --git a/subprojects/robotpy-wpiutil/tests/requirements.txt b/subprojects/robotpy-wpiutil/tests/requirements.txt index 55b033e90..e079f8a60 100644 --- a/subprojects/robotpy-wpiutil/tests/requirements.txt +++ b/subprojects/robotpy-wpiutil/tests/requirements.txt @@ -1 +1 @@ -pytest \ No newline at end of file +pytest diff --git a/subprojects/robotpy-xrp/.gitignore b/subprojects/robotpy-xrp/.gitignore index 0525b6e66..5d252f9d5 100644 --- a/subprojects/robotpy-xrp/.gitignore +++ b/subprojects/robotpy-xrp/.gitignore @@ -10,4 +10,4 @@ /xrp/pkgcfg.py /xrp/version.py /xrp/extension/lib -/xrp/trampolines \ No newline at end of file +/xrp/trampolines