Skip to content

Commit 1d1bfd2

Browse files
committed
Added warnings and errors highlighting (#55)
1 parent 83359dc commit 1d1bfd2

14 files changed

+526
-103
lines changed

SCXcodeMinimap.xcodeproj/project.pbxproj

Lines changed: 23 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,10 +15,12 @@
1515
1876135F1A77A74300974BE1 /* IDEKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1876135E1A77A74300974BE1 /* IDEKit.framework */; };
1616
1883080A1A7411830005DF40 /* DVTKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 188308091A7411830005DF40 /* DVTKit.framework */; };
1717
188308101A7411A70005DF40 /* IDESourceEditor in Frameworks */ = {isa = PBXBuildFile; fileRef = 1883080F1A7411A70005DF40 /* IDESourceEditor */; };
18+
1889464D1B11DDEE0036175B /* SCXcodeMinimapTheme.m in Sources */ = {isa = PBXBuildFile; fileRef = 1889464C1B11DDEE0036175B /* SCXcodeMinimapTheme.m */; };
1819
188FCC8A1A98B57A0026F529 /* DBGBreakpointAnnotationProvider+SCXcodeMinimap.m in Sources */ = {isa = PBXBuildFile; fileRef = 188FCC891A98B57A0026F529 /* DBGBreakpointAnnotationProvider+SCXcodeMinimap.m */; };
1920
18C2EA5C1A9C7F8A002CEB20 /* DBGBreakpointAnnotation+SCXcodeMinimap.m in Sources */ = {isa = PBXBuildFile; fileRef = 18C2EA5B1A9C7F8A002CEB20 /* DBGBreakpointAnnotation+SCXcodeMinimap.m */; };
2021
18C999FF1A98B04C0008AF54 /* DebuggerUI in Frameworks */ = {isa = PBXBuildFile; fileRef = 18C999FE1A98B04C0008AF54 /* DebuggerUI */; };
2122
18D6AD111A8F727B0082CB3F /* IDEFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 18D6AD101A8F727B0082CB3F /* IDEFoundation.framework */; };
23+
18E577FC1B119F6600421483 /* IDEIssueAnnotationProvider+SCXcodeMinimap.m in Sources */ = {isa = PBXBuildFile; fileRef = 18E577FB1B119F6600421483 /* IDEIssueAnnotationProvider+SCXcodeMinimap.m */; };
2224
18FE09B61707639E00118FEB /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 18FE09B51707639E00118FEB /* Cocoa.framework */; };
2325
18FE09C9170764E400118FEB /* SCXcodeMinimap.m in Sources */ = {isa = PBXBuildFile; fileRef = 18FE09C8170764E400118FEB /* SCXcodeMinimap.m */; };
2426
8742532317307161001C947C /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8742532217307161001C947C /* QuartzCore.framework */; };
@@ -28,6 +30,7 @@
2830
1809FF8D1AED1A730058D946 /* NSScroller+SCXcodeMinimap.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSScroller+SCXcodeMinimap.h"; sourceTree = "<group>"; };
2931
1809FF8E1AED1A730058D946 /* NSScroller+SCXcodeMinimap.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSScroller+SCXcodeMinimap.m"; sourceTree = "<group>"; };
3032
180F0C651A98AE1500E97254 /* DVTAnnotationManager.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = DVTAnnotationManager.h; sourceTree = "<group>"; };
33+
180F24D61B119866009ACE49 /* IDEIssueAnnotationProvider.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = IDEIssueAnnotationProvider.h; sourceTree = "<group>"; };
3134
1812C3911A77A7CF00E2CFB3 /* IDESourceCodeDocument.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; lineEnding = 0; path = IDESourceCodeDocument.h; sourceTree = "<group>"; xcLanguageSpecificationIdentifier = xcode.lang.objcpp; };
3235
1819E4271AA1FB5900C344F2 /* SCXcodeMinimapScrollView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SCXcodeMinimapScrollView.h; sourceTree = "<group>"; };
3336
1819E4281AA1FB5900C344F2 /* SCXcodeMinimapScrollView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SCXcodeMinimapScrollView.m; sourceTree = "<group>"; };
@@ -60,6 +63,8 @@
6063
187EEF6A1A8F78C400E4EF39 /* IDEFileBreakpoint.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = IDEFileBreakpoint.h; sourceTree = "<group>"; };
6164
188308091A7411830005DF40 /* DVTKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = DVTKit.framework; path = /Applications/Xcode.app/Contents/SharedFrameworks/DVTKit.framework; sourceTree = "<group>"; };
6265
1883080F1A7411A70005DF40 /* IDESourceEditor */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = IDESourceEditor; path = /Applications/Xcode.app/Contents/PlugIns/IDESourceEditor.ideplugin/Contents/MacOS/IDESourceEditor; sourceTree = "<group>"; };
66+
1889464B1B11DDEE0036175B /* SCXcodeMinimapTheme.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SCXcodeMinimapTheme.h; sourceTree = "<group>"; };
67+
1889464C1B11DDEE0036175B /* SCXcodeMinimapTheme.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SCXcodeMinimapTheme.m; sourceTree = "<group>"; };
6368
188D38761A98B26E005C7F85 /* DBGBreakpointAnnotation.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = DBGBreakpointAnnotation.h; sourceTree = "<group>"; };
6469
188D38771A98B3AC005C7F85 /* DVTTextAnnotation.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = DVTTextAnnotation.h; sourceTree = "<group>"; };
6570
188D38781A98B3D8005C7F85 /* DVTAnnotation.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = DVTAnnotation.h; sourceTree = "<group>"; };
@@ -75,6 +80,12 @@
7580
18C999FE1A98B04C0008AF54 /* DebuggerUI */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = DebuggerUI; path = /Applications/Xcode.app/Contents/PlugIns/DebuggerUI.ideplugin/Contents/MacOS/DebuggerUI; sourceTree = "<group>"; };
7681
18CA02B61A9D0DF1001C5CE1 /* IDEBreakpoint.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = IDEBreakpoint.h; sourceTree = "<group>"; };
7782
18D6AD101A8F727B0082CB3F /* IDEFoundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = IDEFoundation.framework; path = /Applications/Xcode.app/Contents/Frameworks/IDEFoundation.framework; sourceTree = "<group>"; };
83+
18E577F61B119BF200421483 /* IDEBuildIssueAnnotation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IDEBuildIssueAnnotation.h; sourceTree = "<group>"; };
84+
18E577F71B119C1000421483 /* IDEBuildIssueWarningAnnotation.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = IDEBuildIssueWarningAnnotation.h; sourceTree = "<group>"; };
85+
18E577F81B119C3F00421483 /* IDEBuildIssueErrorAnnotation.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = IDEBuildIssueErrorAnnotation.h; sourceTree = "<group>"; };
86+
18E577F91B119C7200421483 /* DVTMessageBubbleAnnotation.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = DVTMessageBubbleAnnotation.h; sourceTree = "<group>"; };
87+
18E577FA1B119F6600421483 /* IDEIssueAnnotationProvider+SCXcodeMinimap.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "IDEIssueAnnotationProvider+SCXcodeMinimap.h"; sourceTree = "<group>"; };
88+
18E577FB1B119F6600421483 /* IDEIssueAnnotationProvider+SCXcodeMinimap.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "IDEIssueAnnotationProvider+SCXcodeMinimap.m"; sourceTree = "<group>"; };
7889
18FE09B21707639E00118FEB /* SCXcodeMinimap.xcplugin */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = SCXcodeMinimap.xcplugin; sourceTree = BUILT_PRODUCTS_DIR; };
7990
18FE09B51707639E00118FEB /* Cocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = System/Library/Frameworks/Cocoa.framework; sourceTree = SDKROOT; };
8091
18FE09B81707639E00118FEB /* AppKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AppKit.framework; path = System/Library/Frameworks/AppKit.framework; sourceTree = SDKROOT; };
@@ -122,6 +133,7 @@
122133
184C11721A740F8A002A7C65 /* DVTFontAndColorTheme.h */,
123134
184C11731A740F8A002A7C65 /* DVTInvalidation-Protocol.h */,
124135
18C8F0341A7ECB1300C7A76F /* DVTLayoutManager.h */,
136+
18E577F91B119C7200421483 /* DVTMessageBubbleAnnotation.h */,
125137
184C11741A740F8A002A7C65 /* DVTPointerArray.h */,
126138
184C11751A740F8A002A7C65 /* DVTPreferenceSet-Protocol.h */,
127139
18B3CEE51A8AA52A00A0873D /* DVTPreferenceSetManager.h */,
@@ -134,15 +146,19 @@
134146
184407641A8F7B1900C530CF /* DVTTextDocumentLocation.h */,
135147
184C117B1A740F8A002A7C65 /* DVTTextStorage.h */,
136148
184C117C1A740F8A002A7C65 /* DVTViewController.h */,
149+
18CA02B61A9D0DF1001C5CE1 /* IDEBreakpoint.h */,
150+
18E577F61B119BF200421483 /* IDEBuildIssueAnnotation.h */,
151+
18E577F81B119C3F00421483 /* IDEBuildIssueErrorAnnotation.h */,
152+
18E577F71B119C1000421483 /* IDEBuildIssueWarningAnnotation.h */,
137153
184C117D1A740F8A002A7C65 /* IDEEditor.h */,
138154
1876135D1A77A69F00974BE1 /* IDEEditorDocument.h */,
139155
187EEF6A1A8F78C400E4EF39 /* IDEFileBreakpoint.h */,
140156
18FEFA8C1A782D8600DC98C5 /* IDEFileTextSettings.h */,
157+
180F24D61B119866009ACE49 /* IDEIssueAnnotationProvider.h */,
141158
1812C3911A77A7CF00E2CFB3 /* IDESourceCodeDocument.h */,
142159
184C117E1A740F8A002A7C65 /* IDESourceCodeEditor.h */,
143160
184C117F1A740F8A002A7C65 /* IDESourceCodeEditorContainerView.h */,
144161
184C11801A740F8A002A7C65 /* IDEViewController.h */,
145-
18CA02B61A9D0DF1001C5CE1 /* IDEBreakpoint.h */,
146162
);
147163
path = "Xcode Headers";
148164
sourceTree = "<group>";
@@ -193,10 +209,14 @@
193209
1819E4281AA1FB5900C344F2 /* SCXcodeMinimapScrollView.m */,
194210
184C11811A740F97002A7C65 /* SCXcodeMinimapSelectionView.h */,
195211
184C11821A740F97002A7C65 /* SCXcodeMinimapSelectionView.m */,
212+
1889464B1B11DDEE0036175B /* SCXcodeMinimapTheme.h */,
213+
1889464C1B11DDEE0036175B /* SCXcodeMinimapTheme.m */,
196214
18C2EA5A1A9C7F8A002CEB20 /* DBGBreakpointAnnotation+SCXcodeMinimap.h */,
197215
18C2EA5B1A9C7F8A002CEB20 /* DBGBreakpointAnnotation+SCXcodeMinimap.m */,
198216
188FCC881A98B57A0026F529 /* DBGBreakpointAnnotationProvider+SCXcodeMinimap.h */,
199217
188FCC891A98B57A0026F529 /* DBGBreakpointAnnotationProvider+SCXcodeMinimap.m */,
218+
18E577FA1B119F6600421483 /* IDEIssueAnnotationProvider+SCXcodeMinimap.h */,
219+
18E577FB1B119F6600421483 /* IDEIssueAnnotationProvider+SCXcodeMinimap.m */,
200220
1809FF8D1AED1A730058D946 /* NSScroller+SCXcodeMinimap.h */,
201221
1809FF8E1AED1A730058D946 /* NSScroller+SCXcodeMinimap.m */,
202222
18FE09BC1707639E00118FEB /* Supporting Files */,
@@ -280,7 +300,9 @@
280300
184C11861A740F97002A7C65 /* SCXcodeMinimapSelectionView.m in Sources */,
281301
184C11871A740F97002A7C65 /* SCXcodeMinimapView.m in Sources */,
282302
18C2EA5C1A9C7F8A002CEB20 /* DBGBreakpointAnnotation+SCXcodeMinimap.m in Sources */,
303+
1889464D1B11DDEE0036175B /* SCXcodeMinimapTheme.m in Sources */,
283304
1819E4291AA1FB5900C344F2 /* SCXcodeMinimapScrollView.m in Sources */,
305+
18E577FC1B119F6600421483 /* IDEIssueAnnotationProvider+SCXcodeMinimap.m in Sources */,
284306
1809FF8F1AED1A730058D946 /* NSScroller+SCXcodeMinimap.m in Sources */,
285307
);
286308
runOnlyForDeploymentPostprocessing = 0;

SCXcodeMinimap/DBGBreakpointAnnotationProvider+SCXcodeMinimap.m

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,11 @@ + (void)load
3131
sc_swizzleInstanceMethod(self, @selector(didMoveAnnotation:), @selector(sc_didMoveAnnotation:));
3232
}
3333

34+
- (id<DBGBreakpointAnnotationProviderDelegate>)minimapDelegate
35+
{
36+
return objc_getAssociatedObject(self, @selector(minimapDelegate));
37+
}
38+
3439
- (void)setMinimapDelegate:(id<DBGBreakpointAnnotationProviderDelegate>)minimapDelegate
3540
{
3641
for(DBGBreakpointAnnotation *annotation in self.annotations) {
@@ -40,11 +45,6 @@ - (void)setMinimapDelegate:(id<DBGBreakpointAnnotationProviderDelegate>)minimapD
4045
objc_setAssociatedObject(self, @selector(minimapDelegate), minimapDelegate, OBJC_ASSOCIATION_ASSIGN);
4146
}
4247

43-
- (id<DBGBreakpointAnnotationProviderDelegate>)minimapDelegate
44-
{
45-
return objc_getAssociatedObject(self, @selector(minimapDelegate));
46-
}
47-
4848
- (void)sc_addAnnotationForFileBreakpoint:(id)arg1
4949
{
5050
[self sc_addAnnotationForFileBreakpoint:arg1];
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
//
2+
// IDEIssueAnnotationProvider+SCXcodeMinimap.h
3+
// SCXcodeMinimap
4+
//
5+
// Created by Stefan Ceriu on 5/24/15.
6+
// Copyright (c) 2015 Stefan Ceriu. All rights reserved.
7+
//
8+
9+
#import "IDEIssueAnnotationProvider.h"
10+
11+
@protocol IDEIssueAnnotationProviderDelegate;
12+
13+
@interface IDEIssueAnnotationProvider (SCXcodeMinimap)
14+
15+
@property (nonatomic, weak) id<IDEIssueAnnotationProviderDelegate> minimapDelegate;
16+
17+
@end
18+
19+
@protocol IDEIssueAnnotationProviderDelegate <NSObject>
20+
21+
- (void)issueAnnotationProviderDidChangeIssues:(IDEIssueAnnotationProvider *)annotationProvider;
22+
23+
@end
Lines changed: 91 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,91 @@
1+
//
2+
// IDEIssueAnnotationProvider+SCXcodeMinimap.m
3+
// SCXcodeMinimap
4+
//
5+
// Created by Stefan Ceriu on 5/24/15.
6+
// Copyright (c) 2015 Stefan Ceriu. All rights reserved.
7+
//
8+
9+
#import "IDEIssueAnnotationProvider+SCXcodeMinimap.h"
10+
#import <objc/runtime.h>
11+
12+
static void *IDEIssueAnnotationProviderIssuesObservingContext = &IDEIssueAnnotationProviderIssuesObservingContext;
13+
14+
@interface IDEIssueAnnotationProvider (SCXcodeMinimap_Private)
15+
16+
@property (nonatomic, assign) BOOL isObservingAnnotations;
17+
18+
@end
19+
20+
@implementation IDEIssueAnnotationProvider (SCXcodeMinimap)
21+
@dynamic minimapDelegate;
22+
23+
static void sc_swizzleInstanceMethod(Class class, SEL originalSelector, SEL swizzledSelector) {
24+
Method originalMethod = class_getInstanceMethod(class, originalSelector);
25+
Method swizzledMethod = class_getInstanceMethod(class, swizzledSelector);
26+
if (class_addMethod(class, originalSelector, method_getImplementation(swizzledMethod), method_getTypeEncoding(swizzledMethod))) {
27+
class_replaceMethod(class, swizzledSelector, method_getImplementation(originalMethod), method_getTypeEncoding(originalMethod));
28+
} else {
29+
method_exchangeImplementations(originalMethod, swizzledMethod);
30+
}
31+
}
32+
33+
+ (void)load
34+
{
35+
sc_swizzleInstanceMethod(self, @selector(providerWillUninstall), @selector(sc_providerWillUninstall));
36+
sc_swizzleInstanceMethod(self, @selector(didDeleteOrReplaceParagraphForAnnotation:), @selector(sc_didDeleteOrReplaceParagraphForAnnotation:));
37+
}
38+
39+
- (void)sc_providerWillUninstall
40+
{
41+
[self sc_providerWillUninstall];
42+
43+
if(self.isObservingAnnotations) {
44+
[self removeObserver:self forKeyPath:@"annotations"];
45+
}
46+
}
47+
48+
- (void)_didDeleteOrReplaceParagraphForAnnotation:(id)annotation
49+
{
50+
[self _didDeleteOrReplaceParagraphForAnnotation:annotation];
51+
52+
if([self.minimapDelegate respondsToSelector:@selector(issueAnnotationProviderDidChangeIssues:)]) {
53+
[self.minimapDelegate issueAnnotationProviderDidChangeIssues:self];
54+
}
55+
}
56+
57+
- (id<IDEIssueAnnotationProviderDelegate>)minimapDelegate
58+
{
59+
return objc_getAssociatedObject(self, @selector(minimapDelegate));
60+
}
61+
62+
- (void)setMinimapDelegate:(id<IDEIssueAnnotationProviderDelegate>)minimapDelegate
63+
{
64+
objc_setAssociatedObject(self, @selector(minimapDelegate), minimapDelegate, OBJC_ASSOCIATION_ASSIGN);
65+
66+
if(minimapDelegate) {
67+
self.isObservingAnnotations = YES;
68+
[self addObserver:self forKeyPath:@"annotations" options:NSKeyValueObservingOptionInitial | NSKeyValueObservingOptionNew context:IDEIssueAnnotationProviderIssuesObservingContext];
69+
}
70+
}
71+
72+
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context
73+
{
74+
if(context == IDEIssueAnnotationProviderIssuesObservingContext) {
75+
if([self.minimapDelegate respondsToSelector:@selector(issueAnnotationProviderDidChangeIssues:)]) {
76+
[self.minimapDelegate issueAnnotationProviderDidChangeIssues:self];
77+
}
78+
}
79+
}
80+
81+
- (BOOL)isObservingAnnotations
82+
{
83+
return [objc_getAssociatedObject(self, @selector(isObservingAnnotations)) boolValue];
84+
}
85+
86+
- (void)setIsObservingAnnotations:(BOOL)isObservingAnnotations
87+
{
88+
objc_setAssociatedObject(self, @selector(isObservingAnnotations), @(isObservingAnnotations), OBJC_ASSOCIATION_RETAIN_NONATOMIC);
89+
}
90+
91+
@end

SCXcodeMinimap/SCXcodeMinimap.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,9 @@ extern NSString *const SCXcodeMinimapZoomLevelKey;
1717
extern NSString *const SCXcodeMinimapHighlightBreakpointsChangeNotification;
1818
extern NSString *const SCXcodeMinimapShouldHighlightBreakpointsKey;
1919

20+
extern NSString *const SCXcodeMinimapHighlightIssuesChangeNotification;
21+
extern NSString *const SCXcodeMinimapShouldHighlightIssuesKey;
22+
2023
extern NSString *const SCXcodeMinimapHighlightCommentsChangeNotification;
2124
extern NSString *const SCXcodeMinimapShouldHighlightCommentsKey;
2225

SCXcodeMinimap/SCXcodeMinimap.m

Lines changed: 27 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,9 @@
2626
NSString *const SCXcodeMinimapHighlightBreakpointsChangeNotification = @"SCXcodeMinimapHighlightBreakpointsChangeNotification";
2727
NSString *const SCXcodeMinimapShouldHighlightBreakpointsKey = @"SCXcodeMinimapShouldHighlightBreakpointsKey";
2828

29+
NSString *const SCXcodeMinimapHighlightIssuesChangeNotification = @"SCXcodeMinimapHighlightIssuesChangeNotification";
30+
NSString *const SCXcodeMinimapShouldHighlightIssuesKey = @"SCXcodeMinimapShouldHighlightIssuesKey";
31+
2932
NSString *const SCXcodeMinimapHighlightCommentsChangeNotification = @"SCXcodeMinimapHighlightCommentsChangeNotification";
3033
NSString *const SCXcodeMinimapShouldHighlightCommentsKey = @"SCXcodeMinimapShouldHighlightCommentsKey";
3134

@@ -48,6 +51,7 @@
4851
NSString *const kHideMinimapMenuItemTitle = @"Hide Minimap";
4952

5053
NSString *const kHighlightBreakpointsMenuItemTitle = @"Highlight breakpoints";
54+
NSString *const kHighlightIssuesMenuItemTitle = @"Highlight issues";
5155
NSString *const kHighlightCommentsMenuItemTitle = @"Highlight comments";
5256
NSString *const kHighlightPreprocessorMenuItemTitle = @"Highlight preprocessor";
5357
NSString *const kHighlightEditorMenuItemTitle = @"Highlight main editor";
@@ -84,6 +88,7 @@ - (void)registerUserDefaults
8488
NSDictionary *userDefaults = @{SCXcodeMinimapZoomLevelKey : @(0.1f),
8589
SCXcodeMinimapShouldDisplayKey : @(YES),
8690
SCXcodeMinimapShouldHighlightBreakpointsKey : @(YES),
91+
SCXcodeMinimapShouldHighlightIssuesKey : @(YES),
8792
SCXcodeMinimapShouldHighlightCommentsKey : @(YES),
8893
SCXcodeMinimapShouldHighlightPreprocessorKey : @(YES)};
8994

@@ -94,16 +99,16 @@ - (void)registerUserDefaults
9499

95100
- (void)createMenuItem
96101
{
97-
NSMenuItem *editMenuItem = [[NSApp mainMenu] itemWithTitle:kViewMenuItemTitle];
102+
NSMenuItem *viewMenuItem = [[NSApp mainMenu] itemWithTitle:kViewMenuItemTitle];
98103

99-
if(editMenuItem == nil) {
104+
if(viewMenuItem == nil) {
100105
return;
101106
}
102107

103-
[editMenuItem.submenu addItem:[NSMenuItem separatorItem]];
108+
[viewMenuItem.submenu addItem:[NSMenuItem separatorItem]];
104109

105110
NSMenuItem *minimapMenuItem = [[NSMenuItem alloc] initWithTitle:kMinimapMenuItemTitle action:nil keyEquivalent:@""];
106-
[editMenuItem.submenu addItem:minimapMenuItem];
111+
[viewMenuItem.submenu addItem:minimapMenuItem];
107112

108113
NSMenu *minimapMenu = [[NSMenu alloc] init];
109114
{
@@ -154,6 +159,15 @@ - (void)createMenuItem
154159
[highlightBreakpointsMenuItem setState:(breakpointHighlightingEnabled ? NSOnState : NSOffState)];
155160

156161

162+
NSMenuItem *highlightIssuesMenuItem = [[NSMenuItem alloc] initWithTitle:kHighlightIssuesMenuItemTitle
163+
action:@selector(toggleIssuesHighlighting:) keyEquivalent:@""];
164+
[highlightIssuesMenuItem setTarget:self];
165+
[minimapMenu addItem:highlightIssuesMenuItem];
166+
167+
BOOL issueHighlightingEnabled = [[[NSUserDefaults standardUserDefaults] objectForKey:SCXcodeMinimapShouldHighlightIssuesKey] boolValue];
168+
[highlightIssuesMenuItem setState:(issueHighlightingEnabled ? NSOnState : NSOffState)];
169+
170+
157171
NSMenuItem *highlightCommentsMenuItem = [[NSMenuItem alloc] initWithTitle:kHighlightCommentsMenuItemTitle
158172
action:@selector(toggleCommentsHighlighting:) keyEquivalent:@""];
159173
[highlightCommentsMenuItem setTarget:self];
@@ -261,6 +275,15 @@ - (void)toggleBreakpointHighlighting:(NSMenuItem *)sender
261275
[[NSNotificationCenter defaultCenter] postNotificationName:SCXcodeMinimapHighlightBreakpointsChangeNotification object:nil];
262276
}
263277

278+
- (void)toggleIssuesHighlighting:(NSMenuItem *)sender
279+
{
280+
BOOL issueHighlightingEnabled = [[[NSUserDefaults standardUserDefaults] objectForKey:SCXcodeMinimapShouldHighlightIssuesKey] boolValue];
281+
282+
[sender setState:(issueHighlightingEnabled ? NSOffState : NSOnState)];
283+
[[NSUserDefaults standardUserDefaults] setObject:@(!issueHighlightingEnabled) forKey:SCXcodeMinimapShouldHighlightIssuesKey];
284+
[[NSNotificationCenter defaultCenter] postNotificationName:SCXcodeMinimapHighlightIssuesChangeNotification object:nil];
285+
}
286+
264287
- (void)toggleCommentsHighlighting:(NSMenuItem *)sender
265288
{
266289
BOOL commentsHighlightingEnabled = [[[NSUserDefaults standardUserDefaults] objectForKey:SCXcodeMinimapShouldHighlightCommentsKey] boolValue];

0 commit comments

Comments
 (0)