From b2c33dfb1348dc16087690b5ee914f8c629b2e65 Mon Sep 17 00:00:00 2001 From: Jonah Graham Date: Sun, 11 Jul 2021 16:04:51 -0400 Subject: [PATCH] Bug 546981: Treat pragma region like pragma mark in outline view Treats #pragma region and #pragma endregion similarly to how #pragma mark is treated in outline view. With region and endregion they are always surrounded by divider lines if there is text after region/endregion, else just a divider line is inserted. Change-Id: Idb8bebe94363731e59412a7f31af3b54d53a2c8e --- .../core/model/tests/CModelElementsTests.java | 29 +++++++++++++++++++ .../cfiles/CModelElementsTestStart.h | 5 +++- .../cdt/internal/core/model/Pragma.java | 12 ++++++++ .../ui/actions/ActionMessages.properties | 4 +-- .../PreferencesMessages.properties | 2 +- 5 files changed, 48 insertions(+), 4 deletions(-) diff --git a/core/org.eclipse.cdt.core.tests/model/org/eclipse/cdt/core/model/tests/CModelElementsTests.java b/core/org.eclipse.cdt.core.tests/model/org/eclipse/cdt/core/model/tests/CModelElementsTests.java index 5c648109821..04772796b82 100644 --- a/core/org.eclipse.cdt.core.tests/model/org/eclipse/cdt/core/model/tests/CModelElementsTests.java +++ b/core/org.eclipse.cdt.core.tests/model/org/eclipse/cdt/core/model/tests/CModelElementsTests.java @@ -188,6 +188,35 @@ public class CModelElementsTests extends BaseTestCase { assertEquals(false, pragma.getPragmaMarkInfo().get().isDividerAfterMark()); assertEquals("", pragma.getPragmaMarkInfo().get().getMarkName()); } + { + // region no name + IPragma pragma = (IPragma) pragmas.get(line++); + assertEquals("region", pragma.getElementName()); + assertEquals(true, pragma.getPragmaMarkInfo().get().isDividerBeforeMark()); + assertEquals(false, pragma.getPragmaMarkInfo().get().isDividerAfterMark()); + assertEquals("", pragma.getPragmaMarkInfo().get().getMarkName()); + } + { + IPragma pragma = (IPragma) pragmas.get(line++); + assertEquals("region named", pragma.getElementName()); + assertEquals(true, pragma.getPragmaMarkInfo().get().isDividerBeforeMark()); + assertEquals(true, pragma.getPragmaMarkInfo().get().isDividerAfterMark()); + assertEquals("named", pragma.getPragmaMarkInfo().get().getMarkName()); + } + { + IPragma pragma = (IPragma) pragmas.get(line++); + assertEquals("endregion", pragma.getElementName()); + assertEquals(true, pragma.getPragmaMarkInfo().get().isDividerBeforeMark()); + assertEquals(false, pragma.getPragmaMarkInfo().get().isDividerAfterMark()); + assertEquals("", pragma.getPragmaMarkInfo().get().getMarkName()); + } + { + IPragma pragma = (IPragma) pragmas.get(line++); + assertEquals("endregion endnamed", pragma.getElementName()); + assertEquals(true, pragma.getPragmaMarkInfo().get().isDividerBeforeMark()); + assertEquals(true, pragma.getPragmaMarkInfo().get().isDividerAfterMark()); + assertEquals("endnamed", pragma.getPragmaMarkInfo().get().getMarkName()); + } { IPragma pragma = (IPragma) pragmas.get(line++); assertEquals("ms_struct on", pragma.getElementName()); diff --git a/core/org.eclipse.cdt.core.tests/resources/cfiles/CModelElementsTestStart.h b/core/org.eclipse.cdt.core.tests/resources/cfiles/CModelElementsTestStart.h index 18ca36e0829..4d3e8071910 100644 --- a/core/org.eclipse.cdt.core.tests/resources/cfiles/CModelElementsTestStart.h +++ b/core/org.eclipse.cdt.core.tests/resources/cfiles/CModelElementsTestStart.h @@ -152,6 +152,9 @@ namespace { #pragma mark neither #pragma mark -// blank1 #pragma mark // blank2 +#pragma region // no name +#pragma region named +#pragma endregion // no name +#pragma endregion endnamed #pragma ms_struct on _Pragma("once") - diff --git a/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/model/Pragma.java b/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/model/Pragma.java index b6ccc4570f0..ba083cbe16b 100644 --- a/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/model/Pragma.java +++ b/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/model/Pragma.java @@ -56,6 +56,18 @@ public class Pragma extends SourceManipulation implements IPragma { markName = restOfLine.trim(); } break; + case "region": //$NON-NLS-1$ + case "endregion": { //$NON-NLS-1$ + if (restOfLine.isEmpty()) { + dividerBeforeMark = true; + dividerAfterMark = false; + } else { + dividerBeforeMark = true; + dividerAfterMark = true; + markName = restOfLine; + } + } + break; default: return null; } diff --git a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/actions/ActionMessages.properties b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/actions/ActionMessages.properties index 626b2de4d34..60f94783464 100644 --- a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/actions/ActionMessages.properties +++ b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/actions/ActionMessages.properties @@ -78,8 +78,8 @@ MacroGroupingAction_tooltip= Group macro definitions MacroGroupingAction_description= Group macro definitions HidePragmaMarks_label=Hide Dividers -HidePragmaMarks_tooltip=Hide Dividers (#pragma mark) -HidePragmaMarks_description=Hide Dividers (#pragma mark) +HidePragmaMarks_tooltip=Hide Dividers (#pragma mark or #pragma region/endregion) +HidePragmaMarks_description=Hide Dividers (#pragma mark or #pragma region/endregion) COutlineInformationControl_viewMenu_sort_label=Sort diff --git a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/preferences/PreferencesMessages.properties b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/preferences/PreferencesMessages.properties index 43f7929aea8..c765c083b50 100644 --- a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/preferences/PreferencesMessages.properties +++ b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/preferences/PreferencesMessages.properties @@ -188,7 +188,7 @@ AppearancePreferencePage_outlineGroupNamespaces_label= Group namespaces in the O AppearancePreferencePage_note=Note: AppearancePreferencePage_preferenceOnlyForNewViews=These two preferences do not affect open views AppearancePreferencePage_outlineGroupMacros_label=Group macro definitions in the Outline view -AppearancePreferencePage_HidePragmaMarks_label=Hide Dividers (#pragma mark) in the Outline view +AppearancePreferencePage_HidePragmaMarks_label=Hide Dividers (#pragma mark or #pragma region/endregion) in the Outline view AppearancePreferencePage_showSourceRootsAtTopOfProject_label=Show source roots at top of project #Build Logging