mirror of
https://github.com/golang/go
synced 2024-11-22 01:34:41 -07:00
Xcode: Example install of language specification for Xcode 4.x.
go.xclangspec is identical to the one in misc/xcode/3/, except for the heading. Partial workaround for issue 2401. R=gri CC=golang-dev https://golang.org/cl/5732051
This commit is contained in:
parent
286fb69746
commit
4863980f16
2
misc/xcode/4/README
Normal file
2
misc/xcode/4/README
Normal file
@ -0,0 +1,2 @@
|
||||
This directory contains files for Go syntax highlighting in Xcode 4.x.
|
||||
For installation; read, edit and run go4xcode.sh
|
290
misc/xcode/4/go.xclangspec
Normal file
290
misc/xcode/4/go.xclangspec
Normal file
@ -0,0 +1,290 @@
|
||||
/*
|
||||
Copyright 2012 The Go Authors. All rights reserved.
|
||||
Use of this source code is governed by a BSD-style
|
||||
license that can be found in the LICENSE file.
|
||||
|
||||
go.xclangspec
|
||||
Go language specification for Xcode 4.x.
|
||||
|
||||
This is a preliminary version that supports basic syntax coloring
|
||||
(such as keywords, literals, and comments) and an attempt to provide
|
||||
some structure information (incomplete).
|
||||
|
||||
There is not much documentation available regarding the format
|
||||
of .xclangspec files. As a starting point, see for instance the
|
||||
outdated documentation at:
|
||||
|
||||
http://maxao.free.fr/xcode-plugin-interface/specifications.html
|
||||
|
||||
*/
|
||||
|
||||
(
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
// Keywords
|
||||
|
||||
// TODO How do we get general Unicode identifiers?
|
||||
|
||||
{
|
||||
Identifier = "xcode.lang.go.identifier";
|
||||
Syntax = {
|
||||
StartChars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ_";
|
||||
Chars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_";
|
||||
Words = (
|
||||
"break",
|
||||
"case",
|
||||
"chan",
|
||||
"const",
|
||||
"continue",
|
||||
|
||||
"default",
|
||||
"defer",
|
||||
"else",
|
||||
"fallthrough",
|
||||
"for",
|
||||
|
||||
"func",
|
||||
"go",
|
||||
"goto",
|
||||
"if",
|
||||
"import",
|
||||
|
||||
"interface",
|
||||
"map",
|
||||
"package",
|
||||
"range",
|
||||
"return",
|
||||
|
||||
"select",
|
||||
"struct",
|
||||
"switch",
|
||||
"type",
|
||||
"var",
|
||||
);
|
||||
Type = "xcode.syntax.keyword";
|
||||
AltType = "xcode.syntax.identifier"; // non-keywords are identifiers
|
||||
};
|
||||
},
|
||||
|
||||
// TODO decide what should go here, if anything
|
||||
{
|
||||
Identifier = "xcode.lang.go.interestingOperators";
|
||||
Syntax = {
|
||||
Words = (
|
||||
"...",
|
||||
".",
|
||||
"*",
|
||||
",",
|
||||
":",
|
||||
);
|
||||
Type = "xcode.syntax.plain";
|
||||
};
|
||||
},
|
||||
|
||||
{
|
||||
Identifier = "xcode.lang.go.rawstring";
|
||||
Syntax = {
|
||||
Start = "`";
|
||||
End = "`";
|
||||
Type = "xcode.syntax.string";
|
||||
};
|
||||
},
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
// Syntax Coloring
|
||||
|
||||
{
|
||||
Identifier = "xcode.lang.go";
|
||||
Description = "Go Coloring";
|
||||
BasedOn = "xcode.lang.simpleColoring";
|
||||
IncludeInMenu = YES;
|
||||
Name = "Go";
|
||||
Syntax = {
|
||||
Tokenizer = "xcode.lang.go.lexer.toplevel";
|
||||
IncludeRules = (
|
||||
"xcode.lang.go.block",
|
||||
"xcode.lang.go.bracketexpr",
|
||||
"xcode.lang.go.parenexpr",
|
||||
);
|
||||
Type = "xcode.syntax.plain";
|
||||
};
|
||||
},
|
||||
|
||||
// The following rule returns tokens to the other rules
|
||||
{
|
||||
Identifier = "xcode.lang.go.lexer";
|
||||
Syntax = {
|
||||
IncludeRules = (
|
||||
"xcode.lang.go.comment",
|
||||
"xcode.lang.go.comment.singleline",
|
||||
"xcode.lang.string",
|
||||
"xcode.lang.character",
|
||||
"xcode.lang.go.rawstring",
|
||||
"xcode.lang.go.identifier",
|
||||
"xcode.lang.number",
|
||||
"xcode.lang.go.interestingOperators",
|
||||
);
|
||||
};
|
||||
},
|
||||
|
||||
{
|
||||
Identifier = "xcode.lang.go.lexer.toplevel";
|
||||
Syntax = {
|
||||
IncludeRules = (
|
||||
"xcode.lang.go.comment",
|
||||
"xcode.lang.go.comment.singleline",
|
||||
"xcode.lang.string",
|
||||
"xcode.lang.character",
|
||||
"xcode.lang.go.rawstring",
|
||||
"xcode.lang.go.type.declaration",
|
||||
"xcode.lang.go.method.declaration",
|
||||
"xcode.lang.go.function.declaration",
|
||||
"xcode.lang.go.identifier",
|
||||
"xcode.lang.number",
|
||||
);
|
||||
};
|
||||
},
|
||||
|
||||
{
|
||||
Identifier = "xcode.lang.go.method.declaration";
|
||||
Syntax = {
|
||||
Tokenizer = "xcode.lang.go.lexer";
|
||||
Rules = (
|
||||
"func",
|
||||
"xcode.lang.go.parenexpr",
|
||||
"xcode.lang.go.identifier",
|
||||
"xcode.lang.go.parenexpr",
|
||||
);
|
||||
Type = "xcode.syntax.declaration.method";
|
||||
};
|
||||
},
|
||||
|
||||
{
|
||||
Identifier = "xcode.lang.go.type.declaration";
|
||||
Syntax = {
|
||||
Tokenizer = "xcode.lang.go.lexer";
|
||||
Rules = (
|
||||
"type",
|
||||
"xcode.lang.go.identifier",
|
||||
);
|
||||
Type = "xcode.syntax.typedef";
|
||||
};
|
||||
},
|
||||
|
||||
{
|
||||
Identifier = "xcode.lang.go.function.declaration";
|
||||
Syntax = {
|
||||
Tokenizer = "xcode.lang.go.lexer";
|
||||
Rules = (
|
||||
"func",
|
||||
"xcode.lang.go.identifier",
|
||||
"xcode.lang.go.parenexpr",
|
||||
);
|
||||
Type = "xcode.syntax.declaration.function";
|
||||
};
|
||||
},
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
// Blocks
|
||||
|
||||
{
|
||||
Identifier = "xcode.lang.go.block";
|
||||
Syntax = {
|
||||
Tokenizer = "xcode.lang.go.lexer";
|
||||
Start = "{";
|
||||
End = "}";
|
||||
Foldable = YES;
|
||||
Recursive = YES;
|
||||
IncludeRules = (
|
||||
"xcode.lang.go.bracketexpr",
|
||||
"xcode.lang.go.parenexpr",
|
||||
);
|
||||
};
|
||||
},
|
||||
|
||||
{
|
||||
Identifier = "xcode.lang.go.parenexpr";
|
||||
Syntax = {
|
||||
Tokenizer = "xcode.lang.go.lexer";
|
||||
Start = "(";
|
||||
End = ")";
|
||||
Recursive = YES;
|
||||
IncludeRules = (
|
||||
"xcode.lang.go.bracketexpr",
|
||||
"xcode.lang.go.block",
|
||||
);
|
||||
};
|
||||
},
|
||||
|
||||
{
|
||||
Identifier = "xcode.lang.go.bracketexpr";
|
||||
Syntax = {
|
||||
Tokenizer = "xcode.lang.go.lexer";
|
||||
Start = "[";
|
||||
End = "]";
|
||||
Recursive = YES;
|
||||
IncludeRules = (
|
||||
"xcode.lang.go.parenexpr",
|
||||
);
|
||||
};
|
||||
},
|
||||
|
||||
{
|
||||
Identifier = "xcode.lang.go.comment";
|
||||
Syntax = {
|
||||
Start = "/*";
|
||||
End = "*/";
|
||||
Foldable = YES;
|
||||
IncludeRules = (
|
||||
"xcode.lang.url",
|
||||
"xcode.lang.url.mail",
|
||||
"xcode.lang.comment.mark",
|
||||
);
|
||||
Type = "xcode.syntax.comment";
|
||||
};
|
||||
},
|
||||
|
||||
{
|
||||
Identifier = "xcode.lang.go.comment.singleline";
|
||||
Syntax = {
|
||||
Start = "//";
|
||||
End = "\n";
|
||||
IncludeRules = (
|
||||
"xcode.lang.url",
|
||||
"xcode.lang.url.mail",
|
||||
"xcode.lang.comment.mark",
|
||||
);
|
||||
Type = "xcode.syntax.comment";
|
||||
};
|
||||
},
|
||||
|
||||
// This rule recognizes special comments markers and adds them
|
||||
// to the list of file markers at the top of the editor window.
|
||||
// This overrides the markers specified in
|
||||
// /Developer/Library/PrivateFrameworks/XcodeEdit.framework/Versions/A/Resources/BaseSupport.xclangspec
|
||||
// and appears to apply them to all languages. Thus, for now
|
||||
// "inherit" the existing markers here for backward-compatibility.
|
||||
{
|
||||
Identifier = "xcode.lang.comment.mark";
|
||||
Syntax = {
|
||||
StartChars = "BMTF!?";
|
||||
Match = (
|
||||
// Go-specific markers
|
||||
"^\(BUG.*$\)$", // include "BUG" in the markers list
|
||||
"^\(TODO.*$\)$", // include "TODO" in the markers list
|
||||
// inherited markers
|
||||
"^MARK:[ \t]+\(.*\)$",
|
||||
"^\(TODO:[ \t]+.*\)$", // include "TODO: " in the markers list
|
||||
"^\(FIXME:[ \t]+.*\)$", // include "FIXME: " in the markers list
|
||||
"^\(!!!:.*\)$", // include "!!!:" in the markers list
|
||||
"^\(\\?\\?\\?:.*\)$" // include "???:" in the markers list
|
||||
);
|
||||
// This is the order of captures. All of the match strings above need the same order.
|
||||
CaptureTypes = (
|
||||
"xcode.syntax.mark"
|
||||
);
|
||||
Type = "xcode.syntax.comment";
|
||||
};
|
||||
},
|
||||
|
||||
)
|
100
misc/xcode/4/go4xcode.sh
Executable file
100
misc/xcode/4/go4xcode.sh
Executable file
@ -0,0 +1,100 @@
|
||||
#!/usr/bin/env bash
|
||||
# Copyright 2012 The Go Authors. All rights reserved.
|
||||
# Use of this source code is governed by a BSD-style
|
||||
# license that can be found in the LICENSE file.
|
||||
|
||||
# Illustrates how a Go language specification can be installed for Xcode 4.x.,
|
||||
# to enable syntax coloring, by adding an entry to a plugindata file.
|
||||
#
|
||||
# FIXME: Write a decent Xcode plugin to handle the file type association and
|
||||
# language specification properly instead of altering Xcode library files.
|
||||
|
||||
set -e
|
||||
|
||||
# Assumes Xcode 4+.
|
||||
XCODE_MAJOR_VERSION=`xcodebuild -version | awk 'NR == 1 {print substr($2,1,1)}'`
|
||||
if [ "$XCODE_MAJOR_VERSION" -lt "4" ]; then
|
||||
echo "Xcode 4.x not found."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# DVTFOUNDATION_DIR may vary depending on Xcode setup. Change it to reflect
|
||||
# your current Xcode setup. Find suitable path with e.g.:
|
||||
#
|
||||
# find / -type f -name 'DVTFoundation.xcplugindata' 2> /dev/null
|
||||
#
|
||||
# Example of DVTFOUNDATION_DIR's from "default" Xcode 4.x setups;
|
||||
#
|
||||
# Xcode 4.1: /Developer/Library/PrivateFrameworks/DVTFoundation.framework/Versions/A/Resources/
|
||||
# Xcode 4.3: /Applications/Xcode.app/Contents/SharedFrameworks/DVTFoundation.framework/Versions/A/Resources/
|
||||
#
|
||||
DVTFOUNDATION_DIR="/Applications/Xcode.app/Contents/SharedFrameworks/DVTFoundation.framework/Versions/A/Resources/"
|
||||
PLUGINDATA_FILE="DVTFoundation.xcplugindata"
|
||||
|
||||
PLISTBUDDY=/usr/libexec/PlistBuddy
|
||||
PLIST_FILE=tmp.plist
|
||||
|
||||
# Provide means of deleting the Go entry from the plugindata file.
|
||||
if [ "$1" = "--delete-entry" ]; then
|
||||
echo "Removing Go language specification entry."
|
||||
$PLISTBUDDY -c "Delete :plug-in:extensions:Xcode.SourceCodeLanguage.Go" $DVTFOUNDATION_DIR/$PLUGINDATA_FILE
|
||||
echo "Run 'sudo rm -rf /var/folders/*' and restart Xcode to update change immediately."
|
||||
exit 0
|
||||
fi
|
||||
|
||||
GO_VERSION="`go version`"
|
||||
|
||||
GO_LANG_ENTRY="
|
||||
<?xml version=\"1.0\" encoding=\"UTF-8\"?>
|
||||
<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">
|
||||
<plist version=\"1.0\">
|
||||
<dict>
|
||||
<key>Xcode.SourceCodeLanguage.Go</key>
|
||||
<dict>
|
||||
<key>conformsTo</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>identifier</key>
|
||||
<string>Xcode.SourceCodeLanguage.Generic</string>
|
||||
</dict>
|
||||
</array>
|
||||
<key>documentationAbbreviation</key>
|
||||
<string>go</string>
|
||||
<key>fileDataType</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>identifier</key>
|
||||
<string>com.apple.xcode.go-source</string>
|
||||
</dict>
|
||||
</array>
|
||||
<key>id</key>
|
||||
<string>Xcode.SourceCodeLanguage.Go</string>
|
||||
<key>languageName</key>
|
||||
<string>Go</string>
|
||||
<key>languageSpecification</key>
|
||||
<string>xcode.lang.go</string>
|
||||
<key>name</key>
|
||||
<string>The Go Programming Language</string>
|
||||
<key>point</key>
|
||||
<string>Xcode.SourceCodeLanguage</string>
|
||||
<key>version</key>
|
||||
<string>$GO_VERSION</string>
|
||||
</dict>
|
||||
</dict>
|
||||
</plist>
|
||||
"
|
||||
|
||||
echo "Backing up plugindata file."
|
||||
cp $DVTFOUNDATION_DIR/$PLUGINDATA_FILE $DVTFOUNDATION_DIR/$PLUGINDATA_FILE.bak
|
||||
|
||||
echo "Adding Go language specification entry."
|
||||
echo $GO_LANG_ENTRY > $PLIST_FILE
|
||||
$PLISTBUDDY -c "Merge $PLIST_FILE plug-in:extensions" $DVTFOUNDATION_DIR/$PLUGINDATA_FILE
|
||||
|
||||
rm -f $PLIST_FILE
|
||||
|
||||
echo "Installing Go language specification file for Xcode."
|
||||
cp $GOROOT/misc/xcode/4/go.xclangspec $DVTFOUNDATION_DIR
|
||||
|
||||
echo "Run 'sudo rm -rf /var/folders/*' and restart Xcode to update change immediately."
|
||||
echo "Syntax coloring must be manually selected from the Editor - Syntax Coloring menu in Xcode."
|
Loading…
Reference in New Issue
Block a user