source: OpenRLabs-Git/deploy/rlabs-docker/web2py-rlabs/applications/admin/static/codemirror/addon/hint/python-hint.js

main
Last change on this file was 42bd667, checked in by David Fuertes <dfuertes@…>, 4 years ago

Historial Limpio

  • Property mode set to 100755
File size: 3.5 KB
Line 
1(function(mod) {
2  if (typeof exports == "object" && typeof module == "object") // CommonJS
3    mod(require("../../lib/codemirror"));
4  else if (typeof define == "function" && define.amd) // AMD
5    define(["../../lib/codemirror"], mod);
6  else // Plain browser env
7    mod(CodeMirror);
8})(function(CodeMirror) {
9  "use strict";
10
11  function forEach(arr, f) {
12    for (var i = 0, e = arr.length; i < e; ++i) f(arr[i]);
13  }
14
15  function arrayContains(arr, item) {
16    if (!Array.prototype.indexOf) {
17      var i = arr.length;
18      while (i--) {
19        if (arr[i] === item) {
20          return true;
21        }
22      }
23      return false;
24    }
25    return arr.indexOf(item) != -1;
26  }
27
28  function scriptHint(editor, _keywords, getToken) {
29    // Find the token at the cursor
30    var cur = editor.getCursor(), token = getToken(editor, cur), tprop = token;
31    // If it's not a 'word-style' token, ignore the token.
32
33    if (!/^[\w$_]*$/.test(token.string)) {
34        token = tprop = {start: cur.ch, end: cur.ch, string: "", state: token.state,
35                         className: token.string == ":" ? "python-type" : null};
36    }
37
38    if (!context) var context = [];
39    context.push(tprop);
40
41    var completionList = getCompletions(token, context);
42    completionList = completionList.sort();
43
44    return {list: completionList,
45            from: CodeMirror.Pos(cur.line, token.start),
46            to: CodeMirror.Pos(cur.line, token.end)};
47  }
48
49  function pythonHint(editor) {
50    return scriptHint(editor, pythonKeywordsU, function (e, cur) {return e.getTokenAt(cur);});
51  }
52  CodeMirror.registerHelper("hint", "python", pythonHint);
53
54  var pythonKeywords = "and del from not while as elif global or with assert else if pass yield"
55+ "break except import print class exec in raise continue finally is return def for lambda try";
56  var pythonKeywordsL = pythonKeywords.split(" ");
57  var pythonKeywordsU = pythonKeywords.toUpperCase().split(" ");
58
59  var pythonBuiltins = "abs divmod input open staticmethod all enumerate int ord str "
60+ "any eval isinstance pow sum basestring execfile issubclass print super"
61+ "bin file iter property tuple bool filter len range type"
62+ "bytearray float list raw_input unichr callable format locals reduce unicode"
63+ "chr frozenset long reload vars classmethod getattr map repr xrange"
64+ "cmp globals max reversed zip compile hasattr memoryview round __import__"
65+ "complex hash min set apply delattr help next setattr buffer"
66+ "dict hex object slice coerce dir id oct sorted intern ";
67  var pythonBuiltinsL = pythonBuiltins.split(" ").join("() ").split(" ");
68  var pythonBuiltinsU = pythonBuiltins.toUpperCase().split(" ").join("() ").split(" ");
69
70  function getCompletions(token, context) {
71    var found = [], start = token.string;
72    function maybeAdd(str) {
73      if (str.lastIndexOf(start, 0) == 0 && !arrayContains(found, str)) found.push(str);
74    }
75
76    function gatherCompletions(_obj) {
77        forEach(pythonBuiltinsL, maybeAdd);
78        forEach(pythonBuiltinsU, maybeAdd);
79        forEach(pythonKeywordsL, maybeAdd);
80        forEach(pythonKeywordsU, maybeAdd);
81    }
82
83    if (context) {
84      // If this is a property, see if it belongs to some object we can
85      // find in the current environment.
86      var obj = context.pop(), base;
87
88      if (obj.type == "variable")
89          base = obj.string;
90      else if(obj.type == "variable-3")
91          base = ":" + obj.string;
92
93      while (base != null && context.length)
94        base = base[context.pop().string];
95      if (base != null) gatherCompletions(base);
96    }
97    return found;
98  }
99});
Note: See TracBrowser for help on using the repository browser.