Title: [240402] trunk/Tools
Revision
240402
Author
[email protected]
Date
2019-01-23 18:47:53 -0800 (Wed, 23 Jan 2019)

Log Message

check-webkit-style should warn when using soft-linking macros in a header
<https://webkit.org/b/193750>

Reviewed by Darin Adler.

* Scripts/webkitpy/style/checkers/cpp.py:
(check_language): Add softlink/header check by refactoring the
softlink/framework check.
(CppChecker): Enable softlink/header check by default.
* Scripts/webkitpy/style/checkers/cpp_unittest.py:
(CppStyleTest.test_softlink_framework): Rename from
CppStyleTest.test_softlink() and change test framework name in
case AVFoundation gets its own AVFoundationSoftLink.{h,mm}
files. Set file_name for macros that only appear in headers.
(CppStyleTest.test_softlink_header): Add tests for using
soft-link macros in headers.

Modified Paths

Diff

Modified: trunk/Tools/ChangeLog (240401 => 240402)


--- trunk/Tools/ChangeLog	2019-01-24 01:43:58 UTC (rev 240401)
+++ trunk/Tools/ChangeLog	2019-01-24 02:47:53 UTC (rev 240402)
@@ -1,3 +1,22 @@
+2019-01-23  David Kilzer  <[email protected]>
+
+        check-webkit-style should warn when using soft-linking macros in a header
+        <https://webkit.org/b/193750>
+
+        Reviewed by Darin Adler.
+
+        * Scripts/webkitpy/style/checkers/cpp.py:
+        (check_language): Add softlink/header check by refactoring the
+        softlink/framework check.
+        (CppChecker): Enable softlink/header check by default.
+        * Scripts/webkitpy/style/checkers/cpp_unittest.py:
+        (CppStyleTest.test_softlink_framework): Rename from
+        CppStyleTest.test_softlink() and change test framework name in
+        case AVFoundation gets its own AVFoundationSoftLink.{h,mm}
+        files. Set file_name for macros that only appear in headers.
+        (CppStyleTest.test_softlink_header): Add tests for using
+        soft-link macros in headers.
+
 2019-01-23  Chris Dumez  <[email protected]>
 
         Deprecate API to limit the maximum number of WebProcesses

Modified: trunk/Tools/Scripts/webkitpy/style/checkers/cpp.py (240401 => 240402)


--- trunk/Tools/Scripts/webkitpy/style/checkers/cpp.py	2019-01-24 01:43:58 UTC (rev 240401)
+++ trunk/Tools/Scripts/webkitpy/style/checkers/cpp.py	2019-01-24 02:47:53 UTC (rev 240402)
@@ -3332,11 +3332,15 @@
                           'RetainPtr<> should never contain a type with \'*\'. Correct: RetainPtr<NSString>, RetainPtr<CFStringRef>.')
                 break
 
-    frameworks_with_soft_links = ['CoreMedia', 'CoreVideo', 'DataDetectorsCore', 'MediaAccessibility', 'MediaRemote', 'PassKit', 'QuickLook', 'UIKit', 'VideoToolbox']
-    matched = re.compile('^\s*SOFT_LINK_FRAMEWORK.*\(({})\)'.format('|'.join(frameworks_with_soft_links))).search(line)
+    matched = re.compile('^\s*SOFT_LINK_(PRIVATE_)?FRAMEWORK.*\((\S+)\)').search(line)
     if matched:
-        framework_name = matched.group(1)
-        if not re.compile('^\s*SOFT_LINK_FRAMEWORK_FOR_(HEADER|SOURCE)(_WITH_EXPORT)?\({}\)'.format(framework_name)).search(line):
+        framework_name = matched.group(2)
+        if file_extension == 'h' and not search(r'^\s*SOFT_LINK_(PRIVATE_)?FRAMEWORK_FOR_HEADER.*\(', line):
+            error(line_number, 'softlink/header', 5,
+                  'Never soft-link frameworks in headers. Put the soft-link macros in a source file, or create {framework}SoftLink.{{cpp,mm}} instead.'.format(framework=framework_name))
+
+        frameworks_with_soft_links = ['CoreMedia', 'CoreVideo', 'DataDetectorsCore', 'MediaAccessibility', 'MediaRemote', 'PassKit', 'QuickLook', 'UIKit', 'VideoToolbox']
+        if framework_name in frameworks_with_soft_links and not re.compile('^\s*SOFT_LINK_(PRIVATE_)?FRAMEWORK_FOR_(HEADER|SOURCE)(_WITH_EXPORT)?\({}\)'.format(framework_name)).search(line):
             error(line_number, 'softlink/framework', 5,
                   'Use {framework}SoftLink.{{cpp,h,mm}} to soft-link to {framework}.framework.'.format(framework=framework_name))
 
@@ -4093,6 +4097,7 @@
         'security/printf',
         'security/temp_file',
         'softlink/framework',
+        'softlink/header',
         'whitespace/blank_line',
         'whitespace/braces',
         'whitespace/brackets',

Modified: trunk/Tools/Scripts/webkitpy/style/checkers/cpp_unittest.py (240401 => 240402)


--- trunk/Tools/Scripts/webkitpy/style/checkers/cpp_unittest.py	2019-01-24 01:43:58 UTC (rev 240401)
+++ trunk/Tools/Scripts/webkitpy/style/checkers/cpp_unittest.py	2019-01-24 02:47:53 UTC (rev 240402)
@@ -1688,25 +1688,36 @@
             '  [runtime/retainptr] [5]')
         self.assert_lint('''RetainPtr<NSDictionary<NSString *, NSArray<NSString *>>> dictionary;''', '')
 
-    def test_softlink(self):
+    def test_softlink_framework(self):
         self.assert_lint(
-            '''SOFT_LINK_FRAMEWORK(AVFoundation)''',
+            '''SOFT_LINK_FRAMEWORK(Foundation)''',
             '')
         self.assert_lint(
-            '''SOFT_LINK_FRAMEWORK_OPTIONAL(AVFoundation)''',
+            '''SOFT_LINK_FRAMEWORK_OPTIONAL(Foundation)''',
             '')
         self.assert_lint(
-            '''SOFT_LINK_FRAMEWORK_OPTIONAL_PREFLIGHT(AVFoundation)''',
+            '''SOFT_LINK_FRAMEWORK_OPTIONAL_PREFLIGHT(Foundation)''',
             '')
         self.assert_lint(
-            '''SOFT_LINK_FRAMEWORK_FOR_HEADER(AVFoundation)''',
+            '''SOFT_LINK_FRAMEWORK_FOR_HEADER(Foundation)''',
+            '',
+             file_name='foo.h')
+        self.assert_lint(
+            '''SOFT_LINK_FRAMEWORK_FOR_SOURCE(Foundation)''',
             '')
         self.assert_lint(
-            '''SOFT_LINK_FRAMEWORK_FOR_SOURCE(AVFoundation)''',
+            '''SOFT_LINK_FRAMEWORK_FOR_SOURCE_WITH_EXPORT(Foundation)''',
             '')
         self.assert_lint(
-            '''SOFT_LINK_FRAMEWORK_FOR_SOURCE_WITH_EXPORT(AVFoundation)''',
+            '''SOFT_LINK_PRIVATE_FRAMEWORK_FOR_HEADER(Foundation)''',
+            '',
+             file_name='foo.h')
+        self.assert_lint(
+            '''SOFT_LINK_PRIVATE_FRAMEWORK_FOR_SOURCE(Foundation)''',
             '')
+        self.assert_lint(
+            '''SOFT_LINK_PRIVATE_FRAMEWORK_FOR_SOURCE_WITH_EXPORT(Foundation)''',
+            '')
 
         self.assert_lint(
             '''SOFT_LINK_FRAMEWORK(UIKit)''',
@@ -1722,7 +1733,8 @@
             '  [softlink/framework] [5]')
         self.assert_lint(
             '''SOFT_LINK_FRAMEWORK_FOR_HEADER(UIKit)''',
-            '')
+            '',
+             file_name='foo.h')
         self.assert_lint(
             '''SOFT_LINK_FRAMEWORK_FOR_SOURCE(UIKit)''',
             '')
@@ -1730,6 +1742,43 @@
             '''SOFT_LINK_FRAMEWORK_FOR_SOURCE_WITH_EXPORT(UIKit)''',
             '')
 
+    def test_softlink_header(self):
+        self.assert_lint(
+            '''SOFT_LINK_FRAMEWORK(MyFramework)''',
+            'Never soft-link frameworks in headers. Put the soft-link macros in a source file, or create MyFrameworkSoftLink.{cpp,mm} instead.'
+            '  [softlink/header] [5]',
+            file_name='foo.h')
+        self.assert_lint(
+            '''SOFT_LINK_FRAMEWORK_OPTIONAL(MyFramework)''',
+            'Never soft-link frameworks in headers. Put the soft-link macros in a source file, or create MyFrameworkSoftLink.{cpp,mm} instead.'
+            '  [softlink/header] [5]',
+            file_name='foo.h')
+        self.assert_lint(
+            '''SOFT_LINK_FRAMEWORK_OPTIONAL_PREFLIGHT(MyFramework)''',
+            'Never soft-link frameworks in headers. Put the soft-link macros in a source file, or create MyFrameworkSoftLink.{cpp,mm} instead.'
+            '  [softlink/header] [5]',
+            file_name='foo.h')
+        self.assert_lint(
+            '''SOFT_LINK_PRIVATE_FRAMEWORK(MyPrivateFramework)''',
+            'Never soft-link frameworks in headers. Put the soft-link macros in a source file, or create MyPrivateFrameworkSoftLink.{cpp,mm} instead.'
+            '  [softlink/header] [5]',
+            file_name='foo.h')
+
+        self.assert_lint(
+            '''SOFT_LINK_FRAMEWORK_FOR_HEADER(MyFramework)''',
+            '',
+            file_name='foo.h')
+        self.assert_lint(
+            '''SOFT_LINK_FRAMEWORK_FOR_SOURCE(MyFramework)''',
+            'Never soft-link frameworks in headers. Put the soft-link macros in a source file, or create MyFrameworkSoftLink.{cpp,mm} instead.'
+            '  [softlink/header] [5]',
+            file_name='foo.h')
+        self.assert_lint(
+            '''SOFT_LINK_FRAMEWORK_FOR_SOURCE_WITH_EXPORT(MyFramework)''',
+            'Never soft-link frameworks in headers. Put the soft-link macros in a source file, or create MyFrameworkSoftLink.{cpp,mm} instead.'
+            '  [softlink/header] [5]',
+            file_name='foo.h')
+
     # Variable-length arrays are not permitted.
     def test_variable_length_array_detection(self):
         errmsg = ('Do not use variable-length arrays.  Use an appropriately named '
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to